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