TCP三次握手和四次挥手

TCP建立连接时用到的字段

  • 序号seq:表示在一个TCP连接中传送的字节流中每一个字节都按顺序进行编号,该字段就表示本报文段所发送数据的第一个字节的序号。(序号是建立连接时产生的随机数开始的)
  • 确认号ack期望收到对方下一个报文段的第一个数据字节的序号,如果确认号为n,就说明到序号为n-1为止的数据都已经正确收到
  • 确认位ACK确认位为1时,确认号ack才有效,在建立连接后,所有传输数据的报文段都必须把ACK置为1
  • 同步位SYN:当SYN=1时,表明是一个连接请求/连接确认报文(只有TCP三次握手协议中的前两次SYN=1
  • 终止位FIN:当FIN=1时,表明此报文段发送方的数据已发送完,要求释放连接

三次握手

在这里插入图片描述

  1. A向B发送连接请求报文,此时没有应用层的数据
    • SYN=1,表明是一个连接请求报文
    • ACK=0,由于此时还没有进行建立连接,并不知道期待B端所发送数据的报文段是什么(B端还没有发送seq字段),因此ack也无效
    • seq=x,随机产生的一个数x,由于还没有涉及到应用层数据的交换,因此随机产生一个序号
  2. B向A返回一个连接确认报文段,允许连接,同时B端为该TCP连接分配缓存和变量,也没有应用层数据
    • SYN=1,表明是一个连接确认报文
    • ACK=1,由于在第一步B端已经收到了A的seq字段,因此ack确认号已经有效
    • ack=x+1,由于A端发来的seq=x,此时ack=x+1,可用于A端进行校验,该连接确认报文对应刚才发送的连接请求报文,同时表明接下来接收数据时希望从序号为x+1的字节开始接收
    • seq=y,由于还是没有涉及到应用层数据的交换,因此也产生一个随机数y
  3. A回应B的连接确认报文(确认的确认),并为该TCP连接分配缓存和变量,与前两次报文不同的是,该报文可以携带数据
    • ACK=1,表示ack字段有效(除了第一次握手时,其他的报文ACK位都为1)
    • seq=x+1,表示从序号为x+1的序号开始传输数据
    • ack=y+1,表示下次报文希望收到B端序号为y+1开始的数据

四次挥手

在这里插入图片描述

  1. A向B发送连接释放报文段,停止发送数据,主动关闭TCP连接
    • FIN=1,表示此报文段的的发送方(A)所有的数据已经发送完毕,主动要求断开连接
    • ACK=0,由于是主动断开的连接,因此并没有收到B端的seq字段,因此ack字段无效
    • seq=u,用于标识该请求释放连接报文段(取决于A向B发送数据量的大小)
  2. B端返回一个确认报文段,此时A—>B方向的连接就释放了,该TCP连接处于半关闭状态(A不再向B传送数据),同时该报文端也可以携带B传向A的数据。
    • ACK=1,由于B端依然还在给A端传送数据,因此B传向A的ack字段有效
    • seq=v,取决于上一次B向A传送的数据传到了哪个序号
    • ack=u+1,用于标识该报文段是刚才A发送给B的请求释放报文段的确认报文段
    • 由于A向B传送的数据已经发送完,所以A端无需回复该确认报文段,只需要等待A端向B端发送连接释放报文段,表示B端的数据也发送完毕
  3. B端的数据也发送完成,主动发送释放连接报文段,主动关闭TCP连接
    • FIN=1,表示该报文段是一个释放连接报文段
    • ack=u+1,由于上次发送的确认字段A端没有回应,因此ack字段依然是u+1
    • ACK=1,由于该报文段的ack字段有效,因此该标志位为1
    • seq=w,用于标识该字段,其值取决于之前发送数据的大小
  4. A端返回一个确认报文段,在等待计时器设置的2MSL(最长报文寿命)后,连接彻底关闭
    • ACK=1,由于该报文端携带有效的ack字段,因此该标志位为1
    • seq=u+1
    • ack=w+1,作用于seq的作用都是为了对应B向A发送的连接释放报文段
    • 等待2MSL的作用,如果该报文段在传输的过程中丢失,B端没有收到A端发送的确认报文段,B端就会在等待2MSL以后再次发送一次释放连接报文段,此时A再次收到B端发送的连接释放报文段以后,就知道上一次发送的确认报文段丢失了,就会再次向A发送一次确认报文段。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值