当前位置: 首页 > 科技观察

打出拳头的ping屡屡翻车:作者因车祸英年早逝,千行源码改变世界

时间:2023-03-18 11:55:00 科技观察

本文经AI新媒体量子位授权转载(公众号ID:QbitAI),转载请注明出处转载请联系出处。也没想到像“ping”这样的电脑名词,居然会在英雄联盟MSI的话题下被讨论成热搜。无论是在微博还是知乎上,很多与“平”相关的话题热度已经超过千万甚至上亿。从话题下的讨论来看,不少网友甚至对ping产生了研究热情:说到这里,经常玩网游的朋友对ping一定不陌生。谁没有数次感受到被ping值支配的恐惧?(手动狗头)△高平战士无畏,移动等)动作。请注意,此处的ping值并不代表您的网速。这么说吧,如果你的数据包是快递,网速越高,货车的吨位就越大,ping值代表货车能跑多快,路有多堵。ping值越低,你的网络越通畅,但与一次能承载多少数据无关。但是您知道ping最初是如何发明的吗?其实,这种现在玩游戏、开会、测延迟“无处不在”的计算机技术,在当年是“随便”写出来的。故事也从80年代开始。1983年的一千行代码这个叫做ping的工具最初是由一个名叫MichaelJohnMuuss的兄弟创建的。Muuss1958年出生,约翰霍普金斯大学毕业后,在美国陆军名为“阿伯丁试验场”的武器试验中心从事计算机网络和几何建模方面的研究。比如在1980年代光线追踪刚开始流行的时候,Muuss哥就已经在潜心研究相应的技术了。在此期间,他取得了很多相关成果,但ping却是“随手发明”的,如今已成为最著名的网络工具之一。ping在多大程度上被广泛使用?从最初的Unix系统到今天的Windows、macOS和Linux,ping虽然经历了几个版本,但是在各种操作系统上得到了广泛的应用。现在我们在GitHub上搜索,可以看到很多实现ping的代码,但是这些都不是原来的版本。Muuss在其主页上提供了ping的原始源代码。然而我们点进去后发现网页跳转了好几次,最后好像无法下载:其实我们还能看到Muuss的主页,这本身就已经不一般了——2000年,Muuss死于车祸意外,刚过完他的42岁生日:幸运的是,当时的网页保存在WebArchive中,我们得以看到第一版ping的源代码。这段代码的文件名是ping.shar,一个很老土的后缀,现在几乎没有人用这个文件扩展名了。这是一个41KB的文件。小编来看,大约有1600行代码:那么,ping是如何诞生的,又是如何流行起来的呢?ping是如何流行起来的?代码最初编写时,Muuss并没有想到它会如此受欢迎。毕竟最初的ping只是用来排查实验室网络异常的测试工具。事情起源于1983年12月的一天,穆斯在阿伯丁试验场的弹道研究实验室(BRL)做实验时,突然发现实验室的IP网络出现异常。这时,他想起几个月前,他曾参加过DARPA在挪威举办的一次研讨会。在会上,一位名叫DaveMills的医生提到了用ICMP数据包测试延迟的方法。根据Muuss的说法,该工具的工作原理就像发出声波并接收其回波以计算往返时间。△Sonar,图片来源维基百科碰巧Muuss在大学的时候学习了很多声纳和雷达系统建模。他很快写了一个程序,取名为ping,在声纳中指的是声音脉冲,也就是信号的意思。之后,Muuss只用了一个晚上就写出了ping程序。虽然在写的时候,他的实验室已经解决了网络问题,但是Muuss把它作为publicdomainsoftware发布(publicdomainsoftware,nolicenserequiredtouse)。很快加州大学伯克利分校的ErickEngelke发现了这个软件,并重写了它的一个版本(遵循GPL开源协议),并放入了伯克利自己开发的BSD4.3版本的Unix操作系统中。随后,计算机工程师TimCrawford基于MIT开源协议编写了??ReactOS版本的ping代码。之后,ping被各个计算机高手写入了macOS、Linux、Windows等各种操作系统,并增加了更多的功能。△Linux系统上的ping.c今天我们看到的各个系统自带的ping工具,已经不是原来的ping.shar程序了,它的功能和用法都丰富了很多。那么,今天电脑上的ping是个什么样的工具呢?ping的基本原理很多电脑爱好者可能会说自己的ping很有用。但是,你们知道ping是如何工作的吗?知道了这些,你不妨明白背后的原因:ping是网络结构中应用层的网络管理命令,是判断两台主机或路由节点之间网络是否通畅的重要手段。简单地说:如果两台主机能“ping”通,就可以在它们之间建立连接。小知识:公网(Internet)IP地址是唯一的。就好像你在世界(公共网络)中的建筑物(主机或路由节点等)中工作。这个楼的地址(IP地址)相对于全世界是唯一的,但是楼内的其他门牌号(内网IP地址)就不一定是唯一的了。利用这个特性,我们可以使用ping来测试两台主机或路由节点之间的网络连通性。具体来说,使用ping命令先向目标IP地址发送一个遵循ICMP协议的数据包(echorequest)。然后可以根据返回数据包的情况(数据包丢失、速度等)检查主机或路由节点之间的网络状态。Emm...什么是ICMP协议?它的全称是:InternetControlMessageProtocol,即InternetControlMessageProtocol,ICMP消息封装在IP数据包中。所谓“控制”是指IP主机与路由节点之间传递控制报文,以反映数据包是否成功到达目标端,反映网络状态。在IP通信中,当IP包成功到达目标地址并返回时,会收到ping响应;而当IP包由于某种原因没有到达目标地址,或者没有从目标地址返回时,ICMP返回的数据包中会包含具体的原因,比如:网络不可达,端口不可达等。如何ping通的下面介绍ping的基本操作。ping命令在所有常见的操作系统中都很常见。这里我们以macOS为例:从Finder中找到“终端”。输入ping+IP地址(URL或域名也可以),这里以百度为例。然后,可以查看每个数据包,从电脑发送数据到百度网络服务器到收到服务器反馈数据的延迟时间。由于macOS发送的每个IP数据包的默认大小是64字节,所以返回的数据包大小也是64字节。这里的延迟时间就是ping值。除了输入百度之类的网址外,测两台主机之间的ping值是没有问题的,只要在一台上输入对方的IP地址即可:所以,在玩网络游戏的时候,如果ping值过高,操作起来会感觉延迟。这种延迟的后果是相当严重的——比如在玩王者排名的关键时刻,如果网络连接(可能是你自己的无线网络,或者附近的服务器)卡住了,很明显你已经操作过了,但由于敌人的操作反馈时间较快,所以只能眼睁睁看着自己的英雄死去。说着,量子比特赶紧上线诊断自己的网络。好在王者荣耀的延迟低于70ms是正常的。对于LOL,玩家可以打开设置菜单,点击“显示”选项卡,然后点击“切换FPS显示”按钮来查看自己的ping值。至于锁ping(人工延迟)技术是如何实现的,RiotGames官方给出了技术说明:从描述来看,Riot表示在离线场地游玩时会增加一个人工延迟工具来调整ping值。由于人为延迟工具的代码计算错误,导致离线ping值过高。已通过调整配置修复,但游戏中显示的ping值会因为此次配置调整出现问题。具体的人工延迟工具(lockping)的技术代码目前拳头游戏并未公开。不过GitHub上已经有人做出了人工延迟工具,比如下面这个笨拙的开源模拟器,可以模拟延迟、丢包等bug。感兴趣的朋友可以去看看:OneMoreThing在他的主页上,Muuss还发布了另一个与“ping”有关的有趣故事。早在1933年,美国儿童绘本作家玛乔丽·弗莱克就曾出版过一本绘本:《ping的故事》。这里ping是故事主人公小鸭子的名字:小鸭子和他的伙伴还有主人住在一条船上,每天最后一个回家的小鸭子都会被打屁股。一天傍晚,平弯弯倒下了。为了不挨打,它没有回家,就这样在长江里开始了一段奇妙的冒险,最后安全回到了主人的船上。这看似是一本普通的童书,但多年后,有读者发现,小鸭ping的故事和电脑中的ping数据包很相似!ping数据包就像一只鸭子,与其他数据包(更多鸭子)一起在主机(船)上度过一段时间。这些数据包(鸭子)然后离开主机(船)并通过通道(桥)进入互联网(长江)。数据包(鸭子)在另一台主机(另一艘船)上短时间后返回到原始主机(船)。那么,您今天的ping值如何?