美文网首页TCP/IP协议
TCP的三次握手四次挥手与sync攻击

TCP的三次握手四次挥手与sync攻击

作者: lhbasura | 来源:发表于2020-06-12 18:00 被阅读0次

    前言

    本文旨在用通俗的语言说明对TCP三次握手以及四次挥手的理解,以及为什么握手需要三次但是挥手需要四次

    三次握手

    我们先来看一张网络上的图


    三次握手

    图中SYN和ACK只是标志位,我们不用关注,我们只需要关注syn和ack
    这个过程用文字描述一下就是

    1. 客户端向服务端发送seq=J
    2. 服务端收到后向客户端发送ack=J+1,seq=K
    3. 客户端向服务端回应ack=K+1 ,至此连接建立完成

    看到这里你可能会觉得又是ack又是seq这些都是什么意思,别急,我们可以把这个过程翻译成人话来理解一下

    建立连接的通俗理解

    建立连接后我们认为这个通讯是可靠的,通讯是可靠的说的直白一点就是 我能确定你能收到我的信息,你能确定我能收到你的信息,建立连接的过程实质上是在互相确认对方可以收到信息的过程

    举个🌰

    我们现在用男女同学之间异地写信来模拟一下三次握手的场景(皮一下很开心)

    现在女生A想和男生B通信,于是写了一封信寄给男生B男生B收到女A的信后很开心很激动然后就去打了几把游戏冷静一下😓,而生女生A把信发出去后发现一直没有回应,以为对方收不到,然后就放弃了。

    所以男生B收到女生A的信后应该进行回应否则女生A是不知道你收到了信的

    后来男生B收到女生A信后终于回信,然后女生A收到信后也忘了回信,于是男生B也以为女生A收不到信,就一直等呀等,一辈子就这么过去了(这真是个悲伤的故事🤦‍)

    所以这时候女生A也应该回信,让男生B知道她能收到信,自此以后他们就能正式开始互通信件了

    三次握手的本质

    上面这个例子中女生A其实是客户端,男生B其实是服务端,三次握手实质上是在做下面的确认

    • ① 客户端:你是否能收到我的讯息(向服务端发送seq=J)
    • ② 服务端:我可以收到你的信息(ack=J+1代表可以收到客户端的信息),你能否收到我的信息(向客服端发送seq=K)
    • ③ 客户端:我可以收到你的信息(向服务端回应ack=K+1代表可以收到服务端信息)

    连接建立

    syn攻击

    我们可以看到,在之前的例子中,如果女生A最后不回信,男生B会一直等待,这个如果换成我们实际tcp握手就会造成服务端资源的浪费

    我们可以想象这么一个场景:
    如果客户端向服务端发送大量的syn包(进行大量操作①)那么服务器资源就会被大量占用,从而导致其无法正常提供服务

    这就是syn洪水攻击,目前这种攻击还没有什么好的防范方式目前大致方向有两种

    1. 通过分析网络流量特征,因为syn攻击的流量和正常网络流量是会有显著区别的,比如数据包的密集度、半开连接数量(执行完操作②的数量)
    2. 通过一个防火墙代理,大致是通过防火墙来过滤可靠连接放行

    四次挥手

    先上图


    四次挥手
    • ① 主动方:我不想给你发数据了我们分手吧(向被动方发送seq=M)
    • ② 被动方:好(ack=M+1代表可以收到主动方的信息)

    此时被动方把剩余数据发送完成

    • ③ 被动方:我不想给你发数据了我们分手吧(向主动方发送seq=N)
    • ④ 主动方:好(向被动方回应ack=N+1代表可以收到被动方信息)

    被动方关闭连接,主动方等待一段时间后确定没有数据接收了,关闭连接

    四次挥手实质上是在确认我已经没有数据需要发送给你,你已经没有数据发送给我,双方可以断开连接

    为什么握手是三次但是挥手需要四次

    其实握手也可以是四次,如果是四次流程将会是下面这样

    • ① 客户端:你是否能收到我的讯息(向服务端发送seq=J)
    • ② 服务端:我可以收到你的信息(ack=J+1代表可以收到客户端的信息)
    • ③ 服务端:你能否收到我的信息(向客服端发送seq=K)
    • ④ 客户端:我可以收到你的信息(向服务端回应ack=K+1代表可以收到服务端信息)

    我们可以发现三次握手实质上是把②、③合成一步了,他把回复客户端(我能收到信息)和询问客户端(能否收到我的信息)合并为一步操作。

    为什么挥手时不能合并成三次呢?

    答:因为挥手的②和③之间需要有一步把剩余数据发送完的操作

    相关文章

      网友评论

        本文标题:TCP的三次握手四次挥手与sync攻击

        本文链接:https://www.haomeiwen.com/subject/njsfsctx.html