我对最大段大小和最大传输单位之间的区别感到困惑。

有人可以对第2层和第3层进行解释吗?

如果我有一个有效负载中的800个字节的数据包。说MSS为800字节(如果我将其设置为该字节)而MTU为840会正确吗? TCP 20和IP 20字节。如果我使用PPPoE,会有所不同吗?

评论

虽然这并不是严格意义上的重复,但此问题的答案也可能回答您的问题。

#1 楼

此外。如果您有800字节的数据包,则MSS值是从值MTU得出的,如果我们使用MTU = 1500,也可以说这样的数据包本来是2260字节长,他分成2个数据包1460 + 800字节。 br />您说的是对的,如果您的MSS = 800,则MTU至少应为840。由于PPPoE开销为8字节,因此MTU = 1492字节,而MSS = 1492-40 = 1452字节。

#2 楼

MTU是给定链接的最大IP数据包大小。大于MTU的数据包会在找到较低MTU的位置进行分段,并在链的下游进行重新组装。

请注意,IPv6不支持路由器的数据包分段,因此如果您不希望由于MTU太小而丢失数据包,则必须使用ICMPv6进行PMTUD 。端点可以分段,但不能分段,而且,IPv6的MINIMUM MTU更高。

MSS是最大TCP段大小。与MTU不同,超出MSS的数据包不会被分段,它们只会被丢弃。 MSS通常在TCP三向握手中决定,但是某些设置可能会产生路径,其中所决定的MSS仍然太大,从而导致数据包丢失。 MSS不是每个数据包的协商数据包,但是对于完整的TCP会话,也不考虑TCP / IP标头

使用PPPoE时,所有开销意味着您需要减少MSS通常,通过在找到阻塞点的路由器上指定它来进行处理,然后将通过较高三路握手的MSS替换为正确的较低值(如果较高)。 PPPoE只是在所有内容(IP + TCP)之上添加了8个字节(6个字节的PPPoE + 2个字节的PPP),并且旨在通过以太网以1500字节的MTU运行,因此通常将1492 MSS配置为使其通过。 br />
您的IP堆栈会在发送之前先将要发送到MSS的数据砍掉,放在TCP段中,然后放在一个或多个IP数据包中(取决于它是否大于本地MTU设置)。它。如果中间路由器的MTU较低,则可以将其进一步削减,但它们只会影响IP数据包本身,而不会影响TCP段/报头。

评论


说明:IPv6不支持路由器中的分段,但是终端站可能会分段IPv6数据包

–迈克·彭宁顿
14年6月8日在17:24

编辑我的答案以更具体

– Remi Letourneau
2014年6月8日23:26

#3 楼

MTU是给定链接的最大IP数据包大小。
MSS是最大TCP分段大小。

MTU用于分段,即大于MTU的数据包被分段。但是在
MSS,大于MSS的数据包将被丢弃。

基本上在SYN中在TCP握手期间指定MSS,并且在建立连接后无法更改其值。 = MTU-40(IP标头(20字节)+ TCP标头(20字节))

评论


我认为TCP标头不一定是20个字节,这仅仅是最小长度?

– Sajuuk
19年7月1日在8:09



可能会有其他选项标头

–aneesh joshi
19年7月25日在14:19