Java. tcp报文长度_TCP 最大报文段长度 MSS

TCP 最大报文段长度 MSS(Maximum Segment Size)

MSS 是TCP选项中最经常出现,也是最早出现的选项。MSS选项占4byte。MSS是每一个TCP报文段中数据字段的最大长度,注意:只是数据部分的字段,不包括TCP的头部。TCP在三次握手中,每一方都会通告其期望收到的MSS(MSS只出现在SYN数据包中)如果一方不接受另一方的MSS值则定位默认值536byte。

MSS值太小或太大都是不合适。太小,例如MSS值只有1byte,那么为了传输这1byte数据,至少要消耗20字节IP头部+20字节TCP头部=40byte,这还不包括其二层头部所需要的开销,显然这种数据传输效率是很低的。MSS过大,导致数据包可以封装很大,那么在IP传输中分片的可能性就会增大,接受方在处理分片包所消耗的资源和处理时间都会增大,如果分片在传输中还发生了重传,那么其网络开销也会增大。因此合理的MSS是至关重要的。MSS的合理值应为保证数据包不分片的最大值。对于以太网MSS可以达到1460byte.

与MSS相似的在IP层也有一个类似的概念---MTU(Maximum Transfer Unit)下图可以清晰反映MSS与MTU 的关系:

d2a876b4d9ade0c516b22519a78ee3dd.png

MTU=MSS+TCP Header+IP Header.

实例:

对于TCP来说,它是尽量避免分片的。假设我们这里要发送给TCP层的数据大小为2748个字节,这个大小是明显大于链路层的发送数据的大小的,在这个情况下我们来看,对于来自TCP层的数据,IP会不会进行分片。

b73bfe582b759132bac5d3520e15f542.png

从这张图看来,应用层的2748个字节在TCP层就进行了分段,分成了两个TCP段,一个1460字节,一个1288字节。那么到IP层的时候,自然就不会在进行分片了。

a06d040394b10ec68928ce539076271f.png

从这张图片看出,在这两个TCP分段中,在序号3处,IP的头部字段(Don ' t Fragment) 被设置了,用于告诉IP层不要对该数据进行分片。

===================END===================

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值