91精品短视频,日本高清视频精品,国产精品av网站,亚洲欧美一区二区三区极速播放

?
當(dāng)前位置:網(wǎng)址庫(kù) » 站長(zhǎng)資訊 » 資訊文章 » 站長(zhǎng)新聞 » 文章詳細(xì) 訂閱RssFeed
*
黃金廣告位招租100元 黃金廣告位招租 查詢(xún)工具大全網(wǎng) 本處是文字廣告位 黃金廣告位招租 這個(gè)位子屬于你,點(diǎn)我
-->

屢次讓拳頭翻車(chē)的 ping:作者因車(chē)禍英年早逝,千行源碼改變世界

來(lái)源:本站原創(chuàng) 瀏覽:1076次 時(shí)間:2022-06-03

從話(huà)題下的討論來(lái)看,不少網(wǎng)友甚至產(chǎn)生了對(duì) ping 的研究熱情:

說(shuō)起來(lái),經(jīng)常玩聯(lián)機(jī)游戲的小伙伴,想必對(duì) ping 都不陌生。誰(shuí)還沒(méi)感受過(guò)幾次被 ping 值支配的恐懼呢?(手動(dòng)狗頭)

ping 值越高,代表著打游戲時(shí)的網(wǎng)絡(luò)延遲越高,表現(xiàn)到游戲中,就是延遲低的比延遲高的人更快做出各種(擊殺、移動(dòng)等)動(dòng)作。



    注意,這里的 ping 值并不代表你的網(wǎng)速。

    這么說(shuō)吧,如果你的數(shù)據(jù)包是一份快遞的話(huà),網(wǎng)速越高代表卡車(chē)噸量越大,而 ping 值則代表了這輛卡車(chē)能跑得多快、路上有多堵。

    越低的 ping 值,意味著你的網(wǎng)絡(luò)越暢通,但和它一次能搬運(yùn)多少數(shù)據(jù)并沒(méi)有什么關(guān)系。

但你知道,ping 最初是如何被發(fā)明出來(lái)的嗎?其實(shí),這個(gè)如今在打游戲、開(kāi)會(huì)和測(cè)延遲中“無(wú)處不在”的計(jì)算機(jī)技術(shù),當(dāng)年竟然是被“隨手”寫(xiě)出來(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)。

例如,光線(xiàn)追蹤在 80 年代剛火起來(lái)那會(huì)兒,Muuse 老哥就已經(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è)?GitHub 上隨手一搜,能看到不少實(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 不幸因車(chē)禍去世,當(dāng)時(shí)他才剛過(guò)完自己的 42 歲生日:



還好在 Web Archive 上保存了那個(gè)時(shí)候的網(wǎng)頁(yè),我們得以看見(jiàn) ping 的第一版源代碼。

這份代碼文件名是 ping.shar,一個(gè)非常有年代感的后綴,如今已經(jīng)基本沒(méi)有人使用這個(gè)文件擴(kuò)展名了。它是一個(gè) 41KB 大小的文件,從編輯器中來(lái)看,大約有 1600 行左右的代碼:



那么,ping 究竟是怎么誕生的,又是如何被普及開(kāi)來(lái)的?
ping 是如何被普及的?

最初編寫(xiě)這份代碼的時(shí)候,Muuss 完全沒(méi)想過(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)的建模,他很快寫(xiě)了一個(gè)程序,并將之命名為 ping,在聲吶中指代聲音脈沖、也就是信號(hào)的意思。隨后,Muuss 只用了一晚上,就將 ping 的程序?qū)懥顺鰜?lái)。

雖然寫(xiě)出來(lái)的時(shí)候,他所在的實(shí)驗(yàn)室已經(jīng)將網(wǎng)絡(luò)問(wèn)題解決了,但 Muuss 還是將它作為一個(gè)公有領(lǐng)域軟件(public domain software,使用時(shí)無(wú)需許可證)發(fā)布了出去。

很快加州大學(xué)伯克利分校的 Erick Engelke 發(fā)現(xiàn)了這份軟件,將它改寫(xiě)了一版(遵循 GPL 開(kāi)源協(xié)議),放入伯克利自己開(kāi)發(fā)的 Unix 操作系統(tǒng) BSD4.3 版本中。

隨后,計(jì)算機(jī)工程師 Tim Crawford 又基于 MIT 開(kāi)源協(xié)議,寫(xiě)了一個(gè) ReactOS 版本的 ping 代碼。再之后,ping 被各個(gè)計(jì)算機(jī)大牛寫(xiě)入各種操作系統(tǒng)如 macOS、Linux 和 Windows 中,又加入了更多的功能。



△ Linux 系統(tǒng)上的 ping.c

