About MTU,TCP-MSS (转)

MSS是Maxitum Segment Size 最大分段大小的缩写,意为TCP数据包每次能够传输的最大数据分段,是TCP协议里面的一个概念。MSS值所表示的是TCP报文的净载荷数据大小。通过设置其大小可以达到与设置MTU值一样的效果,都是为了避免主机发送的数据包大小超过网络链路MTU值而造成数据包被丢弃的情况。但是在实际情况中,该MSS值在TCP协议中实现的时候往往被MTU所代替。其实现原理是:一些TCP实现只有当目的主机在一个非直接连接网络上才发送MSS选项,pc上网或者别的一些tcp连接,PC会与目的地的IP地址,协商一次mss参数,作为自己发送数据包的参考。mss参数就是告诉对端本端最大支持不分片的数据包大小,只含净荷。

在后续的部分中,将会通过一个简单的实验进一步学习理解MTU及TCP-MSS的原理及应用。

1、MTU

先仔细回忆一下EthernetII帧的结构DMAC+SMAC+Type+Data+CRC。由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64bytes,最大不能超过1518bytes,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。 小于64Bytes的数据帧一般是由于以太网冲突产生的“碎片”或者线路干扰或者坏的以太网接口产生的,对于这些小于64Bytes的“碎片”,MAC子层就会在数据字段的后面填充以满足整个数据帧长不小于64字节,以便传输。

为什么以太网规定会规定数据帧长度不小于64字节?

以太网是不可靠的,这就意味着发送者并不知道自己发出的数据对端是否收到,但如果它发出的数据包出现错误,则会进行重传。什么时候会发生错误,发生错误是指什么呢,以太网是如何检测到错误的?

以太网的错误主要是发生碰撞,碰撞是指两台机器同时监听到网络是空闲的,同时发送数据,就会发生碰撞,碰撞对于以太网来说是正常的。非常有名的CSMA/CD就是用来检测冲突的。假设A检测到网络是空闲的,开始发数据包,尽力传输,当数据包还没有到达B时,B也监测到网络是空闲的,开始发数据包,这时就会发生碰撞,B发现发生碰撞,开始发送碰撞信号,所谓碰撞信号,就是连续的01010101或者10101010,十六进制就是55或AA。这个碰撞信号会返回到A,如果碰撞信号到达A时,A还没有发完这个数据包,A就知道这个数据包发生了错误,就会重传这个数据包。但如果碰撞信号会返回到A时,数据包已经发完(在数据包比较短的情况下),则A不会重传这个数据包。

以太网为什么要设计这样的重传机制。首先,以太网不想采用连接机制,因为会降低效率,但他又想有一定的重传机制,因为以太网的重传是微秒级,而传输层的重传,如TCP的重传达到毫秒级,应用层的重传更达到秒级,我们可以看到越底层的重传,速度越快,所以对于以太网错误,以太网必须有重传机制。要保证以太网的重传,必须保证A收到碰撞信号的时候,数据包没有传完,要实现这一要求,A和B之间的距离很关键,也就是说信号在A和B之间传输的来回时间必须控制在一定范围之内。IEEE定义了这个标准,一个碰撞域内,最远的两台机器之间的round-trip time 要小于512bit time.(来回时间小于512位时,所谓位时就是传输一个比特需要的时间)。这也是我们常说的一个碰撞域的直径。

512个位时,也就是64字节的传输时间,如果以太网数据包大于或等于64个字节,就能保证碰撞信号到达A的时候,数据包还没有传完。

再来看一下这个512bit time是如何得来的?

先看一下一个比较古老但流行一时的标准:10BASE5,一种以太网标准,该标准用于使用粗同轴电缆、速度为10Mbps的基带局域网络,在总线型网络中,最远传输距离为500米。网络节点装有收发器,该收发器插在网卡上的15针连接单元接口(Attachment Unit Interface)中,并接到电缆上。也作thick Ethernet,ThickNet,ThickWare。另见coaxial cable,Ethernet,指的是使用标准的(粗)50Ω基带同轴电缆的10Mbit/s的基带以太网规范。它是IEEE802.3基带物理层规范的一部分,在每个网段上的距离限制是500m,整个网络最大跨度为2500m,每个网段最多终端数量为100台,每个工作站距离为2.5m的整数倍。

上面提到的这个碰撞域的来回时间其实就是当时依据10M网络的标准来定义的,10BASE5允许最远的两个工作站间距离2.5公里 ,电子信号在2.5公里來回时间约为51.2us。

根据CSMA/CD,最小封包以51.2us计算和10Mbps计算:51.2us * 10Mbps = 512 bit = 64 byte。

这就是为什么以太网要最小64个字节的历史原因了,一个是基于CSMA/CD的需要,另外一个就是依据了当时10M网络的标准进行了计算和定义。

以太网帧最大不能超过1518bytes,这也是一个规定,但没有上述的这些限制,之所以规定为1518,主要是考虑到传输效率正确率吧。

