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)。 以上内容取自多篇博客,整理

你可能感兴趣的:(tcp与udp缓冲区大小总结)