9 GP
延遲(Delay) 與 Ping 值(Latency)
作者:拉普拉斯之影│League of Legends│2014-02-20 03:33:48│巴幣:18│人氣:18335
今天爬文看到不少抱怨GARENA某代理商的文章
筆者也是受害者之一, 但因為看到不少人對Ping 跟延遲有些許誤解, 因此於大學修計算機科學的在下特此想撰文解釋一下延遲的原理
延遲是什麼?
延遲正確的英語是 Delay 或 Time Delay
電腦與電腦通訊間, 信息的傳遞是需要時間的, 打比方就是飛鴿傳書要等白鴿飛過去對方才收到一樣, 延遲就是指我方發送信息到達目標方所需的傳輸時間.
利用電子線路通訊的電腦,就算對方是在地球的另一面, 也只是瞬間發生的事情, 在計算機通訊之間的延遲叫作Latency.
Ping 的背後
Ping 其實比較屬於是一種工具或方法 , 用來計算出 Latency
要測量物件時, 我們需要至少一種測量單位, 如重量單位公斤(kilogram, kg)和磅(Pound).
而量度延遲的單位是毫秒(millisecond, ms), 值得一提的是毫秒在電腦上是個很重要的時間單位, 所有(至起碼是我所知道的)的程式語言都會使用毫秒作單位. 當然也有其他時間單位作更精密的運算.
那毫秒即是多少秒? 以下是道簡單的換算式:
1 ms = 10^-3 s = 1/1000 s
s 代表秒(Second)
換句話說, 1秒是1000毫秒
Ping的原理很簡單, 不過首先我們得清楚一下電腦數據的傳輸方式:
電腦間的傳輸必須使用通訊協定, 詳細的理論這篇文章就不多說, 在這我就用台服LoL作例子來簡單解釋一下:
當我(Client, 客戶端)想玩時就要連上爛伺服器(Server), 我要先發送一個信息給伺服器(send request), 當服方收到我的信息後發送回應信息(response). 當我收到回應信息後便建立起通訊.
用圖像來表達的話:(註: 圖上方法是TCP協定, 傳信息的方式會因不同協定有變化, 但跟這個方法大同小異)
如上圖所見, Ping 就是測量由發送信息至收到回應的所需時間(ms), 我們叫這得出的時間做Round-trip delay time(RTT), "大多數"遊戲中的 Lantency 就是此值
動手Ping Ping 看
讀萬卷書不如行萬里路
除了使用測速網站外, 其實我們是可以使用自己電腦系統來看Lantency的. 這裡就介紹一個十分容易簡單的Window系統ping 指令.
要使用ping, 我們有一些要求作前提:
-你要知道一個目標位置, 網址或IP都可以. 在這簡易教學中我使用www.google.com作例子
-你擁有使用命令提示字元(cmd)的權限
-你的電腦能上網......
符合這些要求後, 我們馬上可以開始試試:
1, 打開命令提示字元 ( a 或 b 兩種方法擇一)
a, 開始 -> 所有程式 -> 附屬應用程式 -> 命令提示字元
b, 開始 -> 在搜尋程式及檔上輸入cmd -> cmd.exe
2, 在cmd.exe中輸入 ping www.google.com -> 按Enter
這樣就可以得出我這台電腦跟Google先生(本家)的延遲了
如果看不懂內容的話, 這裡我解釋一些比較有用的情報:
"Pinging www.google.com [173.194.127.51] with 32 bytes of data:"
方括號內的IP 是網址www.google.com 的其中一個對應IP (對,是其中一個. 同一個網址下,你看到的IP可能會跟我的不樣)
"Reply from 173.194.127.51: bytes=32 time=22ms TTL=55" x4
這裡系統總共發了4個信息給Google, time就是該次信息的延遲了
"Packets: Sent = 4, Received = 4, Lost = 0 (0% loss)"
有如寄信會寄失一樣, 信息傳遞也可能會失敗, Lost就是指失敗的次數.
此時,你也許會想到有點奇怪. 是的, 其實你是可以自定義ping的次數跟頻率的.
值得注意的是, 我們玩多人連線遊戲時看到的值是Minimum(取最小值), Maximum(取最大值) 或 Average(取平均值)的其中一個, 至於會是哪個就看開發者的良心了
更新: 在日新月異的欺詐遊戲/ Lier Game 下,畫面上顯示的延遲可能是其他的計法, 例如One-way delay(OWD)即由我方發送到服方的時間(Client to Server Interval)或服方發給我方
的時間(Server to Client Interval) .
RTT跟OWD採取的值除了上述三種外也可以取中位數
主要構成原因是沒有一個國際標準限制代理商要求遊戲開發者使用哪一種測量準則)
另外,遊戲是不可能把每次ping的結果報告給你, 因為一來很吃資源二來你會眼花, 通常每半秒更新一次結果就足夠了
(註: 或許你會注意到為什麼明明你的Ping值很低卻很lag, 這正是心術不正的商人只顯示Minimum值)
(再註: 舉個明顯假設例子, 某某台服電競遊戲的延遲值更新率是1秒更新1次,
在這1秒內的數據傳輸次數其實很多的, 我假設有100次.
這100次有99次的延遲值是超過500ms, 然後有1次延遲值是80ms
因此你1秒間的Ping值就會有2個很極端的數字:
Minimum= 80ms, Average = (500*99+80*1)/100 = 495.8ms
也就是說, 在一秒內你電腦的反應慢了近0.5秒
然而因為遊戲上顯示是Minimum=80ms(笑)
因此那奸商卻在說你的延遲值很正常 是你ISP的問題 和伺服器根本沒有關係
小結
風暴過後就萬物皆平和寧靜, 暴雪出後就沒人玩英雄聯盟
本來, 我只是把自己所知道的分享一下, 當中可能有錯有誤導, 讀者如有發現,不妨回覆一下大家討論一下學術共勉之
到了最後, 筆者才發現, 其實自己只是在發燥文... orz
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=2351261
Some rights reserved. 姓名標示-非商業性 2.5 台灣
相關創作
同標籤作品搜尋:League of Legends
留言共 2 篇留言
安黛:
想請教 PING寫(S+C) = 0.179932 這樣是延遲多少秒?
01-08 13:58
拉普拉斯之影:
抱歉不太明白S+C是指什麼- -;如果是指M$ CMD 中的 ping -s Count的的話, 就是在頭count次(最多四次)信息紀錄收發時間. 另外如果S是指Sec 秒的話 0.179932秒就是 乘上1000 等於~179.9 ms ping
01-13 16:28
安黛:
好像是傳送+回饋吧
01-13 16:40
我要留言提醒:您尚未登入,請先
登入再留言
9喜歡★pn4863 可決定是否刪除您的留言,請勿發表違反站規文字。