Netty ChannelOption.SO_BACKLOG配置
ChannelOption.SO_BACKLOG对应的是tcp/ip协议, listen函数 中的 backlog 参数,用来初始化服务端可连接队列。
函数:
backlog 用于构造服务端套接字ServerSocket对象,标识当服务器请求处理线程全满时,用于临时存放已完成三次握手的请求的队列的最大长度。
未连接队列 和 已连接队列
在linux系统内核中维护了两个队列:syns queue和accept queue
服务端处理客户端连接请求是顺序处理的,所以同一时间只能处理一个客户端连接,多个客户端来的时候,服务端将不能处理的客户端连接请求放在队列中等待处理。
syns queue:保存一个SYN已经到达,但三次握手还没有完成的连接。
用于保存半连接状态的请求,其大小通过/proc/sys/net/ipv4/tcp_max_syn_backlog指定,一般默认值是512。不过这个设置有效的前提是系统的syncookies功能被禁用。
互联网常见的TCP SYN FLOOD恶意DOS攻击方式就是建立大量的半连接状态的请求,然后丢弃,导致syns queue不能保存其它正常的请求。
accept queue:保存三次握手已完成,内核正等待进程执行accept的调用的连接。
用于保存全连接状态的请求,其大小通过/proc/sys/net/core/somaxconn指定。
在使用listen函数时,内核会根据传入的backlog参数与系统参数somaxconn,取二者的较小值。
注意:
如果未设置或所设置的值小于1,Java将使用默认值50。
如果accpet queue队列满了,server将发送一个ECONNREFUSED错误信息Connection refused到client。
backlog 设置注意点
服务器TCP内核 内维护了两个队列,称为A(未连接队列)和B(已连接队列)
如果A+B的长度大于Backlog时,新的连接就会被TCP内核拒绝掉。
所以,如果backlog过小,就可能出现Accept的速度跟不上,A,B队列满了,就会导致客户端无法建立连接。
需要注意的是,backlog对程序的连接数没影响,但是影响的是还没有被Accept取出的连接。
函数:
// backlog 指定了内核为此套接口排队的最大连接个数; // 对于给定的监听套接口,内核要维护两个队列: 未连接队列和已连接队列 // backlog 的值即为未连接队列和已连接队列的和。 listen(int socketfd,int backlog)
backlog 用于构造服务端套接字ServerSocket对象,标识当服务器请求处理线程全满时,用于临时存放已完成三次握手的请求的队列的最大长度。
未连接队列 和 已连接队列
在linux系统内核中维护了两个队列:syns queue和accept queue
服务端处理客户端连接请求是顺序处理的,所以同一时间只能处理一个客户端连接,多个客户端来的时候,服务端将不能处理的客户端连接请求放在队列中等待处理。
syns queue:保存一个SYN已经到达,但三次握手还没有完成的连接。
用于保存半连接状态的请求,其大小通过/proc/sys/net/ipv4/tcp_max_syn_backlog指定,一般默认值是512。不过这个设置有效的前提是系统的syncookies功能被禁用。
互联网常见的TCP SYN FLOOD恶意DOS攻击方式就是建立大量的半连接状态的请求,然后丢弃,导致syns queue不能保存其它正常的请求。
accept queue:保存三次握手已完成,内核正等待进程执行accept的调用的连接。
用于保存全连接状态的请求,其大小通过/proc/sys/net/core/somaxconn指定。
在使用listen函数时,内核会根据传入的backlog参数与系统参数somaxconn,取二者的较小值。
注意:
如果未设置或所设置的值小于1,Java将使用默认值50。
如果accpet queue队列满了,server将发送一个ECONNREFUSED错误信息Connection refused到client。
backlog 设置注意点
服务器TCP内核 内维护了两个队列,称为A(未连接队列)和B(已连接队列)
如果A+B的长度大于Backlog时,新的连接就会被TCP内核拒绝掉。
所以,如果backlog过小,就可能出现Accept的速度跟不上,A,B队列满了,就会导致客户端无法建立连接。
需要注意的是,backlog对程序的连接数没影响,但是影响的是还没有被Accept取出的连接。
分类:
netty
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~