跳转到主要内容

F.9 网际互连

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

斯坦福至伯克利的跨网络连接
图 F.34 1995 年 mojave.stanford.edu 与 mammoth.berkeley.edu 之间建立的连接。FDDI 是 100 Mbit/s LAN,T1 是 1.5 Mbit/s 电信线路,T3 是 45 Mbit/s 电信线路。BARRNet 为 Bay Area Research Network,即湾区研究网络。注意,inr-111-cs2.Berkeley.edu 是有两个 Internet 地址的路由器,每端口一个。图中上、下部分别位于加利福尼亚州斯坦福和伯克利;Ethernet 为以太网,Internet 为互联网。

网际互连的成本低得惊人。例如,发送电子邮件,远比从美国一海岸打电话到另一海岸、在答录机留言便宜;而它使用的长途通信线路与电话相同,这使成本改善更令人印象深刻。

实现网际互连的关键技术,是无需底层网络可靠、仍能提供可靠通信的软件标准。成功标准的根本原则是按层组织,各层负责整体通信任务的一部分。每台计算机、每个网络及交换机实现自己所属层的标准,并依赖其他部件履行责任。这些分层软件标准称为协议族或协议套件。它们让应用可用于任何互连,而无须应用程序员额外处理。图 F.35 概括了通信的层次模型。

网际互连在应用与网络之间的作用
图 F.35 网际互连的作用。宽度表示各层项目数量的相对多少。上方 Applications 为应用,中间 Internetworking 为网际互连,下方 Networks 为网络。

最流行的网际互连标准是 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集线器
图 F.36 OSI 模型各层。按原书表述翻译,依据 www.geocities.com/SiliconValley/Monitor/3131/ne/osimodel.html。

协议族的关键在于:通信在逻辑上发生于发送端与接收端的同一协议层,但由更低层服务实现。这种通信方式称为对等通信(peer-to-peer)。可以用一个比喻说明:战场上将军 A 要给将军 B 发消息,写好后装进写有 B 名字的信封,交给一位上校,命令其送达。上校再套一层信封,写上 B 部属中对应上校的名字,交给少校;少校照做后交给上尉,上尉交给中尉,中尉交给军士。军士取过信封,再套上写有 B 所属部队某军士名字的信封,交给一名列兵。列兵借来摩托车,将大信封交给对方军士。送达后,信件沿指挥链向上传递,每人拆开写有自己名字的外层信封,把内部信封交给上级。在 B 看来,消息就是另一位将军发来的。两位将军都不知道谁参与了传送,也不知道信件怎样从一个师送到另一个师。

协议族与这一比喻比想象中更相似,见图 F.37。低层协议在原消息前添加头部,还可能添加尾部。更低一层再加自己的头部;如果消息超过该层限制,还会拆成更小消息。沿用前述比喻,就是将军的长信装不进一个信封时,要拆开装进多个。拆分及添加头尾的过程不断继续,直到物理传输介质,再把消息送到目的地。接收端各层检查本层消息,剥去自己的头尾,将其交给更高一层并重新拼合。针对一条消息的这种嵌套称为协议栈,反映添加和移除头尾时后进先出的性质。

两层协议栈中的逻辑通信与实际数据流
图 F.37 一个通用的两层协议栈。通信在逻辑上对等进行:各发送层添加供对等层使用的头部和尾部,各接收层将它们移除。每层向上层提供服务,屏蔽不必要细节。Message 为消息,H、T 为头部、尾部,Logical 为逻辑通信,Actual 为实际传送路径。

正如比喻所暗示的,分层可能给消息传递增加相当大延迟。显然,减少层数是降低延迟的一条途径;但必须记住,协议族规定的是标准,并不强制实现方法。正如指令集体系结构有许多实现方式,协议族也一样。

以 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 数据报的数据部分之内。

IP 与 TCP 头部的封装关系
图 F.38 IP 与 TCP 的头部。图宽 32 位,两者标准头部均为 20 字节,也可为不常传输的信息选配更长头部。两者都有头部长度 L 以及源、目的字段。IP 用单独长度字段表示整个数据报长度,TCP 则用按字节计的序号,将原文所述的数据报长度与序号联系起来。TCP 校验和确保数据报未损坏,序号确保到达后正确排序;IP 校验和只保护头部,因为其余部分已有 TCP 保护。

图 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 已得到广泛使用。

表格阅读