亞歷克斯肖從凹非寺出來(lái)
量子比特|公眾號(hào)QbitAI
另外,沒想到“ping”這個(gè)計(jì)算機(jī)術(shù)語(yǔ)會(huì)從英雄聯(lián)盟MSI話題討論到熱搜。
無(wú)論在微博還是知乎,不少“ping”相關(guān)話題的熱度已經(jīng)過(guò)千萬(wàn)甚至上億。
從話題下的討論來(lái)看,不少網(wǎng)友甚至產(chǎn)生了對(duì)ping的研究熱情:
說(shuō)起來(lái),經(jīng)常玩聯(lián)機(jī)游戲的小伙伴,想必對(duì)ping都不陌生。
誰(shuí)還沒感受過(guò)幾次被ping值支配的恐懼呢?(手動(dòng)狗頭)
△高ping戰(zhàn)士無(wú)所畏懼
ping值越高,代表著打游戲時(shí)的網(wǎng)絡(luò)延遲越高,表現(xiàn)到游戲中,就是延遲低的比延遲高的人更快做出各種(擊殺、移動(dòng)等)動(dòng)作。
注意,這里的ping值并不代表你的網(wǎng)速。
這么說(shuō)吧,如果你的數(shù)據(jù)包是一份快遞的話,網(wǎng)速越高代表卡車噸量越大,而ping值則代表了這輛卡車能跑得多快、路上有多堵。
越低的ping值,意味著你的網(wǎng)絡(luò)越暢通,但和它一次能搬運(yùn)多少數(shù)據(jù)并沒有什么關(guān)系。
但你知道,ping最初是如何被發(fā)明出來(lái)的嗎?
其實(shí),這個(gè)如今在打游戲、開會(huì)和測(cè)延遲中“無(wú)處不在”的計(jì)算機(jī)技術(shù),當(dāng)年竟然是被“隨手”寫出來(lái)的。
故事還要從80年代的時(shí)候說(shuō)起。
來(lái)自1983年的千行代碼
這個(gè)名叫ping的工具,最初是由一位叫Michael John Muuss的老哥搞出來(lái)的。
Muuss出生于1958年,從約翰·霍普金斯大學(xué)畢業(yè)后,在美國(guó)陸軍一個(gè)名叫“阿伯丁試驗(yàn)場(chǎng)”的兵器試驗(yàn)中心做研究,主要與計(jì)算機(jī)網(wǎng)絡(luò)和幾何建模等方向有關(guān)。
例如,光線追蹤在80年代剛火起來(lái)那會(huì)兒,Muuss老哥就已經(jīng)在潛心研究相應(yīng)的技術(shù)了。
期間他做了不少相關(guān)成果,但反而是“隨手發(fā)明”出來(lái)的ping,如今成了最著名的網(wǎng)絡(luò)工具之一。
ping應(yīng)用廣泛到什么程度?
從最初的Unix系統(tǒng),到如今的Windows、macOS和Linux,ping雖然歷經(jīng)好幾個(gè)版本,但一直在各個(gè)操作系統(tǒng)上被廣泛使用。
如今我們?cè)贕itHub上隨手一搜,能看到不少實(shí)現(xiàn)ping的代碼,但這些都不是最初的版本了。
Muuss在自己的主頁(yè)上提供了ping最初的源代碼,然而我們點(diǎn)進(jìn)去后就會(huì)發(fā)現(xiàn),網(wǎng)頁(yè)跳轉(zhuǎn)了好幾次,最終似乎也無(wú)法下載:
事實(shí)上,我們還能看到Muuss的主頁(yè),本身就已經(jīng)不尋常了——
2000年時(shí),Muuss不幸因車禍去世,當(dāng)時(shí)他才剛過(guò)完自己的42歲生日:
還好在Web Archive上保存了那個(gè)時(shí)候的網(wǎng)頁(yè),我們得以看見ping的第一版源代碼。
這份代碼文件名是,一個(gè)非常有年代感的后綴,如今已經(jīng)基本沒有人使用這個(gè)文件擴(kuò)展名了。
它是一個(gè)41KB大小的文件,從編輯器中來(lái)看,大約有1600行左右的代碼:
那么,ping究竟是怎么誕生的,又是如何被普及開來(lái)的?
ping是如何被普及的?
最初編寫這份代碼的時(shí)候,Muuss完全沒想過(guò)它后來(lái)會(huì)這么火。
畢竟最初的ping,只是一個(gè)用來(lái)排查實(shí)驗(yàn)室網(wǎng)絡(luò)異常的測(cè)試工具。
事情源于1983年12月的一天,Muuss在阿伯丁試驗(yàn)場(chǎng)的彈道研究實(shí)驗(yàn)室(BRL)中做實(shí)驗(yàn)時(shí),突然發(fā)現(xiàn)實(shí)驗(yàn)室的IP網(wǎng)絡(luò)出現(xiàn)了異常情況。
這時(shí)候,他回憶起幾個(gè)月前,自己曾參與過(guò)一次DARPA在挪威舉辦的研討會(huì),會(huì)上一位名叫Dave Mills的博士,提到過(guò)用ICMP數(shù)據(jù)包測(cè)試延遲的方法。
Muuss認(rèn)為,這個(gè)工具的原理,就像是發(fā)射聲波并接收它的回波以計(jì)算往返時(shí)間一樣。
△聲吶,圖源維基百科
剛好Muuss在大學(xué)的時(shí)候?qū)W過(guò)不少聲吶和雷達(dá)系統(tǒng)的建模,他很快寫了一個(gè)程序,并將之命名為ping,在聲吶中指代聲音脈沖、也就是信號(hào)的意思。
隨后,Muuss只用了一晚上,就將ping的程序?qū)懥顺鰜?lái)。
雖然寫出來(lái)的時(shí)候,他所在的實(shí)驗(yàn)室已經(jīng)將網(wǎng)絡(luò)問題解決了,但Muuss還是將它作為一個(gè)公有領(lǐng)域軟件(public domain software,使用時(shí)無(wú)需許可證)發(fā)布了出去。
很快加州大學(xué)伯克利分校的Erick Engelke發(fā)現(xiàn)了這份軟件,將它改寫了一版(遵循GPL開源協(xié)議),放入伯克利自己開發(fā)的Unix操作系統(tǒng)BSD4.3版本中。
隨后,計(jì)算機(jī)工程師Tim Crawford又基于MIT開源協(xié)議,寫了一個(gè)ReactOS版本的ping代碼。
再之后,ping被各個(gè)計(jì)算機(jī)大牛寫入各種操作系統(tǒng)如macOS、Linux和Windows中,又加入了更多的功能。
△Linux系統(tǒng)上的
如今我們看到的各個(gè)系統(tǒng)中自帶的ping工具,早已經(jīng)不是最初那個(gè)程序了,其功能和用法都要豐富得多。
那么,如今的ping放到計(jì)算機(jī)上來(lái)說(shuō),究竟是一個(gè)怎樣的工具呢?
ping的基本原理
許多計(jì)算機(jī)發(fā)燒友可能會(huì)說(shuō),自己ping用得賊6。
不過(guò),大伙兒知道ping是如何工作的嗎?
知其然,不妨也了解一下背后的所以然:
ping,是網(wǎng)絡(luò)結(jié)構(gòu)里應(yīng)用層的一個(gè)網(wǎng)絡(luò)管理命令,是判斷兩臺(tái)主機(jī)或路由節(jié)點(diǎn)之間網(wǎng)絡(luò)是否暢通的重要手段。
簡(jiǎn)單來(lái)說(shuō):如果兩臺(tái)主機(jī)“ping”得通,說(shuō)明它們之間可以建立連接。
一個(gè)小知識(shí):公網(wǎng)(因特網(wǎng))IP地址具有唯一性。
這就像你在世界范圍(公網(wǎng))內(nèi)的一棟樓(主機(jī)or路由節(jié)點(diǎn)等)里工作,這棟樓的地址(IP地址)相對(duì)世界來(lái)說(shuō)是唯一的,不過(guò)樓里面的其他門牌號(hào)(內(nèi)網(wǎng)IP地址)則不一定是唯一的。
利用這一特性,我們就能用ping測(cè)試兩臺(tái)主機(jī)或路由節(jié)點(diǎn)中的網(wǎng)絡(luò)連通性。
具體來(lái)說(shuō),就是使用ping命令,先給目標(biāo)IP地址發(fā)送一個(gè)遵循ICMP協(xié)議的數(shù)據(jù)包(echo request)。
然后可以根據(jù)返回?cái)?shù)據(jù)包的情況(丟包、速度等),檢查主機(jī)或路由節(jié)點(diǎn)之間的網(wǎng)絡(luò)狀態(tài)。
Emm…ICMP協(xié)議又是什么?
它的全稱是:Internet Control Message Protocol,即因特網(wǎng)控制報(bào)文協(xié)議,ICMP報(bào)文封裝在IP包里。
所謂“控制”,即在IP主機(jī)、路由節(jié)點(diǎn)之間傳遞控制消息,來(lái)反映數(shù)據(jù)包是否成功到達(dá)目標(biāo)端,以及反映網(wǎng)絡(luò)狀況等。
在IP通信中,當(dāng)IP包成功到達(dá)目標(biāo)地址并返回時(shí),會(huì)收到ping應(yīng)答;而當(dāng)IP包因?yàn)槟吃?,未能成功到達(dá)目標(biāo)地址、或未能成功從目標(biāo)地址返回時(shí),ICMP返回的數(shù)據(jù)包中將含有具體原因,如:網(wǎng)絡(luò)不可達(dá)、端口不可達(dá)等。
怎樣ping起來(lái)
下面介紹一下ping的基本操作。
ping命令在各個(gè)常見的操作系統(tǒng)中通用,這里以macOS為例:
從Finder中找到“終端”。
輸入ping+IP地址(網(wǎng)址或域名也可以),這里先以百度為例。
然后,即可查看每個(gè)數(shù)據(jù)包,從本電腦對(duì)百度的網(wǎng)絡(luò)服務(wù)器發(fā)送數(shù)據(jù),到接收到服務(wù)器反饋數(shù)據(jù)的延遲時(shí)間。
由于macOS發(fā)送的每個(gè)IP數(shù)據(jù)包默認(rèn)大小是64個(gè)字節(jié),所以返回的數(shù)據(jù)包大小也是64個(gè)字節(jié)。
而這里的延遲時(shí)間,就是ping值。
除了輸入百度等網(wǎng)址,想要測(cè)兩臺(tái)主機(jī)之間的ping值也沒問題,在一臺(tái)上輸入另一臺(tái)的IP地址即可:
所以,在玩網(wǎng)絡(luò)游戲的時(shí)候,如果ping值過(guò)高就會(huì)感覺操作延遲。
這個(gè)延遲的后果還挺嚴(yán)重的——
例如,在打王者排位的關(guān)鍵時(shí)刻,如果網(wǎng)絡(luò)連接(可能是自己的無(wú)線網(wǎng),也可能是附近的服務(wù)器)卡頓,明明自己已經(jīng)操作了,但由于敵方的操作反饋時(shí)間更快,所以只能眼睜睜得看著自己的英雄掛掉。
說(shuō)到這里,量子位急忙上號(hào)診斷了一下自己的網(wǎng)絡(luò)。
還好,王者榮耀的延遲低于70ms算正常。
對(duì)于LOL,玩家可打開設(shè)置菜單,點(diǎn)擊“顯示”標(biāo)簽,然后點(diǎn)擊“切換FPS顯示”按鈕,查看自己的ping值。
至于鎖ping(人工延遲)技術(shù)要如何實(shí)現(xiàn),目前拳頭游戲官方給出了一份技術(shù)說(shuō)明:
從說(shuō)明中來(lái)看,拳頭表示在線下場(chǎng)館比賽時(shí)加入了一個(gè)人工延遲工具調(diào)整ping值。
由于人工延遲工具的代碼運(yùn)算出現(xiàn)錯(cuò)誤,導(dǎo)致線下ping值過(guò)高,目前已通過(guò)調(diào)節(jié)配置修復(fù),但游戲中顯示的ping值會(huì)因?yàn)檫@一配置調(diào)節(jié)出現(xiàn)問題。
具體人工延遲工具(鎖ping)的技術(shù)代碼,目前拳頭游戲并未公開。不過(guò)GitHub上也已經(jīng)有人做過(guò)人工延遲工具,如下面這個(gè)clumsy開源模擬器,可以模擬延遲、丟包等bug。感興趣的小伙伴可以去看看:
One More Thing
在自己的主頁(yè)上,Muuss還po出了另一個(gè)與“ping”相關(guān)的小趣事。
早在1933年,美國(guó)兒童圖畫書作家Marjorie Flack就曾經(jīng)出版過(guò)一個(gè)繪本:《ping的故事》。
在這里,ping是故事主角小鴨子的名字:
小鴨子ping和伙伴還有主人一起生活在一條船上,每天最后一只回家的小鴨子要被打屁股。一天傍晚,ping貪玩落在了最后,為了不挨打,它沒有回家,由此在長(zhǎng)江中開啟了一段奇妙冒險(xiǎn),最終平安回到主人的船上。
這看似是一本尋常的兒童讀物,但多年后,有讀者發(fā)現(xiàn),小鴨子ping的故事與計(jì)算機(jī)中的ping數(shù)據(jù)包竟有異曲同工之妙!
一個(gè)ping數(shù)據(jù)包就像一只鴨子,它和其他數(shù)據(jù)包(更多鴨子)一起,在主機(jī)(小船)上度過(guò)了一段時(shí)期。
然后,這些數(shù)據(jù)包(鴨子)通過(guò)一個(gè)通道(橋)離開主機(jī)(船),進(jìn)入互聯(lián)網(wǎng)(長(zhǎng)江)。
數(shù)據(jù)包(鴨子)在另一個(gè)主機(jī)(另一艘船)上經(jīng)過(guò)短暫的時(shí)間后,又回到了原來(lái)的主機(jī)(船)上。
所以,今天你的ping值如何?
參考鏈接:
[1]
[2]
[3]
[4]https://github.com/iputils/iputils/blob/master/ping/
[5]
[6];rand=196
[7]
[8]拳頭技術(shù)博客公告:https://weibo.com/ttarticle/p/show?id=2309404770219460790187
— 完 —
量子位 QbitAI · 頭條號(hào)簽約
關(guān)注我們,第一時(shí)間獲知前沿科技動(dòng)態(tài)
1.《英雄聯(lián)盟fps值怎么顯示出來(lái)的?總結(jié)很全面速看!屢次讓拳頭翻車的ping:作者因車禍英年早逝,千行源碼改變世界》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。
2.《英雄聯(lián)盟fps值怎么顯示出來(lái)的?總結(jié)很全面速看!屢次讓拳頭翻車的ping:作者因車禍英年早逝,千行源碼改變世界》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/gl/3226635.html