1.2 设计与实现
虽然一个协议架构会为实现方法提出建议,但不会做硬性规定
我们将协议架构与实现架构(implementation architecture)区分开来
实现架构定义了如何将协议架构中的概念在现实中实现,通常是以软件的形式呈现出来
许多负责实现 ARPANET 协议的工程师都对操作系统的软件结构非常熟悉
另外,一篇描述了 “ THE ” 多道程序设计(multiprogramming)系统 [D68] 的论文很有影响力
这篇论文提倡用分层结构来确保一个大型软件实现的逻辑完整性与正确性
这些因素都影响了网络协议的设计哲学,至使网络协议的实现(与设计)包含多个层次
这种方法现在被称为分层(layering),是实现协议栈经常使用的方法
1.2.1 分层
在分层的设计中,不同层负责通信中的不同方面
开发者可以相对独立地发展系统中的不同部分,通常由不同领域的专家负责自己擅长的部分
在协议分层领域,最常提到的概念都基于一个被称为开放系统互联(Open Systems Interconnection(OSI))模型 [Z80] 的标准
该标准由国际标准化组织(International Organization for Standardization (ISO))定义
图 1-2 展示了标准的 OSI 分层
互联网的分层模型比 OSI 模型稍微简单一点,见 1.3 节
虽然 OSI 模型认为 7 个逻辑层是将 “ 协议架构的实现 ” 模块化的理想方案,但 TCP/IP 架构通常采用 5 个逻辑层
关于 OSI 模型以及之前的 ARPANET 模型(流行于 20 世纪 70 年代早期)的优点与不足,有过许多的争论
虽然可以说 TCP/IP 取得了最终的 “ 胜利 ”
但 ISO 协议栈(ISO 根据 OSI 模型标准化的协议集合)中的许多思想,甚至是整个协议被 TCP/IP 采用(如:IS-IS [RFC3787])
图 1-2
ISO 指定的标准 7 层 OSI 模型
如图 1-2 所示,从下往上:
- 物理层(Physical)
为数字信息穿越通信介质(如电话线、光纤)定义了方法
以太网和无线局域网(Wi-Fi)标准位于这一层 - 链路层或数据链路层(Link 或 Data-Link)
为共享同一介质的邻居建立连接的协议与方法
一些数据链路层网络(如:DSL)只连接两个邻居
另一些则允许多个邻居访问同一个共享网络,被称为多路访问(multi-access)网络
Wi-Fi 与以太网就属于多路访问链路层网络
一些特定的协议负责协调哪些主机在给定的时间访问共享媒介,见第 3 章 - 网络层(Network 或 Internetwork)
像 TCP/IP 这样的分组网络,提供了一种互操作性的分组数据包格式,可以利用不同类型的链路层网络进行连接通信
网络层协议还包括主机地址模式与决定数据包的下一跳向哪里发送的路由算法
三层以上的部分,所有协议都由终端主机来实现(至少理论中是这样的),包括传输层(transport)
- 传输层(Transport)
提供了一种会话间的数据流,根据其提供的不同类型的服务,有可能会比较复杂(如:在可能丢失数据的分组网络上完成可靠交付) - 会话层(Session)
表示应用间持续存在的交互(如:在一次 Web 登录会话中使用 Web 浏览器的 “ cookies ”)
会话层协议还可能提供功能:开启连接、重新连接、设置检查点(checkpointing)(保存当前已完成的工作) - 表示层(Presentation)
负责信息的格式转换与标准编码
互联网协议中并没有正式的会话层或表示层,应用程序会在需要的时候自己实现这些功能
- 应用层(Application)
应用程序通常会实现自己的应用层协议