面试必问的三次握手(无敌顶配版) 学会的眨眨眼!

作者变优秀的小白

Github关注YX-XiaoBai

爱好Americano More Ice !

QQ学习交流群(new): 811792998

目录

当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次握手的时候,你会怎么回答?

三次握手🤝(顶配版)

名词解释
SYN(synchronize 同步)
ACK(acknowledge 确认)
FIN(finish 结束)
ISN(Initial Sequence Number)


初始状态: 客户端处于closed状态,服务端处于listen状态

客户端服务端
初始状态closedlisten
第一次握手SYN_SENT(主动打开)listen
第二次握手SYN_SENTSYN_REVD(被动打开)
第三次握手ESTABLISHEDSYN_REVD
最后ESTABLISHEDESTABLISHED

在这里插入图片描述

详细过程

  • 第一次握手🤝: 客户端发送一个SYN报文给服务端,并指明客户端的初始化序列号ISN(c)。此时客户端处于SYN_SENT状态
    • 发送内容: 1个报文+ISN: 客户端SYN; 客户端ISN
  • 第二次握手🤝: 服务端接收客户端SYN报文,一是自己的SYN作为响应,二是指明自己的初始化序列ISN(s),同时将ISN(c)+1–>转换为ACK值,表明服务端已经接收到客户端的SYN报文。此时服务端处于SYN_REVD状态。
    • 发送内容: 2个报文+ISN: 服务端SYN, 服务端ACK; 服务端ISN
  • 第三次握手🤝: 客户端接收服务端的SYN报文,将ISN(s)+1–>转换为ACK值,表明客户端已经接收到服务端的SYN报文。此时客户端处于ESTABLISHED状态。
    • 发送内容: 1个报文: 客户端ACK
  • 最后: 服务端接收到ACK报文。服务端处于ESTABLISHED状态,双方建立连接。

三次握手🤝作用

作用很多,能记越多越好

  1. 确认双方的发送、接收能力是否正常
  2. 指定自身的初始化序列号(ISN),为后面可靠传输做充分准备
  3. 如果是https协议,三次握手过程中还会进行数字证书验证和加密密钥的生成

为什么只有三次握手🤝才能确认对方的接收与发送能力正常,而两次不行

  • 第一次握手🤝: 客户端发送网络包,服务端接收成功。
    • 结论:客户端发送能力正常,服务端接受能力正常
  • 第二次握手🤝: 服务端发送网络包,客户端接收成功。
    • 结论: 服务端接收、发送能力正常,服务端接收、发送能力正常
    • 但是: 服务端不能确认客户端接收能力是否正常(客户端第三次才响应告诉服务器,才可确认客户端接收能力正常)
  • 第三次握手🤝: 客户端发送网络包,服务端接收成功。
    • 结论: 服务端得出结论 -> 客户端的接收、发送能力正常;服务端的接收、发送能力正常

从上面得出,只有三次握手才能确认双方的接收与发送能力是否正常

(ISN)是固定的吗

三次握手的一个重要功能是客户端与服务端交换ISN(Initial Sequence Number),以便让对方知道接下来接收数据是如何按序列号组装数据的

ISN是固定的,攻击者便很容易猜出ACK,因此ISN是动态生成的

什么是半连接队列

服务器第一次收到客户端的SYN之后,就会处于SYN_REVD状态(第二次握手),此时双方还没有完全建立连接,服务器会把这中中下请求连接都放在一个队列里,这种队列就称为半连接队列

当然还有全连接队列,即完成了三次握手,已经建立了连接就会放在全连接队列,若队列满了就会出现丢包现象

Tips: 补充一点关于SYN-ACK重传次数的问题,当服务端发送SYN-ACK包完成,若没有收到客户端确认包(ACK),服务端会进行首次重传,等一段时间仍未收到,服务端进行第二次重传…当重传次数大于系统规定最大重传此时,系统将连接信息从半连接队列中删除。注意的是,每次重传等待时间不一定相同,一般都是指数递增,如1s, 2s, 4s, 8s…

三次握手过程中可以携带数据吗

是可以携带的。第一次、第二次握手都不可以携带数据,而第三次握手是可以携带数据的。

为什么第一次、第二次握手不可以携带数据呢

我们可以假如这第一次握手可以携带数据,若有人要恶意攻击服务器,那他每次在第一次握手中SYN中放入大量数据(无需理会服务器的发送、接收能力),疯狂重复发送SYN报文会导致服务端花费大量时间和空间来处理和接收这些报文。
所以,会使服务器更容易受到攻击。

但是在第三次握手中,客户端已经处于ESTABLISHED状态,对于客户端来说,它已经与服务端建立了连接,并且确保服务器的接收、发送能力是正常的。
所以,能携带数据没毛病

参考文章

结束语:如果遇到什么疑问或者建议的,可直接留言评论!作者看到会马上一一回复
如果觉得小白此文章不错或对你有所帮助,期待你的一键三连💫!❤️ni
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值