使用抓包工具(wireshark)
三次握手
(理论版介绍)
第一次握手:
建立连接时,客户端发送(SYN=1,seq号=x)到服务器,
并进入到SYN-SENT状态,等待 服务器确认;
第二次握手:
服务器收到,确认客户端发送(ACK=1,ack=x+1)。同时自己发送syn包,
把自己的序列号也发出去(SYN=1,seq=y)
服务器进入到SYN_RECV状态
第三次握手:
客户端收到服务器的包,发送(ACK=1,ack=y+1)
客户端进入到ESTABLISHED状态 服务器收到包后也进入ESTABLISHED状态
(秒懂版介绍)
第一次握手:
客户端给服务器发送自己的序列号seq,并且起始值为x。标志位SYN=1。
第二次握手:
服务器收到了客户端发送的seq=x。则确认标志位ACK = 1,并且确认ack=x+1。同时又发送了自己的序列号seq=y,标志位SYN=1.
(意思为我已经收到你的消息了(ACK),请下次发送序列号为x+1的数据(ack=x+1),这是我的序列号seq=y,标志位SYN=1 )
第三次握手:
客户端收到了服务器的消息,客户端:我收到啦(ACK),请下次发送序列号为y+1的数据(ack=y+1);
此时双方已经建立连接了。之后每个数据都会有它自己的序列号。
(注意:这里SYN只是在建立握手的时候出现。是双方同步序列号的标志,第四次发送数据的时候,SYN为0了,见下图)
四次挥手
(理论版介绍)
第一次挥手:
主动关闭方发送FIN 进入FINWAIT1状态
第二次挥手:
被动关闭方收到主动关闭方FINACK,进入到CLOSEWAIT状态
主动方收到被动关闭方的ACK后,进入到FINWAIT2状态
如果没有发送完数据继续把剩余发送完,然后第三次挥手
第三次挥手:被动方发送一个FIN进入到LASTACK状态
第四次挥手:主动关闭方收到被动关闭方发送的FIN后发送ACK,主动关闭方进入到TIMEWAIT状态
后关闭连接,被动关闭方收到ACK后关闭连接。