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流量控制协议的主要内容,如果未能解决你的问题,请参考以下文章

网络协议TCP的流量控制机制

互联网协议 — TCP — 流量控制(网络质量保障)

TCP滑动窗口控制流量的原理

TCP/IP知识总结(TCP/IP协议族读书笔记四)

TCP协议--流量控制,拥塞控制,MSS

TCP中的流量控制和拥塞控制