您好,欢迎访问三七文档
IPv4报头|8|8|8|8|版本头部长度服务类型总长度标识符标记分片偏移生存时间协议头部校验和源地址目的地址可选项……填充项*版本(version)——标识了数据包的IP版本号。这个4位字段的值设置为二进制的0100表示IP版本4(IPv4),设置为0110表示IP版本6(IPv6)。*报头长度(headerlength)——字段长度为4位,正如字段名所示,它表示32位字长的IP报头长度。设计报头长度字段是因为数据包的可选项字段的大小会发生变化。IP报头最小长度为20个八位组,最大可以扩展到60个八位组——通过这个字段也可以描述32位字的最大长度。*服务类型(TOS,typeofservice)——字段长度为8位,它用来指定特殊的数据包处理方式。服务类型字段实际上被划分为两个子字段:优先级和ToS。优先级用来设置数据包的优先级,这就像邮寄包裹一样,可以是平信、隔日送到或两日内送到。ToS允许按照吞吐量、时延、可靠性和费用方式选择传输服务。虽然ToS字段通常不用(所有位均被设置为0),但是开放式最短路径优先(OSPF)协议的早期规范中还是称为ToS路由选择。优先权位偶尔在服务质量(QoS)应用中使用。更详细的信息可以参见RFC1340和RFC1349。*总长度(totallength)——数据包总长度字段的长度为16位,以八位组为单位计,其中包括IP报头。接收者用IP数据包总长度减去IP报头长度,就可以确定数据包数据有效负载的大小。16位长的二进制数用十进制表示最大可以为65535,所以IP数据包的最大长度是65535。*标识符(identifier)——字段长度为16位,通常与标记字段和分片偏移字段一起用于数据包的分段。如果数据包原始长度超过数据包所要经过的数据链路的最大传输单元(MTU),那么必须将数据包分段为更小的数据包。例如,一个大小为5000字节的数据包在穿过网络时,如果遇到一条MTU为1500字节的数据链路,即数据帧最多容纳大小为1500字节的数据包。路由器需要在数据成帧之前将数据包分段成多个数据包,其中每个数据包长度不得超过1500字节;然后路由器在每片数据包的标识字段上打上相同的标记,以便接收设备可以识别出属于一个数据包的分段。*标记字段(flag)——长度为3位,其中第1位没有使用。第2位是不分段(DF)位。当DF位被设置为1时,表示路由器不能对数据包进行分段处理。如果数据包由于不能被分段而未能被转发,那么路由器将丢弃该数据包并向源点发送错误消息。这一功能可以在网络上用于测试MTU值。第3位表示还有更多分段(MF)位,当路由器对数据包进行分段时,除了最后一个分段的MF位位置为0外,其他所有分段的MF位均设置为1,以便接收者直到收到MF位为的分段为止。*分片偏移(fragmentoffset)——字段长度为13位,以8个八位组为单位,用于指明分段起始点相对于报头起始点的偏移量。由于分片到达时可能错序,所发分片偏移字段可以使接收者按照正确的顺序重组数据包。请注意,如果一个分片在传输中丢失,那么必须在网络中同一点对整个数据包重新分片重新发送。因此,容易发生故障的数据链路会造成时延不成比例。另外,如果由于网络拥塞而造成分片丢失,那么和重传分片会进一步加重网络拥塞。当一个分片在丢失后,一整个数据包会被要求重传,而且是由源地址进行重传,而不是由进行分片的路由器来进行重传。*生存时间(TTL,timetolive)——字段长度为8位,在最初创建数据包时TTL即被设置为某个特定值。当数据包逐个沿路由器被传输时,每台路由器都会降低TTL值。当TTL值减为0时,路由器会丢弃该数据包并向源点发送错误信息。这种方法可以防止数据包在网络中无休止的被传输。按照最初构想,TTL值以S(秒)为单位。如果数据包在路由器上被延迟的时间超过1S,路由器将会相应地调整TTL值。然而,这种方法实施起来十分困难,从来没有被广泛地支持。现在的路由器不管实际时延是多少,统统将TTL值减少1,所以TTL实际上是表示跳数。虽然TTL常见的值为15和32,但是建议的缺省值是64。路由器的tracert命令即是使用的这个字段。当数据包从源地址发出时TTL值被置为1,当第一跳路由器收到时,会进行路由,同时TTL会减1,此时会发现TTL为0,则不能正常发送,向源地址传送一个错误信息。这时候源地址接收到错误信息后,会根据该错误信息中的源地址,来判断路由路径中的第一步,这时候,再将TTL值置为2进行发送,第一跳路由器正常发送,第二跳路由器同样会执行与第一跳路由器同样的操作……这样源地址就可以得到路由的传送路径信息。*协议(protocol)——字段长度为8位,它给出了主机到主机层或传输层协议的“地址”或协议号,协议字段指定了数据包中信息的类型。当前已分配了100多个不同的协议号。一些众所周知的协议号协议号主机到主机层协议(传输层协议)1ICMP:internet消息控制协议2IGMP:internet组管理协议4被IP协议封装的IP6TCP:传输控制协议17UDP:用户数据报协议45RSVP:资源预留协议47GRE:通用路由选择封装54NHRP:NBMA下一跳解析协议88IGRP:internet网关路由选择协议89OSPF:开放式最短路径优先*头部校验和(headerchecksum)——是针对IP报头的纠错字段。检验和不计算被封装的数据,UDP、TCP和ICMP都有各自的校验各。报头校验和字段包含一个16位二进制补码和,这是由数据包发送者计算得到的。接收者将连同原始校验和重新进行16位二进制补码和计算。如果数据包传输中没有发生错误,那么结果应该16位全部为1。前面提到过,每台路由器都会降低数据包的TTL值,所以每台路由器都必须重新计算校验和。RFC1141讨论了一些简化计算的策略。*源地址和目的地址(sourceanddestinationaddress)——字段长度为32位,分别表示发送者数据包源点和目的地址的IP地址。*可选项(option)——是一个长度可变的字段,并像其名字所表示的,它是可选的。可选项被添加在包头中,包括源点产生的信息和其他路由器加入的信息;可选项字段主要用于测试。常用的可选项如下:松散源路由选择(loosesourcerouting)——它给出了一连串路由器接口的IP地址序列。数据包必须沿着IP地址序列传送,但是允许在相继的两个地址之间跳过多台路由器。利用此字段可以穿越做过NAT的路由器,可以对私有地址直接发起访问。严格源路由选择(strictsourcerouting)——它也给出了一系列路由器接口的IP地址序列。不同于松散源路由选择,数据包必要严格按照路由转发。如果下一跳不在列表中,那么将会发生错误。记录路由(recordroute)——当数据包离开时为每台路由器提供空间记录数据包的出站接口地址,以便保存数据包经过的所有路由器的记录。记录路由选项提供了类似于路由追踪的功能,但是不同点在于这里记录了双向路径上的出站接口信息。*填充(padding)——该字段通过在可选项字段后面添加0来补足32位,这样保证报头长度是32位的倍数。IPv6报头IPv6报头格式:(4位)版本号(8位)通信流类型(20位)流标签(16位)有效负荷长(8位)下一报头(8位)跳数限制(128位)源地址(128位)目的地址(4位)版本号(8位)通信流类型(20位)流标签(16位)有效负荷长度(8位)下一报头(8位)跳数限制(128位)源地址(128位)目的地址版本号:版本字段规定了IP协议通信流类别:表示IPV6数据包的类或优先级流标签:表示这个数据包属于源节点和目标节点之间的一个特定数据包序列有效载荷长度:表示IPV6有效载荷长度,包括扩展报头和上层PDU下一个报头:表示第一个扩展报头的类型,或者是上层PDU中的协议跳限制:表示IPV6数据包在被丢弃前可以通过的最大链路数。源地址:表示源主机IPV6地址目的地址:表示当前目标节点的IPV6下一个报头字段的值:0逐跳选项报头6TCP17UDP41以封装的IPV6报头43路由包头44片段报头50封装安全有效载荷报头51身份验证报头58ICMPV6报头59没有下一个报头60目标选项报头扩展报头的顺序:1.逐跳选项头2.目标选项头(当存在路由报头时,用于中间目标)3.路由头4.分段头5.身份验证头6.封装安全有效载荷报头7.目标选项报头(用于最终目标)TCP报头32bit源端口号目的端口号发送序号接收序号数据偏移保留URGACKPSHRSTSYNFIN窗口检验和紧急指针选项和填充数据TCP报文段首部的前20个字节是固定的,后面有4N字节是可有可无的选项(N为整数)。因此TCP首部的最小长度是20字节。首部固定部分各字段的意义如下:·源端口和目的端口各占2个字节。前面已讲过,端口是运输层与高层的服务接口。16bit的端口号加上32bit的IP地址,构成了相当于运输层服务访问点TSAP的地址(总共是48bit)。这些端口可用来将若干高层协议向下复用。·序号占4字节,是本报文段所发送的数据部分第一个字节的序号。在TCP传送的数据流中,每一个字节都有一个序号。例如,在一个报文段中,序号为300,而报文中的数据共100字节。那么在下一个报文段中,其序号就是400。因此TCP是面向数据流的。·确认序号占4字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号。由于序号字段有32bit长,可对4GB(即4千兆字节)的数据进行编号。这样就可保证当序号重复使用时,旧序号的数据早已在网络中消失了。·数据偏移占4bit,它指出数据开始的地方离TCP报文段的起始处有多远。这实际上就是TCP报文段首部的长度。由于首部长度不固定(因首部中的选项字段长度是不确定的),因此数据偏移字段是必要的。但应注意,“数据偏移”的单位是32bit字,而不是字节或比特。数据偏移字段后面有620字节bit是保留字段,供今后使用,但目前应置为0。下面6个比特是说明本报文段性质的控制字段(或称为标志)。各比特的意义如下。·紧急比特URG(URGent)当URG=l时,表明此报文段应尽快传送(相当于加速数据),而不要按原来的排队顺序来传送。例如,已经发送了很长的一个程序要在远地的主机上运行。但后来发现有些问题,要取消该程序的运行。因此从键盘发出中断信号。这就属于紧急数据。此时要与第5个32bit字中的后一半“紧急指针”(UrgentPointer)字段配合使用。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。紧急指针使接收方可以知道紧急数据共有多长。值得注意的是,即使当窗口大小为零时也可发送紧急数据。·确认比特ACK只有当ACK=1时确认序号字段才有意义。当ACK=0时,确认序号没有意义。·急迫比特PSH(PuSH)当PSH=l时,表明请求远地TCP将本报文段立即传送给其应用层,而不要等到整个缓冲区都填满了后再向上交付。·重建比特RST(ReSeT)当RST=1时,表明出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重建运输连接。重建比特还用来拒绝一个非法的报文段或拒绝打开一个连接。·同步比特SYN在连接建立时使用。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在发回的报文段中使SYN=1和ACK=l。因此,同步比特SYN置为1,就表示这是一个连接请求或连接接受报文,而ACK比特的值用来区分是哪一种报文。·终止比特FIN(FINal)用来释放一个连接。当FIN=l时,表明欲发送的字节串已经发完,并要求释放运输连接。·窗口占2字节。窗口字段实际上是报文段发送方的接收窗口,单位为字节。通过此窗口告诉对方,“在未收到我的确认时,你能发送的数据的字节数至多是此窗口的大小。”·检验和占2字节。检验和字段检验的范围包括首部和数据这两部分。但和用户数据报UDP一样,在计算检验和时,要在TCP报文段的前面加上一个12字节的伪首部。伪首部的格式与图8-7中UDP数据报的伪首部一样。但
本文标题:数据包头格式
链接地址:https://www.777doc.com/doc-2332262 .html