两个部门联调,A 说接口发了,B 说没收到。抓包一看,A 发的是 JSON,B 按 XML 解析,两边各自没错,就是没约定好。这个约定,就是网络协议干的事。
协议的三个要素
语法规定数据长什么样,头部各字段多长、多大端;语义规定这段数据是什么意思,什么样的行为对应什么样的应答;时序规定先说什么后说什么,丢包了谁来重发。少了任何一个,通信都搭不起来。TCP 的三次握手是典型的时序约定,窗口大小和重传机制是语义和时序的组合。
OSI 七层和 TCP 四层怎么看
OSI 七层从上到下是应用、表示、会话、传输、网络、数据链路、物理,实际工程用 TCP/IP 四层:应用层、传输层、网际层、网络接口层。看协议看它属于哪一层:HTTP 干请求响应,归应用层;TCP 干可靠传输和拥塞控制,归传输层;IP 干寻址和分片,归网际层。数据从上往下每过一层包一层头部,抓包看到的就是一层压一层的结果。
TCP 与 UDP 的取向不同
- TCP:重传、排序、流量控制都帮你做了,网页、邮件、文件传输都用它,代价是延迟和开销。
- UDP:只管发不管到,视频通话、游戏位置同步、DNS 查询用它,快但要自己处理丢包。
- HTTP/3:基于 UDP 的 QUIC,想兼顾快和可靠,丢包率高的弱网环境优势明显。
分析协议就按这四步
抓包用 Wireshark,过滤条件 host 加 IP 再加端口。先看三次握手成没成立,再看应用层第一个请求是 GET 还是 POST。有重传看 RTT 是否异常,RTT 超过 200 毫秒页面体感就明显卡了。抓到 TLS 握手失败,先对客户端和服务端支持的版本,TLS 1.0 被禁的服务器遍地都是。
- 判断提醒:跨团队联调先对文档:端口、报文格式、超时重试写进谁的责任,谁掉链子一目了然,比互相说发了没收到管用。