ping与wireshark
ping的相关知识
在日常生活或工作中,我们在判断与对方网络是否畅通,使用的最多的莫过于
ping
命令了。
但是你知道ping
是如何工作的吗?
知其然,更要知其所以然,下面我们一起来学习一下这个过程吧。
前置知识 – ICMP 协议
ping
是基于ICMP 协议
工作的,所以要明白ping
的工作,首先我们先来熟悉ICMP 协议
。
什么是ICMP协议?
ICMP 全称是 Internet Control Message Protocol,也就是互联网控制报文协议。
网络包在复杂的网络传输环境里,常常会遇到各种问题。当遇到问题的时候,总不能死的不明不白,没头没脑的作风不是计算机网络的风格。所以需要传出消息,报告遇到了什么问题,这样才可以调整传输策略,以此来控制整个局面。
所以ICMP就是负责传递这个信息的。
ICMP的具体功能
ICMP 主要的功能包括:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。
换句话说,我们在进行数据包的发送过程中,对ip包的结果要有明确的反馈,以确定是否发送成功。如果失败,又是因为什么错误。
那么问题来了,ICMP要如何进行这些信息的传递呢?别急,我们先来了解一下ICMP包头的布局。
可见,ICMP报文是被封装在IP包里面的。而在ICMP报文中,我们要重点关注两个区域:类型
和代码
。
下面我们具体对这两类进行介绍:
ICMP类型
ICMP包头的类型字段,大致分为二类:
- 一类是用于诊断的查询消息,也就是「
查询报文类型
」- 另一类是通知出错原因的错误消息,也就是「
差错报文类型
」
其中,图片中的第一列的数字就是ICMP类型字段的内容,对应者不同的种类。
报文类型又可以分为查询报文类型与差错报文类型。
回收消息 –类型 0与8
回送消息用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端的一种消息, ping 命令
就是利用这个消息实现的。
可知,在发送请求后如果收到应答,就表示二者可以进行通信。
差错报文类型 – 3,4,5,11
具体对应内容见上图。同时,除了不同的错误会对应不同的类型字段外,同一个类型也会细分为不同的错误,这里使用代码字段进行区分。
简单举一个例子,类型号3对应目标消息不可达,而目标不可达又可以分为不同的类别,常见的有6类:
其余几个类型也会有不同的代码号,我们这里不在细说。
ping的过程
回送消息用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端的一种消息,
ping 命令
就是利用这个消息实现的。
同一个网络的主机进行ping操作
下面我们重点来看一下
ping
的发送与接收过程,以同一个网络下的两个不同主机为例。
ping操作下的发送操作:
1. ping 命令
执⾏的时候,源主机⾸先会构建⼀个 ICMP 回送请求消息数据包
。
前面我们已经了解到,ICMP的类型字段分为不同类别,其中8代表回送请求。
一个ICMP数据包包含很多字段,其中最重要的是 类型 与 序号 两个区域。
- 第⼀个是类型,对于回送请求消息⽽⾔该字段为 8 ;
- 另外⼀个是序号,主要⽤于区分连续 ping 的时候发出的多个数据包
2. 整合为IP数据包
然后,由 ICMP 协议将这个数据包连同地址 目标地址⼀起交给 IP 层。IP 层将以 本机 IP 地址作为源地址,协议字段设置为 1 表示是 ICMP 协议,再加上⼀些其他控制信息,构建⼀个 IP 数据包。
3. MAC头的加入
如果在本地 ARP 映射表中查找出 目标IP地址所对应的 MAC 地址,则可以直接使⽤;如果没有,则需要发送 ARP 协议查询 MAC 地址,获得 MAC 地址后,由数据链路层构建⼀个数据帧,⽬的地址是 IP 层传过来的 MAC 地址,源地址则是本机的 MAC 地址;还要附加上⼀些控制信息,依据以太⽹的介质访问规则,将它们传送出去。
ping操作下的接收操作
(以下步骤大体分为三个流程)
- 主机 B 收到这个数据帧后,先检查它的⽬的 MAC 地址,并和本机的 MAC 地址对⽐,如符合,则接收,否则就丢弃。
- 接收后检查该数据帧,将 IP 数据包从帧中提取出来,交给本机的 IP 层。同样,IP 层检查后,将有⽤的信息提取后交给 ICMP 协议。
- 主机 B 会构建⼀个 ICMP 回送响应消息数据包,回送响应数据包的
类型字段为 0
,序号
为接收到的请求数据包中的序号,然后再发送出去给主机 A。
在规定的时候间内,源主机如果没有接到 ICMP 的应答包,则说明⽬标主机不可达;如果接收到了 ICMP 回送响应消息,则说明⽬标主机可达。
此时,源主机会检查,⽤当前时刻减去该数据包最初从源主机上发出的时刻,就是 ICMP 数据包的时间延迟。
下面对ping的流程做一个整体描述:
跨网段的ping操作
上面的ping操作是以在同一个局域网里的主机为例,如果二者不在同一个网络,这其中会涉及到路由的转发等。
但是这影响的只是传输过程的复杂性,不会对ICMP头造成影响。
ping这个操作就是利用ICMP中的类型8与类型0的交互实现。
小鲨鱼的使用
Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是截取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。
前面我们讲了那么多ping操作的理论知识,这里正好来实际操作验证一下。
第一步 打开wireshark软件,现在对应的网卡
第二步 过滤操作:icmp
第三步 ping一下
第四步 抓到ping操作的icmp包
第五步 icmp的分析
第六步 IP协议的对应
ps:wireshark是一个强大的网络抓包工具,这里只是用于抓取和分析了ping操作的包。通过不同的过滤规则可以抓取不同的数据包。
推荐一个博客:wireshark抓包入门