IPV4首部
文章目录
- 1_版本(Version)
- 2_首部长度(IHL:Internet Header Length)
- 3_DSCP和ECN字段
- 4_服务类型(TOS: Type Of Service)
- 5_总长度(Total Length)
- 6_标识(ID: Identification)
- 7_标志(Flags)
- 8_片偏移(FO: Fragment Offset)
- 9_存活时间(TTL: Time to Live)
- 10_协议(Protocol)
- 11_首部校验和(Header Checksum)
- 12_源地址(Source Address)
- 13_目标地址(Destination Address)
- 14_可选项(Options)
- 15_填充(Padding)
- 16_数据(Data)
通过 IP 进行通信时,需要在数据的前面加入 IP 首部信息。IP 首部包含 IP 进行发包控制时所需的必要信息。
IP 首部结构如下,了解 IP 首部的详细信息即可对 IP 所具有的功能有一个详细的把握。
1_版本(Version)
版本由 4 位构成,表示 IP 首部的版本号。IPV4 的版本号为 4,因此在这个字段上的值是“4”。
此外,关于 IP 的所有版本号在下表中列出:
版本号 | 简称 | 协议 |
---|---|---|
4 | IP | Internet Protocol |
5 | ST | ST Datagram Mode |
6 | IPv6 | Internet Protocl version 6 |
7 | TP/LX | TP/IX: The Next Internet |
8 | PIP | The P Internet Protocol |
9 | TUBA | TUBA |
关于 IP 版本号:
关于 IPV4 的下一个版本是 IPV6。为什么要从版本 4 直接跳到版本 6 呢?
这里需要提到的是,IP 版本号的含义与普通软件的版本号有所区别。普通软件的版本号会随着更新逐渐增大,最新版本号即为最大号码。这要基于每款软件都由特定的软件公司或团体进行开发才能实现。
而在互联网中,为了让 IP 更完善,有众多机构致力于它的规范化。机构为了能够验证相应的 IP,他们会按照顺序分配具体的版本号。
一向重视实践的互联网,在遇到好的提案时,不能纸上谈兵,还需要反复实验。为此,对于那些还未正式使用的版本号就会被标上号码,进而在实验的过程中选择一个最佳的产物进行标准化。
IPv6 正是经历了这些过程之后才成为 IPv4 的下一代 IP。因此,IP 版本号的大小本身并没有什么意义。
2_首部长度(IHL:Internet Header Length)
首部长度由 4 位构成,表明 IP 首部的大小,单位为 4 字节(32位)。
对于没有可选项的 IP 包,首部长度设置为“5”。
也就是说,当没有可选项时,IP 首部的长度为 20 字节(4 * 5 = 20)。
3_DSCP和ECN字段
DSCP(Differentiated Services Code Point,差分服务代码点)是 TOS(Type Of Service)的一部分(如下图)。
DSCP 用于进行称为 DiffServ 的质量控制。
如果 3~5 位的值为 0,0 ~ 2 位则被称作类别选择代码点。这样就可以像 TOS 的优先度那样提供 8 种质量控制级别。
对于每种级别所采取的措施由使用 DiffServ 的管理员制定。为了与 TOS 保持一致,值越大优先度越高。如果第 5 位为 1,表示实验或本地使用的意思。
ECN(Explicit Congestion Notification,显式拥塞通告)用来报告网络拥塞情况,由 2 位构成,每一位的具体含义如下表所示:
位 | 简称 | 含义 |
---|---|---|
6 | ECT | ECN-Capable Transport |
7 | CE | Congestion Experienced |
第 6 位的 ECT 用以通告传输层协议是否处理 ECN。当路由器在转发 ECN 为 1 的包时,如果出现网络拥塞的情况,就将 CE 的位置设置为 1。
4_服务类型(TOS: Type Of Service)
DSCP 字段和 ECN 字段所占的 8 位在早期的 IP 首部中叫作服务类型字段。
服务类型字段由 8 位构成,用来表明服务质量。每一位的具体含义如下表。
位 | 含义 |
---|---|
0 1 2 | 优先度 |
3 | 最低延迟 |
4 | 最大吞吐 |
5 | 最大可靠性 |
6 | 最小代价 |
(3~6) | 最大安全 |
7 | 未定义 |
不过,因为要按照要求在该字段中发送数据,相应的控制机制会异常复杂,或是一但设置错误,就没有实际效果了等原因,所以 TOS 字段难以投入使用。
因此,普遍是将 TOS 字段划分为 DSCP 和 ECN 这两个字段使用。
5_总长度(Total Length)
总长度表示 IP 首部与数据合起来的总字节。该字段长 16 位。因此 IP 包的最大长度为 65535(216−1=655352^{16} - 1 = 65535216−1=65535)字节。
但是,目前几乎不存在能够传输最大长度为 65535 字节的 IP 包的数据链路。
不过,由于有 IP 分片处理,因此从 IP 的上层看,不论底层采用何种数据链路,都认为能够以 IP 包的最大长度传输数据。
6_标识(ID: Identification)
标识由 16 位构成,用于分片重组。同一分片的标识值相同,不同分片的标识值不同。
通常,发送 IP 包时,它的值呈递增趋势。此外,即使 ID 相同,如果目标地址、源地址或协议不同,也会被认为是不同的分片。
7_标志(Flags)
标志由 3 位构成,表示包被分片的相关信息。每一位的具体含义如下表所示:
位 | 含义 |
---|---|
0 | 未使用,现在必须是 0 |
1 | 表示是否进行分片(don’t fragment)0 - 可以分片1 - 不能分片 |
2 | 包被分片的情况下,表示是否为最后一个包(more fragment)0 - 最后一个分片的包1 - 分片中段的包 |
8_片偏移(FO: Fragment Offset)
片偏移由 13 位构成,用来标识每个分片相对于原始数据的位置。
第一个分片对应的值为 0。由于 FO 字段占 13 位,因此可以最多表示 8192(213=81922^{13} = 8192213=8192)个相对位置。
片偏移的单位为 8 位(即 1 字节),所以最大可以表示原始数据的第 8∗(8192−1)=655288*(8192-1)=655288∗(8192−1)=65528 字节的位置。
9_存活时间(TTL: Time to Live)
存活时间由 8 位构成,它最初的意思是以秒为单位记录当前包在网络中存活的期限。
然而,在实际中,它是可以中转多少个路由器的意思。
每经过一个路由器,TTL 减少 1,直到变成 0 则丢弃该包。
10_协议(Protocol)
协议由 8 位构成,表示紧随 IP 首部之后的下一个首部所属的协议。目前经常使用的协议如表所示:
协议编号 | 简称 | 协议名称 |
---|---|---|
0 | HOPOPT | IPv6 Hop-by-Hop Option |
1 | ICMP | Internet Control Message Protocol (ICMP) |
2 | IGMP | Internet Group Management Protocol |
4 | IP | IP encapsulation(IP in IP) |
6 | TCP | Transmission Control Protocol |
8 | EGP | Exterior Gateway Protocol |
9 | IGP | any private Interior Gateway (私有/实验 Cisco IGRP) |
17 | UDP | User Datagram Protocol |
41 | IPv6 | IPv6 Protocol Version 6 |
43 | IPv6-Route | Routing Header for IPv6 |
44 | IPv6-Frag | Fragment Header for IPv6 |
46 | RSVP | Resource Reservation Protocol |
47 | GRE | Generic Routing Encapsulation |
50 | ESP | Encap Security Payload |
51 | AH | Authentication Header |
58 | IPv6-ICMP | ICMP for IPv6 |
59 | IPv6-NoNext | No Next Header for IPv6 |
60 | IPv6-Opts | Destination Options for IPv6 |
88 | EIGRP | Enhanced Interior Gateway Routing Protocol (Cisco) |
89 | OSPF | Open Shortest Path First |
115 | L2TP | Layer Two Tunneling Protocol |
124 | ISIS over IPv4 | ISIS over IPv4 |
132 | SCTP | Stream Control Transmission Protocol |
135 | Mobility Header(IPv6) | Mobility Header(IPv6) |
136 | UDPLite | UDP-Lite |
11_首部校验和(Header Checksum)
首部校验和由 16 位(2字节)构成,也叫 IP 首部校验和。该字段只校验数据报的首部,不校验数据部分。它主要用来确保 IP 首部不被破坏。
校验和的计算过程如下:
- 首先,将校验和字段的所有位设置为 0。
- 其次,以 16 位为单位划分 IP 首部,并用 1 补码计算所有位置的和。
- 最后,将所得到的和的 1 补码赋给首部校验和字段。
12_源地址(Source Address)
源地址由 32 位(4 字节)构成,表示发送端 IP 地址。
13_目标地址(Destination Address)
目标地址由 32 位(4 字节)构成,表示接收端 IP 地址。
14_可选项(Options)
可选项长度可变,通常只在进行实验或诊断时使用。该字段包含如下几点信息:
- 安全级别
- 源路径
- 路径记录
- 时间戳
一个数据报中可以有零个或多个可选项。可选项的格式有两种情况:
- 情况 1:单字节选项(仅 1 Byte),这种情况没有后续长度字段,也没有数据字段。仅用于填充对齐或表示结束。
- 格式:
| Option Type (8 bits) |
- 例:End of Option List (EOL, 类型=0)、No Operation (NOP, 类型=1)。
- 情况 2:多字节选项(≥ 2 Bytes)
- 格式:
| Option Type (8 bits) | Option Length (8 bits) | Option Data (可变长) |
- 例:Record Route (RR, 类型=7)、Timestamp (TS, 类型=68)、Loose Source Route (LSRR, 类型=131)、Strict Source Route (SSRR, 类型=137)
Option Type 的细分结构:
| Copied flag (1 bit) | Option class (2 bits) | Option number (5 bits) |
- 1 位复制标志:0 = 未复制、1 = 已复制。
- 2 位选项类:0 = 控制、1 = 保留以备将来使用、2 = 调试和测量、3 = 保留以备将来使用。
- 5 位选项号。
15_填充(Padding)
在有可选项的情况下,首部长度可能不是 32 位的整数倍。为此,通过向字段填充 0,调整为 32 位的整数倍。
16_数据(Data)
存入数据。将 IP 上层协议的首部作为数据进行处理。