疑惑2:为什么要有2倍这样的一个内核设置呢?我的理解是,用户在设置这个的时候,可能只考虑到数据的大小,没有考虑数据封包的字节开销。所以将这个设置成两倍。
注:overhead,在计算机网络的帧结构中,除了有用数据以外,还有很多控制信息,这些控制信息用来保证通信的完成。这些控制信息被称作系统开销。
可知,接收缓冲区的默认是:1048576,1M。发送缓冲区的默认是:512488,512K。linux系统调用为什么建立一个socket时得到的默认是87380、16384???
由此可见,新建socket,选取的默认都是从这两个文件中读取的。可以通过更改这两个文件中的进行调优,但是最可靠的方法还是在程序中调用setsockopt进行设置。通过setsockopt的设置,能设置的接收缓冲区的最大是8M,发送缓冲区的最大是16M(Linux 2.6.6中)。
1. tcp 收发缓冲区默认
[root@ ]# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 4161536

87380 :tcp接收缓冲区的默认
[root@ ]# cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4161536
16384 : tcp 发送缓冲区的默认
2. tcp 或udp收发缓冲区最大
[root@ ]# cat /proc/sys/net/core/rmem_max
131071
131071:tcp 或 udp 接收缓冲区最大可设置的一半。linux系统调用
也就是说调用 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@ ]# cat /proc/sys/net/core/wmem_max

131071
131071:tcp 或 udp 发送缓冲区最大可设置得一半。
跟上面同一个道理
3. udp收发缓冲区默认
[root@ ]# cat /proc/sys/net/core/rmem_default
111616:udp接收缓冲区的默认
[root@ ]# cat /proc/sys/net/core/wmem_default
111616
111616:udp发送缓冲区的默认
4. tcp 或udp收发缓冲区最小
tcp 或udp接收缓冲区的最小为 256 bytes,由内核的宏决定;
tcp 或udp发送缓冲区的最小为 2048 bytes,由内核的宏决定
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-60264-2.html
预售地址在哪里
真空包装
经济拖垮了怎么办