Java网络编程之Netty服务端ChannelOption.SO_BACKLOG配置-yellowcong
2017-10-08 09:47
309 查看
ChannelOption.SO_BACKLOG对应的是tcp/ip协议listen函数中的backlog参数,函数listen(int socketfd,int backlog)用来初始化服务端可连接队列,服务端处理客户端连接请求是顺序处理的,所以同一时间只能处理一个客户端连接,多个客户端来的时候,服务端将不能处理的客户端连接请求放在队列中等待处理,backlog参数指定了队列的大小
2、FIN表示关闭连接
3、ACK表示响应
4、PSH表示有 DATA数据传输
5、RST表示连接重置。
1、第一次握手,客户端向服务器端发送SYN标志的包
建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
2、第二次握手,服务器端,向客户端发送 SYN 和ACK的包
服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
3、第三次握手,客户端向服务器端 ,收到服务端发送的SYN和ACK包,确认正确后,给服务器发送发送ACK的包
客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据
如果A+B的长度大于Backlog时,新的连接就会呗TCP内核拒绝掉
所以,如果backlog过小,就可能出现Accept的速度跟不上,A,B队列满了,就会导致客户端无法建立连接
需要注意的是,backlog对程序的连接数没影响,但是影响的是还没有被accept取出的连接
TCP的连接状态 (SYN, FIN, ACK, PSH, RST, URG)
1、SYN表示建立连接2、FIN表示关闭连接
3、ACK表示响应
4、PSH表示有 DATA数据传输
5、RST表示连接重置。
网络连接
服务器TCP内核 内维护了两个队列,称为A队列和B 队列1、第一次握手,客户端向服务器端发送SYN标志的包
建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
2、第二次握手,服务器端,向客户端发送 SYN 和ACK的包
服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
3、第三次握手,客户端向服务器端 ,收到服务端发送的SYN和ACK包,确认正确后,给服务器发送发送ACK的包
客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据
如果A+B的长度大于Backlog时,新的连接就会呗TCP内核拒绝掉
所以,如果backlog过小,就可能出现Accept的速度跟不上,A,B队列满了,就会导致客户端无法建立连接
需要注意的是,backlog对程序的连接数没影响,但是影响的是还没有被accept取出的连接
相关文章推荐
- Java网络编程之Netty拆包和黏包-yellowcong
- Java网络编程之Netty入门案例-yellowcong
- Netty学习-Java网络编程
- Java网络编程之NIO(ServerSocketChannel/SocketChannel)-yellowcong
- java网络编程之Netty第一个程序(四)
- java网络编程之Netty实战心跳检测(八)
- Java IO、网络编程、NIO、Netty、Hessian、RPC、RMI的学习路线
- java网络编程中的web.xml配置文件
- java网络编程之Netty编解码技术(六)
- Netty in Action (二)第一章节 第一部分 java网络编程
- Java网络编程之BIO(Socket)-yellowcong
- Java网络编程----Netty入门(NIO框架)
- Java网络编程之BIO(Socket 伪异步)-yellowcong
- java网络编程--从网络上获取声音
- Java网络编程入门学习
- Java中的异步网络编程
- Java的中文编程与配置心得
- JAVA的网络功能与编程 二
- JAVA网络编程
- Java网络服务器编程(NIO版)