各种数据报和数据包格式
- 格式:doc
- 大小:384.00 KB
- 文档页数:13
IP数据报格式TCP/IP协议定义了一个在因特网上传输的包,称为IP 数据报(IP Datagram)。
这是一个与硬件无关的虚拟包, 由首部和数据两部分组成,其格式如图所示。
首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。
在首部的固定部分的后面是一些可选字段,其长度是可变的。
首部中的源地址和目的地址都是IP协议地址1、IP数据报首部的固定部分中的各字段(1)版本占4位,指IP协议的版本。
通信双方使用的IP 协议版本必须一致。
目前广泛使用的IP协议版本号为4(即IPv4)。
(2)首部长度占4位,可表示的最大十进制数值是15。
请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。
当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。
因此数据部分永远在4字节的整数倍开始,这样在实现IP 协议时较为方便。
首部长度限制为60 字节的缺点是有时可能不够用。
但这样做是希望用户尽量减少开销。
最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。
(#我们一般看到的版本和首部长度两个字段是十六进制45,就是版本号version=4,headlength=5,也就是首部长度是60个字节)(3)区分服务占8位,用来获得更好的服务。
这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。
1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。
只有在使用区分服务时,这个字段才起作用。
(4)总长度总长度指首部和数据之和的长度,单位为字节。
总长度字段为16位,因此数据报的最大长度为216-1=65535字节。
#可以看这个以太网frame总长为336字节,而IP数据包Total length=322,336-322=14正好是Ethernet包头的长度,所以就可以看出这IP数据包总长度一值就是除去Ethernet头的剩余长度,也就是IP包头加数据的长度。
附件:报文格式1.1Ethernet数据包格式(RFC894)1、DstMac的最高字节的最低BIT位如果为1,表明此包是以太网组播/广播包,送给CPU处理。
2、将DstMac和本端口的MAC进行比较,如果不一致就丢弃。
3、获取以太网类型字段Type/Length。
0x0800→IP 继续进行3层的IP包处理。
0x0806→ARP 送给CPU处理。
0x8035→RARP 送给CPU处理。
0x8863→PPPoE discovery stage 送给CPU处理。
0x8864→PPPoE session stage 继续进行PPP的2层包处理。
0x8100→VLAN其它值当作未识别包类型而丢弃。
1.2PPP数据包格式1、获取PPP包类型字段。
0x0021→IP 继续进行3层的IP包处理。
0x8021→IPCP 送给CPU处理。
0xC021→LCP 送给CPU处理。
0xc023→PAP 送给CPU处理。
0xc025→LQR 送给CPU处理。
0xc223→CHAP 送给CPU处理。
0x8023→OSICP 送给CPU处理。
0x0023→OSI 送给CPU处理。
其它值当作未识别包类型而丢弃。
1.3 ARP 报文格式(RFC826)|←----以太网首部---->|←---------28字节ARP 请求/应答------1.4 IP 报文格式(RFC791)(20bytes)TOS1.5 PING 报文格式(需IP 封装)(8bytes)1.6 TCP 报文格式(需IP 封装)(20bytes)紧急指针有效ACK 确认序号有效PSH 接收方应该尽快将这个报文交给应用层RST 重建连接SYN 同步序号用来发起一个连接FIN 发端完成发送认务1.7UDP报文格式(需IP封装)(8bytes)1.8MPLS报文格式MPLS报文类型:以太网中0x8847(单播) 0x8848(组播) PPP类型上0x8281(MPLSCP)1.9MTU1.10TCP与UDP应用2以太网帧,TCP/IP数据报文详解其实也不是很详细,详细起来要很厚一本书,但是都是针对主要的写的以太网2的帧格式前导码:8个字节,这个主要是给信号同步的,给信号的开始传输的第一个bit定位的目的地址:6个字节,目的的MAC地址源地址:6个字节,是自己的MAC地址类型长度:2字节,辨别上层协议的数据:46-1500字节,就是上层的所有数据帧校验FCS:4字节,数据发过去的时候,会随机给个值,对端需要验证这个值,如果值不对,就说明这段数据干扰,或某种原因被修改。
ARP数据报格式在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。
因此在通讯前必须获得目的主机的硬件地址。
ARP协议就起到这个作用。
源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播),目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中。
每台主机都维护一个ARP缓存表,可以用arp -a命令查看。
缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址。
想一想,为什么表项要有过期时间而不是一直有效?ARP数据报的格式如下所示图 36.7. ARP数据报格式注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
硬件类型指链路层网络类型,1为以太网,协议类型指要转换的地址类型,0x0800为IP地址,后面两个地址长度对于以太网地址和IP地址分别为6和4(字节),op字段为1表示ARP 请求,op字段为2表示ARP应答。
下面举一个具体的例子。
请求帧如下(为了清晰在每行的前面加了字节计数,每行16个字节):以太网首部(14字节)0000: ff ff ff ff ff ff 00 05 5d 61 58 a8 08 06ARP帧(28字节)0000: 00 010010: 08 00 06 04 00 01 00 05 5d 61 58 a8 c0 a8 00 370020: 00 00 00 00 00 00 c0 a8 00 02填充位(18字节)0020: 00 77 31 d2 50 100030: fd 78 41 d3 00 00 00 00 00 00 00 00以太网首部:目的主机采用广播地址,源主机的MAC地址是00:05:5d:61:58:a8,上层协议类型0x0806表示ARP。
数据包报文格式(IP包TCP报头UDP报头)一、IP包格式IP数据包是一种可变长分组,它由首部和数据负载两部分组成。
首部长度一般为20-60字节(Byte),其中后40字节是可选的,长度不固定,前20字节格式为固定。
数据负载部分的长度一般可变,整个IP数据包的最大长度为65535B。
1、版本号(Version)长度为4位(bit),IP v4的值为0100,IP v6的值为0110。
2、首部长度指的是IP包头长度,用4位(bit)表示,十进制值就是[0,15],一个IP包前20个字节是必有的,后40个字节根据情况可能有可能没有。
如果IP包头是20个字节,则该位应是20/4=53、服务类型(Type of Service TOS)长度为8位(bit),其组成:前3位为优先级(Precedence),后4位标志位,最后1位保留未用。
优先级主要用于QoS,表示从0(普通级别)到7(网络控制分组)的优先级。
标志位可分别表示D(Delay更低的时延)、T(Throughput 更高的吞吐量)、R(Reliability更高的可靠性)、C(Cost 更低费用的路由)。
TOS只表示用户的请求,不具有强制性,实际应用中很少用,路由器通常忽略TOS字段。
4、总长度(Total Length)指IP包总长度,用16位(bit)表示,即IP包最大长度可以达216=65535字节。
在以太网中允许的最大包长为1500B,当超过网络允许的最大长度时需将过长的数据包分片。
5、标识符(Identifier)长度为16位,用于数据包在分段重组时标识其序列号。
将数据分段后,打包成IP 包,IP包因走的路由上不同,会产生不同的到达目地的时间,到达目地的后再根据标识符进行重新组装还原。
该字段要与标志、段偏移一起使用的才能达到分段组装的目标。
6、标志(Flags)长度为3位,三位从左到右分别是MF、DF、未用。
MF=1表示后面还有分段的数据包,MF=0表示没有更多分片(即最后一个分片)。
IPSEC数据包格式隧道模式使用 IPSec 隧道模式时,IPSec 对 IP 报头和有效负载进行加密,而传输模式只对 IP 有效负载进行加密。
通过将其当作 AH 或 ESP 有效负载,隧道模式提供对整个 IP 数据包的保护。
使用隧道模式时,会通过 AH 或 ESP 报头与其他 IP 报头来封装整个 IP 数据包。
外部 IP 报头的 IP 地址是隧道终结点,封装的 IP 报头的 IP 地址是最终源地址与目标地址。
IPSec 隧道模式对于保护不同网络之间的通信(当通信必须经过中间的不受信任的网络时)十分有用。
隧道模式主要用来与不支持 L2TP/IPSec 或 PPTP 连接的网关或终端系统进行互操作。
可以在下列配置中使用隧道模式:•网关到网关•服务器到网关•服务器到服务器AH 隧道模式如下图所示,AH 隧道模式使用 AH 与 IP 报头来封装 IP 数据包并对整个数据包进行签名以获得完整性并进行身份验证。
ESP 隧道模式如下图所示,ESP 隧道模式采用 ESP 与 IP 报头以及 ESP 身份验证尾端来封装 IP 数据包。
数据包的签名部分表示对数据包进行签名以获得完整性并进行身份验证的位置。
数据包的加密部分表示受到机密性保护的信息。
由于为数据包添加了隧道新报头,因此会对 ESP 报头之后的所有内容进行签名(ESP 身份验证尾端除外),因为这些内容此时已封装在隧道数据包中。
原始报头置于 ESP 报头之后。
在加密之前,会在整个数据包上附加 ESP 尾端。
ESP 报头之后的所有内容都会被加密,ESP 身份验证尾端除外。
这包括原始报头,该报头此时被视为数据包的数据部分的一部分。
然后,会将整个 ESP 有效负载封装在未加密的新隧道报头内。
新隧道报头内的信息只用来将数据包从源地址发送到隧道终结点。
如果通过公用网络发送数据包,则数据包会路由到接收方 Intranet 的网关的 IP 地址。
网关对数据包进行解密、丢弃 ESP 报头并使用原始 IP 报头将数据包路由到 Intranet 计算机。
usb ncm报文格式解析-回复什么是USB NCM协议?USB(Universal Serial Bus)是一种用于连接计算机和外部设备的通信协议。
NCM(Network Control Model)则是USB协议的一种,用于在USB连接的计算机和网络设备之间传输数据。
NCM协议实现了网络适配器的功能,通过USB接口连接计算机和网络设备,使得计算机可以直接连接到互联网或者局域网。
NCM协议的主要特点包括支持IPv4和IPv6协议、支持USB 2.0和USB 3.0接口、支持高速数据传输以及有良好的扩展性。
NCM协议的报文格式包括了单个数据包和多个数据包两种类型。
单个数据包的报文格式如下:- 传输形式(Transfer Type):指明数据包的类型,包括发送(Send)、接收(Receive)和其他(Other)。
- 数据标识符(Data Identifier):用于唯一标识一个数据包。
- 源网络地址(Source Network Address):指定数据包的发送者IP地址。
- 目标网络地址(Destination Network Address):指定数据包的接收者IP地址。
- 数据包类型(Packet Type):指明数据包的类型,可以是数据(Data)、控制(Control)或保留(Reserved)。
- 数据长度(Data Length):指定数据部分的长度,以字节表示。
- 数据包(Packet):实际传输的数据部分。
多个数据包的报文格式如下:- 数据标识符(Data Identifier):用于唯一标识一个数据包。
- 传输形式(Transfer Type):指明数据包的类型,包括发送(Send)、接收(Receive)和其他(Other)。
- 数据长度(Data Length):指定数据部分的长度,以字节表示。
- 数据包(Packet):实际传输的数据部分,可以包含一个或多个单个数据包。
以太网数据格式与各种报文格式一、数据封装当我们应用程序用TCP传输数据的时候,数据被送入协议栈中,然后逐个通过每一层,知道最后到物理层数据转换成比特流,送入网络。
而再这个过程中,每一层都会对要发送的数据加一些首部信息。
整个过程如下图。
如图可以看出,每一层数据是由上一层数据+本层首部信息组成的,其中每一层的数据,称为本层的协议数据单元,即PDU.应用层数据在传输层添加TCP报头后得到的PDU被称为Segment(数据段),图示为TCP段传输层的数据(TCP段)传给网络层,网络层添加IP报头得到的PDU被称为Packet(数据包); 图示为IP数据包网络层数据报(IP数据包)被传递到数据链路层,封装数据链路层报头得到的PDU被称为Frame(数据帧),图示为以太网帧。
最后,帧被转换为比特,通过网络介质传输。
这种协议栈逐层向下传递数据,并添加报头和报尾的过程称为封装。
二、数据格式需要注意的是,这里所说的以太网帧,与我们常说的以太网是不一样的。
下面我们就来介绍每一层数据的首部信息内容。
首先我们知道世界上有个协会叫作IEEE,即电子工程师协会,里面有个分会,叫作IEEE802委员会,是专门来制定局域网各种标准的。
而802下面还有个分部,叫作802.3.就是我们经常提到的IEEE802.3,这个部门制定的规范叫以太网规范,这个以太网规范中就定义了上面提到的“以太网首部”,这个以太网规范,实际只定义了数据链路层中的MAC层和物理层规范。
(注意数据链路层包括MAC子层和LLC子以太网帧格式:以太网常用帧格式有两种,一种是Ethernet II,另一种是IEEE 802.3 格式。
这两种格式区别是:Ethernet II中包含一个Type字段,。
其中Type字段描述了,以太网首部后面所跟数据包的类型,例如Type为0x8000时为IP协议包,Type为8060时,后面为ARP协议包。
以太网中多数数据帧使用的是Ethernet II帧格式。
TCP/UDP报文格式TCP 协议为终端设备提供了面向连接的、可靠的网络服务,UDP 协议为终端设备提供了无连接的、不可靠的数据报服务。
从上图我们可以看出,TCP 协议为了保证数据传输的可靠性,相对于UDP 报文,TCP 报文头部有更多的字段选项。
首先让我们来看一下TCP 的报文头部主要字段:每个TCP 报文头部都包含源端口号(source port)和目的端口号(destination port),用于标识和区分源端设备和目的端设备的应用进程。
在TCP/IP 协议栈中,源端口号和目的端口号分别与源IP 地址和目的IP 地址组成套接字(socket),唯一的确定一条TCP 连接。
序列号(Sequence number)字段用来标识TCP 源端设备向目的端设备发送的字节流,它表示在这个报文段中的第一个数据字节。
如果将字节流看作在两个应用程序间的单向流动,则TCP 用序列号对每个字节进行计数。
序列号是一个32bits 的数。
既然每个传输的字节都被计数,确认序号(Acknowledgement number,32bits)包含发送确认的一端所期望接收到的下一个序号。
因此,确认序号应该是上次已成功收到的数据字节序列号加1。
TCP 的流量控制由连接的每一端通过声明的窗口大小(windows size)来提供。
窗口大小用数据包来表示,例如Windows size=3, 表示一次可以发送三个数据包。
窗口大小起始于确认字段指明的值,是一个16bits 字段。
窗口大小可以调节。
校验和(checksum)字段用于校验TCP 报头部分和数据部分的正确性。
最常见的可选字段是MSS(Maximum Segment Size,最大报文大小)。
MSS指明本端所能够接收的最大长度的报文段。
当一个TCP 连接建立时,连接的双方都要通告各自的MSS 协商可以传输的最大报文长度。
我们常见的MSS有1024(以太网可达1460 字节)字节。
详谈IPv6与IPv4数据报格式1.IPv6数据包每一个分组由必须要有的基本首部和跟随在后面的有效载荷组成。
有效载荷有两部分组成:可选的扩展首部和从上层来的数据(不超65535字节)。
具体如图所示:详细说明:Version:和ipv4包头中的一样,4个bit区域表示ip的版本(0110)优先级:即Traffic Class是一个8位bit的区域,同ipv4中的tos区域一样。
但是在这些年中随着TOS区域的进化,这个区域也可以用来被 DifferentiatedClass of Service (DiffServ)使用。
但是尽管这里这样的标识仍然符合老的Tos的格式,只不过Traffic Class这个名字更符合当前的应用。
流标记:Flow Label流量标签是在ipv6中独有的区域。
这个20个bit的区域设计的目的在于可以给一些特殊的数据做标记。
也就是说尽管数据包并非是从原来的源发到目的,但是仍然包含原有的源和目的的应用。
区分数据流有很多好处,可以确保不同类别服务的处理方式得以区分,在数据流经多个路径的负载均衡时,在同一个数据流的数据包将使用经由同一个路径转发,从而避免了数据包可能继续查找路径的现象。
典型的flow(更加精确一点的说法是微流)就是在源地址和目的地址上加一个团体的源地址和目的地址。
如果使用定义源和目的端口号,路由器必须识别ip包头还要进一步识别tcp或者udp(或者其他传输层协议)的头,这样就增加了转发进程的复杂性,可能会影响路由器的处理。
因为出现扩展包头(下一段介绍),所以在ipv6数据包中查找传输层协议的头就成为一个特殊的问题。
支持ipv6的路由器必须从按照数据包格式的顺序从头到位查找,可能会经过很多扩展包头再会找到传输层地址(这样的话影响查找时间)。
如果在数据包发起是适当的加入流量标签,路由器更比查找数据包头更容易辨识数据流。
然而,在本书书写时,如何使用流量标签区域的完全详细文档仍在讨论中,所以当前路由器读取数据时忽略这个区域。
ICMP报文数据包分析ICMP报文数据包分析ICMP(Internet Control Message Protocol)是互联网控制消息协议,它是一种辅助协议,用于在IP网络中传递控制信息。
ICMP报文数据包可以分为两类:差错报文和询问报文。
差错报文用于报告错误的IP数据报,而询问报文则用于测试网络连接是否正常。
一、ICMP差错报文1.目的不可达报文当路由器或主机无法处理IP数据报时,会发送目的不可达报文。
这种报文通常发生在以下情况:目的地端口未开放、网络地址无效、TTL(生存时间)值已过期等。
目的不可达报文可以帮助网络管理员诊断和解决网络问题。
2.超时报文当IP数据报在传输过程中超过TTL值时,会被路由器丢弃,并由发送端主机接收到一个超时报文。
这种报文可以告诉发送端主机在哪个路由器处发生了超时,有助于对网络性能进行评估和优化。
3.参数错误报文当IP数据报的头部参数有误时,路由器会发送参数错误报文。
例如,如果IP数据报的校验和错误,或者IP选项不符合要求,就会触发参数错误报文。
这种报文可以帮助发送端主机修改IP数据报头部,使其能够正确传输。
二、ICMP询问报文1.Echo请求报文Echo请求报文也被称为ping请求报文,它用于测试网络连接是否正常。
发送端主机发送Echo请求报文,接收端主机收到后,会返回一个Echo应答报文,确认收到请求。
这种询问-应答模式可以用于检查网络延迟、丢包率和链路质量等。
2.路由跟踪报文路由跟踪报文用于查询IP数据报从源主机到目的主机的路径。
发送端主机发送路由跟踪报文,要求接收端主机返回一条路径信息,包括每个路由器节点和它们的IP地址。
这种报文可以帮助网络管理员了解网络拓扑结构和路由选择策略。
三、ICMP数据包格式ICMP数据包的格式相对简单,包括ICMP类型、代码、校验和、ICMP数据等字段。
其中,ICMP类型表示报文的类型(如目的不可达、超时、参数错误等),代码字段表示更具体的报文类型(如目的端口未开放、网络地址无效等),校验和用于检测数据包在传输过程中的完整性,ICMP数据则包含与特定类型相关的信息(如目的IP地址、端口号等)。
IP 数据包格式版本字段:4位。
当前的IP 协议版本是4,通常称为IPv4。
下一个版本是6,称为IPv6首部长度:4位,IP 数据报首部的长度,每个单位为4个字节。
IP 数据报的长度是4个字节的整数倍。
服务类型:8位,服务类型。
前3位为优先级,用于表示数据报的重要程度,优先级取值从0(普通优先级)到7(网络控制高优先级)。
D 、T 和R 位表示本数据报希望的传输类型。
D 表示低时延(Delay )需求T 表示高吞吐量(Throughput )要求R 代表高可靠性(Reliability )要求。
总长度:总长度指首部和数据之和的长度,单位为字节。
总长度字段为16位,因此数据报的最大长度为216-1=65535字节。
标识(identification):占16位。
IP 软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。
但这个“标识”并不是序号,因为IP 是无连接服务,数据报不存在按序接收的问题。
当数据报由于长度超过网络的MTU 而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。
相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
标志(flag):占3位,但目前只有2位有意义。
标志字段中的最低位记为MF(More Fragment)。
MF=1即表示后面“还有分片”的数据报。
MF=0表示这已是若干数据报片中的最后一个。
标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。
只有当DF=0时才允许分片。
片偏移:占13位。
片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。
也就是说,相对用户数据字段的起点,该片从何处开始。
片偏移以8个字节为偏移单位。
这就是说,每个分片的长度一定是8字节(64位)的整数倍。
总长度 服务类型版本 首部长度 标识 源站IP 地址寿命 协议首部校验和 片偏移 标志目的站IP 地址IP 选项(可选)填充 数据……生存时间:占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。
UDP数据包协议格式详解UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议,它提供了一种简单、不可靠的数据传输机制。
UDP协议格式如下:1. 源端口号(Source Port):16位字段,指示发送方的应用程序使用的端口号。
2. 目标端口号(Destination Port):16位字段,指示接收方的应用程序使用的端口号。
3. 长度(Length):16位字段,指示UDP数据报的总长度,包括头部和数据部分。
4. 校验和(Checksum):16位字段,用于检测UDP数据报是否存在错误。
5. 数据(Data):可变长度字段,包含应用程序要传输的数据。
UDP数据包的头部长度为8字节,因此,如果没有数据部分,则UDP 数据包的长度为8字节。
UDP没有序号、确认、重传以及流控制等机制,因此是一种无连接、不可靠的传输方式。
它的优点是传输效率高,适用于实时性要求较高且可以容忍少量数据丢失的应用场景。
UDP在互联网中被广泛应用,常见的应用包括DNS(域名系统,Domain Name System)、VoIP(语音传输)、实时视频传输等。
由于UDP 协议的无连接性,其传输效率高于TCP(Transmission Control Protocol,传输控制协议),但也容易受到网络的干扰和丢包现象。
UDP的优势在于能够快速地传输数据,适用于一些对数据传输延迟要求较高的应用,比如实时游戏、语音、视频等。
由于没有确认机制,UDP也被广泛用于广播和多播应用。
然而,由于UDP协议的不可靠性,对于一些需要可靠性和完整性的应用,需要使用额外的机制来实现,比如应用层自行设计的确认和重传机制。
总之,UDP数据包的协议格式简单,没有额外的控制信息,只是提供了一种快速传输数据的机制。
它在一些对实时性要求较高、可以容忍少量丢包的场景下使用较多,但对于可靠性和完整性要求较高的应用来说,需要使用其他机制来实现。
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字节;然后路由器在每片数据包的标识字段上打上相同的标记,以便接收设备可以识别出属于一个数据包的分段。
报⽂段、数据报、数据包和帧
OSI参考模型和TCP/IP参考模型
1.报⽂(message)
报⽂包含了应⽤层的完整的数据信息。
2.数据段(segment)
数据段是传输层的信息单元。
3.数据报(datagram)
数据报是⾯向⽆连接的数据传输。
采⽤数据报⽅式传输时,被传输的分组称为数据报。
如传输层TCP的分组叫做数据段,UDP的叫做数据报。
还有⼀种说法是数据报是数据包的分组,⼀个完整的数据包由⼀个或多个数据报组成。
(待确认)
4.数据包(packet)
数据包是⽹络层传输的数据单元。
也称为IP包,包中带有⾜够寻址信息(IP地址),可独⽴地从源主机传输到⽬的主机
还有⼀种说法是数据报是⽹络层的传输基本单位,数据包是IP协议中完整的数据单元,由⼀个或多个数据报组成。
(待确认)
5.帧(frame)
帧是数据链路层的传输单元。
它将上层传⼊的数据添加⼀个头部和尾部,组成了帧,帧根据MAC地址寻址。
6.bit流(bit)
bit是在物理层的介质上直接实现⽆结构bit流传送的。
IP 数据包格式版本字段:4位。
当前的IP 协议版本是4,通常称为IPv4。
下一个版本是6,称为IPv6首部长度:4位,IP 数据报首部的长度,每个单位为4个字节。
IP 数据报的长度是4个字节的整数倍。
服务类型:8位,服务类型。
前3位为优先级,用于表示数据报的重要程度,优先级取值从0(普通优先级)到7(网络控制高优先级)。
D 、T 和R 位表示本数据报希望的传输类型。
D 表示低时延(Delay )需求T 表示高吞吐量(Throughput )要求R 代表高可靠性(Reliability )要求。
总长度:总长度指首部和数据之和的长度,单位为字节。
总长度字段为16位,因此数据报的最大长度为216-1=65535字节。
标识(identification):占16位。
IP 软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。
但这个“标识”并不是序号,因为IP 是无连接服务,数据报不存在按序接收的问题。
当数据报由于长度超过网络的MTU 而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。
相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
标志(flag):占3位,但目前只有2位有意义。
标志字段中的最低位记为MF(More Fragment)。
MF=1即表示后面“还有分片”的数据报。
MF=0表示这已是若干数据报片中的最后一个。
标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。
只有当DF=0时才允许分片。
片偏移:占13位。
片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。
也就是说,相对用户数据字段的起点,该片从何处开始。
片偏移以8个字节为偏移单位。
这就是说,每个分片的长度一定是8字节(64位)的整数倍。
总长度 服务类型版本 首部长度 标识 源站IP 地址寿命 协议首部校验和 片偏移 标志目的站IP 地址IP 选项(可选)填充 数据……生存时间:占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。
由发出数据报的源点设置这个字段。
其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。
最初的设计是以秒作为TTL的单位。
每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。
若数据报在路由器消耗的时间小于1秒,就把TTL值减1。
当TTL值为0时,就丢弃这个数据报。
协议:占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP 层知道应将数据部分上交给哪个处理过程。
首部检验和:占16位。
这个字段只检验数据报的首部,但不包括数据部分。
这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。
不检验数据部分可减少计算的工作量。
源地址:占32位目的地址:占32位2、IP数据报首部的可变部分IP首部的可变部分就是一个可选字段。
选项字段用来支持排错、测量以及安全等措施,内容很丰富。
此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。
某些选项项目只需要1个字节,它只包括1个字节的选项代码。
但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。
增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。
这就增加了每一个路由器处理数据报的开销。
实际上这些选项很少被使用。
新的IP版本IPv6就将IP数据报的首部长度做成固定的。
目前,这些任选项定义如下:(1)安全和处理限制(用于军事领域)(2)记录路径(让每个路由器都记下它的IP地址)(3)时间戳(让每个路由器都记下它的IP地址和时间)(4)宽松的源站路由(为数据报指定一系列必须经过的IP地址)(5)严格的源站路由(与宽松的源站路由类似,但是要求只能经过指定的这些地址,不能经过其他的地址)这些选项很少被使用,并非所有主机和路由器都支持这些选项。
TCP数据包格式源端口和目的端口字段——各占2字节。
端口是传输层与应用层的服务接口。
传输层的复用和分用功能都要通过端口才能实现。
序号字段——占4字节。
TCP连接中传送的数据流中的每一个字节都编上一个序号。
序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
确认号字段——占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
数据偏移——占4bit,它指出TCP报文段的数据起始处距离 CP报文段的起始处有多远。
“数据偏移”的单位不是字节而是32bit字(4字节为计算单位)。
保留字段——占6bit,保留为今后使用,但目前应置为0。
紧急比特URG——当URG=1时,表明紧急指针字段有效。
它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
确认比特ACK——只有当ACK=1时确认号字段才有效。
当ACK=0时,确认号无效。
复位比特RST(Reset)——当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
同步比特SYN——同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。
终止比特FIN(FINal)——用来释放一个连接。
当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
窗口字段——占2字节。
窗口字段用来控制对方发送的数据量,单位为字节。
TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。
检验和——占2字节。
检验和字段检验的范围包括首部和数据这两部分。
在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。
紧急指针字段——占16bit。
紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。
选项字段——长度可变。
TCP首部可以有多达40字节的可选信息,用于把附加信息传递给终点,或用来对齐其它选项。
填充字段——这是为了使整个首部长度是4字节的整数倍。
UDP数据包格式UDP数据报格式有首部和数据两个部分。
首部很简单,共8字节。
包括:◆源端口(Source Port):2字节,源端口号。
◆目的端口(Destination Port ):2字节,目的端口号。
◆长度(Length):2字节,UDP用户数据报的总长度,以字节为单位。
◆检验和(Checksum):2字节,用于校验UDP数据报的数字段和包含UDP数据报首部的“伪首部”。
其校验方法同IP分组首部中的首部校验和。
伪首部,又称为伪包头(Pseudo Header):是指在TCP的分段或UDP的数据报格式中,在数据报首部前面增加源IP地址、目的IP地址、IP分组的协议字段、TCP或UDP数据报的总长度等共12字节,所构成的扩展首部结构。
此伪首部是一个临时的结构,它既不向上也不向下传递,仅仅只是为了保证可以校验套接字的正确性。
硬件类型(16位)协议类型(16位)硬件地址长度(8位)协议地址长度(8位)操作代码(16位)发送方硬件地址(以太网为6字节)发送方协议地址(以太网为4字节)目标方硬件地址(以太网为6字节)目标方协议地址(以太网为4字节)硬件类型:2字节,表示发送者硬件地址类型,值为1表示以太网地址。
协议类型:2字节,表示发送方要映射的协议地址类型,该字段的常用值如下表。
协议地址为IP地址时,它的值为0x0800。
它的值与包含IP数据报的以太网数据帧中的类型字段的值相同。
硬件地址长度和协议地址长度:各占1字节,分别指出硬件地址长度和协议地址长度。
对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4。
操作代码:ARP和RARP在设计时协议格式完全相同,只有操作代码可以区分。
1-----ARP请求报文2-----ARP应答报文3-----RARP请求报文4-----RARP应答报文发送方硬件地址和发送方协议地址:目的方硬件地址和目的方协议地址:各种ICMP报文的前32bits都是三个长度固定的字段:type类型字段(8位)、code代码字段(8位)、checksum校验和字段(16位)8bits类型和8bits代码字段:一起决定了ICMP报文的类型。
常见的有:类型8、代码0:回射请求。
类型0、代码0:回射应答。
类型11、代码0:超时。
16bits校验和字段:包括数据在内的整个ICMP数据包的校验和,其计算方法和IP头部校验和的计算方法是一样的。
对于ICMP回射请求和应答报文来说,接下来是16bits标识符字段:用于标识本ICMP进程。
最后是16bits序列号字段:用于判断回射应答数据报。
ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面一个ICMP报文包括IP头部(20字节)、ICMP头部(8字节)和ICMP报文RFC定义了13种ICMP报文格式,具体如下:类型代码类型描述0 响应应答(ECHO-REPLY)3 不可到达4 源抑制5 重定向8 响应请求(ECHO-REQUEST)11 超时12 参数失灵13 时间戳请求14 时间戳应答15 信息请求(*已作废)16 信息应答(*已作废)17 地址掩码请求18 地址掩码应答其中代码为15、16的信息报文已经作废。
IPSEC数据包格式隧道模式使用 IPSec 隧道模式时,IPSec 对 IP 报头和有效负载进行加密,而传输模式只对 IP 有效负载进行加密。
通过将其当作 AH 或 ESP 有效负载,隧道模式提供对整个 IP 数据包的保护。
使用隧道模式时,会通过 AH 或 ESP 报头与其他 IP 报头来封装整个 IP 数据包。
外部 IP 报头的 IP 地址是隧道终结点,封装的 IP 报头的 IP 地址是最终源地址与目标地址。
IPSec 隧道模式对于保护不同网络之间的通信(当通信必须经过中间的不受信任的网络时)十分有用。
隧道模式主要用来与不支持 L2TP/IPSec 或 PPTP 连接的网关或终端系统进行互操作。
可以在下列配置中使用隧道模式:•网关到网关•服务器到网关•服务器到服务器AH 隧道模式如下图所示,AH 隧道模式使用 AH 与 IP 报头来封装 IP 数据包并对整个数据包进行签名以获得完整性并进行身份验证。
ESP 隧道模式如下图所示,ESP 隧道模式采用 ESP 与 IP 报头以及 ESP 身份验证尾端来封装 IP 数据包。
数据包的签名部分表示对数据包进行签名以获得完整性并进行身份验证的位置。
数据包的加密部分表示受到机密性保护的信息。
由于为数据包添加了隧道新报头,因此会对 ESP 报头之后的所有内容进行签名(ESP 身份验证尾端除外),因为这些内容此时已封装在隧道数据包中。