谈谈tcp中backlog参数

谈谈tcp中backlog参数

  backlog指定了内核为此套接口排队的最大连接个数,对于给定的监听套接口,内核要维护两个队列:未连接队列和已连接队列,根据TCP三路握手中三个分节来分割这两个队列。服务器处于listen状态时,收到客户端syn分节(connect)时在未完成队列中创建一个新的条目,然后用三路握手的第二个分节即服务器的syn响应客户端,此条目在第三个分节到达前(客户端对服务端syn的ack)一直保留在未完成连接队列中,如果三路握手完成,该条目将从未完成连接队列搬到已完成连接队列尾部。当进程调用accept时,从已完成连接队列中唤醒。backlog被规定为两个队列总和的最大值,大多数实现默认值为5,但在高并发Web服务器中此值显然不够,Lighttpd中此值达到128*8。需要设置此值更大一些的原因是未完成连接队列的长度可能因为客户端syn的到达及等待三路握手第三个分节的到达延时而增大。Netty默认的backlog为100。该值时可以修改的,需要根据实际场景和网络状况进行灵活设置。
markdown缩进

半方大的空白 或 
全方大的空白 或 
不断行的空白格 或 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章