TCP——握手&挥手

前置知识

序号——seq number
TCP会为字节流中的每一个字节都加上一个编号, 本字段的值代表本次发送数据的第一个字节的序号,如:序号seq为0,代表第一个要发送的字节编号为0;
若数据长度为10,则此报文的编号为0~9
在这里插入图片描述
确认号——ack
表示:已经正确接收的编号为N,要求发送端下一个应该发送的序号为N+1
例如:ack=10,表示前10个,即0~9编号的字节都已经全部接收到了

报文头中的ACK&SYN:为标志位
ACK:确认标志位。
ACK为1:表示确认号ack有效
SYN为1:表示这是一个连接请求报文 / 连接接受报文

在这里插入图片描述

握手

  1. 第一次握手
    客户端:SYN=1,表示想要建立连接;同时产生一个随机序号seq=X(我的序号是X),并将该数据包发送给服务端,此时客户端进入:sent状态
  2. 第二次握手
    服务端:收到数据包后,由“SYN=1”知道客户端想建立连接,则服务端:
    SYN=1(连接接受)、ACK=1(我的确认号ack是有效的);
    seq=Y(产生一个随机值,以确认连接请求)、ack=X+1(表示对客户端X的确认,已经准备好接收序号为X+1的报文
  3. 第三次握手
    客户端:ACK=1,seq=X+1、ack=Y+1(对服务端序号Y的确认,已经准备好接受序号为Y+1的报文),此时客户端进入:established状态,服务端收到报文后也进入这个状态。
    在这里插入图片描述
    在这里插入图片描述

为什么需要三次握手?

  1. 保证通信双方都有能力发送信息并且接受响应
  2. 第一次:客户——>服务:
    服务端知道:客户端的发送正常,服务端的接收正常
    (他能发,我能收)
  3. 第二次:服务——>客户:
    客户端知道:客户端发送正常,客户端接收正常;服务端发送正常,服务端接收正常。
    (我刚刚发的,发成功了,对方也收到了;对方现在发的,对方能发送,自己也能接收)
  4. 第三次:客户——>服务:
    服务端知道:服务端发送正常;客户端接收正常。
    (我刚刚发的,我发送成功了,对方也收到了)

4次挥手

在这里插入图片描述

2MSL时间的两个重要原因

1.最后的ACK报文
2.以防收到过期的报文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值