IP头部封装格式
-
Version(版本4bit)
版本4bit,表示IP报文的版本信息
-
0x6--ipv6 0110
-
0x4--ipv4 0100
-
-
IHL(包头部长度4bit)
IP Header Length 表示IP包的头部长度
因为IP报头不固定,所以要说明IP报头的长度
-
IP头部长度不固定,但是必须为4的倍数
-
包头部长度字段的值*4=包头部的字节数
-
全为1-->15行 IP报头最长-60字节,默认5->20字节
-
-
Type of service(ToS域8bit)
默认用3位 0~7
表示报文在QoS中的服务等级,用于区分报文转发的优先级
-
默认数据包先来先处理,要优先保证某些数据包转发-->OoS
-
-
Total length(数据包总长度16bit)
总长度 IP报头+数据
-
表示整个IP报文(头部和载荷数据)长度,最大长度2^16=65536字节
-
总长度-IHL(报头长度)=数据长度
-
-
Identification(标识符16bit)
重组 网络ID--标识符
标识符,用于标识某个分片来自哪个数据包
传输层数据段--网络层分片-->标识数据包属于哪个数据段
-
Flags(标志3bit)
-
第一位 保留 -- 无意义
-
中继两位 标识数据包是否禁止分片(DF)
-
0关闭 -- 允许分片
-
1开启 -- 超过MTU值-->直接丢(探测沿途MTU值可以用)
-
-
末位 标识是否为最后一个分片(MF)more
-
0最后一个 -- 可以进行重组
-
1后面还有
-
-
-
Fragment offset(分片偏移13bit)
重组 先后顺序
-
分片偏移,描述分片在数据段中的位置
-
只知道标识--不知道先后顺序--通过片偏移知道要偏移多少位
-
-
Time to Live(存活时间8bit)TTL
-
当IP包在一个网络中运动时,每经过一台三层设备就会被改写该字段就会被路由器减1,减至0则会被直接丢弃
-
如果没有TTL机制,网络中存在环路时IP报文会无限循环消耗大量网络资源
-
解封装--重新封装--改写TTL-1
-
-
Protocol(协议8bit)
用于标识上层协议
-
0x01-ICMP
-
0x02-IGMP
-
0x11-UDP 17
-
0x06-TCP 6
-
0x59-OSPF 89
-
-
Header Checksum(头部校验和16bit)
头部校验序列,用于头部信息差错校验
类似以太网帧结构中的FCS字段(CRC字段)
-
Source Address(源IP地址32bit)
源IP地址,产生并发送该IP报文的设备接口IP地址
-
Destination Address(目的IP地址32bit)
目的IP地址,该IP报文的目的接口的IP地址
-
Options(选项/长度填充)
字段长度可变,添加选项后报文头部不是4字节的整数倍则必须再填充一些0,保证整个报文的头部长度刚好是4字节的整数倍
特殊的需求,特殊的标签
-
Padding填充
填充,包的总长度必须是4的倍数--给Options补全4个字节