TCP三次握手四次挥手总结(流程、常见问题、会发生的攻击、防范方法)_简述 tcp 三次握手过程,并从攻击者角度分析该过程有什么安全隐患(1)

我们先明确两个定义:
1,client为数据发送方
2,server为数据接收方

好,下面进行三次握手的总结:
1,client想要向server发送数据,请求连接。这时client想服务器发送一个数据包,其中同步位(SYN)被置为1,表明client申请TCP连接,序号为j。
2,当server接收到了来自client的数据包时,解析发现同步位为1,便知道client是想要简历TCP连接,于是将当前client的IP、端口之类的加入未连接队列中,并向client回复接受连接请求,想client发送数据包,其中
同步位为1,并附带确认位ACK=j+1
,表明server已经准备好分配资源了,并向client发起连接请求,请求client为建立TCP连接而分配资源。
3,client向server回复一个ACK,并分配资源建立连接。server收到这个确认时也分配资源进行连接的建立

那么问题来了

  • 为什么需要第三次握手?
  • 第三次握手失败了怎么办?
  • 三次握手有什么缺陷可以被黑客利用,用来对服务器进行攻击?
  • 怎么防范这种攻击?

接下来进行一一解答。
1,为什么需要第三次握手?
答:如果没有第三次握手,可能会出现如下情况:

  • 如果只有两次握手,那么server收到了client的SYN=1的请求连接数据包之后,便会分配资源并且向client发送一个确认位ACK回复数据包
  • 那么,如果在client与server建立连接的过程中,由于网络不顺畅等原因造成的通信链路中存在着残留数据包,即client向server发送的请求建立连接的数据包由于数据链路的拥塞或者质量不佳导致该连接请求数据包仍然在网络的链路中,这些残留数据包会造成如下危害
  • 危害:当client与server建立连接,数据发送完毕并且关闭TCP连接之后,如果链路中的残留数据包才到达server,那么server就会认为client重新发送了一次连接申请,便会回复ACK包并且分配资源。并且一直等待client发送数据,这就会造成server的资源浪费。

2,第三次握手失败了怎么办?
答:当client与server的第三次握手失败了之后,即client发送至server的确认建立连接报文段未能到达server,server在等待client回复ACK的过程中超时了,那么server会向client发送一个RTS报文段并进入关闭状态,即:并不等待client第三次握手的ACK包重传,直接关闭连接请求,这主要是为了防止泛洪攻击,即坏人伪造许多IP向server发送连接请求,从而将server的未连接队列塞满,浪费server的资源。

3,三次握手有什么缺陷可以被黑客利用,用来对服务器进行攻击?
答:黑客仿造IP大量的向server发送TCP连接请求报文包,从而将server的半连接队列(上文所说的未连接队列,即server收到连接请求SYN之后将client加入半连接队列中)占满,从而使得server拒绝其他正常的连接请求。即拒绝服务攻击

怎么防范这种攻击?
1,缩短服务器接收客户端SYN报文之后的等待连接时间,即SYN timeout时间,也就是server接收到SYN报文段,到最后放弃此连接请求的超时时间,将SYN timeout设置的更低,便可以成倍的减少server的负荷,但是过低的SYN timeout可能会影响正常的TCP连接的建立,一旦网络不通畅便可能导致client连接请求失败

2,SYN cookie + SYN proxy 无缝集成(较好的解决方案)

  1. SYN cookie:当server接收到client的SYN之后,不立即分配资源,而是根据client发送过来的SYN包计算出一个cookie值,这个cookie值用来存储server返回给client的SYN+ACK数据包中的初始序列号,当client返回第三次握手的ACK包之后进行校验,如果校验成功则server分配资源,建立连接。
  2. SYN proxy代理,作为server与client连接的代理,代替server与client建立三次握手的连接,同时SYN proxy与client建立好了三次握手连接之后,确保是正常的TCP连接,而不是TCP泛洪攻击,那么SYN proxy就与server建立三次握手连接,作为代理(网关?)来连通client与server。(类似VPN了解一下。)

四次挥手

下面对四次挥手的过程进行总结:
1,(我客户端已经没有话跟你说了) 当client所要发送的数据发送完毕之后(这里是接收到了来自于server方的,对于clien发送的最后一个数据包的收到确认ACK包之后),向server请求关闭连接,因此client向server发送一个FIN数据包,表明client数据发送完了,申请断开。并且自身进入等待结束连接状态FIN_WAIT-1
2,(我服务器知道你没话说了,但是你等等我,我不确定是否没话跟你说了,等我的回复)当server收到了来自client的FIN请求包之后,向client回复一个确认报文ACK,同时进入关闭等待状态(CLOSE -WAIT),这时TCP连接的server便会向上层应用发送通知,表明client数据发送完毕,是否需要发送数据给client,这时TCP连接已经处于半关闭状态了,因为client已经没有数据要发送了。同时client收到了来自server的确认报文之后,便会进入FIN-WAIT-2状态**。
3,(我服务器的上层应用也没话说了,咱们可以断开连接了) TCP连接的server收到上层应用的指令表明没有数据要发送之后,会向client发送一个FIN请求数据包,其中确认位ACK=1,表明响应client的关闭连接请求,同时FIN=1表明server也准备好断开TCP连接了。
4,*(好的,那么咱们断开连接吧)***client收到了来自server的FIN数据包之后,知道server已经准备好断开连接了,于是向server发送一个确认数据包ACK,告诉server,可以关闭资源断开连接了。同时自身进入TIME-WAIT阶段,这个阶段将持续2MSL(MSL:报文在网络链路中的最长生命时长),在等待2MSL之后,client将会关闭资源。
5,serve日收到了来自于client的最后一个确认断开连接数据包之后便会直接进入TCP关闭状态,进行资源的回收。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
img

写在最后

在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。

需要完整版PDF学习资源私我

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中…(img-Hmvkv2CN-1713024421669)]

  • 27
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP(传输控制协议)是一种可靠的面向连接的协议,其三次握手四次挥手是建立和断开TCP连接的重要过程TCP三次握手: 1. 客户端发送SYN(同步序列号)请求报文给服务器端,请求建立连接。 2. 服务器端接收到请求报文后,发送SYN-ACK(同步序列号确认)报文,表示已经收到请求,同意建立连接。 3. 客户端接收到SYN-ACK报文后,发送ACK(确认)报文,表示连接已经建立。 TCP四次挥手: 1. 客户端发送FIN(结束)报文给服务器端,请求关闭连接。 2. 服务器端接收到FIN报文后,发送ACK报文,表示已经收到请求,但还有数据需要传输。 3. 服务器端传输完数据后,发送FIN报文给客户端,请求关闭连接。 4. 客户端接收到FIN报文后,发送ACK报文,表示已经收到请求,连接已经关闭。 TCP三次握手四次挥手的原理: 三次握手的原理在于确保客户端和服务器端都能够正常地发送和接收数据,以避免因网络问题而导致的数据丢失或错误。在三次握手过程中,客户端和服务器端都需要发送确认报文,以确保双方都能够正常地发送和接收数据。 四次挥手的原理在于确保客户端和服务器端都能够正常地关闭连接,以避免因未关闭连接而导致的网络资源浪费和安全问题。在四次挥手过程中,客户端和服务器端都需要确认对方的关闭请求,并传输完所有数据后才能正式关闭连接。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值