IPv4 报文头

Author: Xu FC
References:
https://tools.ietf.org/html/rfc791
https://tools.ietf.org/html/rfc1393
http://www.iana.org/assignments/ip-parameters/ip-parameters.xhtml
http://www.bogpeople.com/networking/dscp.shtml
https://blog.csdn.net/u011784495/article/details/71636993
http://www.rhyshaden.com/ipdgram.htm
http://www.tcpipguide.com/free/t_IPDatagramOptionsandOptionFormat-2.htm

IPv4 报文头格式


字段 长度 (bits) 含义
Version 4 IP 协议版本号
Header Length 4 IPv4 首部长度
Type of Service 8 区分服务, 与 IP 优先级相关
Total length 16 总长度,包括 header 和 payload
Identification 16 标识,数据报的标识,分片数据报的各分片标识相同
Flags 3 标志,与分片相关
Fragment Offset 13 片偏移,与分片相关
Time to Live 8 数据报在传输中的跳数限制
Protocol 8 协议,上一层封装的协议号
Header Checksum 16 首部校验和,只校验首部,不包含数据部分
Source IP Address 32 源 IP
Destination IP Address 32 目的 IP
Options 0~40 选项字段,必须是 4 字节的倍数,否则以 0 填充
Data 填充报文

Version - 版本号


4 bits

0x4: IPv4, ethernetII type 为 0x0800
0x6: IPv6, ethernetII type 为 0x86dd

Header Length - 首部长度


4 bits

IPv4 首部长度,1 个单位代表 4 个字节,在没有选项的情况下,IPv4 首部长度为 5,即固定长度 20 字节(从 version 到 destination IP address),报头长度必须是 4 字节的整数倍,如果不是,需要填充 PAD 补 0 凑齐。
PAD

Type of Service - 服务类型


8 bits

|0|1|2|3|4|5|6|7|

前 6 位 (0~5, RFC 2474) : 区分服务码点 (DSCP - Different Services Code Point), 是 IP 优先级和服务类型字段的组合。

ToS

  • 第 0~2 位 (优先级从高到低)

    • 111:Network Control
    • 110:Internetwork Control
    • 101:Critic/ECP
    • 100:Flash Override
    • 011:Flash
    • 010:Immediate
    • 001:Priority - 优先
    • 000:Routine - 常规
  • 第 3 位

    • 1:Low delay - 低延迟
    • 0:Normal delay - 正常延迟
  • 第 4 位

    • 1:High Throughput - 高吞吐量
    • 0:Normal Throughput - 正常吞吐量
  • 第 5 位

    • 1:High Reliability - 高可靠性
    • 0:Normal Reliability - 正常可靠性

后 2 位 (RFC 3168):拥塞通知 (ECN - Explicit Congestion Notification)。

  • 第 6 位

    • 1:Minimise monetary cost (RFC 1349)
    • 0
  • 第 7 位

    • 0:必需为 0

IP 优先级表

  • CS: 类选择器 (Class Selector) (RFC 2474) - 同一 class 的优先级相同
  • AFxy: 保证转发 (Assured Forwarding) (x=class, y=drop precedence) (RFC 2579 - Textual Conventions for SMIv2) - MIB 相关
  • EF: 加急转发 (Expedited Forwarding) (RFC 3246) - 快速转发 PHB (Per-Hop Behavior),低延迟、低抖动、低损耗
DSCP Binary IP Precedence
CS0 000 000 0
CS1 001 000 1
AF11 001 010 1
AF12 001 100 1
AF13 001 110 1
CS2 010 000 2
AF21 010 010 2
AF22 010 100 2
AF23 010 110 2
CS3 011 000 3
AF31 011 010 3
AF32 011 100 3
AF33 011 110 3
CS4 100 000 4
AF41 100 010 4
AF42 100 100 4
AF43 100 110 4
CS5 101 000 5
EF 101 110 5
CS6 110 000 6
CS7 111 000 7

Total length - 总长度


16 bits

总长度 = IP 头部长度 + 数据长度
16 bit 能表示的最大长度为 65535 字节(2 的 16 次方 - 1),超过该长度的报文可以通过 IP 分片进行构造。

Identification - 标识


16 bits

每个数据报有唯一标识,每次加1,同一个数据报产生分片,所有分片的标识相同,给分片重组作为依据。

Flags - 标志


3 bits

|0|1|2|

