聊聊MTU和MSS(针对以太网)---为什么叙述中用"最大传输单元"的最大值, “最大段”的最大值。
2017-07-01 20:47
281 查看
前面我们已经说过了MTU, 它的含义实际上就是数据链路对IP层包长度要求的最大值, 不得超过1500字节。 可以认为, MTU是与IP相关的一个概念。
但是, MSS就不同了, MSS是max segment size的缩写, 是最大段的最大值, 它是与TCP相关的一个概念(与UDP没有毛关系)。 数据链路层期望的最大IP包长是1500字节, 那么除去IP包头典型的20字节, 除去TCP包头典型的20字节(当然也可能是32字节或者40字节, 或者其他 <=60字节的数据), 可知, 数据链路层允许的最大TCP“业务数据”的长度是1460字节, 多么熟悉的数字。
所以, “最大段”(MSS)的最大值是1460字节, 也即MSS的最大可能值是1460字节。
有个疑问, MTU数据在哪里呢? 我们来看看:
那MSS这个值在哪里确定呢? 在三次握手中的两个syn包中确定, 如下:
理解MTU和MSS很重要!
但是, MSS就不同了, MSS是max segment size的缩写, 是最大段的最大值, 它是与TCP相关的一个概念(与UDP没有毛关系)。 数据链路层期望的最大IP包长是1500字节, 那么除去IP包头典型的20字节, 除去TCP包头典型的20字节(当然也可能是32字节或者40字节, 或者其他 <=60字节的数据), 可知, 数据链路层允许的最大TCP“业务数据”的长度是1460字节, 多么熟悉的数字。
所以, “最大段”(MSS)的最大值是1460字节, 也即MSS的最大可能值是1460字节。
有个疑问, MTU数据在哪里呢? 我们来看看:
xxxxxx$ cat /sys/class/net/eth1/mtu 1468可见, 此时MTU的值是1468(不得超过1500), 所以我们叙述的时候, 说“最大值”的最大值。
那MSS这个值在哪里确定呢? 在三次握手中的两个syn包中确定, 如下:
xxxxxx$ sudo tcpdump -iany port 8765 -Xnlps0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes 16:12:04.575911 IP 10.100.70.139.40767 > 10.100.70.140.ultraseek-http: Flags [S], seq 3601264859, win 14280, options [mss 1428,sackOK,TS val 1252765388 ecr 0,nop,wscale 8], length 0 0x0000: 4500 003c 5e17 4000 4006 3ac6 0a64 468b E..<^.@.@.:..dF. 0x0010: 0a64 468c 9f3f 223d d6a6 f0db 0000 0000 .dF..?"=........ 0x0020: a002 37c8 a20d 0000 0204 0594 0402 080a ..7............. 0x0030: 4aab aecc 0000 0000 0103 0308 0000 0000 J............... 0x0040: 0000 0000 0000 0000 0000 0000 ............ 16:12:04.576110 IP 10.100.70.140.ultraseek-http > 10.100.70.139.40767: Flags [S.], seq 2317573919, ack 3601264860, win 14160, options [mss 1428,sackOK,TS val 1252764147 ecr 1252765388,nop,wscale 8], length 0 0x0000: 4500 003c 0000 4000 4006 98dd 0a64 468c E..<..@.@....dF. 0x0010: 0a64 468b 223d 9f3f 8a23 5f1f d6a6 f0dc .dF."=.?.#_..... 0x0020: a012 3750 0e86 0000 0204 0594 0402 080a ..7P............ 0x0030: 4aab a9f3 4aab aecc 0103 0308 0000 0000 J...J........... 0x0040: 0000 0000 0000 0000 0000 0000 ............ 16:12:04.576132 IP 10.100.70.139.40767 > 10.100.70.140.ultraseek-http: Flags [.], ack 1, win 56, options [nop,nop,TS val 1252765388 ecr 1252764147], length 0 0x0000: 4500 0034 5e18 4000 4006 3acd 0a64 468b E..4^.@.@.:..dF. 0x0010: 0a64 468c 9f3f 223d d6a6 f0dc 8a23 5f20 .dF..?"=.....#_. 0x0020: 8010 0038 a205 0000 0101 080a 4aab aecc ...8........J... 0x0030: 4aab a9f3 0000 0000 0000 0000 0000 0000 J............... 0x0040: 0000 0000 ....可见, 此时, MSS = MTU - 20 - 20
理解MTU和MSS很重要!
相关文章推荐
- 以太网最大传输单元MTU
- 【网络协议】TCP分段与UDP/IP分片 (MTU最大传输单元,MSS最大分段大小)
- TCP分段与UDP/IP分片 (MTU最大传输单元,MSS最大分段大小)
- TCP/IP协议:最大传输单元MTU 和 最大分节大小MSS
- [转]【网络协议】TCP分段与UDP/IP分片 (MTU最大传输单元,MSS最大分段大小)
- (转载) 小议TCP的MSS(最大分段)以及MTU(最大传输单元)
- MTU(Maximum transmission unit) 最大传输单元
- MTU(最大传输单元)
- MTU最大传输单元
- 关于MTU最大传输单元的百科
- MTU 最大传输单元
- 最大传输单元---MTU
- TCP传输的单个报文最大字节(MSS和MTU)
- MTU最大传输单元
- 最大传输单元(MTU)
- 第二章 链路层 2.8最大传输单元MTU
- 什么是最大传输单元(MTU)以及注意事项