计算机网络(三)| 青训营笔记

146 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记。

这一篇,依旧是计算机网络的深入学习,这篇文章的主题是TCP如何保证可靠传输

重传机制

超时重传

重传机制的其中一个方式,就是在发送数据时,设定一个定时器,当超过指定的时间后,没有收到对方的 ACK 确认应答报文,就会重发该数据,也就是我们常说的超时重传

TCP 会在以下两种情况发生超时重传:

  • 数据包丢失
  • 确认应答丢失

超时重传时间 RTO 的值应该略大于报文往返 RTT 的值,过快或者过慢都不行,会导致传播速率降低、以及不必要的重传的问题。

快速重传机制

当数据包丢失,而又收到了后续的seq序列的报文,接收方的ACK不会累加,而是停留在“期望”接收到的序列号,当发送方接收到三次同样的ACK时,就会触发重发机制(无论定时器是否超时)

  • SACK方法可以在缓存的地图发送给对方,这样子就可以确定具体的重传内容

流量控制

如果一直无脑的发数据给对方,但对方处理不过来,那么就会导致触发重发机制,从而导致网络流量的无端的浪费。

这时候就需要有一种机制可以让「发送方」根据「接收方」的实际接收能力控制发送的数据量,这就是所谓的流量控制。

TCP通过以字节为单位的滑动窗口实现流量控制。

  • 当滑动窗口为0时,发送端有一个定时器,到时会发送具有1窗口探测报文,避免死锁问题

滑动窗口

为什么要有窗口?窗口的具体实现是什么?

一应一答的效率,会在数据包的往返时间久时被放大。于是引进了窗口的概念。

窗口的实现是操作系统开辟的一个缓存空间,发送方主机在等到确认应答返回之前,必须在缓冲区中保留已发送的数据(以便在超时重传使用)。如果按期收到确认应答,此时数据就可以从缓存区清除。

当收到对方对已收到报文的确认时,窗口向前滑动。


拥塞控制也属于“如何保证可靠传输”,但由于篇幅问题,我将在第四篇叙述。