三次握手和四次挥手

TCP报文格式

1、TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。TCP在发送数据前必须在彼此间建立连接,这里连接意思是:双方需要保存对方信息(例如:IP,Port)。

2、报文主要段的意思

  • 序号(seq):表示发送的数据字节流,确保TCP传输有序,对每个字节编号。

  • 确认序号(ack):发送方期待接收的下一序列号,接收成功后的数据字节序列号加 1 。只有 ACK=1 时才有效。

  • ACK:确认序号的标志,ACK=1 表示确认序号有效,ACK=0 表示报文不含确认序号信息。

  • SYN:连接请求序号标志,用于建立连接,SYN=1 表示请求连接。

  • FIN:结束标志,用于释放连接,为 1 表示关闭本方数据流。

三次握手

三次握手过程

第一次:客户端发送初始序号 seq=xSYN=1 请求标志,客户端进入 SYN_SENT 状态(同步已发送)

第二次:服务器发送请求标志 SYN=1 ,发送确认标志 ACK=1 ,发送自己的序号 seq=y ,发送客户端的确认序号 ack=x+1,服务器进入 SYN_RECV 状态(同步收到)

第三次:客户端发送 ACK=1 确认号,发送自己的序号 seq=x+1 ,发送对方的确认号 ack=y+1,客户端和服务器进入 ESTABLISHED 状态(已建立连接)

三次握手过程分析

第一次:客户端发送请求到服务器,服务器知道客户端发送正常,自己接收正常。SYN=1 , seq=x

第二次:服务器发给客户端,客户端知道自己发送、接收正常,服务器接收、发送正常。ACK=1 , ack=x+1 , SYN=1 , seq=y

第三次:客户端发给服务器:服务器知道客户端发送、接收正常,自己接收、发送也正常。seq=x+1 , ACK=1 , ack=y+1

四次挥手

四次挥手过程

第一次挥手:客户端发出释放 FIN=1 ,自己序列号 seq=u ,进入 FIN-WAIT-1 状态(终止等待1)

第二次挥手:服务器收到客户端的回复后,发出 ACK=1 确认标志和客户端的确认号 ack=u+1 ,自己的序列号 seq=v ,进入 CLOSE-WAIT 状态(关闭等待)

第三次挥手:客户端收到服务器确认结果后,进入 FIN-WAIT-2 状态(终止等待2)。此时服务器发送释放 FIN=1 信号,确认标志 ACK=1 ,确认序号 ack=u+1 ,自己序号 seq=w ,服务器进入 LAST-ACK 状态(最后确认)

第四次挥手:客户端收到回复后,发送确认 ACK=1ack=w+1 ,自己的 seq=u+1 ,客户端进入 TIME-WAIT 状态(时间等待)。客户端经过2个最长报文段寿命后,客户端进去 CLOSE 状态(关闭) ;服务器收到确认后,立刻进入 CLOSE 状态(关闭)。

四次挥手过程分析

第一次:客户端请求断开 FIN=1 , seq=u

第二次:服务器确认客户端的断开请求 ACK=1 , ack=u+1 , seq=v

第三次:服务器请求断开 FIN=1 , seq=w , ACK=1 , ack=u+1

第四次:客户端确认服务器的断开请求 ACK=1 , ack=w+1 , seq=u+1

参考