Internet Protocol Version 4, Src: 192.168.1.1 (192.168.1.1), Dst: 192.168.1.2 (192.168.1.2)
0100 .... = Version: 4 ----->版本(4位)
.... 0101 = Header Length: 20 bytes (5)---->头部长度(4位)
Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT))---->DS字段(6位)+ECN(2位)
Total Length: 60)---->总长度(16位)
Identification: 0x9255 (37461))---->标识(16位)
Flags: 0x02 (Don't Fragment))---->标志(3位)
Fragment offset: 0)---->分片偏移(13位)
Time to live: 128)---->生存期(8位)
Protocol: ICMP (1))---->协议(8位)
Header checksum: 0xe517 [validation disabled])---->头部校验和(16位)
[Header checksum status: Unverified])
Source: 192.168.1.1 (192.168.1.1))---->源IP地址(32位)
Destination: 192.168.1.2 (192.168.1.2))---->目的IP地址(32位)
[Source GeoIP: Unknown]
[Destination GeoIP: Unknown]
| 版本号(4位) |
包含IP数据包的版本号,IPv4为4,IPv6为6,和IPv6相比,除版本字段位置相同以外再无其他字段相同,因此两个协议不能相互操作的。
在包的首位定义出此字段区分不同的协议,以正确的协议解包。
|
| 头部长度(4位) |
单位:32bit(4字节)
正常值为5(即20个字节)
在解包时能够方便切割出头部
|
| DS和ESN字段(8位) |
IPv4[RFC0791]的最初规范指定了一个服务类型(ToS)字段,由于他们从未被广泛使用,因此最终被分为两部分。
DS:区分服务 代码点(指预定义的具有特殊含义的位) ESN:显示拥塞通知
原来ToS的结构
优先级字段:用于表示哪些分组具有更高的优先级
D:延时 S:吞吐量 R:可靠性 (如果这些值为1,分别对应于低延时、高吞吐量、高可靠性)
DS字段
DSCP分为三个池(标准、实验/本地用途(EXP/LU)、最终打算标准化的实验/本地用途)
DSCP值有两种表达方式,数字形式和关键字形式。
一种表达方式是数字形式。DSCP使用6比特,十进制区间是0~63,可以定义64个等级(优先级。)如二进制DSCP值000000=十进制DSCP值0,二进制DSCP值010010=十进制DSCP值18。
另一种关键字形式的DSCP值称为逐跳行为(PHB),目前有三类已定义的PHB,分别是尽力服务(BE或DSCP 0)、确保转发(AFxy)和加速转发(EF)。由于DSCP和IP Precedence是共存的,于是存在兼容性的问题,DSCP可读性较差,比如DSCP 43我们一眼看去并不知道对应着IP Precedence的什么取值,于是把DSCP进行进一步分类,
DSCP总共分成四类:
类选择器Class Selector(CS)aaa 000
加速转发Expedited Forwarding(EF) 101 110
确保转发Assured Forwarding(AF) aaa bb0
默认Default(BE) 000 000
DS字段值表略
ECN:
当两端支持ECN时,它将数据包标为ECT(0)或ECT(1)。如果分组穿过一个遇到阻塞并且相应路由器支持ECN的活动队列管理(AQM)队列(例如一个使用随机早期检测,即RED的队列),它可以将代码点更改为 因为CE指示只能由支持它的上层协议有效处理,ECN只能配合上层协议使用。例如TCP协议,它支持阻塞控制并且有方法将CE指示回传给发送端。 ---维基百科 |
| 总长度(16位) |
单位:字节
最小值是20(20字节首部+0字节数据),最大值是216-1=65,535
IP层下面的每一种数据链路层都规定了数据帧的数据字段的最大传输长度,称为最大传送单元MTU (Maximum Transfer Unit)。例如以太网中MTU值为1500字节,超出则需要分片处理。
IP协议规定,在因特网中所有的主机和路由器,必须能够接受长度不超过576字节的数据报。这是假定上层交下来的数据长度有512字节(合理的长度), 加上最长的IP首部60字节,再加上4字节的富裕量,就得到576字节。当主机需要发送长 度超过576字节的数据报时,应当先了解一下,目的主机能否接受所要发送的数据报长度。 否则,就要进行分片。
|
|
标识(16位)
标志(3位)
分片偏移(13位)
|
当数据包进行分片传输时,使得能够在接收端将分片完整的组合在一起做的标记字段。(暂不记录) |
| 生存期TTL(8位) |
设置一个数据报可经过路由器的最大数量上限,每次经过路由器,TTL值就会减少1,当这个值达到0时,该数据报就会被丢弃。
一般地,路由器读取到TTL值为1的时候就会丢弃。
有效的防止环路出现
|
| 协议(8位) |
表示数据报的有效载荷部分的数据类型(即上层协议的类型)
告诉计算机用什么协议解析段(有效载荷部分)
其实在每一层中都会有标识上层协议的类型
|
| 头部校验和(16位) |
在发送方,先把IP数据报首部划分为许多16位字的序列,并把检验和字段置零。用反码算术运算把所有16位字相加后,将得到的和的反码写入检验和字段。接收方收到数据报后,将首部的所有16位字再使用反码算术运算相加一次。将得到的和取反码, 即得出接收方检验和的计算结果。若首部未发生任何变化,则此结果必为0,于是就保留这个数据报。否则即认为出差错,并将此数据报丢弃。
计算过程例:
|
| 目的IP(32位) | 相当于收件人的地址 |
| 源IP(32位) | 相当于寄件人的地址 |
参考文档:《TCP/IP协议详解 卷一:协议》