当前位置:   article > 正文

3.7 TCP 拥塞控制_接收端不支持拥塞控制怎么解决

接收端不支持拥塞控制怎么解决


前言

TCP必须使用端到端拥塞控制而不是使网络辅助的拥塞控制,因为IP层不 向端系统提供显式的网络拥塞反馈。


一、tcp拥塞控制的三个问题?

第一,一个TCP发送方如何限制 它向其连接发送流量的速率呢?
第二,一个TCP发送方如何感知从它到目的地之间的路径上存在拥塞呢?
第三,当发送方感知到端到端的拥塞时,采用何种算法来改变其发送速率呢?

二、问题解决

1.tcp如何限制流量

TCP连接的每一端都是由一个接收缓存、一个发送缓存和几个变量(LastByteRead、
rwncl等)组成。

运行在发送方的TCP拥塞控制机制跟踪一个额外的变量,即拥塞窗口 (congestion window)。

拥塞窗口表示为cwnd,它对一个TCP发送方能向网络中发送流量的速率进行了限制。

LastByteSentLastByteAcked ≦ min(cwnd, rwnd )
  • 1

ack以快的速率到达,拥塞窗口增大,反之减小。

2.tcp如何感知拥塞

注意到网络中没有明确的拥塞状态信令,即ACK丢包事件充当了隐式信号,并且每个TCP发送方根据异步于其他TCP发送方的本地信息而行动

  • 丢包意味着拥塞,减小拥塞窗口长度。

丢包:对于给定报文段,一个超时事件或四个确认(一个初始ACK和其后的三个冗余ACK) 被解释为 “丢包事件”的一种隐含的指示。

  • 一个确认报文段到达时(确认的到达被认为是一切顺利的隐含指示),指示该网络能够增加发送方的速率,拥塞窗口长度增加

  • 带宽探测。加速到丢包为止,然后回退,来确定网络的拥塞上限

3.tcp拥塞控制算法

算法包含3个主要部分

  1. 慢启动

当一条TCP连接开始时,cwnd的值通常初始置为一个MSS的较小值[RFC 3390], 这就使得初始发送速率大约为MSS/RTT。

在慢启动(slow-start) 状态,cwnd的值以1个MSS开始并且每当传输的报文段首次被确认就增加1个MSS。然后是2,4,8…指数增长

状态变化:
1)如果存在一个由超时指示的丢包事件(即拥塞),TCP发送方将cwnd设置为1并重新开始慢启动过程。并将ssthresh("慢启动阈值”的速记)设置为cwnd/2 ,即当检测到拥塞时将ssthresh置为拥塞窗口值的一半
2)当cwnd的值等于ssthresh时,结束慢启动并且TCP转移到拥塞避免模式
3)如果检测到3个冗余ACK,这时TCP执行一种快速重传(参见3. 5. 4节)并进入快 速恢复状态

注意:慢启动会造成网络访问延迟,可以用TCP分岔来进行优化,CDN就是一个应用实例

  1. 拥塞避免
    一旦进入拥塞避免状态,cwnd的值大约是上次遇到拥塞时的值的一半,距离拥塞并不遥远!
    在接收到ack时,增加拥塞窗口长度,当丢包和3个冗余ack时,动作与慢启动一样,并进入快速恢复状态

  2. 快速恢复
    在快速恢复阶段,拥塞窗口线性增长
    冗余ack到达线性增长拥塞窗口
    丢失报文段ack到达,进入拥塞避免
    当超时时,进入慢启动状态

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/594491
推荐阅读
相关标签
  

闽ICP备14008679号