码迷,mamicode.com
首页 > 其他好文 > 详细

tcp连接的几种状态

时间:2016-07-01 23:07:38      阅读:378      评论:0      收藏:0      [点我收藏+]

标签:tcp握手、断开连接

一、netstat -ant 显示的连接状态有几种:

LISTEN,SYN-SENT,SYN-RECEIVED,ESTABLISHED,FIN_WAIT_1,FIN_WAIT_2,CLOSE_WAIT和TIME_WAIT,LAST-ACK和 CLOSED他们的含义要从TCP的连接与中断过程说起

                                         Client    (三次握手)    Server

                                               --------SYN -------->

                                           <------- ACK/SYN -------

                                             -------- ACK -------->

  服务器侦听来自远方的TCP端口的连接请求,服务器处于LISTEN状态;

  客户端首先向服务器发送SYN包,客户端处于SYN-SENT状态;

  服务端接到第一次握手请求后,发送ACK包和SYN包,进行确认并请求第二次握手,服务端处于SYN-RECEIVED状态;

  客户端发送ACK确认,进行第三次握手,两端均处于ESTABLISHED状态,可进行数据传输;

                                       Client     (四次断开)       Server                              

                                         -------- FIN -------->

                                        <------- ACK --------

                                        <------- FIN --------- 

                                         -------- ACK -------->

  客户端首先向服务器发送FIN包,客户端进入FIN_WAIT_1状态;(客户端完成了数据的传输,而服务端没有完成)

  服务端向客户端发送ACK,确认FIN包收到,服务端进入CLOSE_WAIT状态,客户端进入FIN_WAIT_2状态

  服务端等待他上面的应用程序关闭连接,一旦连接被关闭(服务端完成数据的传输),服务端进入LAST_ACK状态,会发送FIN包到客户端,客户端收到后进入TIME_WAIT状态,并发送最后一个ACK包,由于在连接关闭后,还不能确定所有连接关闭前的包(最后一个ACK包)被服务端收到了,可能由于网络不可靠的原因导致服务端没有收到ACK,服务端超时后会重新发送FIN包,所有客户端进入了TIME_WAIT状态,就是为了重发ACK包,一般这个状态保持时间为2*MSL,MSL指的是一个TCP包在网络中存在的最长时间,大概2*MSL=240(s)。而后进入CLOSED状态;

       服务器收到最后一个ACK包后,进入CLOSED状态。

        技术分享

 二、查看TCP各种状态列表:

 netstat -nat |tail -n +3|awk ‘{print $6}‘|sort|uniq -c|sort -rn

 netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}‘


本文出自 “11366164” 博客,请务必保留此出处http://11376164.blog.51cto.com/11366164/1795032

tcp连接的几种状态

标签:tcp握手、断开连接

原文地址:http://11376164.blog.51cto.com/11366164/1795032

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!