Je cours sous Linux avec une boîte 2.6.9-55.ELsmp, x86_64.Définition de la fenêtre de réception TCP en C et de l'utilisation de tcpdump sous Linux
Je suis en train de régler la fenêtre de réception TCP en utilisant la fonction setsockopt() en utilisant C. Je procédez comme suit:
rwnd = 1024;
setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)&rwnd, sizeof(rwnd));
Le segment de code ci-dessus est un programme client qui reçoit des données d'un serveur . Quand je lancer le programme pour recevoir et observer la sortie de tcpdump, je vois la négociation de la fenêtre comme ceci:
11:34:40.257755 IP clientReceiver.42464 > serverSender.8991:
S 1742042788:1742042788(0) win 5840
<mss 1460,sackOK,timestamp 1688222886 0,nop,wscale 2>
Nous voyons que le programme client est en fait la négociation d'une fenêtre différente de ce que j'ai mis dans le programme client. Cependant, d'après la façon dont je peux interpréter le texte de Steven ("TCP/IP Illustrated, Volume 1") Section 20.4, je crois que vous effectuez ce qu'il appelle dans la citation du second bloc de la section 20.4 en utilisant l'appel setsockopt() que j'utilise). Je voudrais comprendre où je me suis trompé. Peut-être que mon interprétation de ce que Stevens dit est peut-être incorrecte. Dans ce cas, pourriez-vous me montrer la bonne façon de régler la taille du tampon de réception? Comme preuve de ma confusion, je me réfère à la page de manuel Linux TCP sockets au http://linux.die.net/man/7/tcp (voir le commentaire sur SO_RCFBUF).
Qu'est-ce qui me manque dans cette histoire? Comment puis-je contrôler la taille du tampon de réception (et l'afficher dans la sortie tcpdump)? S'il vous plaît noter que je fais allusion ici à un paramètre de l'option de socket SO_RCFBUF - Je comprends que ce qui apparaît dans la négociation de la fenêtre dans le SYN.
Toute contribution est appréciée.
Notez également que la pince minimale est limitée à la moitié du RCVBUF minimum (généralement 4096 - donc la pince minimale est généralement 2048). – caf
J'ai vérifié cela, et les chiffres sont en fait 256 et (par conséquent) 128 pour la valeur CLAMP réglable minimum resp. Vérifiez le code de tcp.c :: setsockopt() dans le cas TCP_WINDOW_CLAMP, et vérifiez sock.h :: # define SOCK_MIN_RCVBUF 256.Merci à tout le monde. À votre santé! – Sonny