IP包头
32 位
版本(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
开始的 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 位,他给出了主机到主机的层或传输层协议的“地址”或协议号。协议字段指定了数据包中信息的类型。
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 位的倍数。