TCP可靠传输原理

1. 停止等待协议 & 连续ARQ协议

(1)停止等待协议

就是每发送完一个分组就停止发送,等待对方的确认;在收到对方确认后,再发送下一个分组。

其优点是简单,缺点是信道利用率低。

(2)连续ARQ协议

发送方维护着一个发送窗口,位于发送窗口中的数据都可以连续地发送出去,而无需等待对方的确认;发送方每收到一个确认,就把发送窗口向前滑动一个分组单位。

接收方一般采取累积确认方式,也就是说接收方不必对收到的分组逐个发送确认,而是在收到几个分组之后,对按序到达的最后一个分组发送确认(表明这个分组及之前的所有分组都已正确收到了)。

其优点是信道利用率高、容易实现;缺点是无法向发送方反映接收方已正确收到的所有分组的信息。例如:如果发送方发送了5个分组,但第3个分组丢失了,此时接收方只能对前两个分组发出确认,发送方就只能把后面3个分组重新发送一次。

2. 滑动窗口

发送方维护着发送窗口,接收方维护着接收窗口。滑动窗口是以字节为单位的,即窗口中保存的是字节序号

(1)发送窗口

发送窗口中的序号表示允许被发送的字节数据对应的序号。发送窗口可用3个指针来描述:
在这里插入图片描述

  • ( . . . , P 1 ) (..., P_1) (...,P1):已发送,且已收到确认的部分;
  • [ P 1 , P 2 ) [P_1, P_2) [P1,P2):已发送,但尚未收到确认的部分;
  • [ P 2 , P 3 ) [P_2, P_3) [P2,P3):可以发送,但尚未发送的部分;
  • [ P 1 , P 3 ) [P_1, P_3) [P1,P3):整个发送窗口。

凡是已发送但未收到确认的数据都需要暂存下来,以便超时重传。

(2)接收窗口

接收窗口中保存的是允许被接收的字节数据对应的序号。
在这里插入图片描述
此处,接收窗口的范围是 [31, 50],且数据是乱序到达的(已收到32、33,但未收到31对应的数据;未按序到达的数据会先被缓存下来)。

当接收方收到序号为 31 的数据后,它可以将区间 [31, 33] 中的数据交付给上层应用,然后删除这些数据,接着把接收窗口向前移动 3 个序号(变为 [34, 53]),同时向发送方发送确认(确认号为 34),之后发送方也可以相应地向前移动发送窗口。

3. 流量控制

就是让发送方的发送速率不要太快,以使接收方来得及接收。

利用滑动窗口机制可以很方便地实现流量控制:发送方发送窗口的大小不能超过接收方接收窗口的大小。

4. 拥塞控制

网络拥塞指的是:对网络资源的需求超过了网络可用资源(如,某链路的流量超过了其容量)。

拥塞控制就是要防止过多的数据注入到网络中,以使网络链路不致过载。

拥塞控制也是基于窗口机制的:发送方维护着一个名为拥塞窗口(cwnd)的状态变量,并让自己的发送窗口等于拥塞窗口(只考虑拥塞控制的话)。

TCP 的拥塞控制算法分为4部分:慢启动、拥塞避免、快重传和快恢复。

在这里插入图片描述

(1)慢启动

初始时,拥塞窗口被设为 1MSS(最大报文段大小),在收到一个对新的报文段的确认后,拥塞窗口便增大 1MSS。此过程中,cwnd 的值呈指数级增长(1、2、4、…)。

当 cwnd 大于慢启动阈值 ssthresh 时,即进入拥塞避免阶段。

(2)拥塞避免

每经过一个往返时间(RTT),就把发送方的拥塞窗口增大 1MSS。此过程中,cwnd 的值呈线性增长(ssthresh、ssthresh+1、…)。

如果在此过程中出现超时,则将 ssthresh 设为 cwnd/2,并将 cwnd 设为 1,然后进入慢启动阶段。

如果收到 3 个冗余的确认,则发送方会执行快重传,并进入快恢复阶段。

(3)快重传

快重传算法要求接收方必须立即发送确认。
在这里插入图片描述
如上图所示,发送方依次发送了 M1~M7 报文段,但 M3 报文段丢失了。

接收方会在收到 M4、M5、M6 报文段时重复确认 M2 报文段,使得发送方收到了 3 个对 M2 报文段的冗余确认(共4个确认,其中3个是冗余的)。

此时,发送方便知道了接收方没有收到 M3 报文段,因而立即进行重传,如此便不会出现超时。

(4)快恢复

收到 3 个冗余确认后,发送方知道现在只是丢失了个别报文段而已,故而不会转入慢启动阶段,而是执行快恢复算法:将 ssthresh 设为 cwnd/2,同时将 cwnd 设为 ssthresh,并进入拥塞避免阶段。

流量控制 & 拥塞控制

综合考虑流量控制机制和拥塞控制机制,有如下关系:

发 送 方 的 发 送 窗 口 = m i n { 接 收 方 的 接 收 窗 口 , 发 送 方 的 拥 塞 窗 口 } 发送方的发送窗口 = min\{接收方的接收窗口,发送方的拥塞窗口\} =min{}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值