web-dev-qa-db-fra.com

Quand allumer TCP SACK OFF?

J'ai consulté Linux Tuning Params et voir certaines configuration où Sack est désactivé. Quelqu'un peut-il expliquer cela?

Cela permettrait d'accorder un serveur Web occupé.

28
JB.

Une base TCP ACK dit "J'ai reçu tous les octets jusqu'à X." Sélectif ACK vous permet de dire "J'ai reçu des octets x-y et v-z".

Ainsi, par exemple, si un hôte vous a envoyé 10 000 octets et des octets 3000-5000 ont été perdus en transit, ACK dirait "j'ai tout compris jusqu'à 3000." L'autre extrémité devrait renvoyer des octets 3001-10000 à nouveau. Sack pourrait dire "J'ai eu 1000-2999 et 5001-10000" et l'hôte n'enverrait que les 3000-5000.

C'est génial sur une liaison de bande passante élevée, de perte (ou de retard élevé). Le problème est qu'il peut causer de graves problèmes de performance dans des circonstances spécifiques. Normal TCP ACKS permettra au serveur de traiter une connexion à bande passante, une connexion avec des gants de kid (envoyer 500 octets, attendre, envoyer 500 octets, attendre, etc.). Sac laisse s'adapter au haut Délai parce qu'il sait exactement combien de paquets étaient en fait perdu.

Voici où de mauvaises choses peuvent arriver. Un attaquant peut forcer votre serveur à conserver une file d'attente de retransmission massive pendant une longue période, puis traiter toute cette fichue chose encore et encore et encore. Cela peut pénétrer dans la CPU, manger de la RAM et consommer plus de bande passante qu'il ne devrai. En bref, un système léger peut initier un DOS contre un serveur de risée.

Si votre serveur est robuste et ne servent pas de gros fichiers, vous êtes assez bien isolé contre cela.

Si vous servez principalement un intranet ou un autre groupe d'utilisateurs à faible latence, SACK vous achète rien et peut être désactivé pour des raisons de sécurité sans perte de performance.

Si vous êtes sur une liaison à basse bande passante (disons à 1 Mbps ou moins comme règle entièrement arbitraire), SACK peut causer des problèmes dans des opérations normales en saturant votre connexion et doit être désactivé.

En fin de compte, c'est à vous de décider. Considérez ce que vous servez, à qui, de quoi, et pesez le degré de votre risque contre les effets de performance de Sack.

Il y a un grand aperçu de SACK et de sa vulnérabilité ici.

34
sh-beta

Une autre raison que TCP SACK est souvent désactivée est qu'il existe une quantité étonnante d'engins de réseau qui ne parvient pas à gérer cette option correctement. Nous voyons tout le temps avec un transfert de fichiers à grande vitesse produit que nous fournissons qui utilise TCP. Le problème le plus courant est celui des périphériques de passerelle qui font des choses telles que des numéros de séquence randomiser pour TCP paquets transitant via le périphérique à partir de réseaux internes à des réseaux internes à l'extérieur, mais que Don ' t "Un-randomiser" the TCP SACK Options pouvant être envoyée de l'extrémité distante. Si les valeurs de sacs réelles ne sont pas traduites dans les valeurs appropriées de ces appareils, puis ===TCP Session ne terminera jamais face à la perte de paquets lorsque l'extrémité distante tente d'utiliser Sack pour obtenir les avantages sélectifs ACK.

Cela serait probablement moins un problème si les personnes devaient appliquer de manière plus agressive entretien des logiciels préventifs à cette vitesse, mais ils ont tendance à ne pas.

12
Chris Markle

Je peux confirmer à partir d'une expérience amère que TCP_SACK = 1 provoque le transfert de données bloqué sur SFTP/RSYNC/SCP, etc. avec des fichiers supérieurs à 12 Mo lors de l'utilisation de certains appareils de pare-feu Cisco ASA.

Chaque fois qu'il serait bloqué.

Nous transférions sur un lien de 100 Mbps dédié entre l'hôte A et l'hôte B dans deux centres de données différents, à la fois à l'aide de Cisco Firewall et du matériel de commutation avec Centos.

Cela peut être quelque peu atténué en modifiant des tailles tampons - par exemple. Je ne pouvais pas transférer le fichier 1GB via SFTP de l'hôte A à hôte B Sauf si je définissais le tampon SFTP à 2048, mais je pourrais que l'hôte B retirait le fichier de A.

Des expériences avec le même fichier utilisant RSYNC et envoyez/recevoir le réglage de la mémoire tampon me permettaient de vous lever environ 70 Mo d'un fichier 1 Go poussé de A à B.

Cependant, la réponse ultime était de désactiver TCP_SACK sur l'hôte A. Initialement en définissant TCP_SACK = 0 dans le noyau à la volée - mais finalement - je l'ai ajouté à mon /etc/sysctl.conf

6
Isaac