2MSL TCP三次握手连接与四次握手关闭过程

转载 2018年04月17日 11:06:57

转载:https://blog.csdn.net/bsplover/article/details/8282174
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。

(1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。

(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。

(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。

确认号:其数值等于接收方期望接收的下一个序列号。

图1 TCP三次握手建立连接

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。

(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。

(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。

(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。

TCP采用四次挥手关闭连接如图2所示。

图2  TCP四次挥手关闭连接

TCP连接的释放:

虽然TCP连接是全双工的,但是为了理解TCP连接的释放过程,最好将TCP连接看成一对单工连接。每个单工连接放单独释放,两个单工连接相互独立。为了释放一个连接,任何一方都可以发送一个设置了FIN位的TCP数据段,这表示它已经没有数据要发送了。FIN数据段被确认的时候,这个方向上就停止传送新数据然而,另一个方向上可能还在继续无限制地传送数据。当两个方向都停止的时候,连接才被释放。通常情况下,为了释放一个连接,需要4TCP数据段每个方向上一个FIN和一个ACK。然而,第一个ACK和第二个FIN有可能被包含在同一个数据段中,从而将总数降低到3个。

如果在两倍最大分组生存期内FIN的应答没有到达的话,FIN的发送方就会直接释放连接。一方最终也会注意到,好像对方已经不再监听该连接了,因而也会超时。虽然理论上不完美,但实际中很少出现问题。


TCP连接的

1.为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

2.为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

这是因为虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

TCP建立连接三次握手和释放连接四次握手

TCP建立连接三次握手和释放连接四次握手     【尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/52525724 ...
  • guyuealian
  • guyuealian
  • 2016-09-14 14:55:09
  • 14015

为什么TCP连接需要三次握手分开需要四次握手?

TCP的三次握手和四次断开 TCP是一个面向连接的服务,面向连接的服务是电话系统服务模式的抽象,每一次完整的数据传输都必须经过建 立连接,数据传输和终止连接3个过程,TCP建立连接的过程称为三次握...
  • QQ276592716
  • QQ276592716
  • 2014-02-23 16:54:21
  • 20041

Wireshark抓包示范:TCP三次握手建立连接和四次握手断开连接

首先介绍Wireshark抓包工具,它长这样:下面我们要设置过滤规则:按如下设置,主要设置: 1、需要监控的网卡; 2、过滤规则(图示是“HTTP TCP port(80)”,即只监控T...
  • qq_27258799
  • qq_27258799
  • 2016-05-12 00:13:23
  • 5307

TCP为什么要3次握手和4次挥手时等待2MSL

1.TCP为甚要3次握手?  在谢希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”,书中的例子是这样的,“已失效的连接请求报文段...
  • benjiazhen
  • benjiazhen
  • 2016-11-16 16:03:40
  • 4047

TCP的三次握手(建立连接)和四次挥手(关闭连接)详解

建立连接理解: 1、TCP的流量控制 2、TCP使用窗口机制进行流量控制 3、什么是窗口? 连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端接收方发送的确认信息中...
  • u010870518
  • u010870518
  • 2015-08-17 00:15:35
  • 3092

TCP/IP详解--TCP三次握手建立连接与四次握手终止连接

1.TCP连接的建立 (1)首先是服务器初始化的过程,从CLOSED(关闭)状态开始通过顺序调用SOCKET、BIND、LISTEN和ACCEPT原语创建Socket套接字,进入LISTEN(监听)...
  • yusiguyuan
  • yusiguyuan
  • 2014-04-03 15:52:17
  • 4369

为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?

为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?      这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而S...
  • peace_power
  • peace_power
  • 2013-07-01 00:06:39
  • 571

TCP和IP协议

  • 2015年03月23日 14:10
  • 1.76MB
  • 下载

TCP三次握手与四次挥手过程

首先,客户端与服务器均处于未连接状态,并且是客户端主动向服务器请求建立连接: 客户端将报文段中的SYN=1,并选择一个seq=x,(即该请求报文的序号为x)  将这个报文发送到服务器。此时,客户端进...
  • shuaicenglou3032
  • shuaicenglou3032
  • 2017-03-28 13:57:39
  • 12460

面试题:三次握手、四次握手内容整理

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。 第二...
  • qq_18425655
  • qq_18425655
  • 2016-08-09 15:39:51
  • 17145
收藏助手
不良信息举报
您举报文章:2MSL TCP三次握手连接与四次握手关闭过程
举报原因:
原因补充:

(最多只允许输入30个字)