1.TCP协议

TCP协议概述:

TCP(传输控制协议)是一种面向连接的、可靠的传输层协议,主要用于在不可靠的网络环境中确保数据准确无误地传输。

可靠性保障

通过确认应答(ACK)、超时重传、序列号机制确保数据包按序到达,丢失或损坏的数据会自动重传。

流量控制

基于滑动窗口机制动态调整发送速率,避免接收方缓冲区溢出,实现高效数据传输。

拥塞控制

通过慢启动、拥塞避免等算法监测网络状态,主动降低传输速率以防止网络过载。

连接管理

采用三次握手建立连接和四次挥手释放连接,保证通信双方状态同步,避免资源浪费。

TCP协议核心机制

  • 三次握手与四次挥手:建立与终止连接的详细流程
  • 滑动窗口机制:流量控制与拥塞避免
  • 重传机制:超时重传与快速重传
  • 确认应答(ACK)与序列号(SEQ)的作用

TCP三次握手四次挥手

2. 为什么不是两次?

python 复制代码
问题:历史连接导致的混乱
# 场景:旧连接延迟到达
1. Client发送SYN(x)建立连接
2. 建立成功后正常通信
3. 连接关闭
4. 旧的SYN(x)延迟到达Server
5. Server以为是新连接,回复SYN-ACK(y, ack=x+1)

# 如果只有两次握手:
Client收到SYN-ACK后,发现:
- 这不是我当前要建立的连接
- 但Server已经认为连接建立了
- 造成Server资源浪费(半开连接)
================================
3. 为什么不是四次?
python
# 三次已经足够:
1. C→S: 我的序列号是x
2. S→C: 我收到了x,我的序列号是y
3. C→S: 我收到了y

# 第四次S→C: "我知道你收到了y"
# 这个确认可以在第一个数据包中捎带
# 不需要单独握手包

**二、为什么是四次挥手?**

**1. 四次挥手的必要性**

python 复制代码
2. 为什么不是三次?

问题:数据未发送完就被关闭
# 假设三次挥手:FIN → ACK+FIN → ACK

# 场景:
1. Client发送FIN:"我没有数据要发了"
2. Server立刻回复ACK+FIN:"好的,我也没有数据要发了"
3. Client回复ACK,连接关闭

# 但实际:
Server可能还有数据要发送!
那些数据会被丢弃,因为连接已关闭

TCP的半关闭状态

# TCP连接是全双工的,有两个独立通道:
发送通道A: Client → Server
发送通道B: Server → Client

# 四次挥手过程:
1. Client关闭A通道 (FIN)
2. Server确认A关闭 (ACK)
   → 此时B通道仍开放,Server还能发数据
3. Server发完数据后关闭B通道 (FIN)
4. Client确认B关闭 (ACK)

# 这就是为什么需要四次:分别关闭两个方向
特性 三次握手 四次挥手
目的 建立连接 关闭连接
确保 双方序列号同步 双向数据发送完毕
最少次数 3次(理论最少) 4次(理论最少)
可优化 TFO(携带数据) 延迟ACK(合并ACK)

三次握手保证连接建立的可靠性和序列号同步,四次挥手保证双向数据传输完整后才安全关闭!

三次握手四次挥手的漏洞利用

1.SYN FLOOD

核心原理:服务器在收到第一次握手信息之后(收到SYN请求包),返回SYN-ACK包,发起第二次握手,但是客户端(攻击者)不回应服务器发来的SYN包(不发送第三次握手的ACK包),导致服务器傻等,在等待超时之后放弃会话,利用这一漏洞发送大量SYN包,导致目标服务器半连接队列满,正常请求排不上队

就像:你给人家发"在吗",人家回复你之后,你又不发消息了

python 复制代码
# 服务器收到SYN后的行为:
1. 分配传输控制块(TCB)存储连接信息
2. 将连接放入半连接队列(SYN队列)
3. 启动定时器等待ACK(通常30秒-2分钟)
4. 如果超时未收到ACK,清理资源

# 攻击者利用点:
- 半连接队列大小有限(默认1024)
- 每个半连接占用约280字节内存
- 超时时间长(给了攻击者机会)
补充知识:
python 复制代码
1. 为什么伪造源IP?
- 避免防火墙基于IP的限速
- 增加溯源难度
- 使服务器回复的SYN-ACK发往不存在的IP

2. 攻击变种:LAND攻击
-发送源IP=目标IP的SYN包
-导致服务器向自己发送SYN-ACK
-形成自循环,消耗更多资源

