TCP K.O. UDP?? Really??

要懂「網路」真的很難呢~
除了一堆冒出來的網路協定,
當網路出現奇怪現象時,還要找出各種可能的原因
這篇記載了一個辦公室發生的故事:

同事A:我正在測設備的 Throughput,結果跟我想像的不太一樣ㄟ
我:一定是設定錯誤啦(睡眼惺忪,不想理會)
同事A:設定沒錯,而且 TCP 的流量正常,但 UDP 很不正常,TCP的流量比 UDP 還大
我:(持續昏迷中)怎麼可能,根據網路基本理論,TCP 的頻寬應該會被 UDP 整個打壓啊,而且以前用 NS2 也是同樣的結果啊...

進到實驗室~

實驗軟體:iperf

網路環境簡化版: MS --- BS---ASNGW
其中 ASNGW 是 iperf 的client,同時產生TCP跟UDP(15Mbps)的封包,在MS端進行接收...
(15Mbps 是 MS~BS的bottleneck)
結果... TCP 的 throughput 大於 UDP,近乎兩倍

why??
希望下一次,我在看到這裡的時候,就可以說出答案了

後來找同事B討論,經過千辛萬苦的實驗(由同事B做的~),得到下面的結論:

1. iperf 有對 UDP 動過手腳。iperf 根據官方網站的說法,他是用來測 bandswidth 的軟體,而不是產生封包的軟體!!所以他有針對UDP進行修改,當封包調的時候,他會自動把UDP的傳送速率降低。(TCP則不會進行這件事,因為TCP自己有congestion control 的功能)

2. 當我們把那段 UDP 動手腳的部分(delay_loop)註解調時,發現傳輸比例為 1:1,居然還是沒被打壓~

3. 其實,真正會打壓的情況,是指下面的狀況:

硬體配置
三台 PC 以 Hub 連接, 稱為 PC1, PC2 與 PC3. Hub 為 100M
軟體設置
iperf version 1.7.0
PC1 跑 iperf server for TCP traffic 與 iperf server for UDP Traffic.
PC2 跑 iperf client for TCP traffic.
PC3 跑 iperf client for UDP traffic, data rate 為 100Mbps.

實驗結果
TCP traffic 被 UDP traffic 打壓.
TCP traffic 之 throughput 幾乎為 0.
UDP traffic 之 trhoughput 約為 100Mbps.

因此網路端發生擁塞, 發生 TCP 與 UDP 之競爭. 結果如預期般 TCP 受到 UDP 的打壓。而如果是在同一台的話...作業系統的排程就已經解決掉這個問題了,所以上面才會得出近似1:1的比例。

看來,以後想問題要想更深入才行
這是個很好的提醒:p

留言

這個網誌中的熱門文章

如何將Linux打造成OpenFlow Switch:Openvswitch

我弟家的新居感恩禮拜分享:善頌善禱

Linux Virtual Interface: TUN/TAP