2

我想知道如何在 SYN 数据包中设置 MSS?它是一个操作系统中的固定值,还是可以在同一操作系统中更改该值?我知道不同操作系统中的值是不同的。SYN中的MSS值也与硬件配置有关吗?谢谢。

4

2 回答 2

0

RFC 879描述了如何使用和指定 MSS。

简而言之,在 TCP 握手期间通过 SYN 包指定 MSS。但是,此值稍后可以由操作系统本身或通过设置协议选项来更改。

您可以通过 setsockopt 设置选项 TCP_MAXSEG。

于 2011-11-30T00:11:10.727 回答
0

虽然 SYN 和 SYNACK 数据包中的 MSS 值分别由发起方和响应方设置,但被广泛使用的称为MSS 钳位的做法可能会导致路径上的网络元素更改 MSS - 这通常用于减少通过某种隧道链路的所有连接的 MSS。例如,PPPoE 通常用于住宅宽带,并且需要 1492 的 MTU 和 1452 的相应 IPv4 MSS,因此虽然 SYN 可能以 1460 的 MSS 离开您的机器(假设您使用 MTU 为 1500 的以太网)但一旦它通过 MSS 钳制 ISP 路由器,SYN 数据包中的 MSS 随后将更改为 1452,对于传入/响应者的 SYNACK 数据包也是如此,因此连接以 1452 的减少 MSS 继续进行。这种做法似乎被用来代替依赖于使用来自网络的 ICMP Fragmentation Needed响应的路径 MTU 发现,因为这些响应在配置不当的网络上和某些负载平衡技术可能会丢失。

于 2019-10-22T08:39:39.010 回答