linux – tcp recv缓冲区和tcp接收窗口大小之间的区别?

linux – tcp recv缓冲区和tcp接收窗口大小之间的区别?,第1张

概述该命令显示tcp接收缓冲区大小(以字节为单位). $cat /proc/sys/net/ipv4/tcp_rmem 4096 87380 4001344 其中三个值分别表示最小值,默认值和最大值. 然后我尝试使用tcpdump命令找到tcp窗口大小. $sudo tcpdump -n -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-s 该命令显示tcp接收缓冲区大小(以字节为单位).
$cat /proc/sys/net/ipv4/tcp_rmem 4096    87380   4001344

其中三个值分别表示最小值,默认值和最大值.

然后我尝试使用tcpdump命令找到tcp窗口大小.

$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

我的窗口大小为14600,是MSS大小的10倍.

谁能告诉我两者之间的关系.

解决方法 TCP窗口大小是网络上“飞行中”的数据量. TCP接收缓冲区是可以在接收方端缓冲多少数据.

通常,如果TCP堆栈在其接收缓冲区中没有空间,则不允许发送数据.否则,如果在接收应用程序消耗缓冲区中的一些数据之前接收到数据,则必须由接收TCP堆栈丢弃数据.

但接收缓冲区可能比窗口大得多.

使用您显示的设置(14,600 / 87,380),此端将允许另一端发送14,600个字节.当它接收数据时,它将更新窗口以允许另一端发送较少的14,600字节或87,380字节减去在其接收缓冲区中等待的字节数.

总结

以上是内存溢出为你收集整理的linux – tcp recv缓冲区和tcp接收窗口大小之间的区别?全部内容,希望文章能够帮你解决linux – tcp recv缓冲区和tcp接收窗口大小之间的区别?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1040512.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存