TCP/IP IP差错控制协议
IP差错控制协议
ICMP-因特网控制报文协议
差错控制,是IP的补充
ICMP传输方法
1 | 通过IP来发送,封装在IP的数据区 |
ICMP提供的功能
- 属于报错的功能,只进行报错不进行纠错
- 只将差错报告给原始的发送者(源节点)
ICMP报文传输
1 | ICMP封装在IP数据区,但只是IP的补充非IP的上层协议 |
ICMP报文格式
- TYPE :8bit ,报文的大的类别
- CODE :8bit ,大类中的子类 (若没有子类,则为0)
- CHECKSUM :16bit ,校验和 (算法与IP的首部校验和算法相同,求16位整数序列反码和的反码)
IPv4和IPv6的ICMP报文类型:
- v6中包含很多简化的工作,(取消v4中的一些类型
MLD : 组管理协议 -> 对应v4中的IGMP
- v4中的常用类型:
0 echo (request reply) 3 目标不可达 11 time Execced 超时 (在v6中,很多都借用了ICMP的类型)
一些ICMP报文
- ICMPv4报文类型
- ICMPv6报文类型
Echo
(ping命令:测试IP地址是否响应和可达)
(ping中的ICMP -> echo request , echo reply)
(不同OS对ping的实现有差异)
Echo报文格式
- Type
IPv4
IPv68:请求 Echo request 0:响应 Echo response
128:请求 129:响应
- Code:可指定数据
- Id,Seq:
目标用于信息匹配的字段
-> 与源站请求的一致,则匹配进行响应 - Checksum (16bit):
IPv4:仅仅计算ICMP报文本身进行校验和计算(首部+携带的数据
IPv6:还需要加入一个 “伪首部(pseudo-header)”进行计算 (为了统一 TCP,UDP
IPv6伪首部格式:
1 | 伪头部: |
- Optional Data:
所带数据长度是可变长度,用于给网络管理员测试
目标不可达
报文格式
type
IPv4:16种
IPv6:8种code
checksum
// 未使用的保留0
// 出问题的IPv6报文的前缀部分:首部头+前64bit(IPv4) ICMPv6的最大长度
Source Quench 报文
1 | 拥塞控制相关 |
Redirect 重定向
发生背景:在通信时,路由器发现有另一条更优的路径,则会通知源端可以下一次路由走更优的一跳,发送一个 redirect ICMP报文
缺点:不能结局所有的路由问题,因为ICMP报文只会发送给源端
ICMP重定向报文格式
IPv6重定向报文格式
Time Exceeded 超时
问题背景:
通信中可能出现路由环路,生命期或跳数耗尽,丢弃报文向源端发送超时报文
报文格式
- Type:
IPv4 :11
IPv6 :3 - Code:
0: 到达生命期
1: 碎片重装超时
Parameter Problem 参数问题
- IPv4:
- IPv6:
例如:取值超范围,不可辨认下一个头部……
Timestamp Request 时间戳 (request reply)
用于主机间的时钟同步 (IPv4)
1 源时间戳 (发送请求的站点填入)
2 接收时间戳 (接收者填入)
3 传输时间戳 (接收者填入)
(2,3 基本一致, 差异主要在1之间,还要将往返时间包括进去)
参考资料:
- INTERNETWORKING WITH TCP/IP PRINCIPLES, PROTOCOLS, AND ARCHITECTURE Vol1 (6th Edition). DOUGLASE E. COMER