TCP/IP协议族【第9章网际控制报文协议ICMP】
9.1 引言
IP协议的缺点:IP协议没有差错报告或差错纠正机制;IP协议缺少一种为主机和管理查询的机制;
ICMP为弥补以上缺点而设计,配合IP协议使用.
位置:
ICMP本身是网络层协议,但它的报文首先要封装成IP数据报,再传送给下一层。(IP数据报协议字段为1)
9.2 报文
ICMP报文分为两大类
类型一:差错报告报文(error-reporting message)
当路由器或终点主机在处理IP报文时遇到问题。
类型二:查询报文(query message)
成对出现,帮助网络管理员从一个路由器或主机得到特定信息。
9.2.1 报文格式
9.2.2 差错报告报文
当最后的终点在规定的时间内,没有收到所有的分片时,它就丢弃已收到的分片,并向源点发送超时报文。
代码0:在首部的某个字段中有差错或二义性。这种情况下,指针字段值指向有问题的字节。
代码1:表示缺少所需的选项部分。这种情况下不是用指针
代码1:对特定主机路由的改变
代码2:基于指明的服务类型对特定网络路由的改变
代码3:基于指明的服务类型对特定主机路由的改变
9.2.3 查询
回送请求报文可以由主机或路由器发送,收到回送请求报文的主机或路由器发送回送回答报文;
回送请求和回送回答报文可由网络管理员来使用,用来检查IP协议的工作情况;
用回送请求和回送回答报文可测试某个主机的可达性,通常调用ping命令来完成。
时间戳请求和回答
时间戳请求和时间戳回答报文可用来计算数据报从源点到终点所需的单向时间,以及再返回源点所需的往返时间。所用的公式是:
发送时间=接收时间戳的值-原始时间戳的值
接收时间=分组返回的时间-发送时间戳的值
往返时间= 发送时间+接收时间
9.2.4 校验和
发送端步骤:
1.把校验和字段置0
2.计算16位(首部+数据)之和
3..把得到的和求反码,得到校验和
4. 把校验和存储在校验和字段中。
校验和检测
1计算16位(首部+数据)之和
2. 把所得到的和求反码
3. 判断2的结果是不是0,是0则接受、
书上这里一笔带过,其实要去看看实现的代码有位运算,看不懂。
9.3 排错工具
9.3.1 ping
可以看上面截图,ping会发送请求报文,并且会计算往返时间(round_trip time)RTT.
9.3.2 traceroute
Traceroute功能:用来跟踪一个分组从源点到终点的路径。
实现原理:
1)源主机A向目的主机B分别发送多次UDP分组,将TTL值设为1,2,3…n;
2)每过一跳路由器,TTL减1,利用收到的超时ICMP报文确定所过路由器IP;
3)在UDP报文中封装一个UDP协议不支持的端口,目的主机B收到后,无法交付到相应的应用程序
数据报被丢弃,并向A发送ICMP终点不可达差错报文。(类型3,代码3)。
这里就不截屏了。注意:当traceroute在5秒内收不到响应,会打印星号*,然后试下一跳。