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 |
帧校验序列号 |
About MTU,TCP-MSS (转)的更多相关文章
- IP分片和TCP分片 MTU和MSS(转)
IP分片和TCP分片 MTU和MSS(转) 访问原文:http://blog.csdn.net/keyouan2008/article/details/5843388 1,MTU(Maximum Tr ...
- tcp netstat用法 TIME_WAIT状态解析 MTU以及MSS
带着问题写博客 问题1:使用netstat查看有源TCP连接的状态时,经常会看到established状态,那么还有哪些状态,这些状态是如何变化的呢? 问题2:TIME_WAIT状态存在的必要? 问题 ...
- MTU 和 MSS 关系、 IP分片、TCP分段
从四层模型:链路层,网络层,传输层,应用层说 一 .以太网V2格式数据帧 : 链路层 Destination Source Type DataAndPad FCS 6 ...
- 在linux内核中修改TCP MSS值
MTU: Maxitum Transmission Unit 最大传输单元 MSS: Maxitum Segment Size 最大分段大小 MSS最大传输大小的缩写,是TCP协议里面的一个概念.MS ...
- pppoe-环境下的mtu和mss
路由器上在宽带拨号高级设置页面会有设置数据包MTU的页面 数据包MTU(字节):1480 (默认是1480,如非必要,请勿修改) PPPoE/ADSL:1492 ,可以尝试修改为1492 MTU: M ...
- 关于ASA的TCP MSS
About the TCP MSS The TCP maximum segment size (MSS) is the size of the TCP payload before any TCP a ...
- TCP层的分段和IP层的分片之间的关系 & MTU和MSS之间的关系 (转载)
首先说明:数据报的分段和分片确实发生,分段发生在传输层,分片发生在网络层.但是对于分段来说,这是经常发生在UDP传输层协议上的情况,对于传输层使用TCP协议的通道来说,这种事情很少发生. 1,MTU( ...
- 原 TCP层的分段和IP层的分片之间的关系 & MTU和MSS之间的关系
首先说明:数据报的分段和分片确实发生,分段发生在传输层,分片发生在网络层.但是对于分段来说,这是经常发生在UDP传输层协议上的情况,对于传输层使用TCP协议的通道来说,这种事情很少发生. 1,MTU( ...
- 【TCP协议】MTU和MSS详解
需要注意的是,区别两种帧封装格式:802标准帧和以太网帧 1,在802标准定义的帧格式中,长度字段是指它后续数据的字节长度,但不包括C R C检验码.RFC 1042(IEEE 802) 2,RFC ...
- MTU,MSS基本概念
传输层: 对于UDP协议来说,整个包的最大长度为65535,其中包头长度是65535-20=65515: 对于TCP协议来说,整个包的最大长度是由最大传输大小(MSS,Maxitum Segment ...
随机推荐
- JS实现的随机显示图片
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- wcf用svcutil导出泛型的元数据
D:\aaa>svcutil net.tcp://192.168.1.110:44444/TradingsService.svc/mex /ct:System.Collections.Gener ...
- AWT布局管理器
布局管理器 容器内可以存放各种组件,而组件的位置和大小是由容器内的布局管理器来决定的.在AWT中为我们提供了以下5种布局管理器: ① FlowLayout 流式布局管理器 ② BorderLa ...
- HDU1075
题目大意: 给你一本火星词典,每个火星单词对应一个英文单词. 然后给你一篇火星文章,要求你翻译成英文. 要求如下: 如果这个火星单词用英文单词可以表示,就翻译成英文,如果没有这个单词,就原样输出.遇到 ...
- Fatal error: Allowed memory size of 524288000 bytes exhausted (tried to allocate 64 bytes) in D
Fatal error: Allowed memory size of 524288000 bytes exhausted (tried to allocate 64 bytes) in D 从数据库 ...
- 10款免费而优秀的图表JS插件
http://www.open-open.com/lib/view/open1406378625726.html http://www.ichartjs.com http://echarts.baid ...
- [刘阳Java]_MyBatis_动态SQL标签用法_第7讲
1.MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. 2.MyBatis中用于实现动态SQL的元素主要有 if choose(when,otherwi ...
- C# log4net输出发生错误的行号
别人调用我写的接口,总是报错,但我这测试是没问题的,就想着用log4net来跟踪一下. 跟踪后,发现接口确实有出错的日志,但是没有具体出错的地方. 通过输出日志的方式,跟踪不是很方便,就想着log4n ...
- SQL 计算两个地理坐标相差的距离的函数
Create function getGreatCircleDistance(@lat1 decimal(18,11),@lng1 decimal(18,11),@lat2 decimal(18,11 ...
- 深入浅出Symfony2 - 结合MongoDB开发LBS应用
简介 随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理.我所在的项目也正从事相关系统的开发,我们使用的是S ...