F.9 网际互连
网际互连(internetworking)无疑是通信领域最重要的创新之一。它使独立且不兼容网络中的计算机,能够可靠、高效地通信。图 F.34 说明为何需要跨越不同网络:它展示从斯坦福大学向相距约 75 千米的加利福尼亚大学伯克利分校传送文件时,涉及的机器和网络。

网际互连的成本低得惊人。例如,发送电子邮件,远比从美国一海岸打电话到另一海岸、在答录机留言便宜;而它使用的长途通信线路与电话相同,这使成本改善更令人印象深刻。
实现网际互连的关键技术,是无需底层网络可靠、仍能提供可靠通信的软件标准。成功标准的根本原则是按层组织,各层负责整体通信任务的一部分。每台计算机、每个网络及交换机实现自己所属层的标准,并依赖其他部件履行责任。这些分层软件标准称为协议族或协议套件。它们让应用可用于任何互连,而无须应用程序员额外处理。图 F.35 概括了通信的层次模型。

最流行的网际互连标准是 TCP/IP,即传输控制协议/网际协议。这个协议族构成名称朴素的 Internet 的基础,将全世界数亿台计算机连接起来。由于广泛普及,即使在兼容网络之间本地通信,也会采用 TCP/IP。例如,网络文件系统 NFS 即使很可能只跨以太网这类同构 LAN 通信,也使用 IP。这里以 TCP/IP 为例,其他协议族思路类似;其历史见 F.13 节。
协议族的目标,是把责任按层次划分,每层向上层提供所需服务,从而简化标准。顶部为应用,底部为实际发送比特的物理通信介质。正如抽象数据类型屏蔽实现细节、简化程序员工作一样,分层策略使标准更容易理解。
早期各种网络协议工作造成术语混乱,因此开放系统互连(OSI)提出一种模型,推广了把网络描述为一系列层次的方式,见图 F.36。虽然并非所有协议都严格遵循这一分层,各层名称仍广为使用,所以经常会听到简单的第三层交换机与智能第七层交换机之类讨论。
| 层号 | 层名称 | 主要功能 | 协议示例 | 网络部件 |
|---|---|---|---|---|
| 7 | 应用层 | 用于专为网络运行而编写的应用 | FTP、DNS、NFS、HTTP | 网关、智能交换机 |
| 6 | 表示层 | 在应用格式与网络格式之间双向转换 | 网关 | |
| 5 | 会话层 | 建立、维持并结束跨网络会话 | 命名管道、RPC | 网关 |
| 4 | 传输层 | 在会话层之下提供附加连接 | TCP | 网关 |
| 3 | 网络层 | 将逻辑网络地址和名称转换为物理地址,例如计算机名到 MAC 地址 | IP | 路由器、ATM 交换机 |
| 2 | 数据链路层 | 把分组转换成原始比特,在接收端把比特转换回分组 | Ethernet | 网桥、网络接口卡 |
| 1 | 物理层 | 在物理线缆上传输原始位流 | IEEE 802 | 集线器 |
协议族的关键在于:通信在逻辑上发生于发送端与接收端的同一协议层,但由更低层服务实现。这种通信方式称为对等通信(peer-to-peer)。可以用一个比喻说明:战场上将军 A 要给将军 B 发消息,写好后装进写有 B 名字的信封,交给一位上校,命令其送达。上校再套一层信封,写上 B 部属中对应上校的名字,交给少校;少校照做后交给上尉,上尉交给中尉,中尉交给军士。军士取过信封,再套上写有 B 所属部队某军士名字的信封,交给一名列兵。列兵借来摩托车,将大信封交给对方军士。送达后,信件沿指挥链向上传递,每人拆开写有自己名字的外层信封,把内部信封交给上级。在 B 看来,消息就是另一位将军发来的。两位将军都不知道谁参与了传送,也不知道信件怎样从一个师送到另一个师。
协议族与这一比喻比想象中更相似,见图 F.37。低层协议在原消息前添加头部,还可能添加尾部。更低一层再加自己的头部;如果消息超过该层限制,还会拆成更小消息。沿用前述比喻,就是将军的长信装不进一个信封时,要拆开装进多个。拆分及添加头尾的过程不断继续,直到物理传输介质,再把消息送到目的地。接收端各层检查本层消息,剥去自己的头尾,将其交给更高一层并重新拼合。针对一条消息的这种嵌套称为协议栈,反映添加和移除头尾时后进先出的性质。

正如比喻所暗示的,分层可能给消息传递增加相当大延迟。显然,减少层数是降低延迟的一条途径;但必须记住,协议族规定的是标准,并不强制实现方法。正如指令集体系结构有许多实现方式,协议族也一样。
以 TCP/IP 协议栈为例,假定最底层是以太网,其上为 Internet Protocol,即 IP 层。IP 分组的正式名称是数据报(datagram)。IP 将数据报路由到目的机器,中途可能经过许多机器或交换机。它尽力交付,却不保证数据报能送达、内容无误或顺序正确。IP 之上的 TCP 层则保证可靠、按序交付,并防止数据报损坏。
按图 F.37,假定某应用经以太网给另一机器发送消息,先从 TCP 开始。一次最多可发送 64 KB;数据可能大得多,因此 TCP 必须将其拆成较小段,并在到达后按正确顺序重组。TCP 为每个数据报添加图 F.38 的 20 字节头部,再交给 IP。物理层上方的 IP 也添加 20 字节头部。IP 向以太网提交的数据,采用图 F.30 的分组格式发送。正如图 F.37,TCP 分组位于 IP 数据报的数据部分之内。

图 F.38 中,IP header、TCP header 分别为 IP、TCP 头部,IP data、TCP data 为相应数据;Type 为类型,Length 为长度,Identifier 为标识符,Fragment 为分片,Time 为生存时间,Protocol 为协议,Header checksum 为头部校验和,Source、Destination 为源与目的地,Sequence number 为序号,Piggyback acknowledgment 为捎带确认,Flags 为标志,Window 为窗口,Checksum 为校验和,Urgent pointer 为紧急指针。图内 TCP 数据大小按原书标为 0–65,516 字节。
图 F.38 图注(续) 一种优化是,TCP 可先发送一串数据报,再等待发送更多数据的许可。无须等许可就能发送的数据报数量称为窗口;窗口字段说明,在本数据报已确认字节之后,还可以发送多少字节。TCP 根据 IP 交付的成功情况调整窗口:越可靠、越快,窗口越大。数据到达并获确认时,窗口向前滑动,因此称为滑动窗口协议。
TCP 的捎带确认字段是另一种优化。有些应用沿同一连接双向发送数据,专发一个只含确认的数据报很浪费。该字段让携带数据的数据报,同时确认先前传输,即将确认“捎带”在数据上。
TCP 紧急指针给出数据报中某个重要字节的地址,例如中断字符。它使应用可以越过数据,避免用户必须等此前全部数据处理完,软件才看到要求停止的字符。IP 标识符与分片字段允许中间机器将原数据报拆成多个较小数据报;每片都携带原数据报唯一标识符,分片字段说明各片的位置。生存时间字段使数据报经过规定最多中间交换机后,无论身处何处都被丢弃。知道数据报若能到达、最多经过多少跳,有助于简化协议软件。协议字段指明哪个上层协议发送了此 IP 数据报,本例为 TCP。版本 V 与类型字段允许网络采用不同版本的 IP 软件。显式版本号使软件能逐机平稳升级,无须关闭整个网络。原书最后指出,互联网协议第六版 IPv6 已得到广泛使用。