TCP三次握手和四次挥手详解

TCP三次握手和四次挥手详解

博客说明

文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!

说明

一直想整理一下TCP的三次握手和四次挥手,今天逮到机会了

为什么是三次握手?

其实都会有一个问题,为什么是三次握手,正常的话不是两次握手吗?

正常的话两次握手就可以建立连接,但我们是TCP嘛,考虑到失效报文的处理,加入客户端发起连接,服务端接收到之后,就同意了,但是客户端没有立即发送报文,而是等待报文失效了之后再次发过来,这个时候要还是不要?但是我们可以把这个三次握手,看作是四次握手,就是

1、你打招呼

2、我微笑

3、我打招呼

4、你微笑

正常的就是

1、你打招呼

2、我微信并向你打招呼

3、你微笑

来一张图吧

TCP三次握手和四次挥手详解

来一段比较官方的详细过程

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.

第一次握手

建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

SYN:同步序列编号(Synchronize Sequence Numbers)

第二次握手

服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手

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

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

四次挥手

握手三次,挥手却要四次?是不是感觉花里胡哨的,这里面也可以这样理解

1、男生突然说分手

2、女生很突然,问真的要分手吗

3、但是女生很生气,我也要跟你分手

4、男生最终确认分手(渣男实锤)

就大概那么一个过程,来图

TCP三次握手和四次挥手详解

反过来看四次挥手的过程

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

第一次挥手

Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

第二次挥手

Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

第三次挥手

Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

第四次挥手

Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

感谢

万能的网络

以及勤劳的自己