TCP 协议是如何进行拥塞控制的?

窗口:

tcp从客户端每次发送一次数据服务器返回一个确认,这样效率非常的低,所以就有窗口这个概念,每一次最大报文段长度(mss)都是1024,设定窗口为2048的话第一次发送1024(1~1024)后不等他的确认,再次发送1024(1025~2048),而后服务端一次性确认之前的数据,ack序号为2049(之前总量加1,也就是下次的开始号),这个节省了开销,增加了网络的吞吐量。

两种窗口:

服务端和客户端都有流量控制,服务端有接收窗口(rwnd),算出窗口大小加在TCP的首部窗口大小中,由于rwnd对网络无影响,这里主要讨论客户端的流量控制,拥塞窗口(cwnd)

TCP真正的发送窗口为接受窗口和拥塞窗口的最小值。

两种重传情况:

1.(发多了)比如窗口为6倍1024,但是服务端只能接受4份1024,所以他的确认序号为4097,当客户端搜到三次这个确认序号的时候,才知道自己发多了,之前发出去的5,6份需要重发,或者说补发。

2.(超时或者发丢了)比如从第一份发送成功,但是第二份和第三份丢失,剩下的三分成功,对于服务器来说他只会确认第一份的数据,所以ack序号为1025,当客户端在指定(RTO)时间都没有收到第二份的确认的时候它才知道它的报文段丢失了,所以它需要从1025开始重发。(重复确认应答)

慢启动:

客户端的拥塞窗口进过一次RTT后,也就是收到一次ACK后拥塞窗口就翻倍,也就是指数型增长。

阀值作用:

使正在进行慢启动的拥塞窗口到达阀值后就成线性增长,当然对拥塞避免阶段没用。

两种重传情况下阈值和拥塞窗口的变化不一样:

1.(发多了)先把阈值设置为拥塞窗口一半,再把拥塞窗口设置为阈值大小,拥塞窗口为指数增加(慢启动阶段,虽然有慢字,但是是指数型增长,一点不慢)。
2.(超时或者发丢了)先把阈值设置为拥塞窗口一半,拥塞窗口为一,拥塞窗口为线性增加(拥塞避免阶段)。

图:


整个控制的作用:

一段出现丢包,减半避让,为其他TCP连接的客户端提供避让,建立公平性


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值