MSS

TCP 爲了避免被髮送方分片,會主動把數據分割成小段再交給網絡層,最大的分段大小稱之爲 MSS(Max Segment Size)。
MSS = MTU - IP header頭大小 - TCP 頭大小
這樣一個 MSS 的數據恰好能裝進一個 MTU 而不用分片
在以太網中 TCP 的 MSS = 1500(MTU) - 20(IP 頭大小) - 20(TCP 頭大小)= 1460
可以看到 TCP 的包體數據大小爲 1448,因爲TCP 頭部裏包含了 12 字節的選項(Options)字段,頭部大小從之前的 20 字節變爲了 32 字節,所以 TCP 包體大小變爲了:1500(以太網 MTU) - 20(IP 固定表頭大小) - 20(TCP 固定表頭大小) - 12(TCP 表頭選項) = 1448
node2:/root/test#cat t17.py 
import socket
import IN
import struct
b=2
def getnum(x):
    b='2'
    for y in range(x):
        #print y
        b=b+'2'
        if len(b) == x:
            #print '-------------'
            #print len(b)
            return b
print getnum(1024)
c=getnum(1460)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#class IN:
#    IP_MTU = 14
#    IP_PMTUDISC_DONT = 0
#    IP_PMTUDISC_DO = 2
#    IP_MTU_DISCOVER=10
#s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
#s.setsockopt(socket.IPPROTO_IP, IN.IP_MTU_DISCOVER,IN.IP_PMTUDISC_DONT)
# print dir(s.setsockopt(socket.SOL_SOCKET))
s.connect(("192.168.137.2",8080))
print len(c)
s.send(c)
#option = getattr(IN, 'IP_MTU_DISCOVER', 10)
#print 'MTU:', s.getsockopt(socket.IPPROTO_IP, option)
s.close()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章