ping 命令的作用和原理

关于([WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。)的解决方案。实测有效! 在爬取一个小站时,遇到了前几十条网页能顺利爬取,但突然报错的情况。 报错信息如下:Message=HTTPConnectionPool(host=‘pub.sinoss.net’, port=80): Max retries exceeded with url: /portal/webgate/CmdProjectView?proj_id=212473&applier=%C0%EE%BB%B3%C1%C1 (Caused by NewConnectionError(’<urllib3.conn 阅读详情

我们在遇到网络不通的情况,大家都知道去 ping 一下,看一下网络状况。

那你知道「ping」命令后背的逻辑是什么吗?知道它是如何实现的吗?

一、「ping」命令的作用和原理?

简单来说,「ping」是用来探测本机与网络中另一主机之间是否可达的命令,如果两台主机之间ping不通,则表明这两台主机不能建立起连接。ping是定位网络通不通的一个重要手段。

ping 命令是基于 ICMP 协议来工作的,「 ICMP 」全称为 Internet 控制报文协议( Internet Control Message Protocol)。ping 命令会发送一份ICMP回显请求报文给目标主机,并等待目标主机返回ICMP回显应答。因为ICMP协议会要求目标主机在收到消息之后,必须返回ICMP应答消息给源主机,如果源主机在一定时间内收到了目标主机的应答,则表明两台主机之间网络是可达的。

举一个例子来描述「ping」命令的工作过程:

假设有两个主机,主机A(192.168.0.1)和主机B(192.168.0.2),现在我们要监测主机A和主机B之间网络是否可达,那么我们在主机A上输入命令:ping 192.168.0.2
此时,ping命令会在主机A上构建一个 ICMP的请求数据包(数据包里的内容后面再详述),然后 ICMP协议会将这个数据包以及目标IP(192.168.0.2)等信息一同交给IP层协议。
IP层协议得到这些信息后,将源地址(即本机IP)、目标地址(即目标IP:192.168.0.2)、再加上一些其它的控制信息,构建成一个IP数据包。
IP数据包构建完成后,还不够,还需要加上MAC地址,因此,还需要通过ARP映射表找出目标IP所对应的MAC地址。当拿到了目标主机的MAC地址和本机MAC后,一并交给数据链路层,组装成一个数据帧,依据以太网的介质访问规则,将它们传送出出去。
当主机B收到这个数据帧之后,会首先检查它的目标MAC地址是不是本机,如果是就接收下来处理,接收之后会检查这个数据帧,将数据帧中的IP数据包取出来,交给本机的IP层协议,然后IP层协议检查完之后,再将ICMP数据包取出来交给ICMP协议处理,当这一步也处理完成之后,就会构建一个ICMP应答数据包,回发给主机A
在一定的时间内,如果主机A收到了应答包,则说明它与主机B之间网络可达,如果没有收到,则说明网络不可达。除了监测是否可达以外,还可以利用应答时间和发起时间之间的差值,计算出数据包的延迟耗时。

通过ping的流程可以发现,ICMP协议是这个过程的基础,是非常重要的,因此下面就把ICMP协议再详细解释一下。

二、什么是「 ICMP 」?

我们知道,ping命令是基于ICMP协议来实现的。那么我们再来看下图,就明白了ICMP协议又是通过IP协议来发送的,即ICMP报文是封装在IP包中。

IP协议是一种无连接的,不可靠的数据包协议,它并不能保证数据一定被送达,那么我们要保证数据送到就需要通过其它模块来协助实现,这里就引入的是ICMP协议。

当传送的IP数据包发送异常的时候,ICMP就会将异常信息封装在包内,然后回传给源主机。

将上图再细拆一下可见:

继续将ICMP协议模块细拆:

由图可知,ICMP数据包由8bit的类型字段和8bit的代码字段以及16bit的校验字段再加上选项数据组成。

ICMP协议大致可分为两类:

查询报文类型
差错报文类型


查询报文类型:

查询报文主要应用于:ping查询、子网掩码查询、时间戳查询等等。

上面讲到的ping命令的流程其实就对应ICMP协议查询报文类型的一种使用。在主机A构建ICMP请求数据包的时候,其ICMP的类型字段中使用的是 8 (回送请求),当主机B构建ICMP应答包的时候,其ICMP类型字段就使用的是 0 (回送应答),更多类型值参考上表。

对 查询报文类型 的理解可参考一下文章最开始讲的ping流程,这里就不做赘述。

差错报文类型:

差错报文主要产生于当数据传送发送错误的时候。

它包括:目标不可达(网络不可达、主机不可达、协议不可达、端口不可达、禁止分片等)、超时、参数问题、重定向(网络重定向、主机重定向等)等等。

差错报文通常包含了引起错误的IP数据包的第一个分片的IP首部,加上该分片数据部分的前8个字节。

当传送IP数据包发生错误的时候(例如 主机不可达),ICMP协议就会把错误信息封包,然后传送回源主机,那么源主机就知道该怎么处理了。

那是不是只有遇到错误的时候才能使用 差错报文类型 呢?也不一定。

Traceroute 就是一个例外,Traceroute是用来侦测源主机到目标主机之间所经过路由情况的常用工具。Traceroute 的原理就是利用ICMP的规则,制造一些错误的事件出来,然后根据错误的事件来评估网络路由情况。

具体做法就是:

Traceroute会设置特殊的TTL值,来追踪源主机和目标主机之间的路由数。首先它给目标主机发送一个 TTL=1 的UDP数据包,那么这个数据包一旦在路上遇到一个路由器,TTL就变成了0(TTL规则是每经过一个路由器都会减1),因为TTL=0了,所以路由器就会把这个数据包丢掉,然后产生一个错误类型(超时)的ICMP数据包回发给源主机,也就是差错包。这个时候源主机就拿到了第一个路由节点的IP和相关信息了。

接着,源主机再给目标主机发一个 TTL=2 的UDP数据包,依旧上述流程走一遍,就知道第二个路由节点的IP和耗时情况等信息了。

如此反复进行,Traceroute就可以拿到从主机A到主机B之间所有路由器的信息了。
但是有个问题是,如果数据包到达了目标主机的话,即使目标主机接收到TTL值为1的IP数据包,它也是不会丢弃该数据包的,也不会产生一份超时的ICMP回发数据包的,因为数据包已经达到了目的地嘛。那我们应该怎么认定数据包是否达到了目标主机呢?

Traceroute的方法是在源主机发送UDP数据包给目标主机的时候,会设置一个不可能达到的目标端口号(例如大于30000的端口号),那么当这个数据包真的到达目标主机的时候,目标主机发现没有对应的端口号,因此会产生一份“端口不可达”的错误ICMP报文返回给源主机。

可见Traceroute的原理确实很取巧,很有趣。

连接超时错误:由于连接方在一段时间后没有正确响应或连接的主机未作出响应,连接尝试失败。 当我们尝试建立与远程服务器或主机的连接时,如果在一定时间内没有获得预期的响应,就会发生连接超时错误。连接超时错误的处理在编写网络应用程序时非常重要,可以提高程序的健壮性和可靠性。通过适当的错误处理,我们可以更好地应对网络环境的变化和不稳定性,提高用户体验和系统的稳定性。通过设置合适的超时时间,我们可以在连接等待时间过长时及时捕获连接超时错误,并采取相应的处理措施,如重试连接、报告错误或采取其他适当的措施。模块建立连接时,我们可以设置一个超时时间,以便在连接等待时间超过设定的阈值时引发连接超时错误。 阅读详情

相关推荐

【问题记录与解决】TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

【问题记录与解决】TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。| 人工智能 面试题:请介绍一下卷积神经网络(CNN)中的残差连接(Residual Connection)及其优势。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 5012

当你「ping 一下」的时候,你知道它背后的逻辑吗?

我们在遇到网络不通的情况,大家都知道去 ping 一下,看一下网络状况。那你知道「ping」命令后背的逻辑是什么吗?知道它是如何实现的吗? 一、「ping」命令的作用和原理? 简单来说,「ping」是用来探测本机与网络中另一主机之间是否可达的命令,如果两台主机之间ping不通,则表明这两台主机不能建立起连接。ping是定位网络通不通的一个重要手段。 ping 命令是基于 ICMP 协议来工作...

weixin_30292843的博客 2600

FreeModbus从入门到实战:手把手教你用STM32实现工业级Modbus RTU通信

本文详细介绍了如何使用STM32和FreeModbus实现工业级Modbus RTU通信,涵盖硬件搭建、协议栈移植及优化技巧。重点解析了FreeModbus的移植过程,包括串口驱动适配、定时器配置和工业级稳定性优化,为开发者提供了一套完整的工业通信解决方案。

weixin_33737774的博客 348

由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败问题

在下载Kaggle 数据集的时候,最开始可以正常连接。后来可能由于中间断网等某些问题,导致,再次连接时,总是提示“由于连接方在一段时间没有正确回复,或连接的主机没有反应,连接尝试失败”。经过各种搜索,终于得到解决。 解决方法:重置winsock 后,再重启电脑。重启一次不行,再重启第二次。 重置winsock方法: 以管理员身份打开命令提示符,输入cmd , 键入 netsh winso...

jingsiyu6588的博客 7万+

EPLAN中3D宏文件的创建与优化技巧(以开关电源为例)

本文以开关电源为例,详细讲解了在EPLAN中创建和优化3D宏文件(.ema)的全流程。从搭建宏项目、导入模型,到精确定义安装面、调整视野方向,再到定义3D连接点并关联部件库,旨在帮助电气工程师在设计阶段实现精准布局、避免安装冲突,从而提升设计效率与质量。

weixin_29219539的博客 547

Excel基金净值自动更新:手把手教你用Power Query抓取天天基金网数据(含常见错误修复)

本文详细介绍了如何利用Excel内置的Power Query工具,从天天基金网自动抓取基金净值数据,实现表格数据的自动刷新。通过手把手教程,您将学会构建参数化查询、整合多基金数据、计算持仓盈亏,并解决网页结构变动等常见错误,最终打造一个专属的、可自动更新的基金监控仪表盘,彻底告别手动更新。

xx56789的博客 730

ping命令的作用和原理

目录 一、「ping」命令的作用和原理 二、什么是「 ICMP 」 一、「ping」命令的作用和原理 简单来说,「ping」是用来探测本机与网络中另一主机之间是否可达的命令,如果两台主机之间ping不通,则表明这两台主机不能建立起连接。ping是定位网络通不通的一个重要手段。 ping 命令是基于 ICMP 协议来工作的,「 ICMP 」全称为 Internet 控制报文协议( Inte...

qq_39820671的博客 1万+

用74LS194和555定时器DIY流水灯:一个经典的数字电路课程设计复盘(附Multisim仿真文件)

本文详细介绍了使用74LS194移位寄存器和555定时器搭建八路彩灯控制器的完整过程,包括硬件选型、电路设计、调试技巧及常见问题解决方案。作为经典的数字电路课程设计,该项目涵盖了EDA工具应用、电路原理图设计和Multisim仿真等核心技能,适合电子工程学习者实践参考。

weixin_29185199的博客 426

Ping命令的作用和原理:网络好不好,ping一下就知道

在测试和部署网络通信应用时,我们经常会遇到网络不通的问题,一般都会想到ping一下。本文将带您了解ping命令的作用和原理~

君一席 1457

django安装mysqlclient (Windows下正确安装mysqlclient)

由于本人也是初学Python和django。本人使用的Python版本是3.7所以连接MySQL数据库需要安装数据驱动,对应Python3的数据驱动是mysqlclient。因此本人习惯性的使用命令pip install mysqlclient,结果安装失败 (venv) C:\Users\songlihui\PycharmProjects\autotest&gt;pip install my...

songlh1234的博客 2万+

迪文DGUSII串口屏中文显示实战:手把手教你制作16x16点阵字库

本文提供了一份迪文DGUSII串口屏16x16点阵中文字库制作的完整实战指南。从显示原理、字体选择与参数设置,到使用FontLib Make工具生成字库文件,再到部署、调用及存储空间优化,手把手教你解决中文显示难题,确保界面文字既美观又稳定。

weixin_29190573的博客 154

Ping的含义和作用

PING (Packet Internet Groper),因特网包探索器,作用是测试你到某一个IP之间的网络是否通畅,可以很好地帮助我们分析和判定网络故障。 Ping是Windows、Unix和Linux系统下的一个命令。ping也属于一个通信协议,是TCP/IP协议的一部分。 (1)ping 127.0.0.1,如果本地址无法Ping通,则表明本地机TCP/IP协议不能正常工作。 (2)pi...

qq_39072649的博客 6240

2026 AI浏览器Agent终极对比:BrowserAct、agentBrowser、PP-Browser 谁更适合落地?(安装+实战+场景全覆盖)

1.不要盲目追求最新框架:很多人跟风用agentBrowser,结果业务是多步骤复杂办公流程,反而不如BrowserAct稳定;2.风控场景优先PP-Browser:但凡需要登录账号、频繁访问正规平台,无脑选PP-Browser,能避开99%的封禁问题;3.AI批量解析优先agentBrowser:做知识库爬取、网页内容总结、批量问答,省Token就是省成本,长期使用性价比碾压另外两者;4.个人开发调试优先BrowserAct:容错高、日志全、调试简单,新手上手最快,不容易报错翻车。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 332

ping命令的过程

ping命令的过程 1.ping是什么? PING (Packet Internet Groper),因特网包探索器,用于测试网络连通性的程序。 Ping发送一个ICMP(Internet Control Messages Protocol,因特网信报控制协议);回声请求消息给目的地并报告是否收到所希望的ICMPecho (ICMP回声应答)。 工作原理:利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少。 2. ICM

chen772209的博客 4965

第三节:Vben Admin登录对接后端login接口

上一节,我们梳理的Vben Admin登录功能接口的逻辑,本节开始正式开启后端的开发后端我们采用Python的Flask项目,Flask-SQLAlchemy管理数据库模型,Flask-Migrate进行模型迁移。参考版本如下:Flask3.0.23.1.1本节,我们已经开启的后端的开发,因为是主要介绍Vben Admin的登录逻辑,所以Flask开发这里只截取了部分主要代码。

cuiwin的专栏 4190

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ping命令详解 ping不通处理方法

看到网上有很多介绍ping命令和不通时解决方法的文档,感觉错误的说法不少,再者没有从网络层的分析,所以把自己积累的一些写出,供大家参考,指正。 本文介绍cmd下ping命令的作用,简单过程,ping的发包原理和流程关系,有wireshark抓包分析的范例解释。以及ping不通时,可能的原因。

wj31932的博客 3万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ping是什么

666

weixin_70280523的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

PING命令 原理

PING命令 原理   问:在局域内如何ping通外网? 在学校局域网中为什么不能ping外网? 如:c:/>ping 20.2.2.2  ' 注:这是美国IP Desstination host unreachable Desstination host unreachable Desstination host unreachable Desstination ho

远方的专栏 5117

你知道 ping 命令是如何工作的吗?

你知道ping命令是如何工作的吗?我们用来测试一台机器与另一台机器的网络连通性一般会使用ping命令,那么你知道ping命令是如何工作的吗?ping命令是基于ICMP协议工作的。一、介绍ICMP协议(Internet Control Message Protocol)是一个,其主要用在IP机器与路由器之间传递控制信息,其一般用于报告主机是否可达、路由是否可用。二、为什么需要ICMP?

cnzzs的博客 955

Ping过程原理详解

Ping(Packet Internet Groper)是一种网络工具,用于测试两台计算机之间的连接性和传输速度。它的原理是发送ICMP(Internet Control Message Protocol)数据包到目标计算机,目标计算机接收到数据包后会返回一个响应。Ping命令通过发送一组数据包到目标计算机,并等待目标计算机的响应,来测试网络连接的可靠性和传输速度。Ping命令可以用于测试局域网(LAN)中的计算机和互联网中的服务器。

架构师之路。。 1114

ping 和 tracert 命令

ping命令的作用: ping是用来检测网络连通性的命令,使用的是 ICMP 协议。 基本格式:ping 空格 ip地址/域名 -t 例如:ping www.baidu.com -t -t是无限发包的意思。 ICMP协议: ICMP协议是TCP/IP协议族里的一个子协议,它用于在IP主机和路由器之间传递控制消息。 控制消息就是指网络通不通,主机是否可达,路由器是否可用等。 ping命令其实就是ICMP协议的一个工作过程。 我们来重点说一下TTL值 提一下:百度不只一台服务器,我这里.

蓝镜的博客 3911

ping 超时时间_Ping 和 traceroute 的工作原理以及作用+实验

在工作中,我们会经常使用ping 和traceroute 来检测网络的连通性,那么今天就给大家分析一下这两个小工具的工作原理以及常用的可选项参数的具体含义:(1)Ping 的工作过程Ping 会发送 echo request message 到某个地址,然后等待应(reply),当 echo request 到达目标地址以后,在一个有效的时间内(timeout 之前)返回 echo re...

weixin_42465846的博客 1654

ping的作用

PING (Packet Internet Groper), 因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP(Internet Control Messages Protocol)即因特网信报控制协议; 回声请求消息给目的地并报告是否收到所希望的ICMPecho (ICMP回声应答)。它是用来检查网络是否通畅或者网络连接速度的命令。 作为一个生活在网络上的管理员或者黑客来说,p...

qq_43165760的博客 842

ping命令的常见用法

ping (Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP,回声请求消息给目的地并报告是否收到所希望的ICMP echo (ICMP回声应答)。它是用来检查网络是否通畅或者网络连接速度的命令 ping 原理 ICMP协议是“Internet Control Message Ptotocol”(因特网控制消息协议)的缩写,它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。 这个“Ping”的过程实际上就是ICMP.

HaC 的博客 5798
上一篇: 输入一个url到浏览器页面展示都经历了哪些过程
下一篇: SpringBoot 结合 Mybatis Plus 自动生成代码
Lana啦啦啦
博客等级 码龄9年 5粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值