1. 课程导入
1.1 为什么我们要先聊协议栈?
做协议栈测试,你首先得知道被测对象长什么样。说白了,协议栈就是通信双方约定好的“语言规则”。没有这个规则,设备之间就是鸡同鸭讲。
我记得刚入行那会儿,接手一个LTE基站的项目。设备连上了,信令也能交互,但就是时不时掉线。排查了三天,最后发现是TCP窗口缩放因子没对齐。嗯,从那以后我养成了一个习惯——先看协议栈分层,再动手测。
1.2 OSI七层模型——理论上的“完美蓝图”
OSI模型是国际标准化组织(ISO)在1984年提出的。它把通信过程拆成7层,每层各司其职。你想想看,这就像一家公司的组织架构:销售部不管研发,研发部不管财务,各层只通过接口通信。
| 层级 | 名称 | 核心功能 | 典型协议/设备 |
|---|---|---|---|
| 7 | 应用层 | 为用户应用提供网络服务 | HTTP, FTP, SMTP |
| 6 | 表示层 | 数据格式转换、加密、压缩 | SSL/TLS, JPEG |
| 5 | 会话层 | 建立、管理、终止会话 | NetBIOS, RPC |
| 4 | 传输层 | 端到端可靠传输、流量控制 | TCP, UDP |
| 3 | 网络层 | 路由选择、逻辑寻址 | IP, ICMP, OSPF |
| 2 | 数据链路层 | 帧封装、介质访问控制、差错检测 | Ethernet, PPP, MAC |
| 1 | 物理层 | 比特流传输、电气特性 | RJ45, 光纤, 集线器 |
1.3 TCP/IP协议栈——工业界的“实战派”
OSI是理论,TCP/IP才是真刀真枪干活的。它只有四层,但每一层都经过了互联网几十年的考验。
- 应用层: HTTP、DNS、DHCP。你写的每一个API调用,最后都落在这里。
- 传输层: TCP保证可靠,UDP追求速度。我建议你记住一句话:TCP是挂号信,UDP是明信片。
- 网络层: IP协议负责“怎么走”,ICMP负责“通不通”。
- 网络接口层: 驱动、网卡、物理介质。这一层最容易出“玄学”问题。
我在项目中遇到过最典型的一个坑:嵌入式设备上报数据,服务器端偶尔收不到。抓包一看,TCP三次握手成功了,但数据段被中间路由器分片了。接收端重组超时,直接丢弃。这就是网络层和传输层配合出了问题。
1.4 一致性测试——你到底有没有“说谎”?
一致性测试,说白了就是检查你的协议实现,跟标准规范是不是一回事。
举个例子:RFC 793里规定TCP SYN包必须怎么填。你的设备发了SYN,但选项字段顺序错了。对端可能忍了,也可能直接RST。这种“模棱两可”的实现,就是一致性测试要抓的。
- 验证实现是否符合规范(RFC、3GPP、IEEE等)
- 发现规范中的歧义或漏洞
- 保证不同厂商设备之间的互操作性
我曾经参与过一个NB-IoT模组的认证测试。模组上报的PDU格式跟3GPP规范差了2个字节。厂商说“不影响功能”,但运营商直接拒了。为什么?因为网络侧是按规范解析的,差一个比特都可能解析失败。
1.5 测试分类——别把鸡蛋放在一个篮子里
协议栈测试不是只有一致性测试。我习惯把它分成三类,每类各有侧重。
| 测试类型 | 关注点 | 典型场景 | 常用工具 |
|---|---|---|---|
| 功能测试 | 协议功能是否按预期工作 | TCP连接建立/释放、HTTP GET请求 | Wireshark, Scapy |
| 性能测试 | 吞吐量、延迟、并发连接数 | 1000个TCP并发、UDP丢包率测试 | iperf, netperf, Spirent |
| 一致性测试 | 实现与规范的符合程度 | 协议状态机验证、PDU格式检查 | TTCN-3, 协议分析仪 |
1.6 本章知识体系总览
下面这张图,是我自己画的知识结构。每次带新人,我都会先让他们看这张图。你把它理解了,后面29章的内容就有了骨架。
1.7 小结
这一章我们聊了三件事:
- 协议栈长什么样——OSI七层是理论框架,TCP/IP四层是实战模型。
- 一致性测试是什么——检查你的实现跟规范是不是“说一样的话”。
- 测试怎么分类——功能、性能、一致性,三驾马车缺一不可。
我个人习惯,每次开始一个新协议栈的测试工作,第一件事就是画出它的分层架构图,然后对照规范一条一条过。别嫌麻烦,这一步省了,后面全是坑。