TCP流量控制协议
Posted Y0n1an
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP流量控制协议相关的知识,希望对你有一定的参考价值。
步骤
sysctl -w net.ipv4.tcp_rmem='4096 8192 8192'
TCP连接接受缓存参数,限制linux分配的接受缓存为9032字节
执行脚本3.1,3.2,3.3,模拟网络
ip netns exec ns56A bash
模拟ns56A终端
ip netns exec ns57C bash
模拟ns57C终端
在ns56A上创建文件大小10K字节的文件
truncate -s 10K 10K.0
在ns57c上ns57c抓包
ip netns exec ns57C wireshark &
nc -d 5 -lv 4499 > 10K.1
输出在延迟五秒后被重定向保存在10k.1
在ns56A执行
nc 192.168.57.254 4499 < 10K.0
将10k.0做为输入,然后待EOF后停止抓包
流量控制过程
零窗口通知报文是TCP zero windows这里1448 * 6 = 9032,而之前我们设置tcp接收缓存是9032字节,所以主机ns56A发送了9032字节数据后,收到了来自主机ns57C的零窗口通知报文ns56A
在最后一个发送的ack中,窗口值是344,不是之前的86,因为还有一个窗口扩大系数4,所以是86*4
零窗口通知之前,发送最后一个数据段是8689
所以这里,13号报文的窗是344,那14号报文只能发344个字节了,这就是流量控制.
窗口探测报文
进入零窗口通知,发送方不给接受方发数据,会设定一个超时时间,过了超时时间会发送窗口探测报文,过了一段时间若还是收到零窗口通知,发送方会继续设置时间,继续发送探测报文
共发送了4个,用KAN代表第N个探测报文,ZW标识零窗口通知报文时间
KA1 - ZW = 0.3
KA2 - KA1 = 0.42
KA3 - KA2 = 0.64
KA4 - KA3 = 1.68
所以设置的时间是逐渐加大的
且零窗口探测报文没有数据
探测报文序列号是9032,零窗口通知报文确认号是9033,发的是9032,但是接受方已经接受了第9032个字节了的,这种报文为保护报文,也被用来做探测报文,接收方回一个9033表示希望接受第9033开始以后的数据。也就是+1的关系
以上是关于TCP流量控制协议的主要内容,如果未能解决你的问题,请参考以下文章