1. Ping是什么?
答: Ping是一个诊断网络连通情况的工具, 用来检测Internet上远程目的主机是否可到达.
2. Ping工作原理是什么?
答: Ping通过向远程目的主机发送Ping包(即ICMP回应请求(Echo Request)报文), 远程目的主机收到此报文后,将回复Echo包(即ICMP 回应应答(Echo Reply)报文). 发送Ping的主机收到此响应后就知道远程主机处于在线存活状态, 可以到达.
3. 为什么有Ping?
答: 互联网是不可靠的, 远程主机随时可能处于失效状态. 用户经常需要知道远程主机是否处于在线状态, 或者诊断网络是否可用. Ping利用ICMP消息达到此目的, 而且操作简单.
4. 什么是ICMP? 它和Ping有什么关系?
答: ICMP为Internet控制报文协议, 用于在主机和路由器之间传递控制信息, 提供差错报告和网络诊断的功能.Ping是常用的ICMP工具,它利用ICMP回应请求报文和ICMP 回应应答报文在源和目的主机之间交换信息,用来判断对端是否在线.
5. 怎么判定Ping 的成功、失败?
答: 当发生Ping的主机收到了远程主机回复的Echo包时, 就说明Ping成功执行了. 否则, Ping将返回错误信息, 例如请求超时, 远程主机不可达等错误信息.
6. Ping失败了是否说明远程主机是失效的?
答: 当远程主机处于失效状态时, 无法返回Echo包, Ping是失败的. 但是有时候为了安全起见, 路由器或者远程主机关闭了ICMP部分或者全部功能, 导致不回复Echo包, 这样Ping的结果也是失败的. 但是远程主机是存活的.
7. 为什么我们常见到ping的结果是"..!!!"?
答: 我们用"."和"!"来简单表示Ping的成功和失败.
"!"表示收到远端回复的Echo包, Ping成功.
"."表示没有收到远端的Echo包, 等待超时结束, Ping失败.
8. 什么是Ping超时?
答: 由于主机发出Ping包后需要等待目的主机回复的Echo包才能获知目的主机在线,但在有些情况下Ping会失败,主机无法收到Echo包,因此主机需要一个等待超时机制以结束本次Ping行为,即主机发出Ping包后启动一个定时器,如果在指定时间内没有收到Echo包,则定时器超时,结束本次操作.
附录:(趣味知识)
1. ICMP和四层协议UDP/TCP一样,有自己的头标, 通过伪头计算校验和, 并需要被IP头标封装, 但是为何说ICMP是三层协议?
答: ICMP协议不具备四层协议的特性, 四层协议提供的是数据传输服务.ICMP协议通常被认为是IP的附属协议, 是IP的组成部分, 主要是用来传输一些控制信息, 因此是一个三层协议.虽然ICMP有自己的头标,但是必须被封装在IP数据报中才能进行路由.
2. 对同一个目的地址Ping多次, 会发现第一次的RTT值稍大于后续次数的RTT(Round-Trip Time: 往返时延)值,如下:
Host1#ping linjiaen.blog.51cto.com
Pinging linjiaen.blog.51cto.com [118.144.78.36] with 32 bytes of data:
Reply from 118.144.78.36: bytes=32 time=58ms TTL=53
Reply from 118.144.78.36: bytes=32 time=54ms TTL=53
Reply from 118.144.78.36: bytes=32 time=53ms TTL=53
Reply from 118.144.78.36: bytes=32 time=52ms TTL=53
请解释原因.
答: 在进行第一个Ping操作时, 由于本地主机不知道远程主机的MAC地址, 因此需要先进性ARP操作. 故增加了TTL时间.
3. 如果试图Ping一个广播地址将会怎样?
答: Ping一个广播地址是允许的, 如果Ping一个子网的广播地址, 此子网内的所有主机将回复Echo包. 这样做的一个目的是希望知道这个子网内当前有哪些主机处于存活状态, 但是也增加了网络流量.
由于这个特点, 黑客常用Ping进行DOS(denial-of-service)攻击, 例如Smurf attack, 可参考http://en.wikipedia.org/wiki/Smurf_attack.
4. 对同一个目的地址Ping多次, 主机将发送多个Ping包, 于是会收到多个Echo包. 主机是
如何将这些Echo包与之前发送的Ping包进行一一对应的以正确计算每次Ping的RTT值?
答: 回应请求/回应应答报文头标中有一个域为 Sequence Number (序列号),Ping程序通过此域将每个Echo包与发送的Ping包进行区分和匹配. 实现上序列号常常从1开始增加.
序列号的另外作用是通过它可以查看是否有分组丢失、失序或重复.
5. 在同一台主机上打开两个Ping程序, 并同时Ping同一个目的主机, 每个Ping程序将发送
Ping包, 并分别收到Echo包. 主机是如何将这些Echo包与Ping应用程序进行一一对应以正确计算每个Ping程序的RTT值?
答: 回应请求/回应应答报文头标中有一个域为Identifier(标识符), 主机通过此域区分不同Ping程序的回应请求/回应应答报文. Unix实现上把ICMP报文中的标识符域设置为发送进程的ID号, 这样即使在同一台主机上同时运行了多个ping程序实例, ping程序也可以识别出返回的信息.