Java网络编程之Netty服务端ChannelOption.SO_BACKLOG配置

ChannelOption.SO_BACKLOG对应的是tcp/ip协议listen函数中的backlog参数,函数listen(int socketfd,int backlog)用来初始化服务端可链接队列,服务端处理客户端链接请求是顺序处理的,因此同一时间只能处理一个客户端链接,多个客户端来的时候,服务端将不能处理的客户端链接请求放在队列中等待处理,backlog参数指定了队列的大小 服务器

 BACKLOG用于构造服务端套接字ServerSocket对象,标识当服务器请求处理线程全满时,用于临时存放已完成三次握手的请求的队列的最大长度。若是未设置或所设置的值小于1,Java将使用默认值50。网络

TCP的链接状态 (SYN, FIN, ACK, PSH, RST, URG)

一、SYN表示创建链接 
二、FIN表示关闭链接 
三、ACK表示响应 
四、PSH表示有 DATA数据传输 
五、RST表示链接重置。socket

网络链接

服务器TCP内核 内维护了两个队列,称为A队列和B 队列 
一、第一次握手,客户端向服务器端发送SYN标志的包 
      创建链接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 
二、第二次握手,服务器端,向客户端发送 SYN 和ACK的包 
      服务器收到syn包,必须确认客户的SYN(ack=j+1),同时本身也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态 
三、第三次握手,客户端向服务器端 ,收到服务端发送的SYN和ACK包,确认正确后,给服务器发送发送ACK的包 
      客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据tcp

若是A+B的长度大于Backlog时,新的链接就会呗TCP内核拒绝掉 
因此,若是backlog太小,就可能出现Accept的速度跟不上,A,B队列满了,就会致使客户端没法创建链接 
须要注意的是,backlog对程序的链接数没影响,可是影响的是尚未被accept取出的链接
函数

 

转自:https://blog.csdn.net/yelllowcong/article/details/78173255spa

相关文章
相关标签/搜索