1.2 IP
包头
下面表中是IP
包头(packet header
)
Version (版本) | Header length(包头长度) | Type service | Total length(总长度) | |
Identifier(标识符) | Flag (标记字段) | |||
Time to live (TTL 生存时间) | Header checksum(报头校验和) | |||
Source 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
(可选项)
:是一个长度可变的字段。它是可选的。
可选项如下:
ⅱ
严格源路由选择(strict source routing
)
也给出了一连串路由器接口的IP
地址序列,不同于松散源路由选择的是,数据包必须按照路由转发。如果下一条不在路由表,就将会发生错误。
ⅲ
记录路由(Record Router
)
当数据包离开时为每台路由器提供空间记录数据包的出站接口地址。
ⅳ
时间戳(timestamp
):
时间戳相当于路由记录选项,这样数据包不仅可以知道自己到过那里。而且还可以记录到达的时间。
填充(padding
)在可选项后面添加0
来补足32
位,主要是保证报头是32
位的倍数。
真实的IP数据包: