三次握手 TCP三次握手与四次分手傻傻分不清 看大神图解五分钟讲明白
原标题:TCP三次握手和四次分手没什么区别?看大神图五分钟就明白了
序
TCP三次握手和四次挥手是开发和面试中非常重要的知识点,是优化web程序性能的基础。然而,大多数教材对这一部分都是抽象的解释。在本文中,我们使用wireshark来掌握包,以真正了解整个过程的细节。
三次握手
根据下图,我们来看看TCP三次握手。附注:每个箭头代表一次握手。
Tcp三次握手
第一次握手
客户端向服务器发送一个SYN PACkage,然后等待服务器的ack回复,进入SYN-SENT状态。附言:SYN是synchronize的缩写,ACK是acknowledgment的缩写。
第二次握手
服务器收到SYN packet后,返回一个ACK packet和自己的SYN pACKet,然后等待客户端的ACK回复,服务器进入SYN-RECIVED状态。
Di三次握手
客户端收到服务器发回的确认包后,进入建立状态。然后,根据服务器发送的SYN包,向等待的服务器返回确认包。等待服务器收到确认回复,并将其状态设置为已建立。当TCP三次握手完成时,客户端和服务器可以正常通信。
为什么要进行三次握手
让我们看看为什么需要三次握手。两次握手不行吗?这里我们用一个生活中的具体例子来解释一下。我们可以把三方握手中客户端和服务器之间的握手过程比作A和B之间的通信过程:
在第一次通信过程中,A向B发送信息后,B收到信息后可以确认自己的接收能力和A的发送能力没有问题。
在第二次通信中,B向A发送消息后,A可以确认自己的发送能力和B的接收能力没有问题,但是B不知道自己的发送能力是什么,所以需要第三次通信。
在第三次通信中,A向B发送信息后,B可以确认其发送能力没有问题。
网络封包分析
以上分析不够生动,容易忘记。让我们用wireshark来证明上面的分析过程。从下面的输出可以很容易地看出,只有在前三个tcp请求之后才会有一个http请求。
首次请求客户端发送序列号为0的SYN数据包。
wireshark-tcp-01
第二个请求服务器将发送序列号为0、确认号为1的同步和确认数据包。
wireshark-tcp-02
第三个本地客户端请求将发送序列号为1、确认号为1的确认数据包,以回复服务器。
wireshark-tcp-03
挥手四次
以下图为例,我们来分析一下TCP四次挥舞的过程。
Tcp挥手四次
第一次挥手
客户端发送一个FIN包。此时,客户端进入FIN-WAIT-1状态,表示客户端没有数据可发送。
第二次挥手
在接收到客户端发送的FIN PACkage后,服务器向客户端发回一个ack PACkage。此时,服务器进入CLOSE-WAIT状态,客户端进入FIN-WAIT-2状态。
第三次挥手
服务器向客户端发送FIN数据包,请求关闭连接,同时服务器进入最后确认状态。
第四次挥手
客户端接收服务器发送的FIN数据包,进入时间等待状态。向服务器发送ACK PACkage,服务器收到客户端发来的ACK PACkage后进入CLOSE状态;客户端等待一段时间没有收到回复,然后判断服务器已经正式关闭,进入CLOSE状态。
完