TCP学习(3)--TCP释放连接的过程(四次挥手)

一.TCP释放连接的过程(四次挥手)

TCP释放连接的过程如下图所示。

现在假设客户端A和服务器端B都处于数据传送状态。TCP连接断开的步骤如下:

1.客户端A发送FIN=1的连接释放报文给服务器B,并进入FIN-WAIT1状态;

2.服务器B收到A发送的连接释放报文段之后,发出确认报文段,并进入关闭等待状态;客户端A在收到确认状态之后,进入FIN-WAIT2状态,此时,客户端A不再向服务器端发送数据,但是,服务器端B仍然可以向A发送数据;

3.在服务器B发送完数据之后,发送一遍FIN=1的连接释放报文段,表明自己发送数据完毕,准备断开连接,并进入LAST-ACK状态;

4.客户端A在收到服务器端的连接释放报文段,给服务器端发送确认报文段,并进入TIME-WAIT状态,在等待了2MSL时间后进入CLOSED状态;而服务器端B在收到客户端发送的应答报文段之后,就进入CLOSED状态。

时间MSL叫做最长报文段寿命,建议时间为2分钟。

上述的TCP释放连接的过程是四次握手,但是也可以看做是两个二次握手

二.为什么客户端A在TIME-WAIT状态之后必须等待2MSL的时间呢?

1.为了保证A发送的最后一个ACK报文段能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认。B会超时重传这个FIN-ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK报文段。接着A重传一次确认,重新启动2MSL计时器。最后,A和B都正常进入到CLOSED状态。如果A在TIME-WAIT状态不等待一段时间,而是在发送完ACK报文段后立即释放连接,那么就无法收到B重传的FIN+ACK报文段,因而也不会再发送一次确认报文段。这样,B就无法按照正常步骤进入CLOSED状态。

2.为了防止已失效的连接请求报文段出现在本连接中。A在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使得本连接持续时间内说产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。

三.保活计时器

除了时间等待计时器外,TCP还设有一个保活计时器。服务器每收到一次客户的数据,就重新设置保活计时器,时间的设置通常是两个小时。若两个小时没有收到客户的数据,服务器就发送一个探测报文段,以后则每隔75分钟发送一次,若一连发送10个探测报文段后仍无客户的响应,服务器就认为客户端出了故障,接着就关闭这个连接。保活计时器是为了防止连接建立之后,客户端突然出现故障而没有出现响应,导致服务器一直出了连接状态而设置的。

参考文献

谢希仁, 计算机网络(第五版): 电子工业出版社, 2007.

版权所有,欢迎转载,转载请注明出处,谢谢

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-07 04:12:49

TCP学习(3)--TCP释放连接的过程(四次挥手)的相关文章

TCP协议中的三次握手和四次挥手(图解)【转】

建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. [更新于2017.01.04 ]该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删了,大家可以比较下,对比理解效果更好.这么久才来更新,抱歉!! 错误配图如下: 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了. 那如何断开连接呢?

TCP/UDP协议、理解三次握手四次挥手、Socket

一.什么是socket? 中文名叫套接字,是对底层的 TCP IP UDP 等网络协议进行封装,使得上层的应用程序开发者,不用直接接触这对复杂,丑陋的协议. 在程序员的言论,他就是一个封装好的模块,要完成网络通讯,只需要使用系统提供的socket模块就行,我们通过调用模块中已经实现的方法建立两个进程之间的 连接和通信. 了解socket层: 二.套接字的发展史 套接字起源于 20 世纪 70 年代加利福尼亚大学伯克利分校版本的 Unix,即人们所说的 BSD Unix. 因此,有时人们也把套接字

TCP/IP之TCP协议首部、三次握手、四次挥手、FSM

TCP包头 <--------------------------------32 位------------------------------> 0 8 16 24 32 |----------------|----------------|----------------|----------------| ----- | Source port | Destination port | | |-----------------------------------------------

TCP学习(2)--TCP连接的建立(三次握手)

一.TCP的连接建立 TCP的建立连接的过程如下图所示.假设客户端A运行的是TCP客户程序,而服务器B运行的是TCP服务器程序.最初两端的TCP进程都处于CLOSED状态. B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求,然后服务器进行就处于LISTEN状态,等待客户端的连接请求. TCP连接的建立过程如下: (1).客户端A发起连接请求,发送一个SYN=1,ACK=0,seq=x的报文段给服务器B,并进入SYN-SENT状态: (2).服务器B收到连接请求报文之后,如果

TCP三次握手(建立连接)与四次挥手(释放连接)详解

上图画出了TCP的建立连接的过程.假定主机A运行的是TCP客户程序,而B运行TCP服务程序.最初两端的TCP进程都处于 CLOSED(关闭)状态.图中在主机下面的方框分别是TCP进程所处的状态.请注意,A主动打开连接,而B被动打开连接. B的TCP服务器进程先创建传输控制块TCB(Transmission Control Block),准备接受客户进程的连接请求.然后服务器进程就处于LISTEN(监听)状态,等待客户的连接请求.如有,即做出响应. A的TCP客户进程也是首先创建传输控制块TCB,

TCP建立连接的三次握手和TCP连接断开的四次挥手

1. TCP建立连接的3次握手 2. TCP断开连接的四次挥手 [注意]中断连接端可以是Client端,也可以是Server端. 图3-Client端主动发起关闭连接请求 1. 假设Client端主动发起中断连接请求,也就是发送FIN报文. 2. Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据.所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备

【转】 TCP协议中的三次握手和四次挥手(图解)

建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了. 那如何断开连接呢?简单的过程如下: [注意]中断连接端可以是Client端,也可以是Server端. 假设Client端发起中断连接请求,也就是发送FIN报文.Server端接到FIN报文后,

TCP协议中的三次握手和四次挥手(图解)

http://blog.csdn.net/whuslei/article/details/6667471/ 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了. 那如何断开连接呢?简单的过程如下: [注意]中断连接端可以是Client端,也可以是

TCP协议中的三次握手和四次挥手

建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了. 那如何断开连接呢?简单的过程如下: [注意]中断连接端可以是Client端,也可以是Server端. 假设Client端发起中断连接请求,也就是发送FIN报文.Server端接到FIN报文后,