V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
hxndg
V2EX  ›  问与答

tcp 拥塞产生及控制的原理,顺便问个问题

  •  
  •   hxndg · 2016-05-17 21:21:38 +08:00 · 2410 次点击
    这是一个创建于 3130 天前的主题,其中的信息可能已经有所发展或是发生改变。

    tcp 拥塞控制的原理及拥塞产生的原因。写这个重点是时延产生的原因,估计跟我一样的学生找实习可能会用到。。。。找实习好伤。。。。。

    我有个问题,为什么主机对发生超时时采取的拥塞控制方式是慢启动,受到三个冗余 ack 时是采取乘性减,两个为什么不一致?

    时延产生的原理: 1 四台主机在链路容量为 R 的共享式输出链路上传输,链路上有一台路由器,路由器的转发能力固定,但缓存无限大。这种情况下,吞吐量(也就是接收端的接受容量)会随着发送的速率增加而增加,但是时延呢?简单的求导可以发现时延在不断的增加(导数也在增加)当两台发送方的发送速率达到 R/2 时,数据包的时延就会扩大到无限。这里时延产生的原因是因为当分组速率达到链路容量时,分组经历的巨大的排队时延。

    2 第二种时延来自什么情况呢?当路由器的缓存有限时,不断增加的缓存在满的情况下会丢弃掉部分数据包,而发送方就不得不进行数据重传,在这种情况下当传输层的发送速率接近链路容量时这些数据包有一部分是原始数据,而另外的数据是重传数据。这里需要注意的是,主机的发送速率和传输层的发送速率并不完全一致。这里时延产生的情况是因为缓存溢出导致了数据丢弃。

    3 第三种情况的时延产生原因较为复杂,当线路较为复杂时可能多个线路通信时会共享一个或者多个路由器,比方说一个网络上多个对等主机都在相互进行数据传输(假设他们速度一致),起初发送主机发送速率较小的情况下他们不会产生对路由器缓存的竞争,吞吐量会随着发送速率增大而增大。但是当他们的发送速率都达到链路容量( R )的情况下,对于路由器缓存的争夺会十分严重,在这种重载情况下,网络中两台主机的吞吐量可能将趋于 0 ,这种拥塞是由上由路由器转发某分组而该分组被下游路由器丢弃导致。

    tcp 拥塞的控制原理。

    常见的方法分为两种:端到端的拥塞控制, tcp 采用的就是端到端的拥塞控制,这样做的原因是因为 ip 层没有向 tcp 提供网络拥塞的反馈迹象。那么 tcp 连接是怎么做的呢? tcp 使每一个发送方通过感知自己所感受到的网络拥塞现象,当发现拥塞时就降低其发送速率

    这样子又可以引出三个问题

    1tcp 如何感知网络产生了拥塞?

    2tcp 怎样限制连接发送的速率

    3tcp 使用什么算法来改变发送速率?

    针对问题 1 ,联想三个 tcp 拥塞产生的原因,就可以理解 tcp 对拥塞的感知了, tcp 认为要么出现超时,要么出现三个冗余 ack ,就发生了拥塞

    针对问题 2 , tcp 定义了发送窗口,接受窗口,和拥塞窗口,这三个窗口发送用来控制发送速率,接收窗口用来流量控制,而拥塞窗口用来控制拥塞。也就是保证 最后发送的 byte-最后接收的 ack <拥塞窗口。

    针对问题 3 , tcp 拥塞控制算法包括 1 慢启动 2 加性增,乘性减 3 对超时做出反应,需要注意因为超时产生的拥塞控制和收到冗余 ack 产生的控制并不一致。这个就不多说了,本身理解下就好了。

    3 条回复    2016-05-18 09:53:21 +08:00
    hxndg
        1
    hxndg  
    OP
       2016-05-17 21:33:43 +08:00
    话说到底为什么拥塞针对超时和三个冗余 ack 采取的措施不一致?
    gamexg
        2
    gamexg  
       2016-05-18 01:46:34 +08:00 via Android   ❤️ 1
    @hxndg 超时意味着对方要么完全没有收到任何数据,所以没发出 ack ,要么对方发出的 ack 一个都没收到,意味着网络拥塞很严重。
    冗余 ack 意味着对方收到了之后的包,但是当前包未收到。这表示只是丢失了个别包,或者只是顺序乱了,网络拥塞不严重。记得这时候会触发快速重传。
    hxndg
        3
    hxndg  
    OP
       2016-05-18 09:53:21 +08:00
    @gamexg 万分感谢,原来如此哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   860 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 20:59 · PVG 04:59 · LAX 12:59 · JFK 15:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.