TCP3次握手,四次挥手

TCP协议

TCP是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务器的内存里保存的一份关于对方的信息,如ip地址、端口号等。

TCP可以看成是一种字节流,它会处理IP层或以下的层的丢包、重复以及错误问题。在连接的建立过程中,双方需要交换一些连接的参数。这些参数可以放在TCP头部。

TCP提供了一种可靠、面向连接、字节流、传输层的服务,采用三次握手建立一个连接。采用4次挥手来关闭一个连接。

三次握手

为什么要进行三次握手?

客户端和服务端通信前要进行连接,“三次握手”的作用就是双方都能明确自己和对方的收、发能力是正常的

第一次握手:客户端发送SYN包给服务器,并进入SYN_SEN状态,等待服务器确定。(服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。)

第二次握手:服务器收到客户端的SYN包,发送一个ACK,同时发送自己的SYN,此时服务器进入SYN_RECV状态。(客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。)

第三次握手:客户端收到服务器发送的SYN+ACK后,进入ESTABULSHED状态,并发送服务器SYN包确定ACK,服务器收到ACK后,进入ESTABLISHED状态(服务端就能得出结论:客户端的接收、发送能力,服务端的发送、接收能力是正常的。)

四次挥手

TCP连接是双向传输的模式,当有一方要关闭连接时,会发送指令告知对方,我要关闭连接了。

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

第一次挥手:主动关闭方发送一个FIN并进入FIN_WAIT1状态

第二次挥手:被动关闭方接收到关闭方发送的FIN并发送ACK,此时被动关闭方进入CLOSE_WAIT状态,主动关闭方收到被动关闭方的ACK后,进入FIN_WAIT2状态

第三次挥手:被动关闭方发送一个FIN并进入LAST_ACK状态

第四次挥手:主动关闭方收到被动关闭方发送的FIN并发送ACK,此时主动关闭方进入TIME_WAIT状态,经过2MSL时间后关闭连接,被动关闭方收到主动关闭方的ACK后,关闭连接

注:MSL(Maximum Segment Lifetime)最大报文生存时间,防止被动关闭方没有收到最后一个ACK

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章