数据包与数据帧大小
- 格式:doc
- 大小:1.02 MB
- 文档页数:3
数据报Data gram通过网络传输的数据的基本单元,包含一个报头(header)和数据本身,其中报头描述了数据的目的地以及和其它数据之间的关系。
完备的、独立的数据实体,该实体携带要从源计算机传递到目的计算机的信息,该信息不依赖以前在源计算机和目的计算机以及传输网络间交换。
在数据报操作方式中,每个数据报自身携带有足够的信息,它的传送是被单独处理的。
整个数据报传送过程中,不需要建立虚电路,网络节点为每个数据报作路由选择,各数据报不能保证按顺序到达目的节点,有些还可能会丢失。
数据报工作方式的特点1、同一报文的不同分组可以由不同的传输路径通过通信子网;2、同一报文的不同分组到达目的结点时可能出现乱序、重复与丢失现象;3、每一个分组在传输过程中都必须带有目的地址与源地址;4、数据报方式报文传输延迟较大,适用于突发性通信,不适用于长报文、会话式通信。
数据帧所谓数据帧,就是数据链路层的协议数据单元,它包括三部分:帧头,数据部分,帧尾。
其中,帧头和帧尾包含一些必要得控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如ip数据报。
在发送端,数据链路层把网络层传下来得数据封装成帧,然后发送到链路上去;在接收端,数据链路层把收到的帧中的数据取出并交给网络层。
不同的数据链路层协议对应着不同的帧,所以,帧有多种,比如PPP帧、MAC帧等,其具体格式也不尽相同。
下面以MAC帧的格式为例进行说明:MAC帧的帧头包括三个字段。
前两个字段分别为6字节长的目的地址字段和源地址字段,目的地址字段包含目的MAC地址信息,源地址字段包含源MAC地址信息。
第三个字段为2字节的类型字段,里面包含的信息用来标志上一层使用的是什么协议,以便接收端把收到的MAC帧的数据部分上交给上一层的这个协议。
例如,当类型字段的值是0x0800时,就表示上层使用的是IP数据报;若类型字段的值为 0x8137,则表示该帧是由Novell IPX 发过来的。
关于MTU和Jumbo Frame对网络连通性的影响的一些测试近日报装了一条点对点专线, 接口是以太网的, 因为需要测量出这条链路的MTU, 所以对此作了一番研究和实验.我们都知道在网络上传输数据时, 大数据会被分解为一个个小数据包来传递. 比较常见的说法是这个数据包的尺寸上限被称为MTU,默认为1500字节。
其实在以太网+TCP/IP环境中,通俗地说数据包分为两种:以太网数据包,和IP数据包,他们默认的大小分别为1500字节和1472字节,这是因为以太网数据包要包含整个IP数据包,还要加上MAC地址等内容,所以两者之间有一个几十个字节的差异。
稍微专业点的说法,以太网数据包应该称为以太网数据帧,或MAC帧。
以太网帧在ISO/OSI模型中处于数据链路层的位置;而IP包处于ISO/OSI的网络层的位置。
在另外的一些技术文章中,会提到数据包大小的两种应用方向:一是增大数据包以提高网络效率;二是减小数据包以提高网络兼容性,并提高效率。
本人就根据第一种应用方向,曾经对局域网内NAS(网络存储)的传输效率做过一些测试,得到的结论是适宜地增大数据包尺寸,可以让NAS的传输速度提高20~40%,但错误地增大数据包尺寸,会导致NAS的传输速度降低95%以上,有兴趣者可以在网上搜索关键字“Jumbo Frame”和“NAS”参考。
在很多Windows计算机中, 对网络数据包的尺寸有设置作用的地方有两处,一是注册表中网卡的MTU值;二是网卡驱动程序配置中的Jumbo Frame(巨型帧)值,请参见下面的图示,关于如何找到修改这两处配置的方法,请在网上自行搜索答案。
本文中的测试用计算机的网卡都是Intel主控芯片的,所以在其驱动程序中可以选择设定其Jumbo Frame。
据我所知很多厂家的网卡芯片的驱动程序中都能设置Jumbo Frame,哪怕是Windows自带的网卡驱动程序。
那么我们不禁要产生一个疑问,究竟哪处设置决定数据包的尺寸?它们有何区别?修改之后对网络的连通性(本文仅讨论连通性问题)有何影响?下面直接给出一系列实验的图解,并对实验的参数进行了说明。
帧详解数据链路层负责将位组合成字节,并将字节组合成帧。
帧被⽤在数据链路层,从⽹络层传递过来的数据包被封装成帧,以根据介质访问的类型进⾏传输。
以太⽹站点的功能是使⽤⼀组称为MAC帧格式的位,在站点之间传送数据帧。
在帧格式中,采⽤循环冗余校验(CRC)进⾏差错检测。
但记住,这是差错检测,不是差错纠正。
802.3帧结构前导8字节DA6字节SA6字节长度2字节数据FCS Etllernet帧结构前导8字节DA6字节SA6字节类型2字节数据FCS说明:将⼀个帧封装到不同类型的帧中,就称为隧道技术。
下⾯是802.3帧和Etllernet帧的各个字段的详细说明。
前导(PreambIe) 它采⽤交替为1和O的模式,在每个数据包的起始处提供5MHz的时钟信号,以允许接受设备锁定进⼊的⽐特流。
帧起始定界符/同步(start Fra1ne DeIimiter,SFD/synch) 前导为7字节,SFD为1字节(Synch)。
SFD为10101011,这⾥的最后⼀对1允许接收者进⼊中间某处的交替0、1模式中,却仍然能够同步并检测到数据的开始。
⽬的地址(Destination Address,DA) 它⾸先使⽤最低有效位(IEB)传送48位值。
接收⽅站点使⽤DA来决定⼀个进⼊的数据包是否被送往特定的节点。
⽬的地址可以是单独的地址,或者是⼴播或组播MAC地址。
记住,⼴播地址为全1(⼗六进制形式为全F)并被送往所有设备,但组播地址只被送往⽹络中节点的同类⼦集。
源地址(Source Address,SA) SA是48位的MAC地址,⽤来识别发送没备,它⾸先使⽤LSB。
在SA字段中,⼴播和组播地址格式是⾮法的。
长度(Length)或类型(Type) 802.3使⽤长度字段,但Ethernet帧使⽤类型字段来识别⽹络层的协议。
802.3不能识别上层协议,且必须与专⽤的LAN(⽐如IPX)⼀起使⽤。
数据(Data) 这是从⽹络层传送到数据链路层的数据包。
数据包中出现超长帧的分析文档修改记录时间 版本 编写/修改人员 审核人员 备注 2008-08-07 V1.0 曹腾 创建该文档 2008-08-11 V2.0 王超 完善部分内容 2008-08-11 V3.0 王超 标准化目录1 抓包环境 (4)2 问题现象描述 (4)3 问题分析 (5)3.1 关于超长帧问题的分析 (5)3.2 关于IP标识一样但数据包大小不一样问题的分析 (6)4 结论 (9)5 引申问题 (10)1 抓包环境在用户处的抓包环境如下图所示:说明:1、在核心交换机上做端口镜像抓取进出互联网的数据包;2、监听端口为一台服务器接入端口,在服务器上开启科来网络分析系统抓取数据包。
2 问题现象描述在抓取数据包,并对数据包进行分析时,我们发现了一些问题,主要是以下几点:1、数据包中有很多长度超过1518字节的数据帧,其字节分布从1600-8880字节不等。
如下图所示:这是正常的吗?是什么原因导致的呢?2、存在较多的IP标识一致但是长度大小不一致的数据包,如下图所示:3 问题分析3.1 关于超长帧问题的分析1、一般以太网环境中数据链路层能够传输的最大数据为1518字节,有些网卡在故障时会发送一写超长帧,但是这种帧一般都会被中间设备或捕获数据包的网卡丢弃,抓包工具一般无法正常显示,但是,在此次所捕获的数据包中,这些超长帧都能正常显示,而且通过分析其数据包通讯过程,也能够确定其通讯正常。
可以排除设备网卡故障的可能。
2、在网上查找了一些关于超长帧的文档,发现其是一种专门为千兆以太网而设计的厂商标准的超长帧格式,其长度从9000字节~64000字节不等。
采用Jumbo Frame能够令千兆以太网性能充分发挥,使数据传输效率提高50%~100%,超长帧一般在内部网络的存储环境中应用较多。
Jumbo Frame需要在相互通讯的2个通讯端口(交换机端口或网卡端口)上同时支持,而且与以前的以太网产品不兼容,因此主要会应用于千兆主干的端口之间以及服务器端口接入到网络主干的链路。
网络通信的数据包(帧)的结构及原理
在网络通信中,”包”(Packet)和”帧”(Frame)的概念相同,均指通信中的一个数据块.对于具体某种通信网络,一般使用术语”帧”.一种网络的帧格式可能与另一种网络不同,通常使用术语”包”来指一般意义的帧.串行通信的数据格式有面向字符型的数据格式,如单同步、双同步、外同步;也有面向比特型的数据格式,这以帧为单位传输,每帧由六个部分组成,分别是标志区、地址区、控制区、信息区、帧校验区和标志区.
串行通信协议属于ISO国际参考标准的第三层,数据链路层.数据链路层必须使用物理层提供给它的服务.物理层所做的工作是接收个一个原始的比特流,并准备把它交给目的地.不能保证这个比特流无差错.所接收的比特的数量也许少于,也许等于或多于所传递的比特的数量,它们具有不同的值.一直要上到数据链路层才能进行检测,如果需要的话,纠正错误.对于数据层,通常的方法是把比特流分成离散的帧,并对每一帧计算出校验和…….当一帧到达目的地后重新计算校验和时,如果新算出的校验和不同于帧中所包括的值,数据链路层就知道出现差错了,从而会采取措施处理差错(即,丢弃坏帧,并发回一个差错报告).
数据链路层的任务是在两个相邻接点间的线路上无差错地传送以帧为单位的数据.每一帧包括数据和必要的控制信息.人们发现,对于经常产生误码的实际链路,只要加上合适的控制规程,就可以使通信变为比较可靠的.如IBM公司推出了着名的体系结构SNA,在SNA的数据链路规程采用了面向比特的规程SDLC,后来ISO把它修改后称为HDLC,译为高级数据链路控制.在INTERNET 中,用户与ISP(INTERNET服务提供者)之间的链路上使用得最多的协议就是SLIP和PPP.。
IP包头(Packet Header)的格式版本(version):长度4比特,表示数据包的IP版本号,0x0100表示IP版本4,0x0110表示IP版本6报头长度(header lenght):长度4比特,表示IP包头长度,最小长度为20个字节,最大可以扩展到60个字节。
服务类型(Type of service):长度8比特,表示特殊数据包的处理方式。
服务类型字段实际上被划分为两个子字段:优先级和ToS。
总长度(Total Length):长度16比特,表示IP包的长度(包头+数据),所以IP 数据包的最大长度是65535(2^16)。
标识符(Identifier):长度16比特,通常与标记字段和分片偏移字段一起用于数据包的分段。
如果数据包原始长度超过数据包所要经过的数据链路的最大传输单元(MTU),那么必须将数据包分段为更小的数据包。
例如,一个大小为5000字节的数据包在穿过网络时,如果遇到一条MTU为1500字节的数据链路,即数据帧最多容纳大小为1500字节的数据包。
路由器需要在数据成帧之前将数据包分段成多个数据包,其中每个数据包长度不得超过1500字节;然后路由器在每片数据包的标识字段上打上相同的标记,以便接收设备可以识别出属于一个数据包的分段。
标记字段(Flag):长度3比特,其中第1位不使用,第2位是不分段(DF)位。
当DF位被设置为1时,表示路由器不能对数据包进行分段处理。
如果数据包由于不能被分段而未能被转发,那么路由器将丢弃该数据包并向源点发送错误消息。
第3位表示还有更多分段(MF)位,当路由器对数据包进行分段时,MF位为1,说明后面还有分段;MF位为0,说明这是最后一个分段。
分段偏移(Fragment Offset):长度13比特,表示该IP包在该组分片包中位置,接收端靠此来组装还原IP包。
请注意,如果一个分片在传输中丢失,那么必须在网络中同一点对整个数据包重新分片重新发送。
IP数据包分片理解
一、以太网帧格式如下:
MAC数据包的最小值为46byte,至于这个最小值是因为以太网信道侦听需要,1500byte为规范值。
一般的电脑MTU设置值为1500,就是基于MAC最大封包的考虑。
一般的IP包的大小肯定超过1500byte,为了能在MAC 帧中传输,必须将IP包进行分片,分成适合传输的MAC帧。
可以测试发现,当IP数据包的大小超过1500byte时,且不允许分片时,电脑系统拒绝发送此报文,同时提示数据包需要分片。
使用ICMP包进行测试,因为IP头占用20byte,ICMP头占用8byte,所以ICMP包大小最大为1472byte。
测试,使用1472的ICMP报文可以通过,但是使用1473的ICMP不分片报文则不能通过。
测试1:
抓包如下,1472byte的ICMP报文可以通过不分片进行传输;
测试2:
因为ICMP报文的大小为3000byte,所以肯定报文要进行分片,抓包如下:
第一个ICMP报文,满载1472byte。
IP包中fragment flags 字段表
有后续有Ip分片。
第二个报文(第一分片)就直接通过IP分片传输,且不包含ICMP 头,此IP包承载的大小为1480byte。
第三个报文(第二分片),承载的数据包大小为48byte,分片结束。
此包的整个大小为:1472+1480+48=3000 byte。
传输层——数据段(Segment)或报文网络层——分组(数据包(Packet))数据链路层——数据帧(Frame)物理层——比特(Bit)在会话层及以上的高层次中,数据传送的单位不再另外命名,统称为报文。
packet也可译作分组或.数据包(是翻译造成的,其实是同一个词packet)知识背景:首先要了解TCP/IP参考模型与OSI参考模型一、OSI模型与TCP/IP模型的比较TCP/IP模型实际上是OSI模型的一个浓缩版本,它只有四个层次:1.应用层2.运输层3.网际层4.网络接口层与OSI功能相比:应用层对应着OSI的应用层表示层会话层运输层对应着OSI的传输层网际层对应着OSI的网络层网络接口层对应着OSI的数据链路层和物理层二、TCP/IP每层所对应的协议,OSI七层模型所对应的协议TCP/IP:数据链路层:ARP,RARP网络层:IP,ICMP,IGMP传输层:TCP ,UDP,UGP应用层:Telnet,FTP,SMTP,SNMP.OSI:物理层:EIA/TIA-232, EIA/TIA-499, V.35, V.24, RJ45, Ethernet, 802.3, 802.5, FDDI, NRZI, NRZ, B8ZS数据链路层:Frame Relay, HDLC, PPP, IEEE 802.3/802.2, FDDI, ATM, IEEE 802.5/802.2网络层:IP,IPX,AppleTalk DDP传输层:TCP,UDP,SPX会话层:RPC,SQL,NFS,NetBIOS,names,AppleTalk,ASP,DECnet,SCP表示层:TIFF,GIF,JPEG,PICT,ASCII,EBCDIC,encryption,MPEG,MIDI,HTML应用层:FTP,WWW,Telnet,NFS,SMTP,Gateway,SNMP三、OSI的七层结构第一层物理层的任务就是为它的上一层提供一个物理连接,以及它们的机械、电气、功能和过程特性。
详解数据包(一)数据包“包”(Packet)是TCP/IP协议通信传输中的数据单位,一般也称“数据包”。
有人说,局域网中传输的不是“帧”(Frame)吗?没错,但是TCP/IP协议是工作在OSI模型第三层(网络层)、第四层(传输层)上的,而帧是工作在第二层(数据链路层)。
上一层的内容由下一层的内容来传输,所以在局域网中,“包”是包含在“帧”里的。
名词解释:OSI(Open System Interconnection,开放系统互联)模型是由国际标准化组织(ISO)定义的标准,它定义了一种分层体系结构,在其中的每一层定义了针对不同通信级别的协议。
OSI模型有7层,1-7层分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
OSI模型在逻辑上可分为两个部分:低层的1-4层关注的是原始数据的传输;高层的5-7层关注的是网络下的应用程序。
我们可以用一个形象一些的例子对数据包的概念加以说明:我们在邮局邮寄产品时,虽然产品本身带有自己的包装盒,但是在邮寄的时候只用产品原包装盒来包装显然是不行的。
必须把内装产品的包装盒放到一个邮局指定的专用纸箱里,这样才能够邮寄。
这里,产品包装盒相当于数据包,里面放着的产品相当于可用的数据,而专用纸箱就相当于帧,且一个帧中只有一个数据包。
“包”听起来非常抽象,那么是不是不可见的呢?通过一定技术手段,是可以感知到数据包的存在的。
比如在Windows 2000 Server 中,把鼠标移动到任务栏右下角的网卡图标上(网卡需要接好双绞线、连入网络),就可以看到“发送:××包,收到:××包”的提示。
通过数据包捕获软件,也可以将数据包捕获并加以分析。
数据包的结构数据包的结构非常复杂,不是三言两语能够说清的,在这里我们主要了解一下它的关键构成就可以了,这对于理解TCP/IP协议的通信原理是非常重要的。
数据包主要由“目的IP地址”、“源IP地址”、“净载数据”等部分构成。
IP数据包长度问题分类:Linux总结2011-11-19 12:47 54人阅读评论(0) 收藏举报首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。
其中以太网(Ethernet)的数据帧在链路层IP包在网络层TCP或UDP包在传输层TCP或UDP中的数据(Data)在应用层它们的关系是数据帧{IP包{TCP或UDP包{Data}}}---------------------------------------------------------------------------------在应用程序中我们用到的Data的长度最大是多少,直接取决于底层的限制。
我们从下到上分析一下:1.在链路层,由以太网的物理特性决定了数据帧的长度为(46+18)-(1500+18),其中的18是数据帧的头和尾,也就是说数据帧的内容最大为1500(不包括帧头和帧尾),即MTU(Maximum Transmission Unit)为1500;2.在网络层,因为IP包的首部要占用20字节,所以这的MTU为1500-20=1480;3.在传输层,对于UDP包的首部要占用8字节,所以这的MTU为1480-8=1472;所以,在应用层,你的Data最大长度为1472。
(当我们的UDP包中的数据多于MTU(1472)时,发送方的IP层需要分片fragmentation进行传输,而在接收方IP层则需要进行数据报重组,由于UDP是不可靠的传输协议,如果分片丢失导致重组失败,将导致UDP数据包被丢弃)。
从上面的分析来看,在普通的局域网环境下,UDP的数据最大为1472字节最好(避免分片重组)。
但在网络编程中,Internet中的路由器可能有设置成不同的值(小于默认值),Internet 上的标准MTU值为576,所以Internet的UDP编程时数据长度最好在576-20-8=548字节以内。
---------------------------------------------------------------------------------MTU对我们的UDP编程很重要,那如何查看路由的MTU值呢?对于windows OS: ping -f -l 如:ping -f -l 1472 192.168.0.1如果提示:Packets needs to be fragmented but DF set. 则表明MTU小于1500,不断改小data_length值,可以最终测算出gateway的MTU值;对于linux OS: ping -c -M do -s 如: ping -c 1 -M do -s 1472 192.168.0.1 如果提示 Frag needed and DF set……则表明MTU小于1500,可以再测以推算gateway的MTU。
MTU & MSS 详解记录 先学习理解一下帧的封装格式:
需要注意的是,区别两种帧封装格式:802标准帧和以太网帧 1,在802标准定义的帧格式中,长度字段是指它后续数据的字节长度,但不包括C R C检验码。RFC 1042(IEEE 802) 2,RFC 894(以太网)
所以,以太网帧报头为目的地址6+源地址6+类型2+CRC 4=18bytes 而802帧没有CRC,所以为14bytes。Sniffer采用的是802帧为14bytes
转载文章: MTU: Maxitum Transmission Unit 最大传输单元
MSS: Maxitum Segment Size 最大分段大小 由于以太网EthernetII最大的数据帧是1518Bytes这样,刨去以太网帧的帧头(DMAC目的地址MAC48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和帧尾CRC校验部分4Bytes(这个部门有时候大家也把它叫做FCS),那么剩
下承载上层协议的地方也就是Data域最大就只能有1500Bytes. 这个值我们就把它称之为MTU。
以太网的MTU是1500,再减去PPP的包头包尾的开销(8Bytes),就变成1492。 MSS就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能 TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的 时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的 包头20Bytes)所以往往MSS为1460。通讯双方会根据双方提供的MSS值得最小 值确定为这次连接的最大MSS值。
先说说这MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,让我们先仔细回忆一下EthernetII帧的结构DMAC+SMAC+Type+Data+CRC。由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64bytes,最大不能超过1518bytes,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。(注:小于64Bytes的数据帧一般是由于以太网冲突产生的“碎片”或者线路干扰或者坏的以太网接口产生的,对于大于1518Bytes的数据帧我们一般把它叫做Giant帧,这种一般是由于线路干扰或者坏的以太网口产生)
IPv4报头|8 | 8 |8 | 8 |*版本(version)——标识了数据包的IP版本号。
这个4位字段的值设置为二进制的0100表示IP版本4(IPv4),设置为0110表示IP版本6(IPv6)。
*报头长度(header length)——字段长度为4位,正如字段名所示,它表示32位字长的IP报头长度。
设计报头长度字段是因为数据包的可选项字段的大小会发生变化。
IP报头最小长度为20个八位组,最大可以扩展到60个八位组——通过这个字段也可以描述32位字的最大长度。
*服务类型(TOS,type of service)——字段长度为8位,它用来指定特殊的数据包处理方式。
服务类型字段实际上被划分为两个子字段:优先级和ToS。
优先级用来设置数据包的优先级,这就像邮寄包裹一样,可以是平信、隔日送到或两日内送到。
ToS允许按照吞吐量、时延、可靠性和费用方式选择传输服务。
虽然ToS字段通常不用(所有位均被设置为0),但是开放式最短路径优先(OSPF)协议的早期规范中还是称为ToS路由选择。
优先权位偶尔在服务质量(QoS)应用中使用。
更详细的信息可以参见RFC1340和RFC1349。
*总长度(total length)——数据包总长度字段的长度为16位,以八位组为单位计,其中包括IP报头。
接收者用IP 数据包总长度减去IP报头长度,就可以确定数据包数据有效负载的大小。
16位长的二进制数用十进制表示最大可以为65535,所以IP数据包的最大长度是65535。
*标识符(identifier)——字段长度为16位,通常与标记字段和分片偏移字段一起用于数据包的分段。
如果数据包原始长度超过数据包所要经过的数据链路的最大传输单元(MTU),那么必须将数据包分段为更小的数据包。
例如,一个大小为5000字节的数据包在穿过网络时,如果遇到一条MTU为1500字节的数据链路,即数据帧最多容纳大小为1500字节的数据包。
路由器需要在数据成帧之前将数据包分段成多个数据包,其中每个数据包长度不得超过1500字节;然后路由器在每片数据包的标识字段上打上相同的标记,以便接收设备可以识别出属于一个数据包的分段。
MTU、IPMTU、TCPMSS设置上的区别及联系1.MTU是⼀个⼆层的概念,即最⼤传输单元(Maximum Transmission Unit,MTU);以太⽹最⼤的mtu就是1500(它是不包含⼆层头部的,加上头部应该为1518 bytes,2bit的以太⽹类型+6bit的DMAC+6bit的SMAC+4bit的FCS),每个以太⽹帧都有最⼩的⼤⼩64bytes,最⼤不能超过1518bytes注:1)⼩于64Bytes的数据帧⼀般是由于以太⽹冲突产⽣的 “碎⽚”或者线路⼲扰或者坏的以太⽹接⼝产⽣的,对于⼤于1518Bytes的数据帧我们⼀般把它叫做Giant帧,这种⼀般是由于线路⼲扰或者坏的以太⽹⼝产⽣2)以太⽹EthernetII最⼤的数据帧是1518Bytes,是指包含以太⽹帧的帧头(DMAC⽬的MAC地址 48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和帧尾CRC校验部分4Bytes (这个部份有时候⼤家也把它叫做FCS)2.IP MTU是⼀个三层概念,它包含了三层头部及所有载荷,根据下层为上层服务的,上层基于下层才能做进⼀步的扩展的原则,尽管IP MTU的变化范围很⼤(68-65535),但也不得不照顾以太⽹MTU的限制,说⽩了就是ip对以太⽹的妥协。
⽹络层IP协议会检查每个从上层协议下来的数据包的⼤⼩,并根据本机MTU的⼤⼩决定是否作“分⽚”处理3.MSS是TCP⾥⾯的⼀个概念,它是TCP数据包每次能够传输的最⼤数据分段,不包含包头部分,它与IP MTU满⾜如下关系:IP MTU=MSS+20bytes(IP包头)+20bytes(TCP包头)当然,如果传输的时候还承载有其他协议,还要加些包头在前⾯。
注:为了达到最佳的传输效能,TCP协议在建⽴连接的时候通常要协商双⽅的MSS值,这个值TCP协议在实现的时候往往⽤MTU值代替(需要减去IP数据包报头的⼤⼩20Bytes和TCP数据段的包头20Bytes),所以往往MSS为1460。
在计算机网络中,数据在传输时需要被分解成更小的数据包,以便在网络上进行传输。
这个过程称为数据分包。
IP协议是网络层的主要协议,负责在网络上发送和接收数据包。
IP协议数据分包的过程如下:1.数据报生成当应用程序需要发送数据时,它会将数据交给传输控制协议(TCP)或用户数据报协议(UDP)。
TCP和UDP都是传输层协议,负责将应用程序数据封装成数据报。
数据报包含源IP地址、目的IP地址、TCP或UDP端口号、以及应用程序数据。
2.数据报分段数据报太大时,无法直接在网络上发送。
因此,需要将数据报分成更小的数据段。
数据段的大小由链路层协议决定。
链路层协议是网络层和物理层之间的协议,负责在网络上发送和接收数据帧。
数据帧包含源MAC地址、目的MAC地址、数据段和帧校验序列。
3.数据段封装数据段被封装成数据帧。
数据帧包含源MAC地址、目的MAC地址、数据段和帧校验序列。
帧校验序列用于检测数据帧在传输过程中是否出现错误。
4.数据帧发送数据帧被发送到网络上。
数据帧在网络上通过路由器和交换机进行转发,直到到达目的主机。
5.数据帧接收目的主机收到数据帧后,会检查帧校验序列。
如果帧校验序列正确,则将数据段从数据帧中提取出来。
6.数据段重组数据段被重组成长度相等的数据报。
7.数据报传递数据报被传递给传输层协议。
传输层协议将数据报中的应用程序数据提取出来,并传递给应用程序。
IP协议数据分包的过程是一个复杂的过程,涉及到多个协议和技术。
然而,这个过程对于网络数据的传输是必不可少的。
通过将数据报分成更小的数据段,网络可以更有效地利用带宽,并降低数据丢失的风险。
数据报文的封装过程1.数据分段:如果数据报文的大小超过了网络传输的最大限制,则需要将数据报文分成若干个较小的片段进行传输。
这个过程称为数据分段。
数据分段可以根据传输层协议(如TCP或UDP)中的MTU(最大传输单元)值来划分。
2.添加协议首部:在每个数据报文片段的前面,都需要添加协议首部。
协议首部包含了一些元数据信息,如源IP地址、目标IP地址、协议类型、数据报文片段在原始数据报文中的位置等。
3.封装成数据包:每个数据报文片段加上协议首部之后,就形成了一个完整的数据包。
数据包是网络传输的最小单位,包括协议首部和数据内容两个部分。
4.封装成帧:在数据包的基础上,还需要将数据包封装成帧。
帧是数据链路层传输的最小单位,包括了帧首部、数据包和帧尾部。
帧首部包含了一些控制信息,如起始标识符、帧类型、校验等。
5.添加物理层首部和尾部:为了将帧发送到物理介质上进行传输,需要在帧的前后分别添加物理层首部和尾部。
物理层首部包含了物理层的控制信息,如目标MAC地址、源MAC地址等。
6. 生成bit流:在完成以上所有封装过程之后,数据报文就被转化为了一系列的比特流,即0和1的串。
这个比特流可以通过物理层进行传输。
需要注意的是,数据报文的封装过程是分层的,每一层都有不同的协议和格式,通过层与层之间的协议提供服务。
每一层的封装都是在上一层的基础上进行的,并且在传输过程中,封装过程是逆向的,即接收端将封装的头部逐步去除并解析数据。
总结起来,数据报文的封装过程可以分为数据分段、添加协议首部、封装成数据包、封装成帧、添加物理层首部和尾部,最后生成比特流。
这个过程是网络传输中数据报文经过各个协议层的处理和转换,便于在网络中的传输和接收。
使用Wireshark捕获数据帧和IP数据包开始运行Wireshark经开始捕获数据在Windows的命令行中执行ping 使用浏览器访问/使用FTP访问ftp://218.194.106.91,并登陆数据帧和数据包分析分析ARP封装在以太网数据帧中只有ARP协议了。
其他的协议数据包都被过滤掉了。
选中第三个数据帧.展开第一行然后从整体上看看你的Wireshark的窗口,主要被分成三部分。
,上面部分是所有数据帧的列表;中间部分是数据帧的描述信息;下面部分是帧里面的数据。
帧的编号:705(捕获时的编号)帧的大小:60字节。
没有把四个字节的CRC计算在里面,加上它就刚好。
帧被捕获的日期和时间:NOV 15,2008 15:15:23.139028000帧距离前一个帧的捕获时间差:0.100095000 seconds帧距离第一个帧的捕获时间差:0.501730000 seconds帧装载的协议:ARP展开第二行在上面一栏每选到一部分,在下面一栏就会显示对应的数据部分。
目的地址(Destination):ff:ff:ff:ff:ff:ff (MAC地址,是一个广播地址,就是局域网中的所有计算机都会接收这个数据帧)源地址(Source):00:00:00_11:11:11(00:00:00:11:11:11)帧中封装的协议类型:0x0806,这个就是ARP协议的类型编号。
Trailer:是协议中填充的数据,为了保证帧最少有64字节。
展开第三行同样,在上面一栏每选到一部分,在下面一栏就会显示对应的数据部分。
硬件类型(Hardware type):Ethernet (0x0001)接口类型(protocol):IP(0X0800)硬件型号:6接口型号:4操作码(opcode):request (0x0001)发送方MAC地址(sender MACaddress):00:00:00_11:11:11(00:00:00:11:11:11)发送方IP地址(sender IP address):192.168.1.1(192.168.1.1)接收方MAC地址(sender MAC address):00:00:00_00:00:00(00:00:00: 00:00:00)接收方IP地址(sender IPaddress):192.168.0.192(192.168.0.192)分析FTP协议选中第四数据帧,展开第一行帧的编号:2683(捕获时的编号)帧的大小:79字节。
运用
简单的说,你上网打开网页,这个简单的动作,就是你先发送数据包给网站,它
接收到了之后,根据你发送的数据包的IP地址,返回给你网页的数据包,也就是说,
网页的浏览,实际上就是数据包的交换。
1、数据链路层对数据帧的长度都有一个限制,也就是链路层所能承受的最大数
据长度,这个值
称为最大传输单元,即MTU。以以太网为例,这个值通常是1500字节。
2、对于IP数据包来讲,也有一个长度,在IP包头中,以16位来描述IP包的长
度,也就是说,
一个IP包,最长可能是65535字节。
3、结合以上两个概念,第一个重要的结论就出来了,如果IP包的大小,超过了
MTU值,那么就需要
分片,也就是把一个IP包分为多个,这个概念非常容易理解,一个载重5T的卡
车,要拉10T的货,它
当然就得分几次来拉了。
编辑本段
辨析
4、IP分片是很多资料常讲的内容,但是我倒是觉得分不分片其实不重要,重要
的是另一个东西。一个
数据包穿过一个大的网络,它其间会穿过多个网络,每个网络的MTU值是不同
的。我们可以设想,如果
接受/发送端都是以太网,它们的MTU都是1500,我们假设发送的时候,数据包
会以1500来封装,然而,
不幸的是,传输中有一段X.25网,它的MTU是576,这会发生什么呢?我想,
这个才是我们所关心的。
当然,结论是显而易见的,这个数据包会被再次分片,咱开始用火车拉,到了半
路,不通火车,只通汽车,
那一车货会被分为很多车……仅此而已,更重要的是,这种情况下,如果IP包
被设置了“不允许分片标志”,那
会发生些什么呢?对,数据包将被丢弃,然后收到一份ICMP不可达差错,告诉
你,需要分片!
这个网络中最小的MTU值,被称为路径MTU,我们应该有一种有效的手段,来
发现这个值,最笨的方法或许是先
用traceroute查看所有节点,然后一个个ping……
编辑本段
举例
5、到了传输层,也会有一个最大值的限制,当然,对于只管发,其它都不管的
UDP来说,不在我们讨论之列。这里
说的是TCP协议。说到大小,或许会让人想到TCP著名的滑动窗口的窗口大小,
它跟收发两端的缓存有关,这里讨论
的是传输的最大数据包大小,所以,它也不在讨论之列。
TCP的选项字段中,有一个最大报文段长度(MSS),表示了TCP传往另一端的
最大数据的长度,当一个连接立时,连接
的双方都要通告各自的MSS,也就是说,它说是与TCP的SYN标志在一起的。
当然,对于传输来讲,总是希望MSS越大越好,
现在超载这么严重,谁家不希望多拉点货……但是,MSS总是有个限制的,也就
是MTU-IP头长度-TCP头长度,对于以太网来讲
它通常是1500-20-20=1460,虽然总是希望它能很大(如1460),但是大多数BSD
实现,它都是512的倍数,如1024……
6、回到分片上来,例如,在Win2000下执行如下命令:
"ping 192.168.0.1 -l 1473
按刚才的说法,1473+20(ip头)+8(icmp头)=1501,则好大于1500,它会被分片,
但是,我们关心的是:
编辑本段
其他信息
这个数据包会被怎么样分法?
可以猜想,第一个包是
以太头+IP头+ICMP头+1427的数据;
那第二个分片包呢?
它可以是:
以太头+IP头+ICMP头+1个字节的数据
或者是:
以太头+IP头+1个字节的数据"(引号内的内容可否在进步不详细阐述,对于1473
的数据如何被分为1427和1不是很清楚2010.01.15 13:50)
也就是省去ICMP头的封装,当然,IP头是不可以省的,否则怎么传输了……
事实上,TCP/IP协议采用的是后一种封装方式,这样,一次可以节约8个字节的
空间。IP包头中,用了三个标志来描述一个分片包:
1、分片标志:如果一个包被分片了,被置于1,最后一个分片除外;——这样,
对于接收端来讲,可以根据这个标志位做为重组的重
要依据之一;