Sto eseguendo una macchina Linux con 2.6.9-55.ELsmp, x86_64.Impostazione della finestra di ricezione TCP in C e utilizzo di tcpdump in Linux
Sto cercando di impostare la finestra di ricezione TCP utilizzando la funzione setsockopt() con C. I provare quanto segue:
rwnd = 1024;
setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)&rwnd, sizeof(rwnd));
il segmento di codice di cui sopra è in un programma client che riceve i dati da un server . Quando ho dare il via al programma per ricevere e osservare l'output di tcpdump, osservo finestra di trattativa in questo modo:
11:34:40.257755 IP clientReceiver.42464 > serverSender.8991:
S 1742042788:1742042788(0) win 5840
<mss 1460,sackOK,timestamp 1688222886 0,nop,wscale 2>
vediamo che il programma client è infatti negoziando una finestra diversa da quello che ho impostato nel programma client. Tuttavia, dal modo in cui posso interpretare il testo di Steven ("TCP/IP Illustrated, Volume 1") Sezione 20.4, credo che tu effettui ciò a cui fa riferimento nella citazione del secondo blocco nella Sezione 20.4 usando la chiamata setsockopt() che uso (vedi sopra).
Mi piacerebbe capire dove ho sbagliato.
Forse la mia interpretazione di ciò che sta dicendo Stevens è errata. In tal caso, potresti indicarmi il modo corretto di impostare la dimensione del buffer di ricezione? Come prova della mia confusione, mi riferisco alla pagina man di socket TCP di Linux al http://linux.die.net/man/7/tcp (vedi commento su SO_RCFBUF).
Cosa mi manca in questa storia? Come posso controllare la dimensione del buffer di ricezione (e mostrarla nell'output di tcpdump)? Si noti che alludo qui un'impostazione dell'opzione socket SO_RCFBUF - Capisco che è ciò che appare nella negoziazione della finestra in SYN.
Qualsiasi input è apprezzato.
Nota anche che il morsetto minimo è limitato a metà del RCVBUF minimo (di solito 4096, quindi il morsetto minimo è solitamente 2048). – caf
Ho controllato questo, e i numeri sono in realtà 256 e (quindi) 128 per il valore minimo impostabile della RAMPA risp. Controlla il codice da tcp.c :: setsockopt() sotto il caso TCP_WINDOW_CLAMP, e controlla sock.h :: # define SOCK_MIN_RCVBUF 256.Grazie a tutti. Saluti! – Sonny