9.1 网络分层模型
计算机网络是一个非常复杂的系统,为了简化设计和实现,人们把网络通信的过程拆分成多个层次,每层负责不同的功能,层与层之间通过标准接口通信,这就是网络分层模型。理解分层模型是掌握网络原理的基础。
为什么需要分层
网络通信涉及到很多复杂的问题:
- 物理传输介质怎么传0和1?
- 数据怎么传送到目标地址?
- 数据传输出错了怎么办?
- 不同的应用程序怎么区分不同的网络数据?
如果把所有功能都放在一起实现,会非常复杂,难以维护和扩展。分层的设计思想可以大大降低复杂度:
- 各层独立:每层只需要关心自己的功能,不需要知道其他层的实现细节,通过接口和上下层交互
- 易于实现和维护:某一层的实现变化不会影响其他层,只要接口不变
- 标准化:各层的功能和接口标准化,不同厂商的设备可以互相兼容
- 易于排障:网络出问题时,可以逐层排查,快速定位问题所在的层级
两种常见的分层模型
1. OSI七层参考模型
OSI(Open Systems Interconnection)七层模型是国际标准化组织制定的网络参考模型,是理论上的标准,把网络通信分为七层:
| 层级 | 名称 | 作用 | 常见协议/设备 |
|---|---|---|---|
| 7 | 应用层 | 为应用程序提供网络服务,直接和用户交互 | HTTP、FTP、DNS、SSH |
| 6 | 表示层 | 数据格式转换、加密解密、压缩解压缩 | 加密协议、SSL/TLS |
| 5 | 会话层 | 建立、管理和终止会话 | RPC、NetBIOS |
| 4 | 传输层 | 端到端的通信,流量控制、可靠传输 | TCP、UDP |
| 3 | 网络层 | 地址寻址、路由选择、分组转发 | IP、ICMP、路由器 |
| 2 | 数据链路层 | 相邻节点之间的帧传输、差错校验、流量控制 | 以太网、ARP、交换机 |
| 1 | 物理层 | 传输原始的比特流,定义物理介质、电气特性 | 网线、光纤、集线器、网卡 |
OSI七层模型是理论上的完美分层,但实际应用中并没有完全实现,现在广泛使用的是TCP/IP四层模型。
2. TCP/IP四层模型(DoD模型)
TCP/IP四层模型是互联网实际使用的标准模型,是事实上的工业标准,把OSI七层简化为四层:
| TCP/IP四层 | 对应OSI层 | 作用 | 常见协议 |
|---|---|---|---|
| 应用层 | 应用层+表示层+会话层 | 负责具体的应用层协议,处理应用业务逻辑 | HTTP、HTTPS、FTP、DNS、SSH、WebSocket |
| 传输层 | 传输层 | 端到端的通信,提供可靠或不可靠的传输 | TCP、UDP |
| 网络层(网际互联层) | 网络层 | 地址寻址和路由选择,把数据包从源主机发送到目标主机 | IP、ICMP、ARP |
| 网络接口层(链路层) | 数据链路层+物理层 | 控制物理介质的访问,传输帧 | 以太网、Wi-Fi、网卡、驱动程序 |
TCP/IP模型更简单实用,我们平时讨论网络协议时通常用TCP/IP四层模型。
网络数据包的封装和解封装
网络数据在各层之间传递时,每层都会加上自己的头部信息,这个过程叫做封装;接收方收到数据后,逐层去掉对应的头部,得到原始数据,这个过程叫做解封装。
封装过程(发送方):
- 应用层:用户数据产生,加上应用层头部,比如HTTP头
- 传输层:加上TCP/UDP头部,包含源端口、目标端口等信息,形成TCP段
- 网络层:加上IP头部,包含源IP、目标IP等信息,形成IP数据包
- 链路层:加上以太网帧头,包含源MAC、目标MAC等信息,形成以太网帧
- 物理层:转换为比特流,通过物理介质传输
应用层数据 → [HTTP头][数据]
↓ 传输层封装
[TCP头][HTTP头][数据]
↓ 网络层封装
[IP头][TCP头][HTTP头][数据]
↓ 链路层封装
[以太网头][IP头][TCP头][HTTP头][数据]
↓ 物理层
比特流传输
解封装过程(接收方):
- 物理层:收到比特流,转换为以太网帧,交给链路层
- 链路层:检查以太网帧头,确认目标MAC是自己,去掉以太网头,把IP包交给网络层
- 网络层:检查IP头,确认目标IP是自己,去掉IP头,把TCP段交给传输层
- 传输层:检查TCP/UDP头,根据端口号找到对应的应用程序,去掉TCP头,把应用层数据交给应用层
- 应用层:处理应用层数据,比如HTTP服务器解析HTTP请求
这种分层封装的方式让各层只需要处理自己的头部,不需要关心其他层的数据,大大简化了实现复杂度。
常见网络设备对应的层级
| 设备 | 工作层级 | 作用 |
|---|---|---|
| 集线器(Hub) | 物理层 | 简单的信号放大和广播,所有端口共享带宽,现在基本被淘汰 |
| 交换机(Switch) | 数据链路层 | 根据MAC地址转发数据帧,不同端口之间带宽独立,是局域网的核心设备 |
| 路由器(Router) | 网络层 | 根据IP地址转发数据包,实现不同网络之间的通信,是互联网的核心设备 |
| 三层交换机 | 数据链路层+网络层 | 既可以做二层交换,也可以做三层路由 |
| 防火墙 | 网络层/传输层/应用层 | 过滤网络流量,隔离不同安全级别的网络 |
| 负载均衡器 | 传输层/应用层 | 将请求分发到多个服务器,提升系统处理能力和可用性 |
分层思想的实际意义
理解网络分层对我们排查网络问题非常有帮助:
- 物理层问题:网线没插好、光纤断了、无线信号差,属于物理层问题,表现为网络完全不通或者丢包严重
- 链路层问题:MAC地址冲突、ARP欺骗、交换机配置错误,表现为局域网内不通
- 网络层问题:IP配置错误、路由错误、网关配置错误,表现为跨网段不通、ping不通目标IP
- 传输层问题:端口被防火墙拦截、TCP连接异常,表现为IP能ping通,但是端口连接不上
- 应用层问题:应用协议配置错误、程序bug,表现为端口能通,但业务功能不正常
比如用户反馈网站打不开,可以逐层排查:
- 先ping域名看能不能解析到IP → 检查DNS(应用层)
- ping目标IP看能不能通 → 检查网络层和链路层
- telnet 80/443端口看能不能通 → 检查传输层和防火墙
- 用curl访问看能不能得到正确响应 → 检查应用层HTTP服务
思考问题
- 为什么网络要采用分层设计?如果不分层会有什么问题?
- OSI七层模型和TCP/IP四层模型有什么区别和联系?我们实际工作中常用哪种模型?
- 一个HTTP请求从浏览器发出到收到响应,分别经过了TCP/IP四层模型的哪些层?每层都做了什么工作?
- 如果ping一个外网IP不通,可能是哪些层级出现了问题?怎么排查?