本文是对网络连通性测试的常用工具ping命令较为详细的介绍

1. ping命令简介

Ping是因特网包探测器,是使用ICMP回显请求报文和ICMP回显应答报文来测试主机之间连通性,用来诊断网络的工具。

Ping使用的是ICMP回显请求报文和ICMP回显应答报文,那么,

ICMP回显请求报文和回显应答格式如下:

类型(8)

代码(8)

校验和(16)

标识符(16)

序号(16)

选项数据

不同类型的ICMP报文由报文中的类型和代码共同决定

Ping命令中使用到ICMP报文中类型字段为0和8的询问报文,其中,8表示请求报文,0表示应答报文,代码字段均为0。

ICMP报文作为IP数据报的数据部分,加上IP数据报首部组成IP数据报发送出去。

2.实验部分

拓扑结构如图1(路由器:左边端口设为1,右边端口设为2)

图1

  • PC1能Ping通PC2

进入PC1 DOS界面,键入:ping 10.1.20.101,结果如下图2:

图2

可以看到默认情况下win XP是发出四个Ping包,由图中可知网络状态良好,并无丢包。

主机PC1发送IP数据报给不同网段的PC2,得通过与PC1连接在同一网段的路由器Router来转发。但是PC1发现自己的arp高速缓存中并不存在路由器Router的ip与MAC映射关系,于是广播一个arp请求,如图3。在图4展现了此广播的具体信息,目的MAC为广播地址,源MAC为PC1的MAC地址,发送端MAC,发送端IP,以及目的端ip,目的端待填写的MAC(全零)。

图3.PC1上的抓包

图4.PC1抓包的第一帧

路由器Router(linux搭建的)接收到此arp广播请求,查看目的端ip发现是自己的ip,则会将PC1的ip和MAC对应关系更新到自己的arp表中,如图5,并且会将自己端口1的MAC地址填充到发送端MAC,发送端ip变为路由器Router端口1对应的ip,目的端MAC和ip分别填写PC1的MAC和ip,如图5,然后以arp单播形式应答给PC1,PC1接着发送ICMP请求报文到ICMP。

图5.Router中的arp表

图6.Router端口1上抓包

端口2上抓包如图7,由第一帧可知路由器Router由端口2送一个arp广播请求,收到一个arp应答包(路由器收到PC1的ICMP回显请求报文,转发前查看自己的ARP表项,没有找到目的端对应的ARP表项,因此发送ARP请求),并将PC2的ip和MAC地址更新到自己的arp表中,如图5,第二行。

图7.Router端口2上抓包

PC1收到Router的arp应答后,将Router所对应的ip和MAC映射关系写入arp表中,如图8。接着向PC2发送ICMP回显请求报文,如图9,由数据链路层进行数据封装,目的MAC是路由器Router端口1的MAC地址,源MAC是PC1的MAC地址,目的ip是PC2 的ip,源IP是PC1的ip。

图8.PC1上arp表

图9.Client上抓包第三帧

PC2收到Router的arp广播后,将Router端口2对应的ip与MAC映射关系写入arp表中,如图10。路由器Router在收到PC1发来的ICMP回显请求报文后,通过查找路由表,发现有到达PC2的路由,查看arp表,然后把数据帧进行重新封装,目的MAC地址变为PC2的MAC,源MAC变为端口2对应MAC,目的ip与源ip不变,然后由端口2,将此数据报发给PC2,如图11。


图10.PC2上arp表

图11.端口2上抓包第三帧

PC2收到ICMP回显请求报文,返回一个ICMP回显应答报文,如图12,经过路由器后送到PC1(数据帧进入路由器后具体变化与上面类似,这儿不再讨论),PC1收到回显应答后,又继续发送ICMP请求报文。

图12.Server上抓包

  • PC2关机状态

当PC2关机状态,PC1发送四个ping包,收到了四个目的主机不可达报文,如图13

图13.PC2关机

PC1 ping PC2过程,首先广播arp请求获得端口1对应ip与MAC映射关系,写入PC1 的arp表,路由器arp表中也将PC1的ip与MAC映射关系写入自己的arp表(这个过程与上面PC1能ping通PC2过程一致),如图14、15。

图14.路由器arp表

图15.PC1的arp表

但是路由器端口2广播arp请求,并未收到来自PC2的arp应答包,然后每隔一定时间广播一个arp请求,抓包查看大约时间间隔为1s(不同系统不一样),如图16、17(后续未截图,已经查看)

图16.端口2抓包第二帧

图17.端口2抓包第三帧

PC1向路由器发送ICMP回显请求报文,由于arp表中并不能找到PC2的ip与MAC对应关系,大约三秒左右(不同系统处理不一样)由路由器向PC1回一个ICMP主机不可达报文,如图18、19(后续未截图,已经查看)。

