Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

一、网络通讯基础

1. 为什么需要学习协议

日常开发中,前后端联调、接口超时、跨域、HTTPS 证书、WebSocket 断连等问题,本质上都和网络通讯有关。理解协议分层和报文结构,再配合抓包工具,可以快速定位「请求有没有发出去」「服务器有没有收到」「响应卡在哪一层」。

2. OSI 与 TCP/IP 模型

OSI 七层 TCP/IP 四层 典型协议/设备 开发常见场景
应用层 应用层 HTTP、HTTPS、DNS、FTP、SMTP 接口调试、API 设计
表示层 应用层 TLS/SSL、JSON、Protobuf HTTPS 加密、序列化
会话层 应用层 WebSocket、RPC 会话 长连接、实时通信
传输层 传输层 TCP、UDP 连接、端口、重传
网络层 网络层 IP、ICMP、ARP 路由、Ping
数据链路层 网络接口层 Ethernet、MAC 局域网通信
物理层 网络接口层 光纤、网线 硬件传输

实际工作中更常用 TCP/IP 四层模型 来理解问题。

3. 数据封装过程

发送数据时,自上而下逐层加头部;接收时自下而上逐层解封装:

1
应用数据 → TCP 段 → IP 包 → 以太网帧 → 物理信号

抓包工具看到的,通常是某一层或某几层解析后的结果。

二、常见应用层协议

1. HTTP / HTTPS

HTTP(HyperText Transfer Protocol)是 Web 开发中最常见的应用层协议。

  • 默认端口:HTTP 80,HTTPS 443
  • 特点:无状态、请求-响应模型
  • 常见方法:GETPOSTPUTDELETEPATCH

一次典型的 HTTP 请求结构:

1
2
3
4
GET /api/user HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: application/json

响应结构:

1
2
3
4
5
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 26

{"code":0,"msg":"ok"}

HTTPS = HTTP + TLS,在传输层之上增加了加密与身份校验,抓包时看到的是密文,需要配置密钥或使用浏览器导出才能解密。

2. WebSocket

WebSocket 在建立连接时先通过 HTTP 握手升级协议,之后在同一 TCP 连接上进行全双工通信,适合聊天、推送、实时行情等场景。

3. DNS

DNS(Domain Name System)负责把域名解析为 IP 地址,是访问网站的第一步。排查「域名能 ping 通但浏览器打不开」时,经常需要看 DNS 解析是否正确。

三、传输层协议

1. TCP

TCP(Transmission Control Protocol)是面向连接、可靠的传输协议。

特点:

  • 三次握手建立连接,四次挥手断开连接
  • 有序号、确认号、重传机制
  • 适合 HTTP、数据库连接等对可靠性要求高的场景

三次握手简要过程:

  1. 客户端 → 服务端:SYN
  2. 服务端 → 客户端:SYN + ACK
  3. 客户端 → 服务端:ACK

2. UDP

UDP(User Datagram Protocol)无连接、不保证可靠送达,但开销小、延迟低。

常见场景:DNS 查询、视频直播、在线游戏、QUIC 等。

3. TCP 与 UDP 对比

对比项 TCP UDP
连接 面向连接 无连接
可靠性 可靠传输 不保证送达
速度 相对较慢 相对较快
典型应用 HTTP、MySQL DNS、直播

四、网络排查常用思路

1. 自顶向下排查

  1. 应用层:URL、请求头、响应码、业务错误码
  2. 传输层:端口是否开放、连接是否建立
  3. 网络层:IP 是否可达、路由是否正常
  4. 链路层:网卡、交换机、本地网络环境

2. 常见问题对照

现象 可能原因 排查方向
连接超时 服务未启动、防火墙拦截、网络不通 Ping、Telnet、抓包看 SYN 是否发出
404 / 502 路径错误、反向代理配置问题 看 HTTP 请求路径和 Nginx 配置
HTTPS 证书错误 证书过期、域名不匹配 浏览器安全信息、Wireshark TLS 握手
跨域失败 CORS 响应头缺失 浏览器 Network + 抓包看响应头
偶发断连 心跳缺失、负载均衡超时 抓包看 TCP FIN/RST

五、Wireshark

1. Wireshark 是什么

Wireshark 是最常用的网络协议分析器,可以捕获网卡上的数据包,并按 TCP/IP 各层解析展示,支持 HTTP、DNS、TLS、WebSocket 等众多协议。

  • 官网:https://www.wireshark.org/
  • 适用平台:Windows、Linux、macOS
  • 特点:图形界面、过滤器强大、协议解析详细

