【面试必会】全网最具深度的三次握手,安卓开发中遇到最难的问题

本文详细探讨了TCP三次握手的过程,包括每个阶段的目的和状态转换,以及特殊情况如旧SYN报文到达、SYN攻击等问题,强调了三次握手在确保连接可靠性上的重要性。同时,文章提及了在Android开发中遇到的类似挑战。
摘要由CSDN通过智能技术生成

三次握手三次握手

接下来我们来详细讲解下上图的过程:

  • 客户主机发起连接请求,设置SYN标志位为1,同时客户端随机选择了一个初始序号client_isn,并且存放在TCP报文字段的序号中,如下图:

第一次握手:SYN报文第一次握手:SYN报文

  • 接下来,当服务端接收到该报文后,会为其分配TCP 缓存和变量(这使得TCP容易受到被称为SYN 洪泛攻击的拒绝服务攻击)紧接着,服务端会返回一个SYNACK 报文到客户端,其中SYN标志位为1确认号设置为client_isn + 1,并且选一个自己的初始序号server_isn,并放置在序号字段中,如下图:

第二次握手:SYNACK报文第二次握手:SYNACK报文

  • 当收到服务器发来的SYNACK报文段后,客户端也需要给该连接分配缓存和变量,然后再次发送一个确认报文给服务端,其中,SYN标志位设置为0,将确认号设置为server_isn + 1,另外,此次报文可以携带负载数据:

第三次握手:ACK报文第三次握手:ACK报文

细节拓展

  • 三次握手的状态转换图(建议达到能默写下来的熟练程度)

三次握手状态图三次握手状态图

  • 服务器为什么要使用特殊的初始序号server_isn?这为什么是必要的呢?

这个细节和问题深究第3题是一致的,服务器使用特定的初始序列号 server_isn(从目的地IP端口散列中获取)可以用来抵御SYN洪水攻击。具体为什么,以及什么是SYN 洪泛攻击,问题深究部分我们会再详谈。

为了下文描述方便,我们将三次握手分别称为:SYN 报文SYNACK 报文ACK 报文

问题深究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值