4.3 为Bandwidth Delay Product调节TCP窗口
TCP的性能取决于几方面因素,最重要的是链接带宽(link bandwidth)(报文在网络上传输的速率)和往返时间(round-trip time)或RTT(发送报文与接收到另一端的响应之间的延时)。这两个值确定称为BDP(Bandwidth Delay Prod-uct)的内容。BDP给出一种简单的方法计算理论上最优的TCP Socket缓冲区大小(其中保存排队等待传输和等待应用程序接收的数据)。缓冲区太小,TCP窗口就不能完全打开,这会限制性能;缓冲区太大,则会浪费宝贵的内存资源;设置的缓冲区大小合适,就可完全利用可用带宽。
BDP计算公式:
BDP=link bandwidth×RTT
若应用程序通过一个100MB/s的局域网通信,其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提供更大的吞吐量。可以根据自己的Socket计算最优的缓冲区大小。Socket提供几个Socket选项,其中两个可以用于修改Socket的发送和接收缓冲区的大小。使用SO_SNDBUF和SO_RCVBUF选项来调整发送和接收缓冲区的大小。
在Linux 2.6内核中.发送缓冲区的大小由调用用户定义,而接收缓冲区会自动加倍。通过计算合理设置缓冲区的大小,Socket网络传输带宽的资源将得到充分利用,从而提高了传输性能。
5 结束语
设计和实现一个基于Linux的Socket网络编程,通过在服务器端运行预先编译的可执行文件serv,和在客户端运行预先编译的可执行文件clt,服务器端和客户端建立通信连接。加入select()函数以后,服务器端可以允许多个客户端接入服务器端,解决了I/O多路复用问题,更加接近实际应用。利用TCP socket禁用Nagle算法实现了最小化报文传输的延时,提高了Socket的性能。在网络带宽非常珍贵的现实中。提出了为Bandwidth Delay Product调节TCP窗口,修改socket的发送和接收缓冲区的大小,完全利用可用的带宽。达到较好的网络传输效果。实际网络传输环境复杂多变,如何达到最理想的网络传输,还需进一步的分析和研究。