Diferença entre o buffer tcp recv e o tamanho da janela tcp receive?

6

O comando mostra o tcp receive buffer size em bytes.

$ cat /proc/sys/net/ipv4/tcp_rmem 
4096    87380   4001344

em que os três valores significam os valores mínimo, padrão e máximo, respectivamente.

Depois tentei encontrar o comando tcp window size using tcpdump.

 $ sudo tcpdump -n -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn and port 80 and host google.com' 
 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
 16:15:41.465037 IP 172.16.31.141.51614 > 74.125.236.73.80: Flags [S], seq 3661804272,  win  14600, options [mss 1460,sackOK,TS val 4452053 ecr 0,nop,wscale 6], length 0

O tamanho da janela é 14600 , o que é 10 vezes o tamanho do MSS.

Alguém por favor pode me dizer a relação entre os dois.

    
por pradeepchhetri 05.11.2012 / 11:48

2 respostas

7

O tamanho da janela TCP é a quantidade de dados que podem estar "em voo" na rede. O buffer de recebimento TCP é a quantidade de dados que podem ser armazenados no final do destinatário.

Normalmente, uma pilha TCP não permitirá que os dados sejam enviados se não houver espaço para isso em seu buffer de recebimento. Caso contrário, se os dados forem recebidos antes que o aplicativo receptor consuma alguns dos dados no buffer, os dados teriam que ser descartados pela pilha TCP de destino.

Mas o buffer de recebimento pode ser muito maior que a janela.

Com as configurações que você mostrou (14.600 / 87.380), essa extremidade permitirá que a outra extremidade envie 14.600 bytes. À medida que recebe dados, ele atualiza a janela para permitir que a outra extremidade envie o menor de 14.600 bytes ou 87.380 bytes menos o número de bytes que estão esperando em seu buffer de recepção.

    
por 05.11.2012 / 12:09
-3

É recomendado no link do rfc que a janela do remetente do tcp deve ser 10 segmentos, que também resulta no initrwnd do receptor para ser 10 * MSS para acomodar os primeiros dez pacotes.Se você olhar mais, você verá que o recwnd no pacote aumenta à medida que o receptor obtém novos pacotes.

O número de tcp_rmem representa o tamanho máximo do buffer padrão de min. Como é preciso mais espaço no Linux para armazenar a estrutura TCP scoket, apenas 3/4 ou 1/2 do num é responder ao tamanho da janela anunciada.

Você pode consultar o link link do blog e comentários para mais informações.

    
por 02.10.2014 / 04:34

Tags