当前位置:  网络技术>TCP/UDP协议

TCP协议四次断连过程介绍及Linux内核协议栈中相关设置项

 
分享到:
    发布时间:2013-8-28  


    初始时客户端和服务端都处于ESTABLISHED状态,要断开连接时:1 客户端先发送一个FIN包,告诉服务端他要断开连接。2 服务端收到FIN包后,给客户端发送一个确认包ACK,告诉应用程序他要关闭连接了。3 当应用程序准...

初始时客户端和服务端都处于ESTABLISHED状态,要断开连接时:

1   客户端先发送一个FIN包,告诉服务端他要断开连接。

2   服务端收到FIN包后,给客户端发送一个确认包ACK,告诉应用程序他要关闭连接了。

3   当应用程序准备好断开后,服务端给客户端发送FIN包。

4   客户端收到服务端发来的FIN包后,给服务端发送ACK确认包。服务端收到之后就关闭连接。

四次握手断开连接状态分析:

1   当服务端收到客户端发来的FIN包后,给客户端发送一个ACK确认包,然后通知应用程序准备关闭,因为应用程序可能还有些数据需要发送给客户端,所以这时服务端是CLOSE_WAIT状态,而不是CLOSED状态。

2   客户端发送FIN包要求断开连接后就进入了FIN-WAIT-1状态,当收到服务端发送的ACK包后就进入到FIN-WAIT-2状态,而在实际情况下FIN-WAIT-1比较难见,因为客户端发送FIN包后服务端会立刻发送ACK包。

3  客户端进入FIN-WAIT-2状态时,表示是半连接,即一方要求关闭连接后,另一方回复说我还有点数据要传输,稍后再关闭,这就是服务端发送ACK之后不立即进入CLOSED状态,而是通知应用程序准备关闭。

4  服务端应用程序准备好之后,内核发送FIN给客户端,等待客户端的ACK包,服务端进入LAST_ACK状态,这时候客户端收到FIN后,发送ACK报文给服务端,客户端进入TIME-WAIT状态,TIME-WAIT等待2MSL后进入CLOSED状态,服务端收到客户端发送的ACK包之后进入CLOSED状态。

具体过程如下图所示:

Linux内核协议栈提供的影响断开连接的设置项:

1  /proc/sys/net/ipv4/tcp_max_tw_buckets    (18000)

该参数设置系统的TIME_WAIT的数量,如果超过默认值则会被立即清除。

2  /proc/sys/net/ipv4/tcp_tw_reuse  (0 关闭  1 打开)

该参数设置TIME_WAIT重用,可以让处于TIME_WAIT的连接用于新的tcp连接

3  /proc/sys/net/ipv4/tcp_tw_recycle  ( 0 关闭  1 打开)

该参数设置tcp连接中TIME_WAIT的快速回收。

4  /proc/sys/net/ipv4/tcp_fin_timeout   (60)

设置TIME_WAIT2进入CLOSED的等待时间。


本类别最新文章推荐:


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

浙ICP备11055608号