如今我們看到的各個(gè)系統(tǒng)中自帶的 ping 工具,早已經(jīng)不是最初那個(gè) ping.shar 程序了,其功能和用法都要豐富得多。那么,如今的 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ò)樓里面的其他門(mén)牌號(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é)議又是什么?它的全稱(chēng)是: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è)常見(jiàn)的操作系統(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 值也沒(méi)問(wèn)題,在一臺(tái)上輸入另一臺(tái)的 IP 地址即可:



所以,在玩網(wǎng)絡(luò)游戲的時(shí)候,如果 ping 值過(guò)高就會(huì)感覺(jué)操作延遲。這個(gè)延遲的后果還挺嚴(yán)重的 —— 例如,在打王者排位的關(guān)鍵時(shí)刻,如果網(wǎng)絡(luò)連接(可能是自己的無(wú)線(xiàn)網(wǎng),也可能是附近的服務(wù)器)卡頓,明明自己已經(jīng)操作了,但由于敵方的操作反饋時(shí)間更快,所以只能眼睜睜得看著自己的英雄掛掉。



說(shuō)到這里,量子位急忙上號(hào)診斷了一下自己的網(wǎng)絡(luò)。



還好,王者榮耀的延遲低于 70ms 算正常。對(duì)于 LOL,玩家可打開(kāi)設(shè)置菜單,點(diǎn)擊“顯示”標(biāo)簽,然后點(diǎn)擊“切換 FPS 顯示”按鈕,查看自己的 ping 值。



至于鎖 ping(人工延遲)技術(shù)要如何實(shí)現(xiàn),目前拳頭游戲官方給出了一份技術(shù)說(shuō)明:



從說(shuō)明中來(lái)看,拳頭表示在線(xiàn)下場(chǎng)館比賽時(shí)加入了一個(gè)人工延遲工具調(diào)整 ping 值。由于人工延遲工具的代碼運(yùn)算出現(xiàn)錯(cuò)誤,導(dǎo)致線(xiàn)下 ping 值過(guò)高,目前已通過(guò)調(diào)節(jié)配置修復(fù),但游戲中顯示的 ping 值會(huì)因?yàn)檫@一配置調(diào)節(jié)出現(xiàn)問(wèn)題。



具體人工延遲工具(鎖 ping)的技術(shù)代碼,目前拳頭游戲并未公開(kāi)。不過(guò) GitHub 上也已經(jīng)有人做過(guò)人工延遲工具,如下面這個(gè) clumsy 開(kāi)源模擬器,可以模擬延遲、丟包等 bug。感興趣的小伙伴可以去看看:


One More Thing

在自己的主頁(yè)上,Muuse 還 po 出了另一個(gè)與“ping”相關(guān)的小趣事。早在 1933 年,美國(guó)兒童圖畫(huà)書(shū)作家 Marjorie Flack 就曾經(jīng)出版過(guò)一個(gè)繪本:《ping 的故事》。



在這里,ping 是故事主角小鴨子的名字:小鴨子 ping 和伙伴還有主人一起生活在一條船上,每天最后一只回家的小鴨子要被打屁股。一天傍晚,ping 貪玩落在了最后,為了不挨打,它沒(méi)有回家,由此在長(zhǎng)江中開(kāi)啟了一段奇妙冒險(xiǎn),最終平安回到主人的船上。

這看似是一本尋常的兒童讀物,但多年后,有讀者發(fā)現(xiàn),小鴨子 ping 的故事與計(jì)算機(jī)中的 ping 數(shù)據(jù)包竟有異曲同工之妙!一個(gè) ping 數(shù)據(jù)包就像一只鴨子,它和其他數(shù)據(jù)包(更多鴨子)一起,在主機(jī)(小船)上度過(guò)了一段時(shí)期。

然后,這些數(shù)據(jù)包(鴨子)通過(guò)一個(gè)通道(橋)離開(kāi)主機(jī)(船),進(jìn)入互聯(lián)網(wǎng)(長(zhǎng)江)。數(shù)據(jù)包(鴨子)在另一個(gè)主機(jī)(另一艘船)上經(jīng)過(guò)短暫的時(shí)間后,又回到了原來(lái)的主機(jī)(船)上。所以,今天你的 ping 值如何?

 
? 主站蜘蛛池模板: 偃师市| 遂昌县| 北安市| 翁牛特旗| 岳普湖县| 秦安县| 临高县| 同江市| 田东县| 铜梁县| 阿勒泰市| 石城县| 通州市| 奉贤区| 油尖旺区| 鄂托克前旗| 安西县| 辽阳县| 西峡县| 章丘市| 仁寿县| 五大连池市| 巴林左旗| 晋宁县| 札达县| 资溪县| 淳化县| 双鸭山市| 德阳市| 开阳县| 合山市| 合肥市| 连南| 韩城市| 汝州市| 依安县| 六枝特区| 娄底市| 泽州县| 綦江县| 苗栗市|