聊聊MTU和MSS(针对以太网)---为什么叙述中用"最大传输单元"的最大值, “最大段”的最大值。

       前面我们已经说过了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数据在哪里呢? 我们来看看:

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..<..@[email protected].
        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很重要!



你可能感兴趣的:(s2:,软件进阶,s2:,后台开发,s4:,计算机网络)