阿里面试官: HTTP、HTTPS、TCP/IP、Socket通信、三次握手四次挥手过程?(附全网最具深度的三次握手、四次挥手讲解)

前言

这段时间面试官都挺忙的,频频出现在博客文章标题,虽然我不是特别想蹭热度,但是实在想不到好的标题了-。-,蹭蹭就蹭蹭 😃

事实上我在阿里面试的时候确实被问到了这个问题,HTTP、HTTPS、TCP/IP、Socket通信、三次握手四次挥手过程?当时虽然思路正确,可惜最终也并不算完全答对

结束后花了一段时间整理了下思路,参考和查阅了一下资料,整理如下:
来源:编程充电宝

作者:在所不辞

问题描述

你能否讲解一下TCP的三次握手与四次挥手呢?

面试官如果从整体到局部入手,那我们就先讲讲整个三次握手和四次挥手的过程,但不要忘记,讲的同时应该适当体现你对该知识点掌握的深度和广度,具体怎么说,我们后面慢慢道来。

三次握手

所谓的握手即一次发包到接收的过程,可能从客户端发送到服务端,也可能从服务端发送到客户端。

过程描述

先上一张TCP报文结构图,待会我们会回来看这张图:

TCP报文结构

先上三次握手的流程图:

image 三次握手

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

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

    第一次握手:SYN报文

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

    第二次握手:SYNACK报文

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

    第三次握手:ACK报文

细节拓展

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

    三次握手状态图

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值