三次握手一般是客户端向服务器端发起通信请求,而四次挥手可以由客户端发起,也可以由服务器端发起断开链接。
SYN:同步序列编号(Synchronize Sequence Numbers)。是TCP/IP建立连接时使用的握手信号。
seq:序列号(sequence),接收方根据接收到的序列号是否有序来确定是否需要重传数据包。
ACK:确认值(Acknowledgement),为1便是确认连接。
ack:确认编号(Acknowledgement Number),即接收到的上一次远端主机传来的seq然后+1,再发送给远端主机。提示远端主机已经成功接收上一次所有数据,并发送给远端主机确认。
三次握手:
由于tcp是可靠传输,为了防止失效的连接请求到达服务器,让服务器错误打开连接,所以需要三次握手而不是简单地通知服务器传输数据。
第一次握手前:
客户端与服务器端正常情况下是关闭的,当客户端想要向服务器端获取数据,比如充值时,打开客户端,准备第一次握手。
第一次握手:
客户端向服务器端发送一段TCP报文,然后进入SYN-SENT阶段。
这个TCP报文是给服务器端发送一个请求(告诉服务器端我想充值)。主要包括SYN=1与seq=x(x是个随机数)。
SYN=1:向服务器端发送一个握手信号
seq=x:x是个要发送的数据包的序列号,可以验证发送的数据是否正确。
第二次握手:
服务器端接收到TCP报文后,打开服务器端口,发送一个TCP报文给客户端确认,然后进入SYN-RCVD状态。
TCP报文是为了确认服务器端接收到的TCP是客户端发送的。(服务器端询问客户端是否想要充值)
TCP报文中包含SYN:向客户端发送握手信号;ACK:是确认值,确认连接。ack是为了确认服务器端是否接收到正确的数据。seq是一个随机值。
第三次握手:
客户端明确了与服务器端之间发送的数据是正常的(即我知道 你知道 我想要充值了),结束SYN-SENT状态,发送TCP报文,进入ESTABLISHED状态
三次握手后:
服务器端接收到客户端的TCP报文,确认无误后开始进行数据传输。(服务器端发送充值界面给客户端)
三次握手总图解:
四次挥手:
FIN:FIN=1就是发送给另一端一个请求断开连接的信号。
seq:序列号(sequence),接收方根据接收到的序列号是否有序来确定是否需要重传数据包。
ACK:确认值(Acknowledgement),为1便是确认连接。
ack:确认编号(Acknowledgement Number),即接收到的上一次远端主机传来的seq然后+1,再发送给远端主机。提示远端主机已经成功接收上一次所有数据,并发送给远端主机确认。
作用:
四次挥手发生在三次握手之后,可以由客户端发起也可以由服务器端发起,以下是由服务器端发起断开连接的展示。为了安全无误地断开双方连接,防止出现客户端接收完数据后还想获取数据,但服务器端已经关闭的情况。四次挥手需要两端都发起断开连接的请求,以及都接收到断开连接的请求。
第一次挥手前:
由于已经进行了三次握手,故客户端和服务器端都保持在ESTABLISHED状态。当服务器端发送完数据后,开始第一次挥手。
第一次挥手:
服务器端发送一个TCP报文给客户端,表达自己想要断开链接。然后服务器端进入 FIN_WAIT_1 状态。
该TCP报文包括FIN=1、seq=x、ACK=1、ack=t。关于FIN_WAIT_1状态,服务器端在发送FIN后就进入FIN_WAIT_1状态,在接受到针对该FIN的ACK后进入FIN_WAIT_2状态。
第二次挥手:
客户端接收到TCP报文后发送一个TCP报文给服务器端确认,然后进入CLOSE_WAIT状态。服务器端接收并确认TCP报文后,进入FIN_WAIT_2 状态。
该TCP报文包括ACK=1、seq=t+1、ack=x+1。FIN_WAIT_2状态表示该端口已经接收到一次确认,在等待第二次确认关闭链接。CLOSE_WAIT状态:在被动关闭连接情况下,已经接收到FIN,但还没有发送自己的FIN。
第三次挥手:
客户器端准备好释放链接后再次发送一个TCP报文给服务器端,再次确认要关闭链接,进入LAST_ACK状态。
该TCP报文包括FIN=1、ACK=1、ack=x+1、seq=y。LAST_ACK状态表示该端口在等待关闭中,等到接收到另一个端口的确认后就会关闭链接。
第四次挥手:
服务器端确认TCP报文后发送最后一个TCP确认接收关闭链接。然后进入TIME_WAIT 状态等待2MSL的时间。
该TCP包括ACK=1、seq=y、ack=x+2。TIME_WAIT状态:若在2MSL时间内没接收到来自另一端的FIN+ACK,就会关闭链接。否则,关闭失败,本次挥手结束。2MSL时间代表一个TCP报文在两个端口之间来回通信所需的最长时间。
第四次挥手后:
客户端接收到TCP报文后关闭链接,而服务器端等待时间结束后自动关闭链接。
四次挥手总图解: