跳转至

02 · 网络基础

官方文档:https://www.ietf.org/rfc/ · https://developer.mozilla.org/en-US/docs/Web/HTTP iGaming 重点:WebSocket 实时赔率推送 · CDN 加速 · DDoS 防护 · 地理路由


1. TCP/IP 基础

分层模型

应用层    HTTP / HTTPS / WebSocket / DNS
传输层    TCP(可靠) / UDP(低延迟)
网络层    IP / ICMP / 路由
链路层    Ethernet / ARP

TCP 三次握手 & 四次挥手

建立连接:Client SYN → Server SYN-ACK → Client ACK
关闭连接:Client FIN → Server ACK → Server FIN → Client ACK

博彩场景关键:高并发下大量 TIME_WAIT 会耗尽端口,需调整内核参数。

# 查看 TCP 状态分布
ss -ant | awk '{print $1}' | sort | uniq -c | sort -rn

CIDR & 子网划分(AWS VPC 设计基础)

10.0.0.0/16   = 65536 个 IP(VPC 常用范围)
10.0.1.0/24   = 256 个 IP(子网常用大小)
10.0.0.0/8    = 16M 个 IP(内网保留)
192.168.0.0/16 = 65536 个 IP(内网保留)

计算工具:ipcalc 10.0.1.0/24

2. DNS 解析

解析链路

客户端 → 本地 DNS 缓存 → 递归解析器(ISP/8.8.8.8)
       → 根域名服务器 → TLD 服务器(.com)
       → 权威 DNS(Cloudflare/Route 53) → 返回 IP

常用记录类型

类型 说明 示例
A 域名 → IPv4 example.com → 1.2.3.4
AAAA 域名 → IPv6 example.com → 2001:db8::1
CNAME 域名 → 域名 www → example.com
MX 邮件服务器 10 mail.example.com
TXT 文本(SPF/验证) "v=spf1 include:..."
NS 域名服务器 ns1.cloudflare.com
CAA 证书签发授权 0 issue "letsencrypt.org"

诊断命令

# 标准查询
dig example.com A
dig @1.1.1.1 example.com A        # 指定 DNS 服务器
dig example.com +trace            # 完整解析链路追踪
dig example.com +short            # 只显示结果

# 反向解析
dig -x 1.2.3.4

# 批量检测(博彩多域名场景)
for domain in site1.com site2.com site3.com; do
  echo "$domain: $(dig +short $domain A)"
done

3. HTTP/HTTPS

HTTP 状态码速查

2xx 成功:200 OK · 201 Created · 204 No Content
3xx 重定向:301 永久 · 302 临时 · 304 Not Modified
4xx 客户端错误:400 Bad Request · 401 未认证 · 403 禁止 · 404 Not Found · 429 Too Many Requests
5xx 服务端错误:500 Internal Error · 502 Bad Gateway · 503 Service Unavailable · 504 Gateway Timeout

HTTP/2 关键特性(博彩平台必用)

  • 多路复用:一个 TCP 连接并发多个请求,解决 HTTP/1.1 队头阻塞
  • 头部压缩(HPACK):减少重复 header 传输
  • 服务器推送:主动推送资源(现已较少使用)
  • 二进制分帧:传输效率更高
# Nginx 启用 HTTP/2
listen 443 ssl http2;

HTTP/3 (QUIC) — 未来趋势

  • 基于 UDP 而非 TCP,解决 TCP 队头阻塞
  • Cloudflare 已全面支持
  • 适合移动网络弱网环境(博彩移动端核心需求)

4. WebSocket(实时赔率核心)

工作原理

1. 客户端发起 HTTP Upgrade 请求:
   GET /odds HTTP/1.1
   Upgrade: websocket
   Connection: Upgrade
   Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==

2. 服务端返回 101 Switching Protocols

3. 持久双向全双工连接建立,赔率变化服务端主动推送

Nginx 反代 WebSocket 配置

