目录
1.2.2 分层实现中的多路复用, 解复用, 与封装
虽然通信协议栈指导实现了许多软件硬件 但本质上就是在做两件事:有序编解码与转发
- 有序编解码
发送端,首先把携带应用层信息的二进制序列,通过多个有序的编码逻辑,变为用于通信的二进制序列 用于通信的二进制序列,除了携带了高层应用的信息外,还通过层层编码,加入了通信需要用到的信息 然后通过物理层协议,把二进制序列变为用于传输的模拟信号,再加上抗噪声的高频率(调制)后通过电缆、光纤或无线电进行传播 接收端,先滤掉信号中的高频部分(解调),再通过采样,从模拟信号中得到逻辑二进制序列 最后,通过与编码相反的顺序与逻辑,经过多个解码过程,得到最初的高层信息 调制解调等模拟信号处理过程,在数学层面也是编解码过程,是可以用正反函数表达的 - 转发
从实际需求出发,应用间通信,不可能直连,中间会经过许多设备,如:交换机、路由器、网桥、卫星等 一条消息来到其中一个设备,如果不是目的地,那么就需要向下一跳转发 这些设备不是串联的,整个通信网络,就是一个图(图论中的图),由点(通信设备)和边(信道)组成 因此中间设备需要根据信号中的通信信息来决定把消息向连到自己身上的哪条边转发
分层架构的一个主要好处就是能够实现协议多路复用(protocol multiplexing) 这个形式的多路复用,允许多个不同的协议同时存在于同一个基础设施之上 同时也允许在不引起混淆的情况下,同时使用同一协议对象(如:连接)的多个实例
多路复用可以发生在不同的层 各层使用不同类型的标识符(identifier)来确定哪些协议或信息流属于同一个整体 例如,在链路层,大多数链路层技术(如:以太网与 Wi-Fi)的分组数据包中,都包含一个协议标识符(protocol identifier)字段 这个字段的值能够指示出链路层正在支撑哪个协议(如:IP 协议) 当某一层的一个对象(如:分组数据包、消息等等)被底层支撑时,称为被低一层封装(encapsulated) 这样的对象被称为协议数据单元(protocol data unit (PDU)),对于低一层来说,PDU 是不透明的(即低一层读不懂里边的内容) 这样就可以通过 N - 1 层的封装对第 N 层的多个对象实现多路复用 图 1-3 展示了这是如何工作的 在使用多路复用时,N - 1 层的标识符被用来决定当前对象在第 N 层由哪个协议或程序接收
理解:因为同一层也有多种不同的协议或程序(如:传输层的 TCP、UDP) 如果第 N 层有多于一种的协议在同时使用 那么 N - 1 层在解封数据包得到 N 层的 PDU 后,就不知道应该把这个对象交给第 N 层的具体哪个协议或程序进行处理了 这就是为什么各层对象中需要包含指明上层协议的标识符的原因
在图 1-3 中,根据不同的需求,每一层都有属于自己的消息对象(PDU)概念 例如一个 4 层(传输层)协议会产生一个分组数据包,可以称为一个 4 层 PDU 或传输层 PDU(transport PDU (TPDU)) 当某一层得到上一层的 PDU 时,通常会 “ 保证 ” 不去查看这个 PDU 的内容 这就是封装的本质,每一层都把上一层的数据当做是不透明的、不可解释的信息 最常见的情况是,某一层会用自己的报文头来扩展上一层的 PDU(如:TCP/IP),虽然某些协议也使用报文尾 对于发送者来说,报文头用来对数据进行多路复用,而对于接收者,可以依据解复用(demultiplexing (demux))标识对消息进行解复用 在 TCP/IP 网络中,这样的标识符通常为硬件地址、IP 地址、端口号 报文头中也包含了一些重要的状态信息,如:虚电路正在进行设置或已经完成设置 封装好的结果就是一个当前层的 PDU
注意:上边提到了两种标识符 1)在上层同时存在多种协议时,用于标识处理当前这个对象的上一层的具体协议是什么 2)一条物理信道上同时存在多个连接时,用于标识当前对象是属于哪个连接的(如:TCP 的 IP + 端口)
图 1-3 封装常常与分层结合使用 单纯的封装,负责携带某一层的 PDU,并且在低一层,把这个 PDU 当做不透明的(不可解释的)数据 每个发送者都要对数据进行逐层封装,而接收者需要对数据进行解封(封装逻辑的逆向操作) 大多数协议在封装时采用报文头(Header)的形式,少数也适用报文尾(Trailer)
如图 1-2 所示,分层架构的另一个重要特性是,并非所有的网络设备都需要实现所有的层 如图 1-4,在某些情况下,根据需求,某些设备只需要实现很少的几层
在图 1-4 中,一个很小的网络包含了两个终端系统,一个交换机与一个路由器 在图中,每个大写字母都代表了这一层上的某一种协议 每个设备都实现了一个不同的分层子集 左边的主机实现了 3 个与物理层相对应的链路层协议(D、E、F)与 3 个基于同一网络层协议的传输层协议(A、B、C) 终端主机实现了所有的层,交换机实现到了第 2 层(D、G),路由器实现到了第 3 层 路由器可以让不同类型的链路层网络互联,它需要为连入的所有类型的链路层网络实现对应的链路层协议
图 1-4 不同的网络设备实现了协议栈的不同子集 终端主机实现了所有层 路由器实现了传输层及以下各层,交换机实现了链路层及以下各层 实际情况常常与图中不同,因为路由器与交换机通常包含一些主机的能力(如:管理功能、配置功能) 因此需要实现所有层,虽然有些层很少用到
图 1-4 中的网络比较理想化 像路由器、交换机这样的设备,有时必须像一个主机那样工作,提供类似远程登录这样的服务 为此,除了转发数据必须的层以外,它们还必须实现传输层与应用层的协议
在图 1-4 中,我们可以通过特定的协议将终端系统(end system)(两边的主机)与中间系统(intermediate system)(路由器)区分开来 在传输层及以上的层,使用端到端(end-to-end)协议,在图 1-4 中,只有终端系统需要这些层 网络层提供了一个逐跳(hop-by-hop)协议,在两个终端系统与中间系统上使用 交换机或网桥一般不被认为是一个中间系统,因为它们没有使用互联网协议的地址格式来寻址,它们对于网络层协议来说很大程度上是透明的 从路由器与终端系统的角度来看,交换机或网桥本质上是不可见的
根据定义,一个路由器应该具备两个或两个以上的网络接口(因为路由器连接了两个或两个以上的网络) 一个拥有多个网络接口的系统被称为多宿主的(multihomed) 一个主机也可以是多宿主的,只要它显示地将数据包从一个网络接口转发到另一个接口 大多数的 TCP/IP 实现,允许一个多宿主主机通过配置实现路由器的功能 在这种情况下,我们既可以将系统称为主机(上边运行着像文件传输协议(File Transfer Protocol (FTP))[RFC0959] 或 Web 这样的应用程序) 根据上下文,也可以将其称为路由器(从一个网络向另一个网络转发数据包)
互联网的一个目标,就是对应用程序隐藏物理网络拓扑结构与低层协议的细节 当网络情况发生变化时,例如主机之间增加了 20 个路由器,多跨越了几种不同类型的物理连接 应用程序可以不做修改,继续正常运行(性能可能会受到些影响)
目录
|