TCP 三次握手和四次挥手

在这里插入图片描述

名词解析

  1. seq:序号(sequence number),占32位,用来标记从传输端到目的端发送的字节流,发送方发送数据时对此进行标记。
  2. ack:确认号(acknowledgement number),占32位,只有 ack 标志位为1时,确认号字段才有效,ack=seq+1。
  3. flag:标志位,总共有六个。
    • URG:紧急指针有效。
    • ACK:确认序列号有效。
    • PSH:接收方应该尽快
    • RST:重置连接。
    • SYN:发起一个新的连接。
    • FIN:释放一个连接。

三次握手

  1. 客户端向服务端发送一段 TCP 报文SYN=1,seq=xSYN=1表示请求建立新的连接,seq=x表示序号为x,随后客户端进入同步发送状态。
  2. 服务端收到报文后,发送一段 TCP 报文SYN=1,ACK=1,seq=y,ack=x+1给客户端。标志位SYN=1,ACK=1表示确认收到客户端的报文 seq 序号有效,服务器能正常接收到客户端发送的数据,并同意建立连接。seq=y,ack=x+1表示发送一个y的序号给客户端,并且将客户端发送的seq+1作为确认号发送给客户端。
  3. 客户端收到服务端返回的报文后,发送报文ACK=1,seq=x+1,ack=y+1给服务器,告诉服务器自己收到的序号有效,并且继续从x+1处发送报文,确认号是服务器返回的seq+1

四次挥手

挥手阶段是指一方主动要求断开连接。这里以客户端主动要求断开连接为例进行说明。

  1. 客户端发送报文FIN=1,seq=u给服务端,FIN=1表示要断开连接,序号是seq=u
  2. 服务端收到报文后,回复报文ACK=1,seq=v,ack=u+1给客户端,ACK=1表示请求断开连接的序列号有效,服务端发送的数据到v了,确认号是u+1。然后服务端继续向客户端发送数据。
  3. 当服务端的数据发送完成之后,服务端发送报文FIN=1,ACK=1,seq=w,ack=u+1给客户端,告诉客户端服务端的数据以及发送完成了,这个确认号ack=u+1是客户端上次请求断开连接的序号。
  4. 客户端收到服务端发送的报文后,发送报文ACK=1,seq=u+1,ack=w+1给服务端,告诉服务端自己已经收到了断开连接的请求,接下来彼此不在进行数据交换了。然后客户端进入时间等待状态,这个状态必不可少,因为如果第四次挥手服务端没有接收到,会无法完成断开连接,这个阶段是为了接收服务端的再一次第三次挥手。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值