Wire Shark实际使用
—— 通过ICMP报文判断网络故障
ICMP包的定义
ICMP是是 TCP/IP 协议簇中网络层的一个辅助协议,和 IP 协议配合工作,不用于传输用户数据,专门用来传递网络控制信息、错误通知和联通性测试
如何产生ICMP包
系统自动生成
网络异常时,路由器/主机会自动回复ICMP包
1)访问不存在的ip地址 —— 回复ICMP目标主机不可达
2)访问的ip地址端口未开放 —— 回复ICMP端口不可达
3)数据包路由跳数过多,ttl减到0 —— 回复ICMP超时
4)数据包需要分片但设置了不分片(DF)—— 回复ICMP需要分片但DF置位
5)路由器发现更优路由 —— 发送ICMP重定向
手动生成
ping命令
ping baidu.com
本机发送ICMP类型为8,目标回复ICMP类型为0
traceroute/tracert 路由追踪
通过不断增大ttl,强制中间路由器返回ICMP超时包
1)Linux —— traceroute baidu.com
2)Windows —— tracert baidu.com
手动ping时常见故障与原因
1)传输失败,常见故障 —— 没配网关
2)配了网关,但找不到网关,主机发送arp寻找网关mac失败 —— 来自本机回复,无法访问目标主机
3)配了网关,也能找到网关,但网关设备缺少路由 —— 来自网关的回复,无法访问目标网络
4)配了网关,也能找到网关,网关有目标路由,但是后面有设备缺路由
——》后面的设备有回包的路由,但没有目的地的路由 —— 来自缺路由的设备,无法访问目标网络
——》后面的设备没有回包路由,也没有目的地的路由 —— 请求超时
5)配置完成后b能ping通a,但a无法ping通b,通常为无法ping通的机器有防火墙拦截 —— 请求超时
实际抓包中ICMP报文Type+Code描述
1)8+0 —— 代表一个ping请求(Echo Request)

2)0+0 —— 代表一个ping回应Echo Reply

3)3+0 —— 网络不可达,设备缺路由

4)3+1 —— 主机不可达,设备不缺路由,但是缺少arp

5)3+3 —— 端口不可达

6)3+2 —— 协议不可达
* 协议号与端口号的区别为协议号是ip头部里的字段,用于标识这个包属于tcp、udp、icmp、gre、ospf还是vrrp,端口号为tcp、udp头部里的字段,用于标识这个包属于http、dns、ftp、tftp还是smtp

7)11+0 —— ttl值为0,丢包了

8)5+0 —— 重定向