计算机网络——ping命令过程的详解、原理-程序员宅基地

技术标签: 运维  linux  服务器  

目录

一、ping命令是用来做什么的?

1、ICMP是什么呢?

2、ping命令和icmp的关系

二、ping命令的使用

三、ping过程的原理

ping过程的详解

1、ping的是相同网段

2、使用 Cisco实验拓扑图来演示这个原理:

 3、ping不同网段之间的ip

4、使用 Cisco实验拓扑图验证这个原理

一、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

大体流程就是这样的,这个计算机网络原理是比较抽象,所以还得多加练习,需要多做实验。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_52165864/article/details/126043831

智能推荐

java计算机毕业设计企业信息安全评价系统源码+系统+mysql数据库+lw文档_网络安全评价系统源码-程序员宅基地

文章浏览阅读163次。java计算机毕业设计企业信息安全评价系统源码+系统+mysql数据库+lw文档。ssm基于Vue和mysql的智能图书管理系统。ssm基于SSM的线上家庭医生系统的设计与实现。ssm基于Java的高校教学资源库的设计与实现。ssm基于web的智慧医疗平台的设计与实现。ssm基于Java智能选课系统的设计与实现。ssm基于Vue框架的校园相约健康运动平台。ssm校园流浪猫图鉴管理系统的设计与实现。_网络安全评价系统源码

web开发需求,CSS的行内样式与内联样式_行内样式三目运算-程序员宅基地

文章浏览阅读483次。第一个阶段,开发环境和工具准备浏览器 (Google,FireFox,…)下载,安装前端开发工具vscode,下载、安装 node、npm、webpack、webpack-cli、cnpm,配置前端开发环境下载、配置PHP和MySQL第二个阶段,前端入门,网页制作1,HTML:常用标签(div标签,p标签,span标签,a标签,img标签)锚点列表标签(有序列表,无序列表,自定义列表)表单标签表格标签标签分类标签语义化注释字符实体2,CSS:CSS介绍全局_行内样式三目运算

MySQL修改my.cnf配置不生效的解决方法_mysql 修改配置文件不生效-程序员宅基地

文章浏览阅读6.2k次,点赞2次,收藏3次。1,参数没有写到 [mysqld] 下面而是写到 配置文件的末尾处了,我今天犯的错就是这个2,没有重启3,没有退出当前会话4,修改派配置文件错误5,参数写错了,打脸6,修改了错误的配置文件这里只说了修改 my.cnf,并没有说清楚其绝对路径是哪个文件。也就是说,有可能修改的不是正确路径下的my.cnf文件。在MySQL中,是允许存在多个 my.cnf 配置文件的,有的能对整个系统环境产生影响,例如:/etc/my.cnf。有的则只能影响个别用户,例如:~/.my.cnf。M._mysql 修改配置文件不生效

SpringBoot扩展篇:Spring注入 @Autowired & @Resource_spring boot resource按类型注入-程序员宅基地

文章浏览阅读938次,点赞22次,收藏24次。Autowired注入是由AutowiredAnnotationBeanPostProcessor完成的。@Resource注入是由CommonAnnotationBeanPostProcessor完成的。由于两种方式代码重复率太高,原理基本一致,下面我们主要以AutowiredAnnotationBeanPostProcessor源码分析为主。AutowiredAnnotationBeanPostProcessor负责属性、方法的注入。_spring boot resource按类型注入

Qt5.9.4中利用QOpenGLWidget类进行opengl绘图_qt opgl绘制图片-程序员宅基地

文章浏览阅读3w次,点赞15次,收藏110次。首先打开Qt Creator,然后点击菜单 ,文件->新建文件和项目,如图所示:左边选择Application,右边选择Qt Widgets Application,点击Choose...,项目名称为myOpenGLShow,接着下一步,一直默认,到Details,如下:点击取消选中创建界面(G)。然后下一步,知道完成,程序显示的为mainwindow.cpp文件:接着是利用QOpenGLW..._qt opgl绘制图片

用JAVA重0开始刷数据结构与算法04--二维数组及滚动数组-程序员宅基地

文章浏览阅读66次。二维数组及滚动数组118. 杨辉三角难度简单给定一个非负整数 *numRows,*生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:输入: numRows = 5输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2:输入: numRows = 1输出: [[1]]提示:1 <= numRows <= 30class Solution { //purpos

随便推点

gdb调试程序,前端全栈开发-程序员宅基地

文章浏览阅读682次,点赞23次,收藏11次。在linux上调试C语言程序,可以使用gdb程序。使用gdb调试程序前,需要先使用gcc的-g选项参数编译程序,而后通过gdb命令加载编译好的程序,gdb会不断地从键盘接受用户命令并完成相应的任务,知道输入q命令(quit的简写)让它退出为止。2.gdb的格式格式:gdb (注意:要先使用gcc的-g选项编译程序,而后在gdb加载。3.gdb的调试命令在进入gdb调试环境后,可以输入相应的指令来进行测试操作。常用的gdb调试命令如下:list…l…列出程序的源代码。

【安卓学习之常见问题】 多国语言横竖屏时,自动切换到默认语言(android:configChanges的使用)_横竖屏对locale的影响 android-程序员宅基地

文章浏览阅读4.3k次。█ 问题重现: ● 手机系统语言设置为中文  ● 启动app,app显示中文  ● 在app中设置app的语言为其他国家语言,如英文:    ● 界面:      ●  代码:public static void updateLanguage(Context context, String languageCodeNew) {_横竖屏对locale的影响 android

JavaScript怎样读取本地Excel文件_js读取excel文件-程序员宅基地

文章浏览阅读1.1w次。在浏览器的项目管理器中,创建自定义变量步骤,并依次添加姓名、手机、性别和产品变量,分别来自excel表中的对应字段。在浏览器中,使用js读取本地文件内容,支持Excel表格(.xls、.xlsx)和文本文件(.txt)两种格式。只需再添加一个循环步骤,JavaScript代码第一次执行时读取第一行数据,第二次执行时就读取第二行数据。代码中的大括号表示浏览器变量,运行时会自动替换其值,也就是从Excel读取到的内容。再添加一个脚本代码步骤,输入JavaScript脚本代码。..._js读取excel文件

【数据结构】—— 树_叶子节点和非叶子节点的关系-程序员宅基地

文章浏览阅读2.1k次,点赞3次,收藏13次。二叉树是n(n>=0)个结点的有限集合特点:1)每个节点至多有两棵子树2)左右子树不能颠倒(二叉树是有序树)形如以下亦是二叉树。_叶子节点和非叶子节点的关系

粒子和粒子系统-程序员宅基地

文章浏览阅读146次。1.粒子材质和粒子几何体 创建粒子系统的点,可以存放在Geometry几何体中。使用Geometry的vertices保存点、colors保存点的颜色。但我们必须使用粒子的专用材质对象PointCloudMaterial(原名叫做ParticleBasicMaterial)设置材质。包含的属性如下列表: 名称/描述 color/PointCloud对象中所有粒子的颜色..._具有粒子参考系的几何体仅支持粒子网格方法是什么意思

Weblogic远程代码执行(CVE-2020-14645)_weblogic中如何打代码-程序员宅基地

文章浏览阅读1.5k次。声明好好学习,天天向上漏洞描述Weblogic是美国Oracle公司出品的一个Application Server,确切的说是一个基于JavaEE架构的中间件,Weblogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。攻击者可利用该漏洞实现远程代码执行。该反序列化的gadget存在与coherence包中。编号CVE-2020-14645。反序列化的对象,通过t3发送给weblogic即可。所以,这个只是生成payload的工具。影响范围Ora_weblogic中如何打代码