有時需要測試網速,但是在開始使用文件傳輸工具來測量之前,請考慮一下,你實際測量的是什麼?
為了說明這一點,請假設一位數據庫管理員DBA,他一直在使用千兆以太網适配器,在幾個節點之間配置集群數據庫。事情不太順利,他自然而然懷疑是硬件出了問題。
所以他把你叫過去,告訴你使用sftp在節點之間移動文件時,傳輸速率與千兆以太網的傳輸速率極不匹配。
他自認為測量了網絡吞吐量,但是他可能隻是測量了遠程系統磁盤的讀寫速率。因此,需要移除限制因素,即磁盤(可能還有sftp的加密開銷)。
為了消除磁盤内文件轉移對測量的影響,我們将使用netcat。Netcat被稱為一個“功能豐富的網絡調試和探索工具”。它可以從網上獲得,或者已經在你所使用的發行版裡了。
which nc
/usr/bin/nc
為了測試,我們使用兩台主機,一台用于監聽連接,另一台用于連接和發送數據流。在每個測試中,我們将使用一個10秒的會話,并且我們将在三個速度不同的lan上進行。為了從測試中消除磁盤讀寫的消耗,輸出文件将是/dev/null。
在主機A(192.168.0.8),以普通用戶身份啟動netcat:
nc -v -v -l -n -p 2222 >/dev/null
listening on [any] 2222 ..
在主機B上,通過端口2222使用yes命令将數據發送到機器A,并使用netcat對會話進行計時。
time yes|nc -v -v -n 192.168.0.8 2222 >/dev/null
(UNKNOWN) [192.168.0.8] 2222 (?) open
在主機 A上注意到:
connect to [192.168.0.8] from (UNKNOWN) [192.168.0.4] 34111
10秒鐘後,通過鍵入ctl-c停止,并記下所花的時間:
sent 87478272, rcvd 0
real 0m9.993s
user 0m2.075s
sys 0m0.939s
在主機A上,記下發送的數據(以字節為單位):
sent 0, rcvd 87478392
現在将字節rcvd乘以8得到總位數,然後除以時間:結果是70MB/s。
主機A執行:
nc -v -v -l -p 2222 >/dev/null
listening on [any] 2222 ...
主機B執行:
yes|nc cfms5-p 2222 >/dev/null
punt!
主機A顯示:
connect to [192.168.1.5] from cfms6-p [192.168.1.6] 33855
sent 0, rcvd 1155325952
同上,計算結果是 0.9Gb/s。
配置結果如上,省略若幹步驟。
.
.
.
nc -v -v -l -p 80 > /dev/null
listening on [any] 80 ...
.
.
.
sent 0, rcvd 8437760
根據時長和接收字節數,計算結果是 6.7Mb/s。
我們已經看到了一種使用netcat測試網速的簡單方法。
至少可以表明,網速在一定程度上,與它們各自的局域網段速度一緻。
那我們怎麼解釋,為什麼達不到廣告上标榜的速度呢?也許是主機上的網絡驅動程序的效率不高,再加上處理器開銷,拖慢了整體速度。
我是 @程序員小助手,持續分享編程故事,歡迎關注。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!