“ping”这么个计算机术语,竟然在英雄联盟MSI话题下被讨论上了热搜。
无论在微博还是知乎,不少“ping”相关话题的热度已经过千万甚至上亿。
而且六月中旬开打的PNC据参赛选手直播爆料,大概率也是线上打了,由此钟爱pubg的小伙伴们又萌生了劝退(退赛)之意。
ping值越高,代表着打游戏时的网络延迟越高,表现到游戏中,就是延迟低的比延迟高的人更快做出各种(击杀、移动等)动作。也就是大家口中常说的延迟枪,尤其是打外服冲分的小伙伴们,经常遇见,小身位p k明明已经做完动作了,却显示被击杀,或者被打残。
注意,这里的ping值并不代表你的网速。
这么说吧,如果你的数据包是一份快递的话,网速越高代表卡车吨量越大,而ping值则代表了这辆卡车能跑得多快、路上有多堵。
越低的ping值,意味着你的网络越畅通,但和它一次能搬运多少数据并没有什么关系。
来自1983年的千行代码
故事还要从80年代的时候说起。
这个名叫ping的工具,最初是由一位叫Michael John Muuss的老哥搞出来的。
Muuss出生于1958年,从约翰·霍普金斯大学毕业后,在美国陆军一个名叫“阿伯丁试验场”的兵器试验中心做研究,主要与计算机网络和几何建模等方向有关。
例如,光线追踪在80年代刚火起来那会儿,Muuse老哥就已经在潜心研究相应的技术了。
期间他做了不少相关成果,但反而是“随手发明”出来的ping,如今成了最著名的网络工具之一。
ping应用广泛到什么程度?
从最初的Unix系统,到如今的Windows、macOS和Linux,ping虽然历经好几个版本,但一直在各个操作系统上被广泛使用。
如今我们在GitHub上随手一搜,能看到不少实现ping的代码,但这些都不是最初的版本了。
Muuss在自己的主页上提供了ping最初的源代码,然而我们点进去后就会发现,网页跳转了好几次,最终似乎也无法下载:
还好在Web Archive上保存了那个时候的网页,我们得以看见ping的第一版源代码。
这份代码文件名是ping.shar,一个非常有年代感的后缀,如今已经基本没有人使用这个文件扩展名了。
它是一个41KB大小的文件,从编辑器中来看,大约有1600行左右的代码:
那么,ping究竟是怎么诞生的,又是如何被普及开来的?
ping是如何被普及的?
最初编写这份代码的时候,Muuss完全没想过它后来会这么火。
毕竟最初的ping,只是一个用来排查实验室网络异常的测试工具。
事情源于1983年12月的一天,Muuss在阿伯丁试验场的弹道研究实验室(BRL)中做实验时,突然发现实验室的IP网络出现了异常情况。
这时候,他回忆起几个月前,自己曾参与过一次DARPA在挪威举办的研讨会,会上一位名叫Dave Mills的博士,提到过用ICMP数据包测试延迟的方法。
Muuss认为,这个工具的原理,就像是发射声波并接收它的回波以计算往返时间一样。
刚好Muuss在大学的时候学过不少声呐和雷达系统的建模,他很快写了一个程序,并将之命名为ping,在声呐中指代声音脉冲、也就是信号的意思。
随后,Muuss只用了一晚上,就将ping的程序写了出来。
虽然写出来的时候,他所在的实验室已经将网络问题解决了,但Muuss还是将它作为一个公有领域软件(public domain software,使用时无需许可证)发布了出去。
很快加州大学伯克利分校的Erick Engelke发现了这份软件,将它改写了一版(遵循GPL开源协议),放入伯克利自己开发的Unix操作系统BSD4.3版本中。
随后,计算机工程师Tim Crawford又基于MIT开源协议,写了一个ReactOS版本的ping代码。
再之后,ping被各个计算机大牛写入各种操作系统如macOS、Linux和Windows中,又加入了更多的功能。
如今我们看到的各个系统中自带的ping工具,早已经不是最初那个ping.shar程序了,其功能和用法都要丰富得多。
那么,如今的ping放到计算机上来说,究竟是一个怎样的工具呢?
ping的基本原理
许多计算机发烧友可能会说,自己ping用得贼6。
不过,大伙儿知道ping是如何工作的吗?
知其然,不妨也了解一下背后的所以然:
ping,是网络结构里应用层的一个网络管理命令,是判断两台主机或路由节点之间网络是否畅通的重要手段。
简单来说:如果两台主机“ping”得通,说明它们之间可以建立连接。
一个小知识:公网(因特网)IP地址具有唯一性。
这就像你在世界范围(公网)内的一栋楼(主机or路由节点等)里工作,这栋楼的地址(IP地址)相对世界来说是唯一的,不过楼里面的其他门牌号(内网IP地址)则不一定是唯一的。
利用这一特性,我们就能用ping测试两台主机或路由节点中的网络连通性。
具体来说,就是使用ping命令,先给目标IP地址发送一个遵循ICMP协议的数据包(echo request)。
然后可以根据返回数据包的情况(丢包、速度等),检查主机或路由节点之间的网络状态。
Emm…ICMP协议又是什么?
它的全称是:Internet Control Message Protocol,即因特网控制报文协议,ICMP报文封装在IP包里。
所谓“控制”,即在IP主机、路由节点之间传递控制消息,来反映数据包是否成功到达目标端,以及反映网络状况等。
在IP通信中,当IP包成功到达目标地址并返回时,会收到ping应答;而当IP包因为某原因,未能成功到达目标地址、或未能成功从目标地址返回时,ICMP返回的数据包中将含有具体原因,如:网络不可达、端口不可达等。
怎样ping起来
下面介绍一下ping的基本操作。
ping命令在各个常见的操作系统中通用,这里以macOS为例:
从Finder中找到“终端”。
输入ping+IP地址(网址或域名也可以),这里先以百度为例。
然后,即可查看每个数据包,从本电脑对百度的网络服务器发送数据,到接收到服务器反馈数据的延迟时间。
由于macOS发送的每个IP数据包默认大小是64个字节,所以返回的数据包大小也是64个字节。
而这里的延迟时间,就是ping值。
除了输入百度等网址,想要测两台主机之间的ping值也没问题,在一台上输入另一台的IP地址即可:
所以,在玩网络游戏的时候,如果ping值过高就会感觉操作延迟。
注意此处仅用最近的实事举例:(pubg服务器位置不详)
从说明中来看,拳头表示在线下场馆比赛时加入了一个人工延迟工具调整ping值。
由于人工延迟工具的代码运算出现错误,导致线下ping值过高,目前已通过调节配置修复,但游戏中显示的ping值会因为这一配置调节出现问题。
具体人工延迟工具(锁ping)的技术代码,目前拳头游戏并未公开。不过GitHub上也已经有人做过人工延迟工具,如下面这个clumsy开源模拟器,可以模拟延迟、丢包等bug。感兴趣的小伙伴可以去看看:
最后附:
送给大家一个本人手撸的ip验证工具类吧(如果用到nginx反向代理等工具,一定要注意在服务端配置好相关的配置,不然获取到的ip就已经是转换过的ip了)
本文参考以及图片来源
https://mp.weixin.qq.com/s/1CiasDY3J8RzB63owv-N3ghttps://blog.paessler.com/a-brief-history-of-pinghttps://ftp.arl.army.mil/~mike/ping.htmlhttps://s.weibo.com/weibo?q=%23MSI%E7%8E%B0%E5%9C%BA%E5%AE%9E%E9%99%85ping%E5%80%BC%23https://github.com/iputils/iputils/blob/master/ping/ping.chttps://en.wikipedia.org/wiki/Mike_Muusshttps://ngabbs.com/read.php?tid=30095855&rand=196https://github.com/jagt/clumsy拳头技术博客公告:https://weibo.com/ttarticle/p/show?id=2309404770219460790187
“ping”这么个计算机术语,竟然在英雄联盟MSI话题下被讨论上了热搜。
无论在微博还是知乎,不少“ping”相关话题的热度已经过千万甚至上亿。
而且六月中旬开打的PNC据参赛选手直播爆料,大概率也是线上打了,由此钟爱pubg的小伙伴们又萌生了劝退(退赛)之意。
ping值越高,代表着打游戏时的网络延迟越高,表现到游戏中,就是延迟低的比延迟高的人更快做出各种(击杀、移动等)动作。也就是大家口中常说的延迟枪,尤其是打外服冲分的小伙伴们,经常遇见,小身位p k明明已经做完动作了,却显示被击杀,或者被打残。
注意,这里的ping值并不代表你的网速。
这么说吧,如果你的数据包是一份快递的话,网速越高代表卡车吨量越大,而ping值则代表了这辆卡车能跑得多快、路上有多堵。
越低的ping值,意味着你的网络越畅通,但和它一次能搬运多少数据并没有什么关系。
来自1983年的千行代码
故事还要从80年代的时候说起。
这个名叫ping的工具,最初是由一位叫Michael John Muuss的老哥搞出来的。
Muuss出生于1958年,从约翰·霍普金斯大学毕业后,在美国陆军一个名叫“阿伯丁试验场”的兵器试验中心做研究,主要与计算机网络和几何建模等方向有关。
例如,光线追踪在80年代刚火起来那会儿,Muuse老哥就已经在潜心研究相应的技术了。
期间他做了不少相关成果,但反而是“随手发明”出来的ping,如今成了最著名的网络工具之一。
ping应用广泛到什么程度?
从最初的Unix系统,到如今的Windows、macOS和Linux,ping虽然历经好几个版本,但一直在各个操作系统上被广泛使用。
如今我们在GitHub上随手一搜,能看到不少实现ping的代码,但这些都不是最初的版本了。
Muuss在自己的主页上提供了ping最初的源代码,然而我们点进去后就会发现,网页跳转了好几次,最终似乎也无法下载:
还好在Web Archive上保存了那个时候的网页,我们得以看见ping的第一版源代码。
这份代码文件名是ping.shar,一个非常有年代感的后缀,如今已经基本没有人使用这个文件扩展名了。
它是一个41KB大小的文件,从编辑器中来看,大约有1600行左右的代码:
那么,ping究竟是怎么诞生的,又是如何被普及开来的?
ping是如何被普及的?
最初编写这份代码的时候,Muuss完全没想过它后来会这么火。
毕竟最初的ping,只是一个用来排查实验室网络异常的测试工具。
事情源于1983年12月的一天,Muuss在阿伯丁试验场的弹道研究实验室(BRL)中做实验时,突然发现实验室的IP网络出现了异常情况。
这时候,他回忆起几个月前,自己曾参与过一次DARPA在挪威举办的研讨会,会上一位名叫Dave Mills的博士,提到过用ICMP数据包测试延迟的方法。
Muuss认为,这个工具的原理,就像是发射声波并接收它的回波以计算往返时间一样。
刚好Muuss在大学的时候学过不少声呐和雷达系统的建模,他很快写了一个程序,并将之命名为ping,在声呐中指代声音脉冲、也就是信号的意思。
随后,Muuss只用了一晚上,就将ping的程序写了出来。
虽然写出来的时候,他所在的实验室已经将网络问题解决了,但Muuss还是将它作为一个公有领域软件(public domain software,使用时无需许可证)发布了出去。
很快加州大学伯克利分校的Erick Engelke发现了这份软件,将它改写了一版(遵循GPL开源协议),放入伯克利自己开发的Unix操作系统BSD4.3版本中。
随后,计算机工程师Tim Crawford又基于MIT开源协议,写了一个ReactOS版本的ping代码。
再之后,ping被各个计算机大牛写入各种操作系统如macOS、Linux和Windows中,又加入了更多的功能。
如今我们看到的各个系统中自带的ping工具,早已经不是最初那个ping.shar程序了,其功能和用法都要丰富得多。
那么,如今的ping放到计算机上来说,究竟是一个怎样的工具呢?
ping的基本原理
许多计算机发烧友可能会说,自己ping用得贼6。
不过,大伙儿知道ping是如何工作的吗?
知其然,不妨也了解一下背后的所以然:
ping,是网络结构里应用层的一个网络管理命令,是判断两台主机或路由节点之间网络是否畅通的重要手段。
简单来说:如果两台主机“ping”得通,说明它们之间可以建立连接。
一个小知识:公网(因特网)IP地址具有唯一性。
这就像你在世界范围(公网)内的一栋楼(主机or路由节点等)里工作,这栋楼的地址(IP地址)相对世界来说是唯一的,不过楼里面的其他门牌号(内网IP地址)则不一定是唯一的。
利用这一特性,我们就能用ping测试两台主机或路由节点中的网络连通性。
具体来说,就是使用ping命令,先给目标IP地址发送一个遵循ICMP协议的数据包(echo request)。
然后可以根据返回数据包的情况(丢包、速度等),检查主机或路由节点之间的网络状态。
Emm…ICMP协议又是什么?
它的全称是:Internet Control Message Protocol,即因特网控制报文协议,ICMP报文封装在IP包里。
所谓“控制”,即在IP主机、路由节点之间传递控制消息,来反映数据包是否成功到达目标端,以及反映网络状况等。
在IP通信中,当IP包成功到达目标地址并返回时,会收到ping应答;而当IP包因为某原因,未能成功到达目标地址、或未能成功从目标地址返回时,ICMP返回的数据包中将含有具体原因,如:网络不可达、端口不可达等。
怎样ping起来
下面介绍一下ping的基本操作。
ping命令在各个常见的操作系统中通用,这里以macOS为例:
从Finder中找到“终端”。
输入ping+IP地址(网址或域名也可以),这里先以百度为例。
然后,即可查看每个数据包,从本电脑对百度的网络服务器发送数据,到接收到服务器反馈数据的延迟时间。
由于macOS发送的每个IP数据包默认大小是64个字节,所以返回的数据包大小也是64个字节。
而这里的延迟时间,就是ping值。
除了输入百度等网址,想要测两台主机之间的ping值也没问题,在一台上输入另一台的IP地址即可:
所以,在玩网络游戏的时候,如果ping值过高就会感觉操作延迟。
注意此处仅用最近的实事举例:(pubg服务器位置不详)
从说明中来看,拳头表示在线下场馆比赛时加入了一个人工延迟工具调整ping值。
由于人工延迟工具的代码运算出现错误,导致线下ping值过高,目前已通过调节配置修复,但游戏中显示的ping值会因为这一配置调节出现问题。
具体人工延迟工具(锁ping)的技术代码,目前拳头游戏并未公开。不过GitHub上也已经有人做过人工延迟工具,如下面这个clumsy开源模拟器,可以模拟延迟、丢包等bug。感兴趣的小伙伴可以去看看:
最后附:
送给大家一个本人手撸的ip验证工具类吧(如果用到nginx反向代理等工具,一定要注意在服务端配置好相关的配置,不然获取到的ip就已经是转换过的ip了)
本文参考以及图片来源
https://mp.weixin.qq.com/s/1CiasDY3J8RzB63owv-N3ghttps://blog.paessler.com/a-brief-history-of-pinghttps://ftp.arl.army.mil/~mike/ping.htmlhttps://s.weibo.com/weibo?q=%23MSI%E7%8E%B0%E5%9C%BA%E5%AE%9E%E9%99%85ping%E5%80%BC%23https://github.com/iputils/iputils/blob/master/ping/ping.chttps://en.wikipedia.org/wiki/Mike_Muusshttps://ngabbs.com/read.php?tid=30095855&rand=196https://github.com/jagt/clumsy拳头技术博客公告:https://weibo.com/ttarticle/p/show?id=2309404770219460790187