图18.端口1抓包第三帧

图19.端口1抓包第四帧

测试网络连通性的PING命令相关推荐

  1. ping命令使用介绍及怎样使用Ping命令来测试网络连通性

     转载:http://blog.csdn.net/star_xiong/article/details/17320473 ping命令使用介绍及怎样使用Ping命令来测试网络连通性 一.ping命 ...

  2. php 网络是否通,测试网络连通性的命令是什么?

    测试网络连通性的命令是:ping命令.ping是用于测试网络连接量的程序,是工作在TCP/IP网络体系结构中应用层的一个服务命令,主要是向特定的目的主机发送ICMP(因特网报文控制协议)Echo请求报 ...

  3. python测试网络连通性_Python测试网络连通性示例【基于ping】

    本文实例讲述了Python测试网络连通性.,具体如下: Python代码 #!/usr/bin/python # -*- coding:GBK -*- """Docume ...

  4. python判断网络连通性_Python测试网络连通性示例【基于ping】

    本文实例讲述了Python测试网络连通性.分享给大家供大家参考,具体如下: Python代码 #!/usr/bin/python # -*- coding:GBK -*- ""&q ...

  5. python自动测试网络通断_Python测试网络连通性示例【基于ping】

    本文实例讲述了Python测试网络连通性.分享给大家供大家参考,具体如下: Python代码 #!/usr/bin/python # -*- coding:GBK -*- ""&q ...

  6. 使用 Java 测试网络连通性的几种方法

    目录 概述 简单判断两台机器的可达性 清单 1:简单判断两台机器的可达性 指定本地和远程网络地址,判断两台机器之间的可达性 程序清单 2:指定本地地址和远程地址,判断两台机器之间的可达性 IPv4 和 ...

  7. linux怎么用ping通测试连接,如何使用ping命令进行连通性测试

    一般进行网络故障排除时,可以使用ping 命令向目标计算机或IP地址发送ICMP回显请求.下面是学习啦小编收集整理的如何使用ping命令进行连通性测试,希望对大家有帮助~~ 使用ping命令进行连通性 ...

  8. linux nc命令 测试网络连通性

    利用nc命令查看网络连通性, 有时候telnet可能没有安装 有时候ping 虽然能ping通,但是实际上还是连不上 这时候可以考虑用nc 拒绝连接 xxx.xx.xxx.xxx是ip -bash-4 ...

  9. Linux命令之测试网络连通状态ping

    概述 ping 命令可以用于测试网络是否可连通. 注:该命令虽然与 Windows 系统下的 ping 命令一样,但是 Linux 系统下的 ping 命令不会自动终止,需要按 Ctrl + C 或者 ...

最新文章

  1. python数值运算实例_Python矩阵常见运算操作实例总结
  2. adb 测试工作中的总结
  3. 一秒点击屏幕次数_手机屏幕刷新率那点事儿!
  4. 《The Corporate Startup》作者访谈
  5. 解决 springboot 项目:找不到或无法加载主类
  6. docker更新容器命令 ,自启
  7. java筛选法求质数_用筛选法找出N内所有素数(质数)
  8. C# ?? 操作符示例
  9. python中的时间和时区详解(datetime / dateutil / pytz)
  10. javascript学习心得
  11. 一边裁员、一边招聘,领导到底想干啥?
  12. 明源售楼系统技术解析 架构搭建(一)
  13. mysql interval啥意思_MySQL interval()函数
  14. 编译Linux内核没有zImage,Linux 编译系统的简单介绍与内核编译安装
  15. 维美儿 名画背后的故事 《戴珍珠耳环的少女》
  16. matlab实现牛顿下山法(下山过程)
  17. 通俗易懂的斯特林数介绍
  18. linux系统32和64的区别,32位和64位的Linux系统区别
  19. SQL Server 几种去重总结
  20. 大学本科毕业生如何免费进行论文查重

热门文章

  1. XJOI_3571_求十位数
  2. 如何利用python准确预测双色球开奖结果
  3. Shell-基础部分
  4. 传神语联再度冲刺科创板:2020年业绩大幅下滑,本质为中介公司?
  5. js array 添加对象_不可不知的 Vue.js 列表渲染
  6. php两个并排的按钮,如何并排设置2个按钮
  7. MySQL中对比两张表是否有不同数据
  8. 《众妙之门——自由网站设计师成功之道》一1.5 客户服务的重要性
  9. java和vr联系_VR,AR,MR的区别与联系
  10. Excel技巧:如何用函数删除换行符、文本前空格、文本中间空格?