欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  运维

一文读懂TCP的可靠传输原理

程序员文章站 2022-03-13 20:42:59
...
TCP下面的IP层是尽最大努力的交付,是不可靠的,所以TCP需要靠自己去完成可靠传输。下面,我们先从简单的停止等待协议来讲解可靠传输的如何实现的。需要注意可靠传输的几个特点:不丢失、不重复、按序到达。

注意,TCP并不使用停止等待协议来实现可靠传输。

停止等待协议

传输层的数据传输单元称为段。下面,为了方便,都称为分组。

停止等待协议的原理非常简单,发送一个分组后就停止继续发送,等待收到上一个分组的确认后,再继续发送后面的分组。

下面通过几个不同情况来分析:

无差错情况

无差错情况非常简单,如下图。每发送完一个分组后,就停止发送,等待收到该分组的确认后,再继续发送后面的分组。

一文读懂TCP的可靠传输原理

出现差错

出现差错分两种情况,第一种是发送的分组没有交付成功到目的地址,另一种情况是传送的数据包有差错。通过图例,我们来分析两种情况

一文读懂TCP的可靠传输原理

一文读懂TCP的可靠传输原理

首先来看看B的操作:A发送M1分组,该分组如果是错误的,B收到后会丢弃该数分组,然后什么也不做(不会通知A收到了错误分组)。如果B没有收到M1分组,那么它什么也不知道,也不会去做任何动作。

接下来看A是如何做的:A发完分组后,迟迟收不到B对M1分组的确认后,当等待的时间超时了,那么就需要重新发送该M1分组。要实现超时重传,就需要设置一个超时计时器,当发送的一个分组在超时时间前收到了确认,那么就重置超时计时器,否则的话就需要重传分组。

有几点是需要注意的:

  • A在发送完一个分组后,必须还要保存该分组的副本,以便超时重传。当收到这个分组的确认后,就可以丢弃该分组的副本了。

  • 需要给每一个分组做编号,这样才知道是各个分组的到达情况。

  • 超时时间应该设置的比平均传输时间稍长一些,以免引起不必要的重传。

确认丢失和确认迟到

除了分组在传送过程中会出现差错,在返回确认的时候,也会出现差错——确认丢失和确认迟到。

一文读懂TCP的可靠传输原理

首先看确认丢失情况,A的分组B收到了,并给A发送了确认,但该确认丢失了,A没有收到。因为A没有收到M1的确认,那么等待超过超时后,就会向B重传M1。这个时候B收到了重复的分组M1,需要做两个操作:

  • 将重复的分组M1丢弃

  • 向A发送M1的确认。因为既然A重传了M1,就表示A没有收到M1的分组。所以B需要继续发送对M1的确认。

一文读懂TCP的可靠传输原理

再来看另一种情况,对M1的分组确认迟到了(超过超时时间后才收到)。A在收到重复的确认后,会丢弃,其他什么也不做。

通过上述的超时重传机制,就可以实现在不可靠的网络传输上实现可靠的传输。

信道利用率

上述的停止等待协议简单,但它有一个非常大的缺点——信道的利用率太低。在等待收到确认的这段时间,信道是完全空闲的,十分浪费。

一文读懂TCP的可靠传输原理

为了提高信道利用率,可以使用流水线传输,流水线传输可以连续发送多个分组,这样就可以大大提高信道利用率了。

一文读懂TCP的可靠传输原理

采用流水线传输的协议有连续ARQ协议窗口滑动协议。而TCP就是采用滑动窗口协议来完成可靠传输的。

以上就是一文读懂TCP的可靠传输原理的详细内容,更多请关注其它相关文章!

相关标签: TCP