Tcp

通過 TCP 發送一段時間的隨機數據,併計算發送了多少字節

  • November 10, 2019

為了測試數據吞吐量,我想 1) X 秒 2) 發送隨機數據 3) 通過 TCP 和 4) 之後確切知道傳輸了多少字節。

我最好的嘗試(不多)

  1. 超時 X

  2. dd if=/dev/urandom count=65535 bs=1500

  3. > /dev/tcp/<host>/<port>

  4. … ? 我可以使用wc -c嗎?如果做不到這一點,也許將我的隨機數據通過管道傳輸tee到一個文件/dev/tcp中,然後,當超時結束時,計算文件的字節大小?

任何人都可以提供一個優雅的 bash 命令來執行此操作嗎?


$$ Update $$這是針對 Linux 的定製版本。對於安全海豚,並非所有命令都可用。我會檢查所有建議並儘快回复您。

既然您要求解決方案,我將向您介紹我提到的那個和@SatoKatsura 提到的那個。首先,生成隨機網路負載通常不是進行負載測試的最有用的方法。通常,您需要重新創建高工作量的現實狀態。但是,如果您只是想在任何類型的競爭負載下尋找與另一個工作負載的性能相關的東西,那麼將隨機數據扔到管道中仍然是有意義的。

從你提到的內容中得到你想要的最直接的方法是我在評論中提到的nc。設置接收端,使其監聽某個隨機埠並將輸出重定向到/dev/null

[root@listeningServerFQDN ~]# nc -l listeningServerFQDN 1023 &gt;/dev/null

然後在客戶端nc再次使用將您的/dev/urandom數據發送到遠端端:

[root@transmit ~]# dd if=/dev/urandom count=65535 bs=1500 | nc listeningServerFQDN 1023

在此之後,您可以使用您想使用的任何工具。


這是一種可能的解決方案,另一個是iperf@SatoKatsura 提到的工具。這更適合出於某種原因只需要某種負載在網路上執行的網路工程師。例如,如果他們想測試他們正在嘗試實施的 QoS 策略。在這種情況下,他們不在乎它是否代表工作負載,他們只是在測試頻寬是否受到適當限制。

基本iperf用法涉及設置伺服器程序:

[root@listeningServerFQDN ~]# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------

然後在客戶端上執行您的測試:

[root@transmit ~]# iperf -c listeningServerFQDN -r
bind failed: Address already in use
------------------------------------------------------------
Client connecting to transmit.example.com, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[  4] local 10.762.40.95 port 54610 connected with 10.762.40.95 port 5001
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  37.1 GBytes  31.8 Gbits/sec

它在伺服器實例上重複,它將以下內容附加到我的輸出中:

[  4] local 10.762.40.95 port 5001 connected with 10.762.40.95 port 54610
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  37.1 GBytes  31.7 Gbits/sec
------------------------------------------------------------
Client connecting to 10.762.40.95, TCP port 5001
TCP window size: 4.00 MByte (default)
------------------------------------------------------------
[  4] local 10.762.40.95 port 54640 connected with 10.762.40.95 port 5001
[  5] local 10.762.40.95 port 5001 connected with 10.762.40.95 port 54640
[  4]  0.0-10.0 sec  37.4 GBytes  32.1 Gbits/sec
[  5]  0.0-10.0 sec  37.4 GBytes  32.1 Gbits/sec

顯然,您可以從那里分支出來,但您會得到大致的想法,並且可以查看手冊頁以了解其他所有內容。


**我的兩分錢:**如果您的標準真的nc只是“通過管道發送隨機數據”nc是一個普遍有用的工具,您可以使用它來做的不僅僅是這件事,我會懷疑案例foriperf很窄。

我會使用nc(或您更熟悉的任何工具)進行基本測試,然後逐步模擬實際負載,而不是進行iperf另一個“管道中的隨機數據”測試。

引用自:https://unix.stackexchange.com/questions/330086