TCP滑动窗口、重传和确认机制

滑动窗口

TCP协议保证数据传输质量,需要以下两大关键功能:
可靠性:保证数据确实到达目的地. 如果未到达,能够发现并重传.
数据流控:管理数据的发送速率,以使接收设备不至于过载.

  • TCP面向流的滑动窗口确认机制

    TCP将数据流划分为片段. 片段内的所有字节都是一起发送和接收的,因此也是一起确认的. 确认机制采用片段内最后一个字节的sequence number. 因此一次可以处理不同的字节数,数量为片段内的sequence number.

  • TCP数据流的概念划分类别

    假设A和B之间新建立了一条TCP连接. 设备A需要传送一长串数据流,但设备B无法一次全部接收,所以它限制设备A每次发送分段指定数量的字节数,直到分段中已发送的字节数得到确认. 之后,设备A可以继续发送更多字节. 每一个设备都对发送,接收及确认数据进行追踪.

    我们可以将TCP buffer中的数据分为以下四类:

    1.已发送已确认 数据流中最早的字节已经发送并得到确认。这些数据是站在发送设备的角度来看的。如下图所示,31个字节已经发送并确认.
    2.已发送但尚未确认 已发送但尚未得到确认的字节。发送方在确认之前,不认为这些数据已经被处理。下图所示14字节为第2类.
    3.未发送而接收方已Ready 设备尚未将数据发出,但接收方根据最近一次关于发送方一次要发送多少字节确认自己有足够空间。发送方会立即尝试发送。如图,第3类有6字节.
    4.未发送而接收方Not Ready 由于接收方not ready,还不允许将这部分数据发出.
    在这里插入图片描述
    接收方采用类似的机制来区分已接收并已确认,尚未接受但准备好接收,以及尚未接收并尚未准备好接收的数据.

  • Sequence Number设定与同步

    发送方和接收方必须就它们将要为数据流中的字节指定的sequence number达成一致。这一过程称为同步,在TCP连接建立时完成。为了简化假设第一个字节sequence number是1,按照上图示例,四类字节如下:

    1. 已发送已确认字节1至31。
    2. 已发送但尚未确认字节32至45。
    3. 未发送而接收方已Ready字节46至51。
    4. 未发送而接收方Not Ready字节52至95。
    
  • 发送窗口与可用窗口

    发送窗口:接收方允许发送方一次能容纳的未确认的字节数. 该窗口决定了发送方允许传送的字节数,也是2类和3类的字节数之和.
    因此,最后两类(接收方准备好而尚未发送,接收方未准备好)的分界线在于添加了从第一个未确认字节开始的窗口. 本例中,第一个未确认字节是32,整个窗口大小是20.

    可用窗口:考虑到正在传输的数据量,发送方仍被允许发送的数据量. 实际上等于第3类的大小.

    • 可用窗口字节发送后TCP类目与窗口大小的改变

      在这里插入图片描述

    • 确认处理以及窗口缩放

      过了一段时间,目标设备向发送方传回确认信息。目标设备不会特别列出它已经确认的字节,因为这会导致效率低下。目标设备会发送自上一次成功接收后的最长字节数

      例如,假设已发送未确认字节(32至45)分为4段传输:32-34,35-36,37-41,42-45。第1,2,4已经到达,而3段没有收到。接收方只会发回32-36的确认信息。接收方会保留42-45但不会确认,因为这会表示接收方已经收到了37-41。这是很必要的,因为TCP的确认机制是累计的,只使用一个数字来确认数据。这一数字是自上一次成功接收后的最长字节数。假设目标设备同样将窗口设为20字节.

      在这里插入图片描述
      每一次确认接收以后,这一过程都会发生,从而让窗口滑动过整个数据流以供传输.

    • 处理丢失确认信息

      TCP包括一个传输及重传的计时机制。TCP会重传丢失的片段。但有一个缺陷是:因为它不会对每一个片段分别进行确认,这可能会导致其他实际上已经接收到的片段被重传(比如42至45).

      数据的片段一经发送,片段的一份复制就放在名为重传队列的数据结构中,此时启动重传计时器. 队列按照重传计时器的剩余事件排列. 如果在计时器超时前收到确认信息,则该片段从重传队列移除.
      TCP只会重传一定数量的次数,并终止.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值