MSS 和窗口大小有什么区别?

网络工程 联网
2021-07-20 02:36:12

这两者的实际区别是什么?

1) 我在 Youtube 上看过很多教程,其中有些人告诉我窗口大小是它可以接收的总数据包大小,例如窗口大小是 15000 字节

MSS 是单次可以发送的最大数据包大小,例如 1500 字节,即它可以发送 10 个数据包,每个数据包 1500 个,使其成为 15000 个。

2)但在其他一些教程中,我研究了窗口大小就像它期望确认的数据字节数一样。

如果 2) 是正确的,那么为什么在流量控制机制中使用超时时间?

3个回答

最大段大小是可以在单个 IP 数据包中传输的最大 TCP 段。它是从最大传输单元 (MTU) 减去 IP 标头开销减去 TCP 标头开销得出的。对于没有选项的以太网上的 TCP over IPv4,这是 1460 字节。

TCP 窗口大小是“飞行中”的数据量,即。在需要 ACK 之前传输。窗口大小取决于信道,尤其是其可用带宽和往返时间 (RTT)。窗口大小不断调整以避免拥塞。通常,它是 MSS 的倍数。

MSS 和窗口大小是完全不同的东西,而且几乎是相互独立的。

窗口大小

  1. 是 tcp 数据传输中每个参与者(服务器和客户端)的设置。
  2. 它描述了在发送方等待接收方确认之前可以发送的数据量
  3. 在会话建立期间,客户端和服务器发送 3 次握手,并协商/同意会话的窗口大小。
  4. 您可以在注册表中找到它并更改计算机上的设置。

社会保障部

  1. 是网络设备上的设置。(路由器、交换机、负载平衡器)
  2. 它描述了穿过网段的数据包内数据的*最大大小”
  3. 会话建立过程中,客户端和服务器应该发现MSS,以防止数据包分段,提高传输效率。
  4. 大多数(但不是所有)协议栈都遵循 MSS 设置。大于 MSS 的数据段将返回从设置了 MSS 的设备的入口接口生成的 ICMP 段太大错误消息。

作为一般规则,MSS 是网络工程师的问题,而窗口大小是服务器和应用程序人员的问题。在 TCP 中,在预期确认之前发送多个数据包,因此窗口大小将比 MSS 设置大得多。

如果流量控制是指 TCP 流量控制:如果接收器将窗口大小减小到零,则指示发送器停止发送数据,直到它从接收器接收到非零窗口。如果没有计时器,这可能会创建一个冻结会话,其中接收器正在等待数据,而发送器正在等待发送数据信号的良好状态。Persist Timer 为发送器提供一个定时器,在该定时器上它将向接收器发送一个“WindowProbe”,使其有机会以非零窗口进行响应。

每个 TCP 端点都为应用程序提供了一个字节流接口,这自动暗示该流的大小必须有一些限制。此重组缓冲区可以具有可变大小,并由 TCP 标头中的 16 位窗口大小选项指示。它是动态的,当应用程序尚未从其缓冲区读取数据时会减少,并在应用程序读取数据后再次增加。

IPv4 允许数据报的最大大小为 65,535 字节,因此它可以包含的最大 TCP 数据量小于 65,535 字节。但是,实际传输数据的链路可能无法传输如此大的数据包。它们有一个称为 MTU(最大传输单元)的限制。当数据包的大小超过此值时,就会发生碎片。为了避免分段,TCP 可以通过查看自己的 MTU 来让对等方知道它愿意接受的段的最大大小。

有时,如果客户端发送的 MSS 小于可能的最小 MTU(通常为 1500 字节),则小的 MSS 也可以指示任何 TCP 实现都保证支持的小重组缓冲区。例如,发送方发送 536 的 MSS 并不表示小 MTU 而是小重组缓冲区,但 1460 的 MSS 可能表示 1500 字节的 MTU。