1、IPv6报文一般格式
1.1 IPv6与IPv4报文比较
报头变化:
IPv4最小报头:20字节
IPv6固定报头:40字节
- 修改项
- 地址:32位——> 128位
- TTL ——> 跳数限制
- 协议 ——> 下一报头
- 服务质量 ——> 流量类型
- 删除的项
- 分片域
- IP选项
- 校验和
- HL
- 数据报长度
- 增加的项
- 流标签
1.2 IPv6扩展报头
主要的扩展报头:
逐跳选项
路由报头
分段报头
认证报头
封装安全有效载荷报头
目标选项
扩展报头 | next header value |
---|---|
逐跳扩展头 | 0 |
ICMPv4 | 1 |
TCP | 6 |
UDP | 17 |
路由扩展头 | 43 |
ICMPv6 | 58 |
OSPF | 89 |
没有下一个报头 | 59 |
扩展头顺序
- 逐跳选项报头
- 目标选项报头1(当存在路由报头时,用于中间目标)
- 路由报头
- 分片段报头
- 身份验证报头
- 封装安全有效载荷报头
- 目标选项报头2(用于最终目标)
1.2.1 逐跳选项报头
- 存放沿途所有路由器必须检查的信息!
- 定义一些选项:eg:巨形数据报
- 选项按照类型、长度、值出现
选项字段最高两位含义如下:
00 :跳过该选项
01 :丢弃数据包,不通知发送方
10 :丢弃数据包,无论数据包目标地址是否为一个组播地址,都向发送方发出ICMPv6参数问题的报文
11 :丢弃数据包,如果数据包的目标地址不是一个组播地址,就向发送方发出一个ICMPv6参数问题的报文
选项字段最高第三位表示在通向目标的路径中,选项数据是否可以改变
0 :选项数据不能改变
1 :选项数据可以改变
当路由器识别不出对应类型的时候,执行相应动作。
1.2.2 路由报头
使数据分组经过指定的中间节点到达目的地。
剩余分段:表示地址表中还有多少个地址未被访问!每过一个列表中的地址 -1
当数据到达每个中间目标地址的时候,执行动作如下:
- 当前目标地址与第(n-段剩余值+1)个地址交换;(n是地址总数)
- 段剩余值减1
- 转发
2.ICMPv6协议
ICMPv6报文类型
差错报文:通告IPv6分组传输中出现的错误
- 目标不可达
- 数据包超长
- 超时
- 参数问题
信息报文:提供诊断和附加的主机功能
- MLD
- ND(ARP,redirect)
- 回声请求和应答
2.1 ICMPv6报文的一般格式
- 差错报文:类型=0 xxxxxxx =0 ~ 127
- 信息报文:类型=1 xxxxxxx =128 ~255
- 128: 回声请求 129:回声应答
2.2 ICMPv6的三个应用
- ping
- tracert
- 第一个请求:HopLim=1(TTL=1)
- 第一跳路由器收到,发送超时消息
- 得到第一跳路由器信息
- 第二个请求:HopLim=2(TTL=2)
- 第二跳路由器收到,发送超时消息
- 得到第二跳路由器信息
- ……
- 指导目的地,目的机通常发送端口不可达报文
- PMTU发现
- MTU:最大传输单元,在IPv4网络中可能由路由器承担分段,容易遭受分片型攻击,在IPv6中规定分段不能由路由器承担,只能由发送方分段(切割数据来适应载重能力),因此在IPv6中,要求源节点(发送方)必须在发送数据之前知道整个传输路径的最小MTU
- PMTU发现原理(试探)
- 源机向目的机发送MTU=1500字节的IPv6数据包
- 路由器B向源发送超长信息,指定MTU=1400字节
- 源机向目的机发送MTU=1400字节的IPv6数据包
- 路由器C向源发送超长消息,指定MTU=1300字节
- 源机向目的机发送MTU=1300字节的IPv6数据包
- 此后,该路径的MTU都使用1300字节
最后更新: 2018年11月09日 19:58
原始链接: https://silence-linhl.github.io/blog/2018/11/09/IPv6-packet/