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()
MSS
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
MSS & MTUweb IT