【TCP/IP 笔记】IPv4-02 | IPv4 报头详解

参考 http://tcpipguide.com

文章目录

    • IPv4 数据报的一般格式
      • Version
      • IHL (Internet Header Length)
      • TOS (Type Of Service)
      • TL (Total Length)
      • Identification
      • Flags
      • Fragment Offset
      • TTL (Time To Live)
      • Protocol
      • Header Checksum
      • Source Address & Destination Address
      • Options
      • Padding
      • Data

【TCP/IP 笔记】IPv4-02 | IPv4 报头详解_第1张图片

IPv4 数据报的一般格式

【TCP/IP 笔记】IPv4-02 | IPv4 报头详解_第2张图片

Version

用于标识生成该数据报的 IP 版本。对于 IPv4 这里的值为 4。

IHL (Internet Header Length)

以 32 比特为一个单位指出 IP 头的长度,包括选项和填补部分,当没有选项时这个值为 5。

TOS (Type Of Service)

携带 IP 数据报的服务质量特征信息,如优先传递,其含义后来被重新定义以供称为差异化服务 (Differentiated Services, DS) 的技术使用。

子字段 长度 (bits) 描述
Precedence 3 指示数据报的优先级,下面有八个定义的值,从最低到最高
Precedence 值 优先级
000 Routine
001 Priority
010 Immediate
011 Flash
100 Flash Override
101 CRITIC/ECP
110 Internetwork Control
111 Network Control
D 1 如果需要低延迟传输则设为 1,否则为 0
T 1 如果需要更高吞吐量传输则设为 1,否则为 0
R 1 如果需要更可靠的传输则设为 1,否则为 0
Reserved 2 保留

TL (Total Length)

以字节 (byte) 为单位指出 IP 数据报的总长度。因为这个字段只有 16 bits 所以 IP 数据报的最大长度为 65,535 Bytes,实际上大多数都远小于这个上限。

Identification

这个字段的值对于属于同一数据报的碎片是相同的,这样接收方在重组时才能分辨哪些碎片是属于一个数据报的。

Flags

用来管理碎片。

子字段名称 长度 (bits) 描述
Reserved 1 保留
DF 1 值为 1 时表示该数据报不能被分片,因为分片操作对更高层的协议不可见,所以很多时候不会设置这个值。但也不是没用,常用与测试最大 MTU
MF 1 值为 0 时表示该数据报为最后一块碎片;值为 1 时表示后面还有若干数据报碎片。

Fragment Offset

当数据报被分片时,这个字段指出当前碎片在原数据报中的偏移量或位置,以 8 Bytes 为一个单位,第一个碎片的偏移量为 0。

TTL (Time To Live)

指出数据报允许在互联网中存活的时间,没经过一个路由器,路由器就会将这个值减 1,当这个值为 0 时路由器将丢弃该数据报不再转发。这其实是指出数据报的最多跳数而非时间。

Protocol

指出数据报中携带的更高层协议。

值(16 进制) 值(10 进制) 协议
00 0 保留
01 1 ICMP
02 2 IGMP
03 3 GGP
04 4 IP-in-IP Encapsulation
06 6 TCP
08 8 EGP
11 17 UDP
32 50 Encapsulating Security Payload (ESP) Extension Header
33 51 Authentication Header (AH) Extension Header

Header Checksum

仅计算报头的校验和,以提供对传输中的损坏的基本保护,不对数据进行校验和。

Source Address & Destination Address

源地址和目标地址。

Options

每个 IP 选项都有自己的 子字段格式,下图和表表示通用选项格式:
【TCP/IP 笔记】IPv4-02 | IPv4 报头详解_第3张图片

子字段名称 长度 (Bytes) 描述
Option Type 1 这 8 bits 被分成如下三个子子字段
子子字段名称 长度 (bits) 描述
Copied 1 如果设为 1 则说明当数据报被分片时,这个选项要复制到所有分片中,反之设为 0
Option Class 2 指定可能的四个值中的一个,用于指示该选项所属的类别,实际上只有两个值被使用:0 表示控制选项 (Control Options);2 表示调试和测量。
Option Number 5 指定选项的种类,因为长度为 5 bits,所以每个类别的选项可以有 32 个种类
Option Length 0 or 1 以 Byte 为单位指出变长选项的长度,包括这里所说的三个子字段。
Option Data 0 or Variable 为变长选项提供,包含选项要发送的数据。
Option Class Option Number Length (Bytes) Option Name Description
0 0 1 End Of Options List 只含有一个 0 Byte 的选项,用来标记选项列表的结尾。
0 1 1 No Operation 虚拟选项,用于内部填充,用于一些需要 32-bit 对齐的选项。
0 2 11 Security 为军方提供的选项,用于指示 IP 数据报的安全分类。
0 3 Variable Loose Source Route 包含一个 IP 地址列表,用来指定数据报必须准确、按顺序使用所给 IP 地址列表的路由器到达终点,途中可以使用列表外的路由器做中间跳转。
0 7 Variable Record Route 如果数据报含有这个选项,那么处理这个数据报的路由器会将自己的 IP 地址添加到这个选项中,这样接收方就可以提取地址列表查看数据报采用的路由。
因为这个选项的长度是由发送该数据报的设备设置的,它不会在路由途中增大,所以,如果在到达目的之前该选项已经填满,那么将只记录了部分路由。
0 9 Variable Strict Source Route 和 Loose Source Route 选项类似,但是不允许列表外的路由器做中间跳转。
2 4 Variable Timestamp 和 Record Route 选项类似,不同的是处理该数据报的路由器往选项里添加的是时间戳,这样接收方就可以知道数据报在各个路由器之间传输所用的时间。途中同样不能修改该选项的长度。
2 18 12 Traceroute 用于 traceroute 程序的增强。

Padding

如果有选项,使得报头长度不为 32 bits 的倍数,就用 0 去填补,使得报头长度始终为 32 bits 的倍数。

Data

要传送的数据。

你可能感兴趣的:(Web)