1. 为什么我坚持用“寄快递”来讲网络模型
1.1 网络模型到底在解决什么问题
“网络模型”这四个字,是很多刚学计算机网络的同学的第一道坎。OSI七层模型、TCP/IP四层模型,光是把协议名背下来就够让人头大,更别提理解每一层到底为什么要存在。我带过不少刚入行的同事和实习生,发现大家卡住的点往往不是背不住协议名,而是没有建立起一个可以安放这些概念的“现实骨架”。
网络模型要解决的核心问题,用一句话说就是:让两台设备之间能可靠地、高效地传递数据。但“传递数据”这件事拆开以后非常复杂。数据从一台机器的应用程序出发,要经历打包、寻址、分段、路由选择、链路传输、差错校验等一堆过程,如果全部揉成一团交给一个模块去做,那这个模块会大到无法维护,也无法复用。
所以网络模型选择了“分层”的思路。每一层只管自己的职责,层与层之间只通过标准化接口对接。这就好比一个大型企业,市场部、产品部、技术部、客服部各管一段,业务从市场部流转到客服部,每个部门只做自己专业的事,不需要知道其他部门内部怎么运作。分层带来的直接好处至少有三个:第一,单独某层升级替换时,不影响其他层;第二,出现故障时可以快速缩小排查范围;第三,不同厂商的设备只要遵守同一层协议就能互通。实际上,互联网能长成今天这个规模,很大程度上就归功于这套分层的“松耦合”设计。
1.2 寄快递和网络传输,本质上是一套“接力+分工”系统
我之所以坚持用寄快递来类比,是因为快递流程和网络分层实在太像了。你寄一个包裹,从“准备好物品”这个动作开始,到对方签收为止,中间经过了:装箱、贴运单、快递员取件、送到分拣中心、分拣、跨城运输、到达目的地分拣中心、派送站、快递员送货、收件人验货签收。每一步都有一个非常明确的执行者:你是应用层,纸箱是某种“包装层”的体现,快递单是传输层信息,分拣中心是网络层路由节点,快递车和道路是物理层通道,末端配送是数据链路层的点对
