tcp與udp緩衝區大小總結
1.tcp收發緩衝區默認值
[root@localhost /]# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 4194304
87380 :tcp接收緩衝區的默認值
[root@localhost /]# cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4194304
16384 : tcp發送緩衝區的默認值
2.udp收發緩衝區默認值
[root@localhost /]# cat /proc/sys/net/core/rmem_default
110592
110592:udp接收緩衝區的默認值
[root@localhost /]# cat /proc/sys/net/core/wmem_default
110592
110592:udp發送緩衝區的默認值
3. tcp 或udp收發緩衝區最大值
[root@localhost /]# cat /proc/sys/net/core/rmem_max
131071
131071:tcp 或 udp 接收緩衝區最大可設置值的一半。
也就是說調用 setsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 時rcv_size 如果超過 131071,那麼
getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 去到的值就等於 131071 * 2 = 262142
[root@localhost /]# cat /proc/sys/net/core/wmem_max 131071
131071:tcp 或 udp 發送緩衝區最大可設置值得一半。
跟上面同一個道理
4. tcp 或udp收發緩衝區最小值
tcp 或udp接收緩衝區的最小值爲 256 bytes,由內核的宏決定;
tcp 或udp發送緩衝區的最小值爲 2048 bytes,由內核的宏決定
例子:
int iSock = -1;
iSock = socket(AF_INET, SOCK_DGRAM, 0);
int iRecvLen = 300*1024;
int iRecvLen_2 = 0;
int iOptlen = 4;
int iRet = -1, iRet_2 = -1;
iRet = setsockopt(iSock, SOL_SOCKET, SO_RCVBUF, &iRecvLen, 4);
iRet_2 = getsockopt(iSock, SOL_SOCKET, SO_RCVBUF, &iRecvLen_2, &iOptlen);
printf("RecvLen 2 is %d[%d:%d].\n", iRecvLen_2, iRet, iRet_2);
如果默認的udp緩衝區的最大值爲 110592 Bytes,當通過setsockopt()函數想將其設置爲300KB時,超過了最大上限的2倍,因此用getsockopt()函數獲取實際設置的緩衝區長度爲221184Bytes(110592*2)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.