互联网控制报文协议,网络层协议,但是基于IP协议实现
1. ICMP的两种类型报文
1.1 主动探查的查询报文
- 主动请求的类型是8,主动请求的应答是0
- 发出主动请求,如果请求能顺利到达目的,会返回主动请求的应答
- 超时没收到应答可以判断网络不通
1.2 异常报告的差错报文
- 发出ICMP请求后,在出现故障的地方会返回一个差错报文,告诉请求主机哪里出现了问题
- 终点不可达类型是3
- 网络不可达:网络不通
- 主机不可达:找不到目标IP
- 协议不可达:跟人家的协议不匹配
- 端口不可达:对应不上目标端口
- 需要进行分片但设置了不分片:对于中间经过的路由可能设置的mtu要比报文要小,需要进行分片处理,但是你又设置了不允许分片,导致消息无法通过。
- 源点抑制类型是4:告诉请求主机放慢发送速度
- 时间超时的类型是11:告诉请求主机,网络包已经超过生存周期但是还没到目的主机。
- 路由重定向类型是5:告诉请求主机,下一次发请求走另一个路由器
2. 基于ICMP的一些命令
2.1 ping
- 可以知道目标主机是否可达
- 还能求出网络时延
- 基于ICMP的查询报文实现
2.2 traceroute
- 可以求出距离目标IP的TTL
- 通过在发送udp数据包时依次设置TTL=1、2、3、4、5。。。知道成功到达目的IP
- 如何判断UDP有没有达到目的主机
- 设置一个不可能的值作为UDP端口号(大于30000)。当该数据报到达时,将目的主机的UDP模块产生一份‘端口不可达’的错误ICMP报文。则可知达到目的主机了
- 故意设置不分片,从而确定整个路径中的MTU。
- 基于ICMP的差错报文实现的
?
|