3. 现代防护:SYN Cookie
-服务器不立即分配资源
-而是将连接信息编码到SYN-ACK的序列号中
-只在收到有效ACK后才分配资源

2.连接耗尽攻击

核心原理:在执行完三次握手后,服务器给你发了整套资源,导致服务器资源被浪费

就像:你发"在吗"

对方:"在,什么事"

你:"那我们开始聊天吧"

然后他发什么你都敷衍的回复,消耗他的资源

python 复制代码
# 攻击者建立并保持连接的代价:
1. 内存消耗:很小(每个连接约几十KB)
2. CPU消耗:很低(只需维持心跳)
3. 带宽消耗:几乎为零(保持连接几乎不传数据)
4. 连接数限制:可能有(但可伪造IP绕过)
python 复制代码
# 服务器维持连接的代价:
1. 内存消耗:很大(每个连接数百KB到MB)
   - TCP控制块(TCB)
   - 应用层会话信息
   - 缓冲区内存
   
2. 连接表限制:硬性限制
   - Linux:net.ipv4.ip_conntrack_max(默认65536)
   - Windows:MaxUserPort(默认16384)
   - 数据库:max_connections(几百到几千)
   
3. 处理开销:
   - 每个包要查连接表
   - 超时检测和心跳处理
   - 日志记录和监控

现代防御手段:

防御层级 核心措施 主要对抗的攻击类型
1. 网络层 分布式流量清洗(云清洗中心/高防IP/Anycast网络) SYN Flood、UDP Flood等大流量DDoS
2. 系统层 调整内核参数、启用SYN Cookie SYN Flood、连接耗尽攻击
3. 应用层 Web应用防火墙(WAF)、智能人机识别、API保护 CC攻击、应用层漏洞利用
4. 架构与运维 弹性扩展与降级、代码与业务优化、边缘节点集成 CC攻击、资源耗尽攻击

下一篇文章我们来探讨一些攻击方式和绕过防御

一、 法律与合规性声明

  1. 严格遵守法律

    本文及所有相关技术讨论内容(包括但不限于TCP/IP协议分析、SYN Flood/CC攻击原理、防御技术)仅限用于合法的安全研究、教学与防御体系建设目的 。严禁在任何未经明确、书面授权的网络、系统或设备上进行任何形式的攻击、渗透、漏洞验证或干扰测试。

  2. 适用法律

    所有行为必须遵守《中华人民共和国网络安全法》、《中华人民共和国数据安全法》、《中华人民共和国个人信息保护法》以及《中华人民共和国刑法》中关于非法侵入计算机信息系统罪(第285条)、破坏计算机信息系统罪(第286条)等相关规定。任何未经授权的网络攻击行为均属违法,将面临严厉的法律制裁。

  3. 技术讨论边界

    讨论所涉及的技术细节、工具名称和代码示例,仅为解释技术原理、促进安全认知和提升防御能力。绝不能被解读为对任何非法活动的指导、鼓励或许可

相关推荐
安科士andxe4 小时前
深入解析|安科士1.25G CWDM SFP光模块核心技术,破解中长距离传输痛点
服务器·网络·5g
YJlio7 小时前
1.7 通过 Sysinternals Live 在线运行工具:不下载也能用的“云端工具箱”
c语言·网络·python·数码相机·ios·django·iphone
CTRA王大大7 小时前
【网络】FRP实战之frpc全套配置 - fnos飞牛os内网穿透(全网最通俗易懂)
网络
testpassportcn8 小时前
AWS DOP-C02 認證完整解析|AWS DevOps Engineer Professional 考試
网络·学习·改行学it
通信大师9 小时前
深度解析PCC策略计费控制:核心网产品与应用价值
运维·服务器·网络·5g
Tony Bai10 小时前
告别 Flaky Tests:Go 官方拟引入 testing/nettest,重塑内存网络测试标准
开发语言·网络·后端·golang·php
消失的旧时光-194310 小时前
从 0 开始理解 RPC —— 后端工程师扫盲版
网络·网络协议·rpc
叫我龙翔11 小时前
【计网】从零开始掌握序列化 --- JSON实现协议 + 设计 传输\会话\应用 三层结构
服务器·网络·c++·json
“αβ”11 小时前
网络层协议 -- ICMP协议
linux·服务器·网络·网络协议·icmp·traceroute·ping
wearegogog12312 小时前
基于C#的TCP/IP通信客户端与服务器
服务器·tcp/ip·c#