频道栏目
首页 > 网络 > 网络协议 > 正文

TCP/IP协议中backlog分析与设置以及TCP状态变化

2013-07-03 08:38:29         来源:李志涛的专栏  
收藏   我要投稿

TCP/IP协议中backlog分析与设置以及TCP状态变化

 

TCP/IP协议卷一中是有说明设置backlog这个值的,这值是做什么的呢?

 

大家都知道TCP建立连接时是要进行三次握手连接的,但是否三次握手完成了,服务端就进行处理了(accept)呢,如果没有处理就变成什么情况,假如没有及时accept的话,后续客户端就连接不上或连接失败。这样就谈不上吞吐量了。想必大家也认为TCP不是那么设计的。

 

backlog其实是一个连接队列,以下是backlog队列大小公式。

 backlog队列总和=未完成三次握手队列 +  已经完成三次握手队列

 

以上参数解释说明如下:

 

未完成三次握手队列:服务器处于listen状态时收到客户端syn 报文(connect)时放入未完成队列中。

 

已经完成三次握手队列:三路握手的第二个状态即服务器syn+ ack响应client后,此时第三个状态ack报文到达前(客户端对服务器syn的ack)一直保留在未完成连接队列中,如果三路握手完成,该条目将从未完成连接队列搬到已完成连接队列尾部.

 

backlog参数设置既可以在linux内核参数设置(修改文件/etc/sysctl相关参数),也可以在socket系统调用listen函数时设置(第二个参数),这二者区别是,前者为全局性的,影响所有socket,后者为局部性的,影响当前socket。

 

图1   以下表示backlog队列的变化状态

 

 

当server调用accept时,从已完成(三次握手)队列中的头部取出一个socket连接给进程,以下是变化过程。

相关TAG标签 状态
上一篇:ICMP协议Ping命令的应用
下一篇:TCP/ip三次握手协议分析
相关文章
图文推荐
热门新闻

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站