1.2    IP 包头
下面表中是IP 包头(packet header
 

Version

(版本)

Header length(包头长度)

Type service

(服务类型)

Total length(总长度)

Identifier(标识符)

Flag (标记字段)

Fragment offset(分段偏移)

Time to live (TTL 生存时间)

Protocol(协议)

Header checksum(报头校验和)

Source address(源地址)

Destination address(目标地址

Options(可选项)

Padding (填充)

下面对上面表格中的术语进行详细的解释:
 
版本(Version :它标识了数据包IP 版本号。表形式为:4 位字段的值设置为二进制的0100 表示IP 版本4 IPv4 . 设置为0110 表示IP 版本6 IPv6
Header length (包头长度): 字段长度为4 位,它表示32 位字长的IP 报头长度,设计报头长度的原因是数据包可选字段大小会发生变化。IP 报头最小20 个八位组,最大可以扩展到60 个八位组。这个字段也可以描述32 位字的组大长度。
Type service (服务类型) :字段长度为8 位,它用来指定特殊的数据包处理方式。服务类型字段实际上被划分为2 个子字段:优先权和Tos 。优先权用来设置数据包的优先级。Tos 允许按照吞吐量、时延、可靠性和费用方式选择传输服务。Tos 通常不用 所有位都被设置为0. OSPF 路由协议的早期规范中还称为Tos 路由选择。 优先级偶尔在服务质量(QoS )应用中使用。下图简单的说明了8 Tos     位。
 
 
 

 
  但是随着网络的发展 ToS 字段已经作为区分服务架构的一部分被重新定义了。(diffserv
 
 
 
 
那么Tos 是如何被重新定义的呢?请先看下下面的表:
二进制位:
0          1           2            3           4          5         6        7

区分服务代码点
DSCP
ECN
 
开始的6 个位(0-5 )现在构成了区分代码点(DSCP ),利用这6 位我们可以使用任意数值或根据在区分服务体系结构中预先定义的服务类别,最多可以定义64 个不同服务类别,并可以整理到PHB 中。
PHB 理解: Diffser 中,能够在一台路由器定义服务分类,将数据包归类到这些分类中去。路由器可以根据它们的分类使用不同的优先级对数据包进行排序和转发。每一个排序和处理被称为Per-Hop behavior( 逐跳行为PHB )是由Diffse 定义的 这个机制本身称为区分服务类别(Cos .
显示拥塞通知(Explicit Congestion Notification ECN 在上图中显示拥塞通知是某些路由器支持显示拥塞通知的。当路由器支持该特性时,这些位可用于拥塞信号(ECN=11
Total length (总长度): 主要表示包头和数据的数据包长度。数据包总长度字段的长度为16 位,以8 位为单位计数。其中包括IP 报头。接收者用IP 数据包总长度减去IP 报头长度,就可以确定数据包有效载荷大小。16 位长的二进制数用十进制表示最大可以为65535 ,所以IP 数据包最大长度是65535
Identifier (标识符) :字段长度为16 位,通常与标记字段和分段偏移一起用于数据包的分段。也就是当数据包原始长度超过数据包所要经过的数据链路的最大传输单元(MTU )那么分段必须将数据包分段为更小的数据包。
Flag (标记字段) :长度为3 其中第1 位没有使用。
2 位是不分段(DF ),当DF 位置被置为1 时,路由器将不能对数据包进行分段处理。如果数据包因为不能被分段而不能转发,那么路由器将丢弃数据包并向数据发送方发送错误信息。
3 位表示更多分段(MF       当路由器对数据包分段时除了最后一个分段的MF 职位0 ,其它分段的MF 位全设置为1 ,当接收者收到MF 0 的分段停止分段。
Fragment offset (分段偏移) :字段长度为13 位,以8 个八位组为单位。用于指明分段起始点相对于根头起始点的偏移量。由于分段经过网络肯定会发生错序,所以分段偏移字段可以使接收者按正确的顺序重组数据包。
Time to live (TTL 生存时间) :字段长度为8 位,在最初创建数据包时TTL 被设定某个特定的值,当数据包逐个经过路由器时,每台路由器都会降低TTL 的数值,当TTL 值为0 时,路由器将会丢弃这个数据包并向数据发送源发送错误信息  这样就可以防止数据包无休止的传下去。TTL 实际上是表示跳数。常见的是15 32 缺省值是64. tracert 这样的命令就是利用TTL 字段。
Protocol (协议) :字段长度为8 位,他给出了主机到主机的层或传输层协议的“地址”或协议号。协议字段指定了数据包中信息的类型。
 
 
 
 
 
 

协议号
所表示的协议
1
ICMP Internet 消息控制协议)
2
IGMP Internet 组管理协议)
4
IP 协议封装的IP
6
传输控制协议(TCP
17
用户数据报协议(UDP
45
域间路由选择协议(IDRP
46
资源预留协议(RSVP
47
通用路由选择封装(GRE)
54
NBMA 下一条解析协议(NHRP
88
Cisco internet 网关路由选择协议(IGRP
89
开放最短路径优先(OSPF
常见协议号
Header checksum( 报头校验和) :它是针对IP 报头的纠错字段。校验和不计算被封装的数据。
UDP TCP ICMP 都各有自己的校验和。报头校验和字段包含一个16 位二进制补码和。如果数据包在传输中没有发生错误,那么结果应该16 位全为1. 数据包每经过1 台路由器,每台路由器都将重新计算校验和。
Source address (源地址) :指数据包发送源ip 地址。
Destination address (目标地址) :数据包将要到达的目的地地址。
Options (可选项) :是一个长度可变的字段。它是可选的。
可选项如下:
松散源路由选择(loose source routing 给出了一连串路由器接口的 IP 地址序列 。数据包必须沿着IP 地址序列传送,但是允许相继的2 个地址之间可跳过多台路由器。
严格源路由选择(strict source routing 也给出了一连串路由器接口的IP 地址序列,不同于松散源路由选择的是,数据包必须按照路由转发。如果下一条不在路由表,就将会发生错误。
记录路由(Record Router 当数据包离开时为每台路由器提供空间记录数据包的出站接口地址。
时间戳(timestamp : 时间戳相当于路由记录选项,这样数据包不仅可以知道自己到过那里。而且还可以记录到达的时间。
填充(padding )在可选项后面添加0 来补足32 位,主要是保证报头是32 位的倍数。
真实的IP数据包: