TCP 连接管理

Wu Jun 2020-01-07 15:43:49
Categories: > Tags:

传输连接有三个阶段:连接建立、数据传送和连接释放。

传输连接的管理就是使传输连接的建立和释放都能正常地进行。

连接建立过程中要解决以下三个问题:

TCP 连接的建立都是采用客户服务器方式。

1 TCP 的连接建立

1.1 三次握手

假设 A 为客户端,B 为服务器端。

1.2 三次握手的原因

三次握手的目的是建立可靠的通信信道,使双方确认自己与对方的发送与接收是正常的。

第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。

客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。

2 TCP 的连接释放

2.1 四次挥手

数据传输结束后,通信的双方都可释放连接。现在 A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP 连接。

2.2 四次挥手的原因

四次挥手多了一手是因为,当收到对方的 FIN 报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方是否现在关闭发送数据通道,需要上层应用来决定,因此,己方 ACK 和 FIN 一般都会分开发送。

1)CLOSE-WAIT

客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。

通常,CLOSE_WAIT 状态在服务器停留时间很短,如果你发现大量的 CLOSE_WAIT 状态,那么就意味着被动关闭的一方没有及时发出 FIN 包,一般有如下几种可能:

2)TIME_WAIT

客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由:

3 TCP 的有限状态机