在 A 和 B 之间的通信期间,当 A 向 B 发送数据时,段大小将取决于 B 的窗口大小。最初,在 B 成功接收数据后,它将窗口大小加倍并继续。现在 B 知道它的 MSS。因此,在将段大小发送给 A 时,它可以确保它不超过 MSS 值。那么为什么 B 必须首先通知 MSS 给 A 呢?
2 回答
段大小取决于发送方和接收方各自连接到的网络的数据链路层的 MTU 大小。
路径 MTU 发现可用于发现发送方和接收方之间的最小 MTU 大小,以动态确定发送方和接收方之间的最佳最大分段大小(避免 IP 分片)(假设发送方和接收方之间的所有路由器都遵守 do_not_fragment 位)。
您似乎将流量控制和滑动窗口与最大段大小混为一谈。
根据评论更新。
是窗口大小不能超过 MSS 吗?我找不到他们之间的关系。
不,不是这样。
窗口大小是否完全取决于发送方和接收方的缓冲区大小,而 MSS 取决于 MTU?
MSS 和 MTU 大小是需要上下文的术语,因为它们根据上下文具有不同的含义。
虽然只考虑一个转移方向,但有两个“窗口”需要考虑:
- 接收窗口。用于实现Flow Control,由接收者维护和指定。它受到接收器从一个时刻到下一个时刻的缓冲能力的限制。接收窗口定义了在发送者确认之前可以发送多少数据。另见BDP。MSS 与接收窗口无关。
- 拥塞窗口。用于实现拥塞控制。由发件人维护和使用。拥塞窗口大小实际上是 MSS 的倍数。
A 和 B 的窗口大小可以不同,但 MSS 由于它们共享的公共链接而保持相同?
MSS 不需要对称。没有保证或要求从 A 到 B 的路径与从 B 到 A 的路径相同。
我建议您在这里阅读整篇文章:http ://en.wikipedia.org/wiki/Transmission_Control_Protocol ,因为有图表可以帮助理解。
段大小将取决于 B 的窗口大小
并在路径 MTU 上。这两个数字中的较低者适用。对于给定的路径,路径 MTU 是恒定的;通告的窗口大小根据接收方的套接字接收缓冲区、慢启动等的状态是动态的。