Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

9.1 网络分层模型

计算机网络是一个非常复杂的系统,为了简化设计和实现,人们把网络通信的过程拆分成多个层次,每层负责不同的功能,层与层之间通过标准接口通信,这就是网络分层模型。理解分层模型是掌握网络原理的基础。

为什么需要分层

网络通信涉及到很多复杂的问题:

  • 物理传输介质怎么传0和1?
  • 数据怎么传送到目标地址?
  • 数据传输出错了怎么办?
  • 不同的应用程序怎么区分不同的网络数据?

如果把所有功能都放在一起实现,会非常复杂,难以维护和扩展。分层的设计思想可以大大降低复杂度:

  1. 各层独立:每层只需要关心自己的功能,不需要知道其他层的实现细节,通过接口和上下层交互
  2. 易于实现和维护:某一层的实现变化不会影响其他层,只要接口不变
  3. 标准化:各层的功能和接口标准化,不同厂商的设备可以互相兼容
  4. 易于排障:网络出问题时,可以逐层排查,快速定位问题所在的层级

两种常见的分层模型

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四层模型。

网络数据包的封装和解封装

网络数据在各层之间传递时,每层都会加上自己的头部信息,这个过程叫做封装;接收方收到数据后,逐层去掉对应的头部,得到原始数据,这个过程叫做解封装。

封装过程(发送方):

  1. 应用层:用户数据产生,加上应用层头部,比如HTTP头
  2. 传输层:加上TCP/UDP头部,包含源端口、目标端口等信息,形成TCP段
  3. 网络层:加上IP头部,包含源IP、目标IP等信息,形成IP数据包
  4. 链路层:加上以太网帧头,包含源MAC、目标MAC等信息,形成以太网帧
  5. 物理层:转换为比特流,通过物理介质传输
应用层数据 → [HTTP头][数据]
↓ 传输层封装
[TCP头][HTTP头][数据]
↓ 网络层封装
[IP头][TCP头][HTTP头][数据]
↓ 链路层封装
[以太网头][IP头][TCP头][HTTP头][数据]
↓ 物理层
比特流传输

解封装过程(接收方):

  1. 物理层:收到比特流,转换为以太网帧,交给链路层
  2. 链路层:检查以太网帧头,确认目标MAC是自己,去掉以太网头,把IP包交给网络层
  3. 网络层:检查IP头,确认目标IP是自己,去掉IP头,把TCP段交给传输层
  4. 传输层:检查TCP/UDP头,根据端口号找到对应的应用程序,去掉TCP头,把应用层数据交给应用层
  5. 应用层:处理应用层数据,比如HTTP服务器解析HTTP请求

这种分层封装的方式让各层只需要处理自己的头部,不需要关心其他层的数据,大大简化了实现复杂度。

常见网络设备对应的层级

设备工作层级作用
集线器(Hub)物理层简单的信号放大和广播,所有端口共享带宽,现在基本被淘汰
交换机(Switch)数据链路层根据MAC地址转发数据帧,不同端口之间带宽独立,是局域网的核心设备
路由器(Router)网络层根据IP地址转发数据包,实现不同网络之间的通信,是互联网的核心设备
三层交换机数据链路层+网络层既可以做二层交换,也可以做三层路由
防火墙网络层/传输层/应用层过滤网络流量,隔离不同安全级别的网络
负载均衡器传输层/应用层将请求分发到多个服务器,提升系统处理能力和可用性

分层思想的实际意义

理解网络分层对我们排查网络问题非常有帮助:

  1. 物理层问题:网线没插好、光纤断了、无线信号差,属于物理层问题,表现为网络完全不通或者丢包严重
  2. 链路层问题:MAC地址冲突、ARP欺骗、交换机配置错误,表现为局域网内不通
  3. 网络层问题:IP配置错误、路由错误、网关配置错误,表现为跨网段不通、ping不通目标IP
  4. 传输层问题:端口被防火墙拦截、TCP连接异常,表现为IP能ping通,但是端口连接不上
  5. 应用层问题:应用协议配置错误、程序bug,表现为端口能通,但业务功能不正常

比如用户反馈网站打不开,可以逐层排查:

  1. 先ping域名看能不能解析到IP → 检查DNS(应用层)
  2. ping目标IP看能不能通 → 检查网络层和链路层
  3. telnet 80/443端口看能不能通 → 检查传输层和防火墙
  4. 用curl访问看能不能得到正确响应 → 检查应用层HTTP服务

思考问题

  1. 为什么网络要采用分层设计?如果不分层会有什么问题?
  2. OSI七层模型和TCP/IP四层模型有什么区别和联系?我们实际工作中常用哪种模型?
  3. 一个HTTP请求从浏览器发出到收到响应,分别经过了TCP/IP四层模型的哪些层?每层都做了什么工作?
  4. 如果ping一个外网IP不通,可能是哪些层级出现了问题?怎么排查?