• TCP的可靠传输(依赖流量控制、拥塞控制、连续ARQ)


    TCP可靠性表现在它向应用层提供的数据是无差错,有序,无丢失,即递交的和发送的数据是一样的。

    可靠性依赖于流量控制、拥塞控制、连续ARQ等技术

    《TCP/IP详解》中的“分组”是不是就是报文段的意思?

    1,停止等待协议 

    ARQ(Automatic Repeat reQuest)自动重传请求。 

    顾名思义,当请求失败时它会自动重传,直到请求被正确接收为止。这种机制保证了每个分组都能被正确接收。停止等待协议是一种ARQ协议

    停止等待协议的原理

    1. 无差错的情况 
    A向B每发送一个分组,都要停止发送,等待B的确认应答;A只有收到了B的确认应答后才能发送下一个分组。

    2. 分组丢失和出现差错的情况 
    发送者拥有超时计时器。每发送一个分组便会启动超时计时器,等待B的应答。若超时仍未收到应答,则A会重发刚才的分组。 
    分组出现差错:若B收到分组,但通过检查和字段发现分组在运输途中出现差错,它会直接丢弃该分组,并且不会有任何其他动作。A超时后便会重新发送该分组,直到B正确接收为止。 
    分组丢失:若分组在途中丢失,B并没有收到分组,因此也不会有任何响应。当A超时后也会重传分组,直到正确接收该分组的应答为止。 
    综上所述:当分组丢失 或 出现差错 的情况下,A都会超时重传分组。

    3. 应答丢失 和 应答迟到 的情况 
    TCP会给每个字节都打上序号,用于判断该分组是否已经接收。 
    应答丢失:若B正确收到分组,并已经返回应答,但应答在返回途中丢失了。此时A也收不到应答,从而超时重传。紧接着B又收到了该分组。接收者根据序号来判断当前收到的分组是否已经接收,若已接收则直接丢弃,并补上一个确认应答。 
    应答迟到:若由于网络拥塞,A迟迟收不到B发送的应答,因此会超时重传。B收到该分组后,发现已经接收,便丢弃该分组,并向A补上确认应答。A收到应答后便继续发送下一个分组。但经过了很长时间后,那个失效的应答最终抵达了A,此时A可根据序号判断该分组已经接收,此时只需简单丢弃即可。

    停止等待协议的注意点

      • 每发送完一个分组,该分组必须被保留,直到收到确认应答为止。

      • 必须给每个分组进行编号。以便按序接收,并判断该分组是否已被接收。

      • 必须设置超时计时器。每发送一个分组就要启动计时器,超时就要重发分组。

      • 计时器的超时时间要大于应答的平均返回时间,否则会出现很多不必要的重传,降低传输效率。但超时时间也不能太长。

    2,滑动窗口协议(流量控制)

    连续ARQ协议 
    在ARQ协议发送者每次只能发送一个分组,在应答到来前必须等待。而连续ARQ协议的发送者拥有一个发送窗口,发送者可以在没有得到应答的情况下连续发送窗口中的分组。这样降低了等待时间,提高了传输效率。

    注意:

    1)TCP采用大小可变的滑动窗口进行流量控制,窗口大小的单位是字节。一个滑动窗口包含多个分组(报文段)。

    2)TCP连接建立时会协商MSS(每一个报文段所能承载的最大数据长度)。

    3)通知对方各自的窗口长度win

    2.1 窗口

    (1)接收端窗口 rwnd     

    接收端缓冲区大小。接收端将此窗口值放在 TCP 报文的首部中的窗口字段,传送给发送端。

    (2) 拥塞窗口 cwnd (congestion window)    

    受网络拥塞限制的发送段窗口

    (3)发送窗口swnd

     发送窗口的上限值 = Min [rwnd, cwnd]

    当 rwnd < cwnd 时,是接收端的接收能力限制发送窗口的最大值。

    当 cwnd < rwnd 时,则是网络的拥塞限制发送窗口的最大值。 

    2.2滑动窗口

    发送端已发送了 400 字节的数据,但只收到对前 200 字节数据的确认,同时窗口大小不变。还可发送 300 字节。

    发送端收到了对方对前 400 字节数据的确认,但对方通知发送端必须把窗口减小到 400 字节。现在发送端最多还可发送 400 字节的数据。

    3,拥塞控制

    3.1慢开始

    1)拥塞窗口cwnd=1 (即一个最大报文段的长度 MSS 的数值)

    2)开始指数增长报文段个数,1,2,4,,,

    3)当拥塞窗口的报文段个数大于等于 满开始门限(ssthresh=16)时,即从指数增长变为加法增长。

    4)如果遇到网络拥塞,则又“慢开始”,即开始从cwnd=1开始。

     

    3.2 快重传和快恢复

    3.2.1 快重传
    发送端只要一连收到三个重复的 ACK 即可断定有分组丢失了,就应立即重传丢失的报文段而不必继续等待为该报文段设置的重传计时器的超时.
    接收端因为没有收到某个报文段,隔段时间就会再发送ACK(例如ack=7,表示前6个段收到了,第7个还没)。三个重复的 ACK,表示比较长时间一直没收到第7报文段,所以表示网络拥塞。
    2.2.2 快恢复
    (1) 当发送端收到连续三个重复的 ACK 时,就重新设置慢开始门限 ssthresh。
    (2) 与慢开始不同之处是 swnd 不是设置为 1,而是设置为 ssthresh + 3 * MSS。 
    (3) 若收到的重复的 ACK 为 n 个(n > 3),则将 cwnd 设置为 ssthresh + n * MSS。
    (4) 若发送窗口值还容许发送报文段,就按拥塞避免算法继续发送报文段。
    (5) 若收到了确认新的报文段的 ACK,就将 swnd 缩小到 ssthresh。
    下图中的快恢复是另一个版本,从拥塞cwnd的一般开始。

  • 相关阅读:
    【转】Wrapper配置详解及高级应用
    【转】Eclipse4.4.1安装velocity插件Veloeclipse.ui_2.0.8
    【转】创建SVN仓库的步骤
    【转】Hibernate 常见异常
    [转]Java中Map的用法详解
    [转]CocoaPods安装和使用教程
    [转]struts1.2的action参数配置
    [转]hibernateTools工具安装及使用总结(eclipse 3.6)
    [转]iOS开发中@property的属性weak nonatomic strong readonly等介绍
    [转]使用 Xcode 5 和 Interface Builder创建 Hello World App
  • 原文地址:https://www.cnblogs.com/jodyccf/p/13544551.html
Copyright © 2020-2023  润新知