基于Linux的Socket網(wǎng)絡(luò )編程的性能優(yōu)化
4.3 為Bandwidth Delay Product調節TCP窗口
TCP的性能取決于幾方面因素,最重要的是鏈接帶寬(link bandwidth)(報文在網(wǎng)絡(luò )上傳輸的速率)和往返時(shí)間(round-trip time)或RTT(發(fā)送報文與接收到另一端的響應之間的延時(shí))。這兩個(gè)值確定稱(chēng)為BDP(Bandwidth Delay Prod-uct)的內容。BDP給出一種簡(jiǎn)單的方法計算理論上最優(yōu)的TCP Socket緩沖區大小(其中保存排隊等待傳輸和等待應用程序接收的數據)。緩沖區太小,TCP窗口就不能完全打開(kāi),這會(huì )限制性能;緩沖區太大,則會(huì )浪費寶貴的內存資源;設置的緩沖區大小合適,就可完全利用可用帶寬。
BDP計算公式:
BDP=link bandwidth×RTT
若應用程序通過(guò)一個(gè)100MB/s的局域網(wǎng)通信,其RRT為500ms,則BDP為:50MB/sx0.050/ 8625M=625KB。Linux2.6默認的TCP窗口大小是110KB,這將連接的帶寬限制為22M/S,計算方法如下:
throughput=window_size/RTT
110 KB/0.050=2.2 MB/s
使用上面計算的窗口大小,得到帶寬為12.5 MB/s,即:
625 KB/0 050=12.5 MB/s
差別很大,并且可以為Socket提供更大的吞吐量??梢愿鶕约旱?a class="contentlabel" href="http://dyxdggzs.com/news/listbylabel/label/Socket">Socket計算最優(yōu)的緩沖區大小。Socket提供幾個(gè)Socket選項,其中兩個(gè)可以用于修改Socket的發(fā)送和接收緩沖區的大小。使用SO_SNDBUF和SO_RCVBUF選項來(lái)調整發(fā)送和接收緩沖區的大小。本文引用地址:http://dyxdggzs.com/article/157808.htm
在Linux 2.6內核中.發(fā)送緩沖區的大小由調用用戶(hù)定義,而接收緩沖區會(huì )自動(dòng)加倍。通過(guò)計算合理設置緩沖區的大小,Socket網(wǎng)絡(luò )傳輸帶寬的資源將得到充分利用,從而提高了傳輸性能。
5 結束語(yǔ)
設計和實(shí)現一個(gè)基于Linux的Socket網(wǎng)絡(luò )編程,通過(guò)在服務(wù)器端運行預先編譯的可執行文件serv,和在客戶(hù)端運行預先編譯的可執行文件clt,服務(wù)器端和客戶(hù)端建立通信連接。加入select()函數以后,服務(wù)器端可以允許多個(gè)客戶(hù)端接入服務(wù)器端,解決了I/O多路復用問(wèn)題,更加接近實(shí)際應用。利用TCP socket禁用Nagle算法實(shí)現了最小化報文傳輸的延時(shí),提高了Socket的性能。在網(wǎng)絡(luò )帶寬非常珍貴的現實(shí)中。提出了為Bandwidth Delay Product調節TCP窗口,修改socket的發(fā)送和接收緩沖區的大小,完全利用可用的帶寬。達到較好的網(wǎng)絡(luò )傳輸效果。實(shí)際網(wǎng)絡(luò )傳輸環(huán)境復雜多變,如何達到最理想的網(wǎng)絡(luò )傳輸,還需進(jìn)一步的分析和研究。
p2p機相關(guān)文章:p2p原理
評論