2、网络基础回顾:OSI七层模型与TCP/IP四层模型,数据包封装与解封装过程
聊性能优化,绕不开网络模型。很多人觉得这是理论,跟实战没关系。我刚开始做优化时也这么想,直到有一次线上故障,排查了三天,最后发现是数据包在传输过程中被中间设备“撕碎”了重组失败。嗯,从那以后,我老老实实把这两张图刻在了脑子里。
说白了,OSI七层模型和TCP/IP四层模型,就是网络世界的“交通法规”。你写的每一行代码,发的每一个请求,最终都要按这套规则打包上路。不理解它,你连问题出在哪一层都说不清楚。
2.1 OSI七层模型:理想化的“教科书”
OSI(Open System Interconnection)是国际标准化组织搞出来的参考模型。它把网络通信拆成7层,每层只管自己的事。你想想看,这就像一家公司,每个部门各司其职,出了问题直接找对应部门就行。
| 层级 | 名称 | 核心职责 | 常见协议/设备 |
|---|---|---|---|
| 7 | 应用层 | 为用户提供网络服务接口 | HTTP、FTP、SMTP、DNS |
| 6 | 表示层 | 数据格式转换、加密、压缩 | SSL/TLS、JPEG、ASCII |
| 5 | 会话层 | 建立、管理、终止会话 | NetBIOS、RPC |
| 4 | 传输层 | 端到端可靠传输、流量控制 | TCP、UDP |
| 3 | 网络层 | 路由寻址、逻辑地址(IP) | IP、ICMP、路由器 |
| 2 | 数据链路层 | 帧封装、物理地址(MAC)、差错检测 | 以太网、交换机、PPP |
| 1 | 物理层 | 比特流传输、电气信号 | 网线、光纤、集线器 |
2.2 TCP/IP四层模型:实战中的“精简版”
OSI模型太理想了,实际互联网用的是TCP/IP四层模型。它把OSI的上三层合并成应用层,下两层合并成网络接口层。我个人觉得,TCP/IP才是你真正需要背下来的东西。
| TCP/IP层 | 对应OSI层 | 核心协议 | 数据单元名称 |
|---|---|---|---|
| 应用层 | 5、6、7 | HTTP、DNS、TLS | 消息(Message) |
| 传输层 | 4 | TCP、UDP | 段(Segment) |
| 网络层 | 3 | IP、ICMP | 包(Packet) |
| 网络接口层 | 1、2 | 以太网、ARP | 帧(Frame) |
2.3 数据包封装过程:从“数据”到“比特流”
你发一个HTTP请求,数据是怎么从你的浏览器跑到服务器的?这个过程就是封装。每一层都会给上层的数据“穿衣服”——加上自己的头部信息。
我举个例子。你在浏览器里输入一个网址,敲回车。这一刻,数据包封装就开始了。
- 应用层:浏览器构造HTTP请求报文。比如
GET /index.html HTTP/1.1。这时的数据叫“消息”。 - 传输层:TCP协议把HTTP报文切成段,加上TCP头部(源端口、目的端口、序列号等)。这叫“段”。
- 网络层:IP协议给TCP段加上IP头部(源IP、目的IP)。这叫“包”。
- 网络接口层:以太网协议给IP包加上帧头部(源MAC、目的MAC)和帧尾部(FCS校验)。这叫“帧”。
- 物理层:帧被转换成比特流,通过网线发出去。
2.4 数据包解封装过程:从“比特流”回到“数据”
数据到了接收端,过程反过来。每一层剥掉自己那层的头部,把剩下的交给上一层。这叫解封装。
- 物理层:收到比特流,交给数据链路层。
- 网络接口层:检查帧头部的MAC地址,确认是给自己的。剥掉帧头和帧尾,把IP包交给网络层。
- 网络层:检查IP头部,确认目标IP是自己。剥掉IP头,把TCP段交给传输层。
- 传输层:检查TCP头部,确认端口号。剥掉TCP头,把HTTP报文交给应用层。
- 应用层:浏览器解析HTTP报文,渲染页面。
你想想看,这个过程就像俄罗斯套娃。发送端一层层套上去,接收端一层层拆下来。每一层只关心自己该做的事,不越界。
2.5 核心知识图谱
下面这张图,是我自己总结的。它把封装和解封装的过程画在了一起,方便你对照着看。
2.6 性能优化视角:每一层都是机会
理解了封装和解封装,你就知道性能优化该从哪里下手了。我个人习惯,按层来排查问题:
- 应用层:减少HTTP请求次数、启用压缩、使用连接池。这是收益最高的优化点。
- 传输层:调整TCP窗口大小、启用快速重传、优化拥塞控制算法。我遇到过很多应用,改一下TCP参数,吞吐量直接翻倍。
- 网络层:优化路由路径、避免IP分片。MTU设置不合理,会导致大量重传,性能急剧下降。
- 网络接口层:检查交换机端口协商、网卡驱动、中断亲和性。这些底层问题,往往被上层开发忽略。
嗯,这一章的内容就到这里。模型和过程是基础,但基础不牢,后面优化无从谈起。你先把封装和解封装的流程刻在脑子里,后面我们聊具体优化手段时,你就能快速定位问题出在哪一层了。