一、ping命令是用来做什么的?
ping命令是测试网络是否畅通的工具。用于测试网络连接的程序。
ping发送一个ICMP;回声请求消息给目的地并报告是否收到所有希望的icmp echo(ICMP回声应答)。
1、ICMP是什么呢?
ICMP协议(internet control message protocol)因特网控制消息协议的缩写。它是tcp、ip协议的一个子协议,用于在ip主机、路由器之间传递控制消息。
ping命令通常用来作为网络可用性的检查。ping命令可以对一个网络地址发送测试数据包。看该网络地址是否有响应并统计响应时间,以此来测试网络。
2、ping命令和icmp的关系
ping命令发送数据使用的是ICMP协议。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
二、ping命令的使用
ping + 目标主机:用来测试本机与目标主机之间是否联通、联通速度如何、稳定性如何。
ping [参数选项] [目标主机]
参数选项:
-c 发包的次数 count
[-w deadline] 多少时间内必须完成 期限
[-W timeout] 超过多少时间就停止 超时
[-i interval] 包和包之间的时间间隔 间隔
ping 同一网段里面的其他IP地址:
[root@nginx-kafka01 python]# ping 192.168.2.43 PING 192.168.2.43 (192.168.2.43) 56(84) bytes of data. 64 bytes from 192.168.2.43: icmp_seq=1 ttl=64 time=6.82 ms 64 bytes from 192.168.2.43: icmp_seq=2 ttl=64 time=3.13 ms 64 bytes from 192.168.2.43: icmp_seq=3 ttl=64 time=10.4 ms 64 bytes from 192.168.2.43: icmp_seq=4 ttl=64 time=4.58 ms 64 bytes from 192.168.2.43: icmp_seq=5 ttl=64 time=3.95 ms ^C --- 192.168.2.43 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4010ms rtt min/avg/max/mdev = 3.132/5.797/10.498/2.651 ms
ping外网:测试能不能进行上网:
[root@nginx-kafka01 python]# ping www.bai.com PING parking.nodes.gz.com (121.201.112.137) 56(84) bytes of data. 64 bytes from 121.201.112.137 (121.201.112.137): icmp_seq=1 ttl=51 time=19.5 ms 64 bytes from 121.201.112.137 (121.201.112.137): icmp_seq=2 ttl=51 time=17.9 ms 64 bytes from 121.201.112.137 (121.201.112.137): icmp_seq=3 ttl=51 time=22.1 ms 64 bytes from 121.201.112.137 (121.201.112.137): icmp_seq=4 ttl=51 time=19.1 ms 64 bytes from 121.201.112.137 (121.201.112.137): icmp_seq=5 ttl=51 time=18.8 ms 64 bytes from 121.201.112.137 (121.201.112.137): icmp_seq=6 ttl=51 time=18.6 ms 64 bytes from 121.201.112.137 (121.201.112.137): icmp_seq=7 ttl=51 time=17.6 ms 64 bytes from 121.201.112.137 (121.201.112.137): icmp_seq=8 ttl=51 time=19.0 ms 64 bytes from 121.201.112.137 (121.201.112.137): icmp_seq=9 ttl=51 time=19.4 ms
三、ping过程的原理
ping过程的详解
1.如果是域名,先进行域名解析到具体的一个IP
2.将要ping的IP地址和自己的子网掩码进行与运算,得出相应的网段号
3.然后到自己的电脑里的路由表里查询是否有到这个网段的路由,如果没有就走默认路由,会有下一跳地址
4.查看本机arp缓存表里面是否有下一跳地址的mac地址,如果有就直接封装,如果没有就发arp广播获得下一跳地址的mac地址
5.得到了mac地址后,封装好数据,走物理层(网线)送出数据
举例说明:本机IP:192.168.0.237/24,ping 192.168.90.1的过程:
1.拿目的IP192.168.90.1和自己的子网掩码进行与运算,得到目的网段192.168.90.0
2.查看本机的路由表,是否有到达这个网段的路由,如果没有就走默认路由,下一跳地址为192.168.0.1
3.查看本机arp缓存表里是否有下一跳地址192.168.0.1的Mac地址,如果有就直接封装帧,如果没有,就发arp广播获得192.168.0.1的Mac地址
4.得到了Mac地址后,封装好数据,走物理层送出数据。
1、ping的是相同网段
从封装的角度讲:
使用A机器去 ping B机器
A:192.168.10.1
B:192.168.10.2
1、应用层--》数据,随机产生数据 假设是32个字节的数据
2、传输层---没有涉及端口号
3、网络层 ping --》icmp协议 --中requests请求包和reply包
icmp协议封装的头部信息中没有没有源地址和目的地址
4、ip协议:ip头部中有,封装成帧,里面有源ip(10.1)和目的ip(10.2)
10.1 10.2
5、帧的封装:源mac 和目的mac
自己 发arp广播得到192.168.10.2的mac地址
6、比特流
2、使用 Cisco实验拓扑图来演示这个原理:
步骤是:
1、画拓扑图
2、配置ip地址
3、测试
我们先在这个实验中添加两台pc机,和一个交换机,并配置好ip地址:
先配置pc1和pc5的ip地址分别为:192.168.10.1、192.168.10.2。
配置好ip地址并写好子网掩码、网关。
pc5的配置也是如同pc1一样,网关和子网掩码一样(因为是同一网段的)。
配置好了之后进行测试:使用pc1进行ping测试,ping pc机5:
以下是ping成功的显示结果:两个ip之间能够互相ping,都能ping通。
PC>ping 192.168.10.2 Pinging 192.168.10.2 with 32 bytes of data: Reply from 192.168.10.2: bytes=32 time=8ms TTL=255 Reply from 192.168.10.2: bytes=32 time=15ms TTL=255 Reply from 192.168.10.2: bytes=32 time=15ms TTL=255 Reply from 192.168.10.2: bytes=32 time=15ms TTL=255 Ping statistics for 192.168.10.2: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 8ms, Maximum = 15ms, Average = 13ms
PC>ping 192.168.10.1 Pinging 192.168.10.1 with 32 bytes of data: Reply from 192.168.10.1: bytes=32 time=18ms TTL=128 Reply from 192.168.10.1: bytes=32 time=15ms TTL=128 Reply from 192.168.10.1: bytes=32 time=16ms TTL=128 Reply from 192.168.10.1: bytes=32 time=13ms TTL=128 Ping statistics for 192.168.10.1: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 13ms, Maximum = 18ms, Average = 15ms
3、ping不同网段之间的ip
A:192.168.20.1
B:192.168.30.1
从封装的角度讲:
1、封装icmp数据和ip包数据
2、先拿目的ip和自己的子网掩码进行与运算得到目标网段是192.168.30.0,然后去查询自己路由表
直连路由:192.168.20.0 ens33
默认路由:192.168.20.254
ip包的封装:
源192.168.20.1 目的ip:192.168.30.1
3、走默认路由,下一跳地址是192.168.20.254
帧:源mac:自己 目的mac:192.168.20.254的mac地址
4、发arp广播得到20.254的mac地址(此时的mac地址是网关)
5、封装帧
6、比特流
通过交换机发送数据,因为交换机只看mac地址。
ip地址在整个互联网里使用,mac地址在局域网里使用。
先到交换机再到路由器。交换机查看mac地址表。
4、使用 Cisco实验拓扑图验证这个原理
1、首先先准备好两台路由器,四台pc机(可以根据自己需要自行选择),两台交换机。画好拓扑图。
2、 先给pc机配置好ip地址、网关:配置流程如上面的一样。
记得一定要配置好网关。如果没有配置pc机,当需要路由去ping跨网段的ip地址是ping的不同的,因为没有网关,ip地址不知道要把数据包发送到哪里,在pc机里面添加网关,就是做配置,就是配置一条默认路由。当路由器在路由表中找不到目标网络的路由条目时,路由器把请求转发到默认路由接口。
就是比如上图中192.168.10.1去ping192.168.10.2,如果192.168.10.2没有配置网关,使用192.168.10.1去ping192.168.10.2能够ping通,但是不能上网,这是因为PC与RTA直连,ping命令使用的的ICMP报文这是属于IP层的报文不会使用到路由表查询,使用ARP寻路到达目标。
192.168.10.2中没有配置网关:
使用192.168.10.2去ping 192.168.10.1能ping通:
而使用192.168.10.2去ping路由器上的Fa0/1口的192.168.30.2接口上的ip地址是不能ping通的,原理是如上图所说的。
继续进入主题:
然后给router 0的Fa0/0口配置ip地址为:192.168.30.1,Fa0/1口为:192.168.20.3
router 1的ip地址设置为:Fa0/0口为:192.168.10.3,Fa0/1口为:192.168.30.2。
配置流程为:
先扩展一下:路由器的作用是实现扩网段之间进行通信的。
然后可以从拓扑图中看出,我们的router 0直连路由的是20网段和30网段的,而router 1直连路由的是30网段和10网段的。
首先我们先测试192.168.20.2pc机去ping192.168.30.2路由器。
首先跨网段是ping不通的,所以我们需要添加一个静态路由。
路由的优先级是:
① 直连路由
② 静态路由
③动态路由
④ 默认路由
静态路由的添加顺序是:先添加你要到哪个网段去,然后填写子网掩码,最后再填写下一跳路由口的ip地址。
第一个network代表的是要去的目的网段ip:20网段的。
network:192.168.20.0
第二个mask是子网掩码。
mask:255.255.255.0
第三个next hop是指下一跳路由器的ip地址:192.168.30.1。
Next Hop:192.168.30.1
添加成功之后,就可以ping通:192.168.20.2pc ping 192.168.30.2 pc机
然后我们再试试用192.168.10.2pc1机去ping 192.168.20.2pc2机,这个时候还需要对路由器0router0进行静态路由配置:
network:192.168.10.0
Mask:255.255.255.0
Next Hop:192.168.30.2
大体流程就是这样的,这个计算机网络原理是比较抽象,所以还得多加练习,需要多做实验。