tcp的三次握手和四次挥手

tcp

tcp是可靠通讯,tcp通讯需要经历

创建连接(三次握手) + 发送数据 + 断开连接(四次挥手)

tcp报文

 

 序号(sequence number),又叫Seq序号,也会全小写seq

确认号(acknowledgement number,又叫Ack序号,也会全小写ack

两者关系:确认方Ack=发起方Seq+1,两端配对

标志位(Flags):用于标记报文目的

  SYN(synchronous建立联机) ACK(acknowledgement 确认)

  PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)

三次握手:
    第一次握手:客户端向服务器发送连接请求包,标志位SYN=1 表示请求连接,同时把seq = X;
    第二次握手:服务器收到客户端发过来报文,由 SYN = 1 知道客户端要求建立联机。向客户端发送一个包含TCP报文,包含请求信息SYN = 1 表示服务端也请求连接,同时把seq = y,也包含确认信息ACK = 1表示服务端确认连接请求,同时把ack = x+1 以备客户端校验        
    第三次握手:客户端收到服务器发来的包后检查确认序号(ACK)是否正确,以客户端发seq+1为校验标准,即第一次发送的序号加1(X+1);若正确,客户端器发送确认序号ACK = Y+1;
     服务器收到确认序号值 ACK= y+1 即 服务器seq+1 则转换状态为listen,连接建立成功,可以传送数据了。

 

 

 

 

四次挥手:
    第一次挥手:客户端给服务器发送TCP包,用来关闭客户端到服务器的数据传送。将标志位FIN=1 表示请求断开连接,同时把seq = u
    第二次挥手:服务器收到FIN后,先检验ack =u+1,发回一个ACK = 1(标志位ACK=1)表示确认断开连接请求,同时把seq = v ,服务器开始断开工作
    第三次挥手:服务器断开工作完成,发送一个FIN = 1请求断开连接,ACK=1 (标志位ACK=1)表示确认断开连接请求, 同时把seq =w
    第四次挥手:客户端收到服务器发送的FIN=1之后,发回ACK=1(标志位ACK=1)确认关闭请求,同时把ack= w+1
  服务器在检验ack= 服务器seq+1之后关闭连接,客户端在等待2msl时间后关闭连接

 

 

为什么建立连接只要三次握手,但是断开连接要四次挥手

 

因为三次握手的第二次由服务器发送SYN建立连接的信息和ACK确认建立连接的信息是在同一个报文中传输的,而四次挥手的由服务器发送的ACK 确认断开请求的信息和FIN 发送断开连接的信息是在两个报文中传输的

 

posted @ 2020-08-12 14:53  inhocho  阅读(9)  评论(0)    收藏  举报