rece buffer

来源:互联网 发布:centos设置防火墙端口 编辑:程序博客网 时间:2024/06/03 21:00

tcp数据传输的角度来说,传输速度取决于接收窗口和数据包在链路上的往返时间

对于tcp建立连接时的sys包里的接收窗口主要根据系统配置里的的tcpbuffer参数(ReadMin, ReadInitial, ReadMax),配合算法得出的。在接收过程中,这个接收窗口会根据算法发送改变,

比如当接收端收到数据时,它把 ACK 发送回发送端以表明成功接收到这些字节。在每个 ACK 中,“窗口”字段表示接收窗口中剩余的字节数。接收窗口是用于控制可从发送端传送给接收端的未确认数据数量的窗口。

由于接收窗口中可能会有应用程序未检索到的数据以及已接收但尚未确认的数据,因此 TCP 接收窗口具有一些其他的结构,如图 2 所示。
图 2 TCP 接收窗口中的数据类型 (单击该图像获得较大视图)
请注意最大接收窗口(ReadMax)和当前接收窗口的区别。最大接收窗口的大小是固定的。当前接收窗口的大小是可变的,并对应于接收端允许发送端发送的剩余数据量。当前接收窗口大小是发送回发送端的 ACK 中通告的“窗口”字段值,具体的值需要根据算法得出。比如如果sys包的接收窗口大小值为27200bye,比如出现重传现象,则需要减少通告的接收窗口,可能小于sys包里的接收窗口大小(13776),告知发送端把发送速度放慢。还比如网络环境好,则增加通告的接收窗口大小值,可能会大于sys包里的接收窗口大小值(55104),但一定不会增加到大于ReadMax。
 
注意几点:
1.tcp建立时,分配的接收buffer不是简单的一个值,是根据系统buffer,ReadMin, ReadInitial, ReadMax,再配合算法分配的,如果应用的的setsockopt设置了SO_RCVBUF,也会反映到分配的buffer值上。
2.tcp建立时,sys包里的通告接收窗口大小值也是根据系统默认配置文件里的ReadMin, ReadInitial, ReadMax,再配合算法分配的得出的。第1条的分配的buffer值与通告接收窗口大小值不相等。
3.应用的的setsockopt设置了SO_RCVBUF,一般会反映到ReadMax值。
4.可以用

echo 131072 262144 524288 > /proc/sys/net/ipv4/tcp_rmem 改变ReadMin, ReadInitial, ReadMax值

也可以用cat /proc/sys/net/ipv4/tcp_rmem 查看ReadMin, ReadInitial, ReadMax值。

5.在android的初始化配置文件里tcp的buffer参数如下:

device/./common$ vim init.rc

#   ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax,
    setprop net.tcp.buffersize.default 4096,87380,110208,4096,16384,110208
    setprop net.tcp.buffersize.wifi    524288,1048576,2097152,262144,524288,1048576
    setprop net.tcp.buffersize.lte     524288,1048576,2097152,262144,524288,1048576
    setprop net.tcp.buffersize.umts    4094,87380,110208,4096,16384,110208
    setprop net.tcp.buffersize.hspa    4094,87380,262144,4096,16384,262144
    setprop net.tcp.buffersize.hsupa   4094,87380,262144,4096,16384,262144
    setprop net.tcp.buffersize.hsdpa   4094,87380,262144,4096,16384,262144
    setprop net.tcp.buffersize.hspap   4094,87380,1220608,4096,16384,1220608
    setprop net.tcp.buffersize.edge    4093,26280,35040,4096,16384,35040
    setprop net.tcp.buffersize.gprs    4092,8760,11680,4096,8760,11680
    setprop net.tcp.buffersize.evdo    4094,87380,262144,4096,16384,262144

 


0 0
原创粉丝点击