分片标志:

  • 第 0 位 - Reserved,没有使用,保持为 0;
  • 第 1 位 - DF (Don't Fragment)
    • DF = 1:不允许分片
    • DF = 0:允许分片
  • 第 2 位 - MF (More Fragment)
    • MF = 1:表示后面有分片
    • MF = 0:表示当前是最后一个分片

Fragment Offset - 片偏移


13 bits

表示在当前分片在数据报的位置,如果没有分片,该字段为 0 ;如果有分片,首片片偏移为 0,偏移的一个单位表示 8 字节,因此非尾片的数据部分需是 8 字节的整数倍,如果当前分片为第二片,首片数据部分为 24 字节,即结束位置为第 24 * 8 - 1 = 191 位,因此当前分片的片偏移为 3,即起始位置为第 3 * 8 * 8 = 192 位。


首片

当前分片,片偏移为 3

Time to Live (TTL) - 生存时间


8 bits

表示该报文传输中允许经过的跳数,没经过一个路由器,该值就减 1 ,当 TTL = 0 时,丢弃这个报文,从而阻止报文在网络上无限传输。TTL 最大值为 255 (2 的 8 次方 -1)。

Protocol - 上层协议


8 bits

告诉主机的 IP 层应该将数据交给哪个上层处理过程。

Header Checksum - 首部校验和


16 bits

用于IP首部校验,校验失败则丢弃该报文。

Source IP Address


32 bits

发送端 IP 地址。
Web 应用中,源 IP 不能是受限广播 IP。

Destination IP Address


32 bits

接收端 IP 地址。
255.255.255.255 为受限广播,路由器将丢弃该报文。
x.x.x.255 直接广播,该报文将被发送到 x.x.x.0/24 子网的每一台主机上。

Options - 选项


可选的 IP 报头字段。
选项长度需要是 4 字节的整数倍,非整数倍将 PAD 填充。


  • Option type
    • Copy flag - 1 bit:
      • 0:如果报文分片,该选项将不被复制到每个分片中;
      • 1:如果报文分片,该选项将被复制到每个分片中;
    • Option class - 2 bits:只使用了 0 和 2
      • 0:控制;
      • 2:For debugging and measurement;
    • Option number - 5 bits:类似于协议号,指明是什么选项;
    • Option length - 8 bits:该选项的整个长度,即从 type 起始到 data 结束的长度,1 个单位代表 1 字节;
    • Option data - 详细见 RFC 791;
Copy Class Option Number Length (字节) Description
0 0 0 - EOOP - End of Options List, 无长度和数据,用于标记选项列表的结尾。
0 0 1 - NOP - No Operation (忽略选项),无长度和数据, 用于对齐 IP 头中 32 位边界对齐的内部填充。
1 0 2 11 SEC - Security(IP 安全性选项),用于指定 IP 数据包的安全性分类。
1 0 3 可变 LSR - Loose Source Route (松散路由),向目的转发时指定路由,网关可以不遵守。
0 2 4 可变 TS - Time Stamp(时间戳),与 RR 类似,只是将路由改为时间戳,每个路由器都插入时间戳,用来查看路由之前的传输时长。
1 0 5 E-SEC - Extended Security(扩展安全选项),与基本安全选项一起使用,附加安全标签信息。
1 0 6 CIPSO - Commercial Security(商业安全)
0 0 7 可变 RR - Record Route(记录路由),记录数据报走过的每个路由,长度由始发设备设置,不能被放大,如果到达目的前被填满,则只会记录部分路由。
1 0 8 4 SID - Stream ID(流),在不支持流概念的网络中传输 16 位 SATNET 流标识
1 0 9 可变 SSR - Strict Source Route(严格源路由),指定路由,路由器必须按照该路由进行转发,并且在转发过程中将源路由替换为路由器地址。
0 0 10 ZSU - Experimental Measurement(实验测量)
0 0 11 MTUP - MTU Probe,用于从非分片数据报传输的网络路径中找到最低 MTU,MTU 值将在 MTU Reply 中返回。已过时。
0 0 12 MTUR - MTU Reply,已过时。
1 2 13 FINN - Experimental Flow Control(实验测量控制)
1 0 14 VISA - Experimental Access Control(实验访问控制)
0 0 15 ENCODE(用于围绕 IP 层加密实验)
1 0 16 IMITD - IMI Traffic Descriptor(IMI 流量描述符)
1 0 17 EIP - Extended Internet Protocol(扩展互联网协议)
0 2 18 12 TR - Traceroute(跟踪路由),路由器将 ICMP Traceroute 消息发送给始发主机,从而告诉发起方传输路径。RFC 1393。
1 0 19 10 ADDEXT - Address Extension(地址扩展),用于载入 IPv4 地址转换为 IPv7 地址所需附加字节。
1 0 20 4 RTRALT - Router Alert(路由报警),通知中转路由器更仔细的检查 IP 数据报的内容。
1 0 21 6~38 SDB - Selective Directed Broadcast(选择性定向广播模式),为 IPv4 数据报的选项字段包含的一组 IP 地址提供 UDP 传输。
1 0 22 unassigned
1 0 23 DPS - Dynamic Packet State(动态分组状态)
1 0 24 UMP - Upstream Multicast Pkt(上游组播包)
0 0 25 QS - Quick-Start(快速开始)
0 0 30 EXP - RFC 3682
0 2 30 EXP - RFC 3682
1 0 30 EXP - RFC 3682
1 2 30 EXP - RFC 3682

EOOL - End of Options List

无长度和数据,用于标记选项列表的结尾。

+--------+
|00000000|
+--------+

Copy - 1 bit: 0
Class - 2 bits: 0
Number - 5 bits: 0

NOP - No Operation (忽略选项)

无长度和数据, 用于对齐 IP 头中 32 位边界对齐的内部填充。

+--------+
|00000001|
+--------+

Copy - 1 bit: 0
Class - 2 bits: 0
Number - 5 bits: 1
NOP

LSR - Loose Source Route (松散路由)

向目的转发时指定路由,网关可以不遵守。

+--------+--------+--------+---------//--------+
|10000011| length | pointer|     route data    |
+--------+--------+--------+---------//--------+

Copy - 1 bit: 1
Class - 2 bits: 0
Number - 5 bits: 3

Length - 8 bits
Pointer - 8 bits
Route data
LSR

TS - Time Stamp(时间戳)

与 RR 类似,只是将路由改为时间戳,每个路由器都插入时间戳,用来查看路由之前的传输时长。
为了不暴露内网路径相关信息,防火墙应丢弃携带 TS Option 的报文。

+--------+--------+--------+--------+
|01000100| length | pointer|oflw|flg|
+--------+--------+--------+--------+
|         internet address          |
+--------+--------+--------+--------+
|             timestamp             |
+--------+--------+--------+--------+
|                 .                 |
                  .
                  .

Copy - 1 bit: 0
Class - 2 bits: 1
Number - 5 bits: 4

Length - 8 bits
Pointer - 8 bits:指向下一个时间戳记录添加位置。
Overflow - 4 bits:由于缺少空间而无法记录时间戳的跳数。
Flag - 4 bits:
    0: 只记录时间戳
    1: 记录 IP 地址和时间戳
    3: 提前指定 IP 地址,当前网络节点匹配该 IP 时,记录该时间戳
TS

RR - Record Route(记录路由)

记录数据报走过的每个路由,长度由始发设备设置,不能被放大,如果到达目的前被填满,则只会记录部分路由。
为了不暴露内网路径,防火墙应丢弃携带 RR Option 的报文。

+--------+--------+--------+---------//--------+
|00000111| length | pointer|     route data    |
+--------+--------+--------+---------//--------+

Copy - 1 bit: 0
Class - 2 bits: 0
Number - 5 bits: 7

Pointer - 8 bits: 指向下一个路由记录添加位置。
RR

SSR - Strict Source Route(严格源路由)

指定路由,路由器必须按照该路由进行转发,并且在转发过程中将源路由替换为路由器地址。

+--------+--------+--------+---------//--------+
|10001001| length | pointer|     route data    |
+--------+--------+--------+---------//--------+

Copy - 1 bit: 1
Class - 2 bits: 0
Number - 5 bits: 9


SSR

TR - Traceroute(跟踪路由)

路由器将 ICMP Traceroute 消息发送给始发主机,从而告诉发起方传输路径。

+--------+--------+--------+--------+
|01010010| Length |    ID Number    |
+--------+--------+--------+--------+
|Outbound Hop Count|Return Hop Count|
+--------+--------+--------+--------+
|      Originator IP Address        |
+--------+--------+--------+--------+

Copy - 1 bit: 0
Class - 2 bits: 2
Number - 5 bits: 18
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341

推荐阅读更多精彩内容

  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,049评论 0 8
  • 网络层提供的两种服务 在计算机网络领域,网络层应该向运输层提供怎样的服务(面向连接还是无连接)曾引起了长期的争论,...
    srtianxia阅读 3,917评论 0 12
  • 《Tcp/Ip协议族》笔记 网际协议版本4(IPv4) IP分组由一个基本首部和一些选项构成,这些选项有时用于促进...
    Zhang21阅读 3,371评论 1 0
  • IPv4分组 IPv4,即现在普遍使用的IP协议(版本为4)。IP协议定义数据传送的基本单元——IP分组及其确切的...
    CodeKing2017阅读 1,850评论 0 0
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 5,939评论 1 13