博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于linux的tcp/udp缓存
阅读量:4129 次
发布时间:2019-05-25

本文共 1105 字,大约阅读时间需要 3 分钟。

Q:本地同时与多个主机建立连接,如果这些主机同时发生数据到本地,而本地又没有调用recv进行处理,会出现什么情况?

A:系统为每个socket建立一个缓存,ip层组包进程在收到数据包后会把数据放入socket缓存。调用recv将socket缓存的内容copy到程序定义的缓存,如果通信进程不能及时recv,将导致该socket缓存满。如果用tcp协议,socket缓存满以后,系统会向对方发出错误消息,对方回收到wsaewouldblock错误,如果是用udp协议,系统会把该socket的以后收到的数据丢弃~

当然发送端送速率过大,内核缓冲区即使增大了,接收端应用程序如果处理不过来,仍然会在应用程序那丢包,因此要在应用程序中调大socket的接收缓冲区。

linux下,sysctl能够设置和显示在/proc/sys目录中的内核参数.能用sysctl来设置或重新设置连网功能,如IP转发、IP碎片去除及源路由检查等。

sysctl -w net.core.rmem_max = 5000000

sysctl -w net.core.wmem_max = 5000000
sysctl -w net.core.rmem_default = 5000000
sysctl -w net.core.wmem_default = 5000000

可以像这样来加大缓冲区空间,修改的是/proc/sys/net/core目录下的值。

1. tcp 收发缓冲区默认值

# cat /proc/sys/net/ipv4/tcp_rmem

4096    87380   4161536

87380  :tcp接收缓冲区的默认值

# cat /proc/sys/net/ipv4/tcp_wmem 

4096    16384   4161536
16384  : tcp 发送缓冲区的默认值

2. tcp 或udp收发缓冲区最大值

# cat /proc/sys/net/core/rmem_max 

131071

131071:tcp 或 udp 接收缓冲区最大可设置值的一半。

3. udp收发缓冲区默认值

# cat /proc/sys/net/core/rmem_default   
111616:udp接收缓冲区的默认值
# cat /proc/sys/net/core/wmem_default 
111616
111616:udp发送缓冲区的默认值
4. tcp 或udp收发缓冲区最小值
tcp 或udp接收缓冲区的最小值为 256 bytes,由内核的宏决定;
tcp 或udp发送缓冲区的最小值为 2048 bytes,由内核的宏决定

转载地址:http://zewvi.baihongyu.com/

你可能感兴趣的文章
hdu 3790 hdoj 3790
查看>>
hdu 3789 hdoj 3789
查看>>
hdu 3788 hdoj 3788
查看>>
zju 1003 zoj 1003
查看>>
zju 1004 zoj 1004
查看>>
zju 1005 zoj 1005
查看>>
zju 1006 zoj 1006
查看>>
【虚拟机】虚拟化架构与系统部署(Windows系统安装)
查看>>
字节跳动安卓开发实习生面试分享
查看>>
好书分享之——《能力陷进》
查看>>
阅读笔记《c++ primer》
查看>>
阅读笔记《C++标准程序库》
查看>>
基于mirror driver的windows屏幕录像
查看>>
C语言8
查看>>
Qt实现简单延时
查看>>
qml有关矩形说明
查看>>
在qt中使用QSplitter设置初始比例setStretchFactor失效的解决方法
查看>>
repeater的使用
查看>>
qt msvc编译中文乱码解决
查看>>
qt中TextField输入框无法输入中文解决办法
查看>>