MTU、MSS、TCP 分段、IP 分片的概念
- MTU(最大传输单元):指网络中允许传输的最大数据包大小。MTU大小决定了能够在网络中成功传输的数据包的最大大小。如果数据包大小超过了MTU,就需要进行分段传输或IP分片。
- MSS(最大分段大小):指TCP连接中允许传输的最大数据段大小。MSS大小由MTU和TCP头部大小共同决定。MSS大小会影响TCP连接的性能和吞吐量。
- TCP 分段:当TCP数据包大小超过了MSS时,TCP会将数据包分段发送。分段后的每个数据段都有自己的TCP头部和序号,这样可以保证数据传输的可靠性。
- IP 分片:当IP数据包大小超过了MTU时,IP层会将数据包分片成多个较小的数据包进行传输,每个分片都包含IP头部和序号。接收端会重新组装分片数据包,确保数据的完整性。但是,IP分片会增加网络传输的延迟和网络负载,因此应该尽可能避免IP分片的发生。
TCP Window Full、TCP Window Update、Zero Window的概念
TCP Window Full、TCP Window Update 和 Zero Window 都是与 TCP 窗口大小有关的概念。
TCP 窗口是为了实现流量控制和拥塞控制而引入的一个概念。TCP 通过发送和接收窗口来限制对端发送数据的速率。TCP 窗口通常表示可用于发送数据的可靠传输层缓冲区大小。如果窗口设置为 0,那么表示此时不允许发送数据,也被称为 Zero Window。
- TCP Window Full
当接收方的 TCP 窗口不足以接收发送方发来的数据时,就会引发 TCP Window Full(TCP 窗口满)的情况。当发送方发送数据时,如果发现接收方的 TCP 窗口已经满了,就会停止发送数据,等待接收方通知窗口已经有空间可以接收新的数据。当接收方通知发送方可以继续发送数据时,窗口大小将会增加,这种通知也被称为 TCP Window Update。
- TCP Window Update
TCP 窗口更新指的是接收方通过发送一个 ACK 报文来告知发送方,接收窗口已经增大了。这个 ACK 报文本身并不携带数据,只包含一个确认号和一个新的窗口大小。当发送方接收到更新窗口的 ACK 报文后,就会判断是否有新的数据可以发送给接收方。如果有,就会根据新的窗口大小继续发送数据。
- Zero Window
当接收方的缓冲区已满,即接收方 TCP 窗口为 0 时,发送方就会进入 Zero Window 模式。在这种模式下,TCP 连接不能发送任何数据,直到接收方能够接受更多数据或者连接终止。为了避免 Zero Window 状态一直持续,接收方通常会定期地发送探测报文,以便查询发送方是否仍然在等待窗口更新。如果在一段时间内接收方都没有接收到发送方的任何响应,它会认为连接已经失效,自动断开连接。