TCP协议中是如何保证报文可靠传输的

Posted baoziy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP协议中是如何保证报文可靠传输的相关的知识,希望对你有一定的参考价值。

1、什么是TCP的可靠传输

  它向应用层提供的数据是无差错的、有序的、无丢失的,换言之就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的。

2、TCP保证可靠传输的办法有哪些?

  TCP采用了流量控制、拥塞控制、连续ARQ等技术来保证它的可靠性。

3、停止等待协议

  • AQR协议:当请求失败时它会自动重传,直到请求被正确接收为止。这种机制保证了每个分组都能被正确接收。停止等待协议是一种ARQ协议。
  • 停止等待协议的原理
    • 无差错的情况:A向B每发送一个分组,都要停止发送,等待B的确认应答;A只有收到了B的确认应答后才能发送下一个分组。
    • 分组丢失和出现差错的情况:当分组丢失 或 出现差错 的情况下,A都会超时重传分组
    • 应答丢失 和 应答迟到 的情况TCP会给每个字节流都打上序号,用于判断该分组是否已经接收。应答丢失:若B正确收到分组,并已经返回应答,但应答在返回途中丢失了。此时A也收不到应答,从而超时重传。紧接着B又收到了该分组。接收者根据序号来判断当前收到的分组是否已经接收,若已接收则直接丢弃,并补上一个确认应答。
      应答迟到:若由于网络拥塞,A迟迟收不到B发送的应答,因此会超时重传。B收到该分组后,发现已经接收,便丢弃该分组,并向A补上确认应答。A收到应答后便继续发送下一个分组。但经过了很长时间后,那个失效的应答最终抵达了A,此时A可根据序号判断该分组已经接收,此时只需简单丢弃即可。
  • 停止等待协议的特点
    • 每发送完一个分组,该分组必须被保留,直到收到确认应答为止。
    • 必须给每个分组进行编号。以便按序接收,并判断该分组是否已被接收。
    • 必须设置超时计时器。每发送一个分组就要启动计时器,超时就要重发分组。
    • 计时器的超时时间要大于应答的平均返回时间,否则会出现很多不必要的重传,降低传输效率。但超时时间也不能太长。

4、滑动窗口协议

  • 连续ARQ协议:在ARQ协议发送者每次只能发送一个分组,在应答到来前必须等待。而连续ARQ协议的发送者拥有一个发送窗口,发送者可以在没有得到应答的情况下连续发送窗口中的分组。这样降低了等待时间,提高了传输效率。
  • 累计确认:在连续ARQ协议中,接收者也有个接收窗口,接收者并不需要每收到一个分组就返回一个应答,可以连续收到分组之后统一返回一个应答。这样能节省流量。
  • 发送窗口

技术图片

发送窗口的大小由接收窗口的剩余大小决定。接收者会把当前接收窗口的剩余大小写入应答TCP报文段的头部,发送者收到应答后根据该值和当前网络拥塞情况设置发送窗口的大小。发送窗口的大小是不断变化的。发送者每收到一个应答,后沿就可以向前移动指定的字节。此时若窗口大小仍然没变,前沿也可以向前移动指定字节。当p2和前沿重合时,发送者必须等待确认应答。

  • 接收窗口

技术图片

  接收者收到的字节会存入接收窗口,接收者会对已经正确接收的有序字节进行累计确认,发送完确认应答后,接收窗口就可以向前移动指定字节。如果某些字节并未按序收到,接收者只会确认最后一个有序的字节,从而乱序的字节就会被重新发送。

5、流量控制

  • 什么是流量控制:如果发送者发送过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。
  • 流量控制的目的是什么:流量控制根本目的是防止分组丢失,它是构成TCP可靠性的一方面。
  • 如何实现流量控制:由滑动窗口协议(连续ARQ协议)实现。滑动窗口协议既保证了分组无差错、有序接收,也实现了流量控制。
  • 流量控制引发的问题:当发送者收到了一个窗口为0的应答,发送者便停止发送,等待接收者的下一个应答。但是如果这个窗口不为0的应答在传输过程丢失,发送者一直等待下去,而接收者以为发送者已经收到该应答,等待接收新数据,这样双方就相互等待,从而产生死锁。

6、拥塞控制

  • 流量控制和拥赛控制的区别
    • 拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况;
    • 流量控制:流量控制是作用于接收者的,它是控制发送者的发送速度从而使接收者来得及接收。
  • 流量控制的目的是什么
    • 缓解网络压力
    • 确保分组按时到达

以上是关于TCP协议中是如何保证报文可靠传输的的主要内容,如果未能解决你的问题,请参考以下文章

TCP协议保证数据传输可靠性的方式

TCP协议如何保证可靠传输

TCP如何保证可靠传输?

TCP 协议如何保证可靠传输

TCP是如何实现可靠传输的?

依靠三次握手就能保证TCP协议可靠传输?