TCP三次握手,四次挥手

先解释几个名词:

SYN: synchronize  同步

Sqe:sequence number 序列号

ACK:acknowledgment number 确认序列

Fin : finish 完成

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

三次握手是客户端和服务端建立连接的过程,当客户端向服务端发送SYN =1 ,同时生成发送序列号Seq = X ,服务端接受报文后想客户端发现SYN= 1,ACK = X + 1, 同时也生成Seq = Y.客户端收到报文后,查看ACK是否是之前自己发送的序列+1.然后做出响应生成新的ACK = Y + 1,同时也生成Seq = Z.此时客户端和服务端建立了连接。

为什么是三次握手而不是两次握手呢?

因为在第一次握手的时候,客户端出于半连接状态,第二次握手的时候,服务端也处于半连接状态,第三次握手的时候,客户端和服务端才建立了连接。

如果只有两次握手,可能会发送死锁现象,服务端收到客服端的连接请求后,就给客服端发送数据,等待客户端响应,但是服务端在向客服端发送数据的过程中有数据丢失了,客服端就不知道服务端是不是没收到请求,在这种情况下,客户端认为这种连接没成功,就忽略服务端发给他的数据,而是等待服务端确认信息,服务端却一直没收到客户端的响应,就超时了,就开始反复发现数据到客户端,这样就形成了死锁。

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

TCP在断开的过程中是不分客户端还是服务端,而是说主动方和被动方:

主动方提出断开连接,就会想被动方发送Fin = 1, ACK= Z ,Seq = X, 被动方收到断开请求后,它会做两部,第一步是响应主动方的断开请求,ACK = X + 1, Seq =  Z, 第二步是向主动方发起断开请求,Fin =1, ACK = X, Seq = Y, 主动方收到被动方的断开请求后,想被动方发送确认报文: ACK= Y+1 , Seq = X

为什么是四次挥手而不是三次挥手呢?

因为在被动方确认收到主动方断开连接请求的时候,被动方可能还在接受数据,所以不能立即断开连接。而是要分成两步进行。

你可能感兴趣的:(TCP三次握手,四次挥手)