一、网络通讯基础
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,HTTPS443 - 特点:无状态、请求-响应模型
- 常见方法:
GET、POST、PUT、DELETE、PATCH
一次典型的 HTTP 请求结构:
1 | GET /api/user |
响应结构:
1 | 200 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、数据库连接等对可靠性要求高的场景
三次握手简要过程:
- 客户端 → 服务端:
SYN - 服务端 → 客户端:
SYN + ACK - 客户端 → 服务端:
ACK
2. UDP
UDP(User Datagram Protocol)无连接、不保证可靠送达,但开销小、延迟低。
常见场景:DNS 查询、视频直播、在线游戏、QUIC 等。
3. TCP 与 UDP 对比
| 对比项 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接 | 无连接 |
| 可靠性 | 可靠传输 | 不保证送达 |
| 速度 | 相对较慢 | 相对较快 |
| 典型应用 | HTTP、MySQL | DNS、直播 |
四、网络排查常用思路
1. 自顶向下排查
- 应用层:URL、请求头、响应码、业务错误码
- 传输层:端口是否开放、连接是否建立
- 网络层:IP 是否可达、路由是否正常
- 链路层:网卡、交换机、本地网络环境
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. 基本使用步骤
- 选择网卡(如 WLAN、以太网)
- 点击开始捕获
- 在浏览器或应用中触发网络请求
- 停止捕获,使用过滤器缩小范围
- 右键包 → Follow → TCP Stream / HTTP Stream 查看完整会话
3. 常用显示过滤器
1 | http # 只看 HTTP |
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 | # 抓取 8080 端口流量并保存 |
4. 浏览器开发者工具(Network)
- 平台:Chrome、Edge、Firefox
- 定位:前端最常用的「轻量抓包」
- 特点:无需安装,直接看请求耗时、响应头、Preview
- 局限:只能看浏览器发起的请求,看不到其他进程或底层 TCP 细节
5. 工具选型建议
| 场景 | 推荐工具 |
|---|---|
| 学习协议、分析 TCP/IP | Wireshark |
| 前端/接口 HTTPS 调试 | Fiddler、Charles、浏览器 Network |
| Linux 服务器排查 | tcpdump + Wireshark |
| 快速看页面请求 | 浏览器开发者工具 |
七、实战:用 Wireshark 分析一次 HTTP 请求
1. 抓取访问过程
- 打开 Wireshark,选择当前上网网卡
- 开始捕获
- 浏览器访问
http://example.com(示例站点) - 停止捕获
- 过滤器输入:
http && ip.addr == 目标IP
2. 观察内容
一次完整访问通常能看到:
- DNS 查询:域名 → IP
- TCP 三次握手:SYN、SYN-ACK、ACK
- HTTP 请求:GET / HTTP/1.1
- HTTP 响应:200 OK + HTML
- TCP 四次挥手(连接关闭时)
3. Follow HTTP Stream
右键某个 HTTP 包 → Follow → HTTP Stream,可以看到该连接的完整请求和响应文本,非常适合作学习和文档记录。
八、HTTPS 抓包补充
HTTPS 流量在 Wireshark 中默认显示为 TLS Application Data,内容是密文。
常见解密方式:
- 浏览器 + Fiddler/Charles:安装代理证书,由代理解密后再转发
- Wireshark + 密钥日志:配置
SSLKEYLOGFILE导出 TLS 密钥(适合本地调试) - 服务端侧抓包:在网关、Nginx、应用日志中查看明文请求
开发阶段更推荐使用 Fiddler/Charles;学习底层协议时重点看 TLS 握手过程即可。
九、小结
网络通讯协议是排查线上问题的底层基础,抓包工具则是把「看不见的网络交互」变成可分析的数据。
学习路径建议:
- 掌握 TCP/IP 分层和 HTTP 基本结构
- 熟练使用浏览器 Network 面板
- 学习 Wireshark 过滤器和 Follow Stream
- 需要 HTTPS 调试时使用 Fiddler 或 Charles
- 服务器环境配合 tcpdump 使用
与 Java Web、Nginx、CORS 等主题结合时,抓包能直观看到请求是否到达、响应头是否正确,是后端开发非常实用的技能。