三次握手(Three-Way Handshake):

(1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。

  (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。

  (3)ACK:确认序号有效。

  (4)SYN:发起一个新连接。

  (5)FIN:释放一个连接。

注意:

  (1)不要将确认序号Ack与标志位中的ACK搞混了。

  (2)确认方Ack=发起方Seq+1,两端配对。 

建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。

三次握手和四次挥手_第1张图片



(1)第一次握手:客户端发送一个SYN段指明客户打算连接的服务器端口,将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给服务器

(2)第二次握手:服务器收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器将确认序列号设置为客户端的Seq加1以对客户的SYN报文段进行确认,并随机产生一个值seq=y,并将该数据包发送给客户端以确认连接请求

(3)第三次握手:客户端收到后,必须将确认序列号设置为服务器的Seq加1以对服务器的SYN报文段进行确认,客户端和服务器进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。


          四次挥手(Four-Way Wavehand)

指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。

三次握手和四次挥手_第2张图片

(1)第一次挥手:首先主动方发送第一个FIN执行主动关闭,用来关闭客户端到服务器的数据传送。

(2)第二次挥手:被动方收到主动方主动关闭的数据后,发送一个ACK给主动方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。

(3)第三次挥手:服务器发送一个FIN,用来关闭服务器到客户端的数据传送。

(4)第四次挥手:客户端收到FIN后,接着发送一个ACK给S服务器,确认序号为收到序号+1,到此,四次挥手完成。

三次握手和四次挥手_第3张图片