ping命令是一个用于查询某个主机是否已经加电并能够响应的网络诊断命令工具,处于网络协议栈的应用层。它使用icmp协议。而icmp——网际报文控制协议是一种将差错与控制集于一体的协议,用于传输差错报文和消息控制报文。而ping命令就属于使用消息控制报文。
1.ping命令的原理
ping命令工具将报文通过网络传递给指定的主机,然后再要求对方返回一个同样大小的数据包,以此来确定两台网络机器是否连接相通,时延是多少
2.ping命令的使用场景
2.1 ping本地环回地址,如127.0.0.1
ping本地环回地址成功,说明本机的tcp/ip协议安装正确
2.2 ping 172.16.2.34(本机ipv4地址)
ping本机ip地址成功,说明本机的网卡运转正常
2.3 ping 172.16.2.1(网关ip)
ping网关成功,说明到网关是连通的
2.4 ping 39.156.69.79 (外网ip)
ping外网ip成功,说明能成功连接到外网
通过以上几个应用案例,能够有效帮助我们进行网络诊断。假设计算机不能进行正常的网络访问,我们可以通过ping命令按照以上的几个应用场景来逐步排查,以确认问题是出现在tcp/ip协议的安装、网卡问题还是路由器问题等等。
3.ping命令可使用的参数
3.1 -t参数
如:Ping -t 172.16.2.1 。-t参数-t 参数可以一直发送 ping 的数据包,直到人为地停止,它的一个应用场景为,可
以通过这种方式来感受到目的主机之间网络状况的变化 。结果如下图所示:
3.2 -n参数
如:ping –n 1 172.16.2.1 。-n 参数可以指定发送数据包的数量,这里只发送一个 ping 的数据包
3.3 -l参数
如:ping –l 64 172.16.2.1 。-l参数可以指定发送的数据包的长度。这里的使用的 64 个字节是指 icmp 的携带数据部分
3.4 ping命令还有其他参数,如:
-r count 在"记录路由"字段中记录传出和返回数据包的路由。count 可以指定最少 1 台,最多 9 台计算机。
-s count 指定 count 指定的跃点数的时间戳。
-j computer-list 利用 computer-list 指定的计算机列表路由数据包。连续计算机可以被中间网关分隔(路由稀疏源)IP 允许的最大数量为 9。
4.使用wireshark工具对ping命令抓包
为了对ping命令有更深的认识和了解,使用wireshark抓包工具来抓取并分析ping命令的具体报文。
这里,我们ping 百度的地址,由下图可以知道,ping指令共发送4个请求数据包,收到baidu.com的4个应答数据包
由于ping指令使用的是ICPMP协议,因此我们在wireshark的显示过滤器中设置只显示icmp协议(wireshark的显示过滤器能显示指定的协议),结果如下:
共8个icmp报文
四个请求包的信息:
源ip:172.16.2.34(本机ip)
目的ip:39.156.69.79
ip标识分别为:0x5d36,0x5d37,0x5d38,0x5d39
总长度:均为60
生存时间:均为128
四个应答包的信息:
源ip:39.156.69.79
目的ip:172.16.2.34(本机ip)
ip标识分别为:0x5d36,0x5d37,0x5d38,0x5d39
总长度:均为60
生存时间:均为46
ip数据包的长度为60,ip头部的长度为20, icmp的头部固定部分为8,icmp的数据部分为32。
分析知道,由于wireshark捕获的数据包是通过本机的网卡来抓取的,因此本机发送出去的数据包尚未经过任何一个路由器,故TTL为128。而应答报文已经经过了若干个路由器,因此这里应答报文的TTL值为46。
通过抓包,我们更深入第了解到,基于icmp的ping指令每次发送的icmp消息控制报文给目的主机,并要求目的主机返回一个同样大小的数据包,并且通过四次的发送,得到四次的返回报文,以此来判定两台主机间的连通状态和网络状况。