TCP三次握手攻击-SYN Flood的解决办法SYN Cookie
本篇文章记录在HCIA学习中传输层三次握手中提及的SYN Flood攻击,对学习的知识进行总结。
SYN Flood是一种非常常见的Ddos攻击。
在三次握手中,服务端在接收到客户端第一次握手中发送的SYN包后会分配一个TCB区块并且回复ACK和SYN包给客户端。而SYN Flood则是利用这点,通过虚拟大量的客户端来对服务器发送大量SYN包,造成服务器分配的TCB块过多,CPU等服务资源被占满,正常普通用户无法与服务器进行会话。
SYN Cookie则是对正常的TCP三次握手进行了一定的修改并且利用了hash算法来对Sequence Number进行处理来防范SYN Flood攻击。他的原理是,在接收到客户端发送的SYN包时,不分配一个专门的TCB块,而是根据接收到SYN包的信息计算出一个Cookie值,用这个作为返回的SYN-ACK包的序列号(注意,第二次握手实际上只发了一个包,他是将返回的包中的ACK和SYN标志都置为1),当第三次握手时,服务端根据客户端返回的数据包的信息计算出返回的确认号是否正常(第二次握手发出的序列号+1),Cookie的计算关键点在于包含本次连接的状态信息,这点让攻击者难以伪造。
TCP数据包格式(取自https://blog.csdn.net/thefist11cc/article/details/123539807)
下面介绍Cookie的计算:
服务器收到一个SYN包,计算出信息摘要mac,利用MAC函数(SHA1,一种hash函数)
mac = MAC(A,k)
A = Source ip || Source Port || Dst ip || Dst Port || t || MSSIND
其中MSSIND为MSS对应的索引(MSS为Maximum Segment Size,最大报文长度)
t为系统启动时间,每过60s加1
k是服务器独有的秘钥,是一组随机数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」