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

齐天大圣
Freigeben: 2020-12-21 11:29:40
Original
2346 人浏览过

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

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

停止等待协议

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

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

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

无差错情况

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

QQ截图20201219115912.jpg

出现差错

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

QQ截图20201219115942.jpg

QQ截图20201219120001.jpg

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

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

有几点是需要注意的:

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

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

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

确认丢失和确认迟到

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

QQ截图20201219120013.jpg

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

  • 将重复的分组M1丢弃

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

QQ截图20201219120103.jpg

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

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

信道利用率

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

QQ截图20201216113001.jpg

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

QQ截图20201216113011.jpg

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

以上是一文读懂TCP的可靠传输原理的详细内容。更多信息请关注PHP中文网其他相关文章!

Verwandte Etiketten:
tcp
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!