滑动窗口:用作流量控制:
1.发送端和接收端各维护一个独立的发送缓冲区和接收缓冲区
2.窗口是一段允许被发送的字节序列
3.接收端会根据接收端缓冲区告诉发送端自己的接收窗口大小,它不像发送端,当发出一个数据段超时,就可以认为网络已经拥塞了
4.发送端会根据这个窗口大小发送数据
5.接收端收到数据后会回复确认ACK,此ACK有可能累积,收到多个报文端回复一个ACK
6.发送端收到确认号,发送窗口向前移动,并关闭重传定时器,将数据备份从队列中删除,否则要重传数据
拥塞控制:流量控制只考虑发送端和接收自身的状况,而拥塞控制则是基于整个网络来考虑的,如果网络中所有的超时都重传则会导致更大的丢包
cwnd(拥塞窗口):发送方为一个动态变化的窗口取名拥塞窗口,大小取决于网络的拥塞程度.发送方一般让自己的发送窗口等于拥塞窗口.网络好的时候,它会不断变大
ssthresh(慢速启动阈值):由发送方保存这样一个变量,当拥塞窗口中的字节达到这个阈值时,拥塞控制算法需调整,在大多数实现中,ssthresh值是65536个字节
拥塞控制算法:
例:初始cwnd等于1,ssthresh等于20,网络拥塞等于28
1.拥塞避免:1,2,3,4,5,6...28
2.慢启动(AMID:加法增大,乘法减小):
a.1,2,4,8,16,20(cwnd翻倍时不能超过ssthresh)...28(出现拥塞,将ssthresh设置为cwnd的一半14,cwnd设置1,然后重复此过程)//乘法减小*1/2
b.1,2,4,8,14,(cwnd(14)等于sthresh(14),停用慢启动,采用拥塞避免算法),15,16,17,...27//加法增大,+1
3.快重传:接收方收到一个失序的报文段后就立刻发出重复确认,而不是等待自己发送数据时才进行捎带确认
a.1,2,4,8,16,20,21...28
b.发送方发送...27,28时,收到...25,26,27的ack,但没有收到28的ack
c.接收方是会确认...27的ack,但不会确认28的ack,这样会不断回复28的ack
d.发送方在连接收到三个28的ack时,则不必等重传计时器超时,直接进行重传未确认的28
4.快恢复
a.1,2,4,8,16,20...28
b.发送方在连接收到三个28的ack时,将(ssthresh减半设置为14,cwnd设置为ssthresh的一半7)
c.7,8...28
无论是慢启动,还是快恢复在出现网络拥塞时,都会快速下降ssthresh和cwnd,以减小注入到网络中的分组数
滑动窗口与拥塞控制
原创
©著作权归作者所有:来自51CTO博客作者xiangjie256的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:数据库基础
下一篇:rawsocket发送tcp包
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
30 张图解: 面试必问的 TCP 重传、滑动窗口、流量控制、拥塞控制
图解图解图解,全部给你图解的明明白白
网络 linux 网络通信 TCP tcpip -
TCP 滑动窗口和 拥塞窗口
必需要解决的可靠传输以及包乱序(r...
重传 数据 接收端 滑动窗口 慢启动