由于以太网EthernetII最大的数据帧是1518Bytes,这样,除去以太网帧的帧头(DMAC目的MAC地址48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和帧尾CRC(FCS)校验部分4Bytes。那么剩下承载上层协议的地方也就是Data域最大就只能有1500Bytes这个值我们就把它称之为MTU。这个就是网络层协议非常关心的地方,因为网络层协议比如IP协议会根据这个值来决定是否把上层传下来的数据进行分片。就好比一个盒子没法装下一大块面包,我们需要把面包切成片,装在多个盒子里面一样的道理。

例 :ICMP包


项目


内容


长度(字节)


备注


Packet Length


1516


数据包总长度


Ethernet Header


Destination


6


目的MAC及源MAC分别为48Bit,分别占6字节


Source:


6


Protocol Type:


2


IP Header


Header Length:


20


IP报头


ICMP


ICMP Type


8


ICMP报头


ICMP Data Area:


1470


ICMP净载荷长度


FCS


4


帧校验序列号

时间: 2024-11-05 20:36:10

About MTU,TCP-MSS (转)的相关文章

IP分片和TCP分片 MTU和MSS

前期对分片分段概念有点不清晰,看到一篇好文,mark 本文转自:http://blog.csdn.net/keyouan2008/archive/2010/08/27/5843388.aspx 1,MTU(Maximum Transmission Unit,MTU),最大传输单元 (1)以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492个字节.链路层的这个特性称作MTU.不同类型的网络大多数都有一个上限.如果IP层有一个数据要传,且数据的长度比链路层的MTU还大,那么

关于网络编程中MTU TCP UDP优化设置总结

首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层.  其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应用层 它们的关系是 数据帧{IP包{TCP或UDP包{Data}}} --------------------------------------------------------------------------------- 在应用程序中我们用到的Data的长度最大是多少,直接取决于底层的

数据帧、MTU、MSS、IP分片

1.以太网帧 在以太网链路上的数据包称作以太帧,在802.3标准里,规定了一个以太帧的数据部分(Payload)的最大长度是1500个字节(MTU),再加上14字节链路头和4字节的FCS,所以以太网帧的最大长度为1518.另外,以太网帧的最小长度为64字节. [1]4字节的FCS是网卡处理的,所以抓到的包看不到这个字段(网卡驱动去掉了),组建包时也不用设置这个字段(由网卡驱动计算填充). [2]每个帧的前面有7字节的前导码和1字节的帧起始定界符,这8个字节是帧之外的数据,由接收器电路使用. [3

Linux 内核 TCP MSS 机制详细分析

作者:[email protected]知道创宇 404 实验室时间:2019 年 6 月 26 日英文版本:https://paper.seebug.org/967/ 前言 上周Linux内核修复了4个CVE漏洞[1],其中的CVE-2019-11477感觉是一个很厉害的Dos漏洞,不过因为有其他事打断,所以进展的速度比较慢,这期间网上已经有相关的分析文章了.[2][3] 而我在尝试复现CVE-2019-11477漏洞的过程中,在第一步设置MSS的问题上就遇到问题了,无法达到预期效果,但是目前

Linux内核TCP MSS机制详细分析

前言 上周Linux内核修复了4个CVE漏洞[1],其中的CVE-2019-11477感觉是一个很厉害的Dos漏洞,不过因为有其他事打断,所以进展的速度比较慢,这期间网上已经有相关的分析文章了.[2][3] 而我在尝试复现CVE-2019-11477漏洞的过程中,在第一步设置MSS的问题上就遇到问题了,无法达到预期效果,但是目前公开的分析文章却没对该部分内容进行详细分析.所以本文将通过Linux内核源码对TCP的MSS机制进行详细分析. 测试环境 1. 存在漏洞的靶机 操作系统版本:Ubuntu

(转)小议TCP的MSS(最大分段)以及MTU

[前言]漫漫51长假,没有好的去处,只能每日上网消遣,某日逛到NBO灌水,见一帖曰:无法通过2514路由器上MSN(出口为ADSL线路,通过PPPoE)吾心想,ADSL---PPPoE,那肯定就是MTU之问题.回帖告之:改PC之MTU. 过数日,又逛到NBO,又见这帖,后有人回曰:ip tcp adjust-mss 1452后帖主又跟:问题解决. 吾纳闷之,后百思而得其解,So决定将自己所得写出来,分享给大家. [背景知识]MTU: Maxitum Transmission Unit 最大传输单

MTU&MSS

MTU是Maximum Transmission Unit的缩写,意为最大传输单元,通俗的理解就是在网络上传送的最大数据包,单位是字节. 以太网对数据帧的长度都有一个限制,其最大值为1500,这个特性被称作MTU,不同类型的网络大多数都有一个上限.如果IP层有一个IP包要传,而且数据的长度比链路层上的MTU值还要大,那么就需要对这个数据包进行分片处理,而且要求被分片的每个数据包都要等于或小于这个MTU值,一般是最后一个数据包小于这个值.例如,一个大小为5000字节的数据包在穿越网络时,如果遇到一

TCP 协议中MSS的理解

在介绍MSS之前我们必须要理解下面的几个重要的概念.MTU: Maxitum Transmission Unit 最大传输单元MSS: Maxitum Segment Size 最大分段大小PPPoE: PPP Over Ethernet(在以太网上承载PPP协议),就是因为这个协议的出现我们才有必要修改我们的MSS或者是MTU值.MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC          

tcp协议中mss的理解

在介绍MSS之前我们必须要理解下面的几个重要的概念.<blockquote>MTU: Maxitum Transmission Unit 最大传输单元MSS: Maxitum Segment Size 最大分段大小PPPoE: PPP Over Ethernet(在以太网上承载PPP协议),就是因为这个协议的出现我们才有必要修改我们的MSS或者是MTU值.</blockquote>MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构&l

MSS与MTU的关系

MSS与MTU的关系 TU:maximum transmission unit,最大传输单元,由硬件规定,如以太网的MTU为1500字节. MSS:maximum segment size,最大分节大小,为TCP数据包每次传输的最大数据分段大小,一般由发送端向对端TCP通知对端在每个分节中能发送的最大TCP数据.MSS值为MTU值减去IPv4 Header(20 Byte)和TCP header(20 Byte)得到. 分片:若一IP数据报大小超过相应链路的MTU的时候,IPV4和IPV6都执行