【Netty基础】深入理解通讯协议

一、网络模型(OSI vs TCP/IP)

1. OSI七层模型

  • 应用层(HTTP、FTP、SMTP)
  • 表示层(数据格式转换、加密/解密)
  • 会话层(建立、管理、终止会话)
  • 传输层(TCP、UDP)
  • 网络层(IP、ICMP、IGMP、ARP)
  • 数据链路层(MAC地址、交换机)
  • 物理层(网线、光纤、无线信号)

2. TCP/IP四层模型

  • 应用层(HTTP、FTP、DNS)
  • 传输层(TCP、UDP)
  • 网络层(IP、ICMP、IGMP)
  • 网络接口层(ARP、RARP、MAC)

关系

  • OSI 是理论模型,TCP/IP 是实际使用的协议栈。
  • 程序员重点关注应用层(HTTP)传输层(TCP/UDP)

二、TCP协议

1. TCP特点

  • 面向连接(需三次握手建立连接)
  • 可靠传输(确认应答、超时重传、滑动窗口)
  • 全双工通信(双方可同时收发数据)
  • 流量控制(滑动窗口)
  • 拥塞控制(慢启动、拥塞避免、快重传)

2. TCP三次握手(建立连接)

  1. Client → ServerSYN=1, seq=x(Client进入SYN_SENT
  2. Server → ClientSYN=1, ACK=1, seq=y, ack=x+1(Server进入SYN_RCVD
  3. Client → ServerACK=1, ack=y+1(双方进入ESTABLISHED

为什么需要三次?

  • 确保双方发送和接收能力正常,防止历史连接干扰。

3. TCP四次挥手(断开连接)

  1. Client → ServerFIN=1, seq=u(Client进入FIN_WAIT_1
  2. Server → ClientACK=1, ack=u+1(Server进入CLOSE_WAIT,Client进入FIN_WAIT_2
  3. Server → ClientFIN=1, seq=v, ACK=1, ack=u+1(Server进入LAST_ACK
  4. Client → ServerACK=1, ack=v+1(Server关闭,Client进入TIME_WAIT后关闭)

为什么需要四次?

  • TCP是全双工的,必须分别关闭发送和接收通道。
  • TIME_WAIT 的作用:确保最后一个ACK到达,防止旧数据干扰新连接。

4. TCP的可靠性机制

机制作用
确认应答(ACK)接收方确认收到数据
超时重传未收到ACK时重发数据
滑动窗口动态调整发送速率,避免接收方缓冲区溢出
流量控制通过窗口大小限制发送速率
拥塞控制避免网络拥塞(慢启动、拥塞避免、快重传)

三、UDP协议

1. UDP特点

  • 无连接(无需握手,直接发送)
  • 不可靠(不保证数据到达)
  • 高效(无确认、无重传、无流量控制)
  • 面向报文(数据包边界清晰,不会粘包)

2. UDP适用场景

  • 实时性要求高(视频通话、直播)
  • 允许少量丢包(DNS查询、游戏数据)
  • 广播/组播(如DHCP)

3. UDP报文结构

| 源端口(2字节) | 目的端口(2字节) |
| 长度(2字节)   | 校验和(2字节)   |
| 数据(可变长度) |

四、HTTP协议

1. HTTP特点

  • 无状态(每次请求独立,需Cookie/Session维持状态)
  • 基于TCP(默认端口80)
  • 请求-响应模型(Client发起请求,Server返回响应)

2. HTTP报文结构

请求报文
GET /index.html HTTP/1.1  
Host: www.example.com  
User-Agent: Chrome  
Accept: text/html  
  • 请求行方法(GET/POST) + URI + HTTP版本
  • 请求头Host, User-Agent, Accept
  • 请求体(POST请求携带数据)
响应报文
HTTP/1.1 200 OK  
Content-Type: text/html  
Content-Length: 1024  

<html>...</html>
  • 状态行HTTP版本 + 状态码(200/404) + 状态描述
  • 响应头Content-Type, Content-Length
  • 响应体(HTML/JSON数据)

3. HTTP方法

方法作用
GET获取资源
POST提交数据
PUT更新资源
DELETE删除资源
HEAD获取响应头(无Body)

4. HTTP状态码

状态码含义
200成功
301/302重定向
400客户端错误
403无权限
404资源不存在
500服务器错误

五、关键协议对比

协议连接方式可靠性效率适用场景
TCP面向连接可靠较低文件传输、Web请求
UDP无连接不可靠视频流、游戏、DNS
HTTP基于TCP依赖TCP中等Web应用

六、常见问题

1. TCP粘包问题

  • 原因:TCP是流式传输,无边界,多个数据包可能合并。
  • 解决方案
    • 固定长度(如每个包100字节)
    • 分隔符(如\n
    • 自定义协议(如[长度][数据]

2. TCP vs UDP如何选择?

  • 用TCP:需要可靠传输(如文件下载、HTTP请求)。
  • 用UDP:需要低延迟(如视频通话、游戏)。

七、​TCP三次握手的漏洞与防御措施​

1. SYN洪泛攻击(SYN Flood)

攻击原理

  • 攻击者伪造大量虚假IP,向目标服务器发送SYN包(第一次握手)。
  • 服务器响应SYN-ACK(第二次握手),但伪造的IP不会回复ACK(第三次握手)。
  • 服务器维护半连接队列(SYN_RCVD状态),等待超时(默认30秒~2分钟),导致队列耗尽,无法处理正常请求。

影响

  • 服务器资源(内存、CPU)被占满,拒绝服务(DoS/DDoS)。

防御方案

方法说明
SYN Cookie服务器不保存半连接状态,而是通过哈希计算验证ACK合法性。
缩短超时时间减少半连接队列的等待时间(如从2分钟降至10秒)。
防火墙/IP限流过滤高频SYN请求,或限制单个IP的连接数。
TCP代理(如Cloudflare)在边缘节点完成握手,过滤恶意流量。

2. 伪造初始序列号(ISN)攻击

攻击原理

  • TCP依赖**序列号(ISN)**确保数据顺序,早期实现中ISN可预测。
  • 攻击者预测ISN,伪造合法用户的ACK包,劫持会话(Session Hijacking)。

防御方案

  • 使用随机化ISN(现代操作系统已实现)。

3. Land攻击(自攻自防)

攻击原理

  • 攻击者发送SYN包,源IP和目的IP均为目标服务器
  • 服务器向自己发送SYN-ACK,陷入死循环,消耗资源。

防御方案

  • 防火墙过滤源IP=目标IP的包。

4. 半开放连接耗尽(半连接队列溢出)

攻击原理

  • 类似SYN洪泛,但攻击者部分完成握手(发送ACK但不发送数据),占用服务器连接资源。

防御方案

  • 启用TCP Fast Open(TFO):允许在SYN包中携带数据,减少握手延迟。
  • 限制单个IP的最大半连接数。

5. 总结
漏洞类型关键点防御措施
SYN洪泛伪造IP耗尽半连接队列SYN Cookie、IP限流
ISN预测序列号可预测导致会话劫持随机化ISN
Land攻击源IP=目标IP的自攻防火墙过滤
半开放连接占用连接但不传输数据TFO、连接数限制

实际应用建议

  • 服务器配置:启用SYN Cookie,调整net.ipv4.tcp_max_syn_backlog(半连接队列大小)。
  • 网络层防护:部署DDoS防护设备(如AWS Shield、阿里云Anti-DDoS)。

扩展思考

  • 为什么QUIC(HTTP/3)选择UDP+加密?避免TCP握手漏洞,同时提供可靠性。

全文总结

  1. TCP:可靠、面向连接,适合文件传输、Web请求。
  2. UDP:高效、无连接,适合实时应用(视频、游戏)。
  3. HTTP:基于TCP,无状态,是Web开发的基础。
  4. 关键机制:三次握手、四次挥手、滑动窗口、ACK确认。

后续学习建议

  • 深入 Socket编程(TCP/UDP实战)
  • 研究 HTTP/2、WebSocket(现代Web通信)
  • 理解 DNS、HTTPS、WebRTC(扩展协议)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值