前言
说起网络分层模型,大家总是会机械地去背那几个名字,物理层、数据链路层、网络层……我们的大脑不善于去记忆一些没有含义的符号,所以只是去记这几个词语没有任何意义。
所以这篇文章的目标是什么呢?是从问题的源头,来探讨网络分层模型的本质是什么,分层是为了解决什么问题的,为什么要提出这种方式来处理网络通信。
这里我们不去讨论那些复杂的协议细节,而是从网络分层的演化历史和现状,来说明现代计算机网络的系统结构。
网络的发展
TCP/IP模型的基础协议定义过程可以从以下RFC文件中找到:
- RFC 768 - User Datagram Protocol (UDP):定义了另一种传输层协议UDP,提供无连接、不可靠的数据传输服务。
- RFC 791 - Internet Protocol (IP):网络层的核心文档,定义了IP协议的格式、寻址和路由功能。
- RFC 793 - Transmission Control Protocol (TCP):描述了传输层的TCP协议,包括连接管理、数据可靠传输等。
- RFC 1122 - Requirements for Internet Hosts – Communication Layers:详细描述了每一层在TCP/IP模型中的职责,成为实现TCP/IP协议栈的关键参考。
四层模型
也就是所谓的TCP/IP模型,基于实际应用的TCP/IP协议栈提出。它是互联网发展的基石,随着ARPANET项目的进行,TCP/IP协议被开发并被用于连接不同的网络设备。
四层模型包含了网络接口层、网络层、传输层和应用层,覆盖了从硬件到用户应用的全过程,是实际网络通信的骨架。
四层模型中的每一层各自承担不同的职责:
- 网络接口层:负责物理介质和数据链路的传输,包括通过以太网、Wi-Fi等方式将数据包从设备发送出去或接收进来。典型的网络设备有网卡、集线器(Hub)、交换机等,负责信号的物理传输。
- 网络层:负责不同网络之间的数据传输,主要涉及IP地址的寻址和路由选择,确保数据包能够到达目标设备。典型设备包括路由器,它们通过查看数据包中的目标IP地址决定如何转发。网络层主要考虑的是将单个数据包从一个IP地址传输到另一个IP地址。
- 传输层:负责端到端的数据传输和连接管理,或UDP协议来确保数据的完整性和可靠性。传输层的主要功能是控制数据包的传输顺序、确认和错误重传。通常由操作系统中由协议栈来实现。传输层和网络层的区别在于,网络层只考虑数据包的传递,而传输层则是为了在不可靠的网络环境下构建一个完整、可靠的传输过程。
- 应用层:直接面向用户,提供各种网络服务,例如HTTP、FTP等协议。应用层由运行在设备上的程序实现,例如Web浏览器、电子邮件客户端等。

OSI七层模型
国际标准化组织(ISO)在20世纪80年代提出,旨在创建一个通用的参考模型,使不同厂商的网络设备可以互相通信。其目标是通过对网络通信过程的精细化分层,提供标准化的协议和接口,确保各层的功能独立、模块化,以便于开发和互操作性。OSI模型希望实现全球范围内网络系统的互联,因此在理论上设计了七个层次,涵盖了从物理传输到应用程序的所有方面。
尽管OSI模型在理论上非常完善,但TCP/IP协议已经在互联网中广泛应用,成为事实上的标准,因此OSI模型未能成功推行。相比之下,TCP/IP协议栈的实现更为简单实用,符合当时互联网快速发展的需求。这种标准化滞后导致了OSI模型的推行失败。
虽然OSI七层模型在理论上非常系统和全面,但它在实践中的推行却遇到了很多问题,导致它未能成为主流标准,原因包括:
- 复杂性过高:七层模型在实际实现中显得过于复杂,尤其是会话层和表示层的功能往往在应用层被一并实现,导致理论与实际应用脱节。
- 标准化滞后:在OSI模型被提出时,TCP/IP协议已经在互联网上得到了广泛的应用,成为事实上的标准。因此,OSI模型即使有理论上的优势,但在时间上却未能抢占先机。
- 实用性不强:OSI模型中的某些功能(如会话层的会话管理和表示层的数据格式化)在实际中很难独立实现,更多情况下这些功能被直接集成到应用层中,这使得模型的层次划分显得不够实用。

五层模型
是介于这两者之间的存在,通常被用于教育和基础概念的讲解。它简化了OSI模型,但比四层模型多了一些细节划分。五层模型中的层次是物理层、数据链路层、网络层、传输层和应用层,去掉了OSI模型中较为抽象的会话层和表示层,更符合人们理解网络通信的需求。

分层的本质:职责分离
分层的核心目的是职责上的拆分。分层让每一部分都只专注于解决自己的问题,提供清晰的接口和功能,从而简化了开发和维护工作。每一层只专注于和邻近层进行交互,而不需要关心其他层的具体实现。
当一个应用程序(例如浏览器)发送请求时,数据包的传输过程可以分为以下几个步骤:
- 应用层生成数据:应用层生成数据并附加目标IP地址和目标端口信息。
- 传输层分段并封装:传输层(如TCP)将数据分割成多个段并加上传输头部。
- 网络层选择路径并封装:根据目标IP地址选择合适的路径,并将数据封装成数据包。
- 网络接口层封装成帧并传输:数据包被传递给网络接口层,在该层中被封装成帧,添加MAC地址,最终通过物理层的介质(如以太网、电缆或Wi-Fi)传输出去。
- 路由器转发数据包:在传输过程中,数据包可能会经过多个路由器,每个路由器负责查看数据包的目标IP地址,并决定将其转发到哪个下一跳。
- 目标设备逐层解封装:目标设备接收到数据包后,逐层进行解封装,最终在应用层呈现给目标应用程序,例如Web服务器收到请求并做出响应。
职责分离体现在哪?
对于应用程序来说,它只需要生成数据包并附加目标IP地址和目标端口信息,然后交给传输层和网络层来处理。应用程序并不需要知道数据包如何被拆分、重组,也不关心中间经过多少路由设备。它只负责把数据交给传输层,传输层通过TCP/UDP进行封装,接着由网络层找到合适的路径,最终将数据传输到目标设备的对应端口上。因此,应用层只需要关注它的业务数据,传输的过程由下层协议来保证。
本质上,网络分层模型就是对网络系统的梳理和流程化,是经典的工程思维的体现。通过标准化的流程和接口,将一个极其复杂且不可控的工程问题拆分为若干个小问题,使每一部分都可以独立解决。这种分层的设计使得每一层只需要专注于自己的职责,通过标准化接口与其他层交互,减少了系统的复杂性并提高了开发的可维护性。
总结
只有真正了解网络发展的历史和分层模型想解决的问题,才能真正理解网络分层模型的意义。计算机网络是人类设计出来的一个非常精妙的系统,也是一个异常庞大的工程,里面很多结构的设计、处理是非常值得我们借鉴到日常工作里的。