一:ICMP头
ICMP是TCP/IP协议簇中的一个功能协议,负责提供在TCP/IP网络上的设备、服务以及路由器可用性的消息
大多数网络检修技巧和工具都是基于常用的ICMP消息类型
类型(Type):ICMP消息基于RFC规范的类型或分类
代码(Code):ICMP消息基于RFC规范的子类型
校验和(Checksum):用来保证ICMP头和数据在抵达目的地时的完整性
可变域(Variable):依赖于 Type 和 Code
ICMP数据部分的结构取决于由Type和Code域中的值所定义的用途
ICMP类型域可以作为数据包的分类,Code域作为它的子类。Type域的值为3?意味着“目标不可达”。但只有这个信息可能不足以发现问题,当数据包在Code域中指明值为3,也就是“端口不可达”时,可以知道是通信端口的问题
ICMP因为ping工具而广为人知,ping用来检测一个设备的可连接性
ping命令每次向一个设备发送一个数据包,并等待回复,ping命令只包含两步,请求与响应
echo和ping经常混用:ping是一个工具的名字,ping工具用来发送ICMP的echo请求数据包
可以看出上图是192.168.100.138给192.168.100.1发出的echo请求,这是一个简单的ICMP数据包,包含了很少的数据。
Sequence?number用来匹配请求和响应
在ICMP数据包可变域还有一串随机文本字符?
第二个数据包是echo响应数据包,对应上一个请求包,Sequence?number一致,当这个数据包被192.168.100.138成功接收到之后,ping就会报告成功
还可以使用ping的选项来增加它的数据填充,这样在检测不同类型的网络时,就可以强制将数据包分片,在检测具有较小分片大小的网络时会用到。
路由跟踪功能用来识别一个设备都另一个设备的通路。在一个简单的网络中,这个通路可能只经过一个路由器,甚至一个不经过。在复杂的网络中可能要经过数十个路由器才能到达目的地。确定数据包从一个目的地到另一个目的地的实际路径,对于通信检修非常重要。
通过使用ICMP,路由跟踪可以画出数据包的路径
上图中的TTL设置为1,这个数据包再遇到第一个路由器会被丢弃掉。因为目标地址为4.2.2.1 ,故源设备和目的设备之间至少会有一个路由器,所以这个数据包不会到达目的地。
上图是第一个数据包的响应的数据包,类型11?代码为0?指数据包TTL在传输过程中超时,因此目的不可达
这个ICMP响应数据包有时候被叫做双头包,因为这个ICMP的结尾部分还包含了原先echo请求的IP头和ICMP数据副本,在网络检修是十分有用?
上图中的TTL设置为2,?一直持续TTL长到9得到了响应
上图的src来自 4.2.2.1 ,type为0?code?为0? ,根据每一次的src即可得到传输路径