IPv4 Internet Protocol version 4 协议解析

发布时间 2023-04-13 15:41:56作者: 秋来叶黄

协议头

|00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|
|  Version  |    IHL    |      DSCP       | ECN |                   Total Length                   |
|              Identification                   |  Flags |          Fragment Offset                |
|   Time To Live        |      Protocol         |                   Header Checksum                |
|                                            Source IP Address                                     |
|                                         Destination IP Address                                   |
|                                           Options(if IHL > 5)                                    |
|                                              Data                                                |

Version 版本号 4bits

数值是4表示IPv4

IHL Internet Head Length IPv4协议头长度 4bits

这个数值表示有几个32位的数据,也就是有几个4字节,如果没有可选项,那么值是5,表示4*5=20个字节。从上图也可以看出正好5排。所以可选项是否存在也是根据IHL>5判断。

TOS Type of Service 服务类型 8bits

用来控制数据传输优先级,又分为DSCP和ECN

  • DSCP Differentiated Services Code Point 差分服务器编码点 6bits

  • ECN Explicit Congestion Notification 显示拥塞通知 2bits

Total Length 总长度 16bits

这个IP数据包总长度,包括Head,表示多少个bytes。因为是16bits,所以IPv4数据包最大是65535bytes。但是由于MTU大小一般是1500,包括Ethernet II协议也规定数据长度为1500,所以如果数据超过这个长度就需要分片了。

Identification 标识 16bits

说分片,分片就来了。这个是用来针对同一组传输数据,由于受限于Total Length,采取分片传输后,区分属于哪组分片的标识。Identification相同,并且四元组也形同,就可以认定为同一分片。

Flags 标志 3bits

标识分片状态,控制分片

  • bit 0:保留,设为0
  • bit 1:是否可分片 0-不可分片;1-可分片
  • bit 2:是否有更多分片 0-没有更多分片,表示为最后一个分片数据包;1-还有更多分片数据包

Fragment Offset 分片偏移 13bits

第一个分片是0,这个数值表示数据处于原数据的位置偏移,偏移了多少个8bytes。最大数据是2^13 - 1=8191个8bytes,所以最大是8191*8=65528bytes,是小于IPv4最大数据长度65535的,所以是可以分片的,并且就算加上head也是合法的。
这里有一个需要注意,由于表示是偏移几个8bytes,所以分片数据必须是8bytes倍数。

Time To Live TTL 生存时间 8bits

一个数值,每经过一个路由器会减1,数值为0时,数据包丢掉。这是为了避免有数据包找不到目的地址,在网络中不断的空转,这样的包越来越多,如果不丢掉,就会耗尽网络资源。

Protocol 协议 8bits

表示当前数据包的数据部分保存的是什么协议的内容,列几个常见的

数值 协议
1 ICMP
4 IP in IP 一种隧道协议把IP数据包在另一个IP中
6 TCP
17 UDP

Header checksum 头部校验码 CRC 16bits

用于校验头部数据是否正确

Source address 源IPv4地址 32bits

Destination address 目的IPv4地址 32bits

Options 可选项

这个不常用,最后数据必须填充为32bits的倍数

Data 数据