日常网络中常用的监控大多是基于ICMP协议开发的,今天打算梳理一下已知的各种监控工具(手段),看看他们之间有什么区别和关联。配合Wireshark完成了一些对协议上的理解。本博客中提到的用源地址是172.31.0.7(我云主机中的内网ip)目的地址是202.101.33.1没有什么特殊的意义,随便敲了一个可用的地址,就目前狼多肉少的年代,随意敲一个ip出来可能都是在用的。
注:以下截图和参数均在CentOS 6.5中呈现的,其他系统和版本可能不相同。
ICMP协议
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它本身不会像TCP、UDP那样作为信息载体的传输协议,但是它可以承载一些数据交互性的数据,针对网络情况作出判断和结果输出。按照官方语言解释就是:错误侦测与回报机制。
简单的说一下ICMP的类型:
ICMP类型介绍——描述
类型0 Echo Reply——回显应答(Ping应答)
类型3 Network Unreachable——网络不可达
类型11 TTL equals 0 during transit——传输期间生存时间为0
好了,我们带入应用慢慢理解其中的意思吧。我们在排查网络故障中常用的基于ICMP的工具有ping、traceroute、MTR、fping,用的最多的应该就是ping了吧?话不多说,就从ping开始入手吧。
ping
使用
ping的使用很简单,无论在Windows、linux、mac系统中都是可以直接拿来用的,最原始的使用格式就是ping后面加上目的ip即可,默认是用设备的接口地址作为源地址进行ping操作,也可以通过增加参数来更改默认值。
-c count
增加-c参数可以指定ping的次数,比如计算50次中的丢包率,延迟就需要写入-c 50即可。
-i interval
这里明确说一下这是小写的i不要记混,ping默认的间隔是1秒发送一次ping包,可以通过-i修改间隔时间,间隔时间最短目前只支持到0.2s。
-s packetsize
修改ping包的大小,默认值为56字节,可以测试大包修改相应的数值。
-t ttl
通过-t可以修改ttl值(生命周期),这里多说一点,现实网络中传输是要经过运营商的,也就是常见的电信、联通、移动等ISP服务提供商,所以两个设备之间必定有多设备进行转发,才可以把数据包传到目的设备上,当数据包经过一次转发设备ttl值就会递减1个值,所以默认ping的话只要对端设备不进行icmp策略限制,只要对端不是宕机状态,理论上ping是完全可以把包送过去的,国内最远的距离也不过30跳,当然如果中间路由有环路发生,ttl值就会递减到0从而丢弃报文。
利用这一点,就可以通过ttl值来检测网络中的跳数,比如我在筛选IDC网络质量时会设定一个目的地址,多个IDC机房同时ping向同一个目的ip,把ttl值固定在10,凡是没有ping通的就说明已经超过了10跳,没有通的IDC就会被筛选在外了。
-I interface or address