location /ws {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 3600s;     # 长连接超时
    proxy_send_timeout 3600s;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

连接数监控

# 当前 WebSocket 连接数(Nginx upstream)
ss -ant | grep ESTABLISHED | grep :8080 | wc -l

# 监控 WebSocket 升级请求
grep "websocket" /var/log/nginx/access.log | wc -l

5. TLS/SSL

TLS 1.2 vs TLS 1.3

特性 TLS 1.2 TLS 1.3
握手往返次数 2-RTT 1-RTT(0-RTT 恢复)
支持的加密套件 多(含弱算法) 精简(仅强算法)
前向保密 可选 强制
性能 较慢 更快

证书链验证

根证书(CA Root)→ 中间证书(Intermediate)→ 域名证书(Leaf)

诊断:
openssl s_client -connect example.com:443 -showcerts
openssl x509 -in cert.pem -text -noout    # 查看证书详情

常见 TLS 错误

SSL_ERROR_HANDSHAKE_FAILURE   → 加密套件不匹配
CERTIFICATE_VERIFY_FAILED     → 证书链不完整 / 已过期
ERR_CERT_COMMON_NAME_INVALID  → 证书域名不匹配

6. 防火墙(UFW / iptables)

UFW(Ubuntu 简化防火墙)

ufw enable
ufw allow 22/tcp comment "SSH"
ufw allow 80/tcp comment "HTTP"
ufw allow 443/tcp comment "HTTPS"
ufw allow from 10.0.0.0/8 to any port 5432 comment "PG internal only"
ufw deny from 1.2.3.4                     # 封锁单个 IP
ufw status numbered
ufw delete 3                              # 删除第3条规则

iptables(精细控制)

# 查看规则
iptables -L -n -v

# 限制连接速率(防 DDoS)
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 100 -j REJECT

# 仅允许内网访问 Redis
iptables -A INPUT -p tcp --dport 6379 ! -s 10.0.0.0/8 -j DROP

7. CDN 工作原理

用户请求 → DNS 返回最近边缘节点 IP → 边缘节点
  ↓ 有缓存                    ↓ 无缓存(Cache MISS)
直接返回                    回源到 Origin 服务器 → 缓存 → 返回

关键指标:
- 命中率(Cache Hit Rate):越高越好(>90%)
- 边缘节点延迟:通常 < 20ms
- 回源流量:命中率高则回源少,节省成本

Cloudflare 缓存控制

# 通过 Cache-Control 头控制
add_header Cache-Control "public, max-age=86400";     # 缓存1天
add_header Cache-Control "no-store, no-cache";        # 不缓存(API/动态内容)

# 博彩赔率接口:不缓存
location /api/odds {
    add_header Cache-Control "no-store";
    add_header CF-Cache-Status "BYPASS";
}

# 静态资源:长期缓存
location ~* \.(js|css|png|jpg|woff2)$ {
    add_header Cache-Control "public, max-age=31536000, immutable";
}

8. 负载均衡算法

算法 适用场景 说明
Round Robin 无状态服务 轮流分配,简单均匀
Least Connections 长连接(WebSocket) 分给当前连接最少的节点
IP Hash 需要 Session 粘性 同一 IP 总是到同一节点
Weighted 节点性能不同 按权重分配流量
一致性哈希 缓存服务 节点变化时缓存失效最少

官方文档 & 学习资源

资源 链接
HTTP RFC 7230-7235 https://httpwg.org/specs/
WebSocket RFC 6455 https://datatracker.ietf.org/doc/html/rfc6455
TLS 1.3 RFC 8446 https://datatracker.ietf.org/doc/html/rfc8446
Cloudflare 学习中心 https://www.cloudflare.com/learning/
MDN HTTP 文档 https://developer.mozilla.org/en-US/docs/Web/HTTP
《高性能浏览器网络》(免费) https://hpbn.co/
Wireshark 用户指南 https://www.wireshark.org/docs/wsug_html/

常见问题 & 坑

Q: WebSocket 连接频繁断开? A: 检查中间件(Nginx/LB)的 proxy_read_timeout,默认60s会断开空闲长连接;客户端需实现心跳(ping/pong)

Q: CDN 更新了代码但用户看到旧版? A: 使用文件名带 hash 版本号(app.abc123.js),或通过 Cloudflare API 清除缓存:

curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache" \
  -H "Authorization: Bearer {token}" \
  -d '{"purge_everything":true}'

Q: 跨地区延迟高? A: 优先使用 Cloudflare Argo Smart Routing(智能选路);AWS 多 Region 部署配合 Route 53 延迟路由


最后更新:2025-04