在TCP/IP四层模型中,端口属于传输层的核心概念。每个端口对应一个16位无符号整数(0-65535),其中0-1023为知名端口(Well-Known Ports)。80端口作为HTTP协议默认端口,在RFC 2616中明确规定其标准用途。
典型HTTP请求在协议栈中的封装过程:
plaintext
Application Layer: HTTP GET /index.html Transport Layer: TCP 80端口标记 → 添加源/目标端口 Network Layer: IP封装 → 源/目标IP地址 Data Link Layer: MAC地址封装
ClientServerSYN (Seq=100)SYN-ACK (Seq=300, Ack=101)ACK (Ack=301)HTTP GET / (Port 80)HTTP/1.1 200 OKClientServer
HTTP报文在TCP段中的封装格式:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | → 80端口标记 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgment Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |U|A|P|R|S|F| | | Offset| Reserved |R|C|S|S|Y|I| Window | | | |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | HTTP Payload | | GET / HTTP/1.1\r\nHost: example.com\r\n... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Nginx反向代理配置示例:
nginx
http { upstream backend { server 192.168.1.2:8080; server 192.168.1.3:8080; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } }
Docker网络端口映射:
bash
docker run -p 80:8080 --name webapp my-web-image
此时容器内部应用监听8080端口,通过NAT机制映射到宿主机80端口
攻击类型 | 技术原理 | 防御方案 |
---|---|---|
HTTP劫持 | 运营商注入广告脚本 | 全站HTTPS化 |
Slowloris | 保持长时间部分连接 | 配置连接超时阈值 |
HTTP走私 | 利用代理服务器解析差异 | 统一代理配置标准 |
CRLF注入 | 注入\r\n控制响应头 | 严格过滤用户输入 |
http
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
bash
# ModSecurity规则 SecRule REQUEST_URI "@contains /etc/passwd" "id:1001,deny,status:403"
使用ALPN扩展协商协议版本:
bash
openssl s_client -alpn h2,http/1.1 -connect example.com:443
CDN节点与源站通信模式:
客户端 → CDN边缘节点(80端口) → TLS终端 → 内部协议 → 源站服务器(私有端口)
tcpdump高级过滤技巧:
bash
tcpdump -i eth0 'tcp port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420)'
该命令捕获包含HTTP GET请求的TCP包
关键监控参数:
netstat -ant | grep :80 | wc -l
cat /proc/net/dev | grep eth0
nstat -az TcpRetransSegs
bash
setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx
bash
# Suricata规则示例 alert tcp any 80 -> any any (msg:"Non-HTTP on port 80"; content:"HTTP/1."; distance:0; within:6; not; sid:1000001;)