协议分层与封装
复习
- 以太网:规定了有线局域网的帧格式与接入方式
- 交换机:通过转发表把帧定向送到目的端口
- 无线网络:无线接入点协调设备发送,应对隐藏节点
TL;DR
- 分层把通信问题拆成可协作的职责
- 封装让每层为数据加上自己的控制信息
- 每层只需遵守与邻层的接口,复杂系统才能演进
正文
一路走来,我们已经攒下了不少零件:信号、帧、MAC 地址、交换机、校验……它们各自解决一个小问题。可如果每个应用都要自己从头实现这一整套,那也太累了。
于是自然的想法是:把它们按职责分层,每层只做自己那一份事。
一层一层,各管一段
比较经典的分层大致是这样:
- 物理层负责传信号
- 链路层在本地交付帧
- 网络层负责跨网络寻路
- 传输层把数据交给正确的程序
- 应用层描述具体的服务
每层都对上层提供一组接口,对下层提出一些要求。它不关心里面具体怎么实现,只关心“我交给你,你能替我办成”。这正是我们反复用到的那句话:加一层,把复杂留给自己,把简单留给别人。
封装:每层都加个信封
分层怎么真正落地?靠封装(encapsulation)。
发送时,应用数据先被加上传输层首部,再加上网络层首部,最后加上链路层首部,像套娃一样一层层包起来;接收时再按相反的顺序,一层层拆开。
每一层的首部,都只装着这一层需要的信息:传输层关心“给哪个程序”,网络层关心“去哪个网络”,链路层关心“这一跳交给谁”。各取所需,互不越界。
为什么分层能扛住演进
分层的最大好处,是让变化被限制在局部。想换一种链路(比如从有线换成无线),只要链路层的接口不变,上层几乎不必改动;想加一种新应用,也不必重写底层的信号与帧。
这正是复杂网络还能持续演进的原因。后面我们会看到,网络层的地址怎么设计、路由怎么找、IP 和 MAC 又怎样配合——它们都建立在这套分层与封装的地基上。
思考题 1
为什么网络层数据每经过一跳,链路层帧通常要重新包装?
思考题 2
分层和封装,各自解决了什么问题?它们是一回事吗?
小结
知识点
- 分层隔开职责,封装携带每层所需的控制信息
- 每层只需遵守与邻层的接口
- 分层把变化限制在局部,便于系统演进
参考资料
- Wikipedia(zh):OSI模型:把网络通信划分为多层的参考模型
- Wikipedia(zh):网络协议:通信双方共同遵守的规则约定
思考题答案(仅供参考)
思考题 1
下一段链路可能使用不同介质和不同的 MAC 地址,旧的帧只适用于上一段本地交付。所以每经过一跳,链路层帧都要按当前链路重新包装,而网络层的数据包地址保持不变,负责端到端的方向。
思考题 2
不是一回事。分层解决的是“把大问题拆成小职责”,让各层独立;封装解决的是“每层的信息怎么安放”,让数据带着必要的控制信息逐层流转。分层是组织结构,封装是数据形态,两者配合才能让整套协议运转起来。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