美文网首页网络
网络知识体系(三) —— TCP 如何保证可靠传输

网络知识体系(三) —— TCP 如何保证可靠传输

作者: Vic_wkx | 来源:发表于2021-05-25 11:04 被阅读0次

TCP 是可靠传输协议,他是在运输层实现的可靠传输:

可靠传输

网络层的传输是不可靠的,虽然在网络层甚至数据链路层就可以通过协议来保证数据传输的可靠性,但将其放在到达应用层之前的最后一步会更加合适。

可靠传输的原理主要分为:确认回复,超时重传、给数据包编号、连续 ARQ、滑动窗口、累积确认、选择确认。

1.停止等待协议

要实现可靠传输,最简便的方法就是:我发送一个数据包给你,然后你向我回复收到,我再继续发送下一个数据包。传输模型如下:

停止等待协议

这种一来一去的方式就是停止等待协议(stop-and-wait)。上文说到,TCP 首部的 ACK 字段为 1 时,表示这个报文是一个确认收到报文。

2.丢包

如果当前网络环境不可靠,就会导致数据包丢失。解决这个问题的方法是:超时重传。当一个数据包发出去后,发送端就开始计时,如果时间到了还没有收到确认回复,就可以认为是发生了丢包,此时发送端就再次发送此数据,也就是重传。

但重传会导致另一个问题:如果原先的数据包并没有丢失,只是在网络中待得比较久,这时接收方就会收到两份一样的数据。解决这个问题的方法就是:给数据包编号,接收方根据数据包的编号来判断这份数据是否已经收到过。

在 TCP 首部有两个字段:序号和确认号,他们表示发送方数据第一个字节的编号,和接收方期待的下一份数据的第一个字节的编号。前面讲到 TCP 是面向字节流的,但是他并不是一个字节一个字节的发送,而是一次截取一整段。截取的长度受多种因素影响,如缓存区的大小、数据链路层限制的帧大小等等。

3.连续 ARQ 协议

停止等待协议可以满足可靠传输了,但效率太低。发送方发送数据包之后就一直等待,等待的这段时间什么事也没做,浪费了资源。解决的办法是:连续发送数据包。这被称之为连续 ARQ(Automatic Repeat reQuest)。模型如下:

连续 ARQ

3.1.滑动窗口

连续 ARQ 带来了三个问题,第一个问题是:考虑到接收方缓冲区及读取数据的能力,所以发送方不能无限发送。如果发送太快导致接收方无法接受,就会频繁触发重传,浪费网络资源。所以发送方发送数据的范围需要考虑接收方缓冲区的情况。这就是 TCP 的流量控制。解决方法是:滑动窗口。模型如下:

滑动窗口
  • 发送方需要根据接收方的缓冲区大小,设置自己的可发送窗口大小,处于窗口内的数据表示可发送,之外的数据不可发送。
  • 当窗口内的数据接收到确认回复时,整个窗口会向前移动,直到发送完所有的数据。

在 TCP 首部有一个窗口大小字段,他表示接收方的剩余缓冲区大小,让发送方可以调整自己的窗口大小。通过滑动窗口,就可以实现 TCP 的流量控制,不至于发送太快,导致太多的数据丢失。

3.2.累积确认

连续 ARQ 带来的第二个问题是:网络中充斥着和发送数据包一样数据量的确认回复报文,因为每一个发送数据包,都有一个确认回复。提高网络效率的办法是:累积确认。接收方不需要逐个回复,而是累积到一定量的数据包之后,告诉发送方,在此数据包之前的数据都收到了。例如,收到 1234,接收方只需要告诉发送方我收到 4 了,那么发送方就知道 1234 都收到了。

3.3.选择确认 SACK

连续 ARQ 带来的第三个问题是:如何处理丢包。在停止等待协议中,用超时重传就解决了丢包,但连续 ARQ 中,还需要指定哪些数据包需要重传。

例如:接收方收到了 123 567 六个字节,编号为 4 的字节丢失了,按照累积确认的思路,只能发送 3 的确认回复,567 都必须丢掉,因为发送方会重传 567。这就是 GBN(go-back-n)的思路。但我们发现,这时只需要重传 4 即可,所以就有了:选择确认 SACK(Selective Acknowledgment)。在 TCP 报文的选项字段,可以设置已经收到的报文段,每一个报文段需要两个边界来进行确定。这样发送方就可以根据这个选项字段只重传丢失的数据了。

4.可靠传输小结

这就是可靠传输的基本原理,总结如下:

  • 通过 确认回复 保证每一个数据包都到达接收方
  • 通过 超时重传 解决数据包丢包的问题
  • 通过 给数据包编号 标记每一个数据属于重传数据还是新的数据
  • 通过 连续 ARQ 协议 提高发送效率
  • 通过 滑动窗口 实现流量控制
  • 通过 累积确认 提高确认回复的效率
  • 通过 选择确认 SACK 提高重传的效率

相关文章

  • 网络知识体系(三) —— TCP 如何保证可靠传输

    TCP 是可靠传输协议,他是在运输层实现的可靠传输: 网络层的传输是不可靠的,虽然在网络层甚至数据链路层就可以通过...

  • TCP 如何保证可靠性

    [TOC] 参考 1. TCP可靠性的保证机制总结 2. 网络基础:TCP协议-如何保证传输可靠性 3. TCP协...

  • TCP如何保证可靠传输

    TCP和UDP的区别之一:TCP是可靠传输,UDP是不可靠传输,那么可能一不小心就会被追问TCP是如何保证可靠传输...

  • TCP如何保证可靠传输?

    TCP如何保证可靠传输? 三次握手,保证两端建立连接。 应用数据被分割成TCP认为最适合发送的数据块。即将数据截断...

  • TCP可靠传输与拥塞控制

    1.TCP的可靠传输 确认、超时重传、报文排序 1.1 TCP如何保证可靠传输 发送方没发送一个报文,都会收到来自...

  • 2018-03-13无线组网

    TCP协议:保证传输层可靠传输,同时做数据控制。

  • TCP协议相关

    TCP TCP最核心的一点就是可靠的传输协议,那么TCP是靠什么来保证可靠的传输服务呢? 三次握手 就如同打电话一...

  • TCP 三次握手 和 四次挥手

    概述 我们都知道 TCP 是 可靠的数据传输协议,UDP是不可靠传输,那么TCP它是怎么保证可靠传输的呢?那我们就...

  • TCP协议简介

    TCP协议的特点(需要解决的问题) 1、TCP如何实现可靠传输2、TCP如何实现流量控制3、TCP如何避免网络拥塞...

  • tcp详解

    相信大家都知道 TCP 是一个可靠传输的协议,那它是如何保证可靠的呢? 为了实现可靠性传输,需要考虑很多事情,例如...

网友评论

    本文标题:网络知识体系(三) —— TCP 如何保证可靠传输

    本文链接:https://www.haomeiwen.com/subject/mbgtjltx.html