晚上好,我是老杨。
Ping这几个字母,已经深入网工人的骨髓了吧?
把Ping用到工作里,肯定不少人在用,但对Ping的了解和理解是不是足够深,取决了你能在工作里用到什么程度,能让它帮你到什么地步。
我用三个问题来测试一下,你对Ping的了解程度:
如何知道是否有人正在发起 ping?
对方执行 ping 的时候,能否在对方不知情的情况下获取对方的 IP?
ping 命令工作在 OSI 七层网络模型的哪一层?
能回答的上来不?
今天想系统和你说一说Ping那些事,虽然我之前也说过不少,但都相对碎片化。
从头给你来一遍,效果更佳。
今日文章阅读福利:《网工最全技术图谱(高清)》
私信我,回复关键词“网络技术”,即可领取网工经典技术思维导图(最全版本),替你理清技术思路,拨开技术迷雾,指导你24年的努力方向
01 怎么趣味理解ping?
Ping这个技术,其实就是咱们用来检查网络通不通的一种小工具,用它就可以帮你了解网络连接的情况。
它的原理就像是在网络世界里喊话,看看对方能不能听见你的声音。具体点说,ping利用ICMP协议发出一个“回声请求”,然后等待对方回应一个“回声应答”。
如果对方回应了,就说明网络是通的,还能告诉你大概需要多久时间。
也就是说,你用Ping的时候,其实是在向另一台电脑或者服务器打个招呼:“嘿,你在吗?”
然后如果对方在线,它会回复你:“在呢,怎么了?”
这样一来回,你就知道对方在那儿,并且你们之间的通信是通的。
如果你发现对方没有回应,那可能是它不在线,或者在路上出了点问题,比如网络连接断了,或者别的原因。
这就好比你喊了朋友一声,但他没回答,你可能就会想,他是没听见呢,还是碰到什么麻烦了?
而且,Ping还可以告诉你这“喊话”用了多久。
如果回应很快就来了,说明网络速度挺快;
如果等了半天才有回复,那可能就表示网络有点卡,或者是距离太远了。
也就是说,利用Ping,你就可以向设备B发送一个数据包以检查其是否能够做出回应。
若无法Ping通设备B,这表明目标主机可能遇到了断线或其他连接问题。
若能成功Ping通,可以通过测量数据包往返所花费的时间来确定网络延迟。
Ping用的是ICMP协议。这个协议和TCP、UDP不太一样,后两者工作在OSI模型的第四层,也就是传输层,但ICMP要更基础一些,位于网络层的第三层。
当我们聊到Ping命令,它就是在网络层上执行的一个功能,用ICMP协议来检查两台主机之间是否可以互相到达,以及需要多少时间。
ICMP协议,全称是Internet Control Message Protocol,通常用于网络上的错误报告和状态信息的传递。
当你执行Ping命令时,实际上就是在发送一个ICMP Echo Request消息,然后等待对方回复一个ICMP Echo Reply。
这样一来一往,就能检测出两个网络节点之间的连接是不是畅通的,同时还能测出数据往返所需的时间,也就是往返时间(RTT)。
当然,关于ping的实用方法也有不少。
你可以在命令提示符中键入“ping”后跟目标IP地址或者域名,这样会发送四个回显请求包并等待回应,以检测网络连接的有效性和响应时间。
如果你输入“ping -t”加上目标IP地址或域名,ping会持续不断地发送数据包并接收回应,直到你按下Ctrl+C来停止,这有助于观察网络的稳定程度和数据丢失情况。
通过输入“ping -n 数量”然后是目标IP地址或域名,你可以指定发送数据包的确切数量,这样可以更精确地评估网络的性能指标。
你也可以通过键入“ping -s 跳数”加目标IP地址或域名,可以获取每一跳的时间戳信息,帮助分析造成网络延迟的潜在因素。
这些内容我在《想不到吧,原来ping还能这么用 》都有详细说明。
最近还发现了两款Ping的增强工具,十分好用,叫做“AKKPing”和“科来Ping”,推荐你去尝试下载使用下,体验感提升不少。
当然,私信暗号“工具2024”,这些好用工具下载链接,也可以找我拿哈。
02 如何知道有人正在 ping 服务器?
在网络中,ping的作用主要有三种:
1、用来检测网络的连通情况和分析网络速度
2、根据域名得到服务器IP
3、根据 ping返回的TTL值来判断对方所使用的操作系统及数据包经过路由器数量
那如果有人正在 ping 我们,有没有办法知道是谁在 ping ?
当然可以。
执行ping命令本质就是在对目标主机发起主动的网络探测,更确切地说是在发起一个请求,然后等待一个响应,通过这个响应来判断目标主机的网络状态。
要知道,Ping用的是哪个层次的协议来发这个招呼,你一旦懂了,就能通过一些工具,比如“抓包”工具,看看有没有人正在对服务器做Ping探测。
而且,翻翻服务器的日记,也能发现是不是有谁以前Ping过它。因为Ping是基于TCP/IP模型里的第三层,也就是网络层,用ICMP协议聊天的,所以你就可以利用这点,通过抓包找到那些Ping的数据传输,分析数据包的来源,揪出是谁在呼叫你的主机。
至于看过去谁Ping过你的电脑,道理差不多,只不过一个是现场直播,一个成了回放旧录像带。
有时候你会听到人们说Ping工作在应用层,这么理解其实是因为Ping是直接为用户服务的。
但如果你换个角度看,从干活的层面来看,你会发现Ping更像是网络层的活儿。简单来说就是:Ping为大家服务,但它的技术支持来自网络层。
那么实操上怎么做?
如果你用的是Linux系统,你可以用iptables设置一套专门对付ICMP包的过滤规则,然后用dmesg命令查看这些数据包。
或者你也可以用tcpdump这工具来捕捉Ping的请求。Windows用户的话,就方便多了,直接用Wireshark,在界面上输入“ICMP”,就能过滤出相关的信息,一目了然。
记住,如果你能够访问服务器或设备的网络接口,你就有可能找到谁在Ping你。
但有时候,由于网络地址转换(NAT)或者伪造IP地址的原因,看到的源IP可能不会直接指向实际的发送者,而是显示为中间设备或代理服务器的地址。
在这种情况下,你可能需要更深入的分析或者联系你的互联网服务提供商以获取更多帮助。
关于更多Ping的技术内容详解,感兴趣的网工朋友可以继续浏览:
愿你看完能过收获良多。
原创:老杨丨10年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部