2. 基本使用步骤

  1. 选择网卡(如 WLAN、以太网)
  2. 点击开始捕获
  3. 在浏览器或应用中触发网络请求
  4. 停止捕获,使用过滤器缩小范围
  5. 右键包 → Follow → TCP Stream / HTTP Stream 查看完整会话

3. 常用显示过滤器

1
2
3
4
5
6
7
http                          # 只看 HTTP
http.request.method == "POST" # POST 请求
ip.addr == 192.168.1.100 # 指定 IP
tcp.port == 8080 # 指定端口
dns # DNS 请求
tls # TLS 握手
http.response.code == 404 # 404 响应

4. 典型应用场景

  • 分析 TCP 三次握手、四次挥手
  • 查看 HTTP 请求头、响应体
  • 排查接口慢是「网络慢」还是「服务器处理慢」
  • 分析 DNS 解析过程
  • 学习协议原理、写技术文档截图

5. 注意事项

  • 需要管理员权限才能抓本机全部流量
  • HTTPS 默认是加密内容,需额外配置才能解密
  • 生产环境抓包要注意隐私与合规,避免捕获敏感信息

六、其他常见抓包/调试工具

1. Fiddler

  • 平台:Windows 为主
  • 定位:HTTP/HTTPS 代理抓包
  • 特点:对 Web 开发友好,可修改请求/响应、设置断点、自动解密 HTTPS(需安装证书)
  • 适合:前端联调、接口 Mock、移动端代理抓包

2. Charles

  • 平台:Windows、macOS
  • 定位:HTTP/HTTPS 代理抓包
  • 特点:界面清晰,支持 Map Local、Rewrite、Throttle(弱网模拟)
  • 适合:移动端 App、小程序 HTTPS 抓包

3. tcpdump

  • 平台:Linux / macOS 命令行
  • 定位:服务器端命令行抓包
  • 特点:轻量、可脚本化,常与 Wireshark 配合(tcpdump 抓包 → 保存 pcap → Wireshark 分析)
1
2
# 抓取 8080 端口流量并保存
sudo tcpdump -i any port 8080 -w capture.pcap

4. 浏览器开发者工具(Network)

  • 平台:Chrome、Edge、Firefox
  • 定位:前端最常用的「轻量抓包」
  • 特点:无需安装,直接看请求耗时、响应头、Preview
  • 局限:只能看浏览器发起的请求,看不到其他进程或底层 TCP 细节

5. 工具选型建议

场景 推荐工具
学习协议、分析 TCP/IP Wireshark
前端/接口 HTTPS 调试 Fiddler、Charles、浏览器 Network
Linux 服务器排查 tcpdump + Wireshark
快速看页面请求 浏览器开发者工具

七、实战:用 Wireshark 分析一次 HTTP 请求

1. 抓取访问过程

  1. 打开 Wireshark,选择当前上网网卡
  2. 开始捕获
  3. 浏览器访问 http://example.com(示例站点)
  4. 停止捕获
  5. 过滤器输入:http && ip.addr == 目标IP

2. 观察内容

一次完整访问通常能看到:

  1. DNS 查询:域名 → IP
  2. TCP 三次握手:SYN、SYN-ACK、ACK
  3. HTTP 请求:GET / HTTP/1.1
  4. HTTP 响应:200 OK + HTML
  5. TCP 四次挥手(连接关闭时)

3. Follow HTTP Stream

右键某个 HTTP 包 → Follow → HTTP Stream,可以看到该连接的完整请求和响应文本,非常适合作学习和文档记录。

八、HTTPS 抓包补充

HTTPS 流量在 Wireshark 中默认显示为 TLS Application Data,内容是密文。

常见解密方式:

  • 浏览器 + Fiddler/Charles:安装代理证书,由代理解密后再转发
  • Wireshark + 密钥日志:配置 SSLKEYLOGFILE 导出 TLS 密钥(适合本地调试)
  • 服务端侧抓包:在网关、Nginx、应用日志中查看明文请求

开发阶段更推荐使用 Fiddler/Charles;学习底层协议时重点看 TLS 握手过程即可。

九、小结

网络通讯协议是排查线上问题的底层基础,抓包工具则是把「看不见的网络交互」变成可分析的数据。

学习路径建议:

  1. 掌握 TCP/IP 分层和 HTTP 基本结构
  2. 熟练使用浏览器 Network 面板
  3. 学习 Wireshark 过滤器和 Follow Stream
  4. 需要 HTTPS 调试时使用 Fiddler 或 Charles
  5. 服务器环境配合 tcpdump 使用

与 Java Web、Nginx、CORS 等主题结合时,抓包能直观看到请求是否到达、响应头是否正确,是后端开发非常实用的技能。

评论