本节书摘来自异步社区《CCNA路由和交换(200-120)学习指南》一书中的第2章,第2.3节封装和拆封,作者【美】Richard Deal,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.3 封装和拆封
要深入探索信息在计算机之间的传输机制,必须熟悉用于对传输的数据进行描述的术语。OSI参考模型的很多层都使用独特的术语来描述传输的数据。数据从高层向低层传输时,每层都会添加额外的信息——通常是报头,还可能有报尾。这个过程被称为封装。数据链路层添加报头和报尾,因此在这里使用术语封装最合适;然而,高层协议添加报头,有的也添加报尾。添加报头和报尾都被称为对上层信息和数据进行封装。
通常,使用术语协议数据单元(PDU)来描述数据及其开销。表2.3列出了OSI参考模型各层使用的术语。例如,数据从会话层传递到传输层时,传输层将其封装到数据段中。TCP/IP协议栈中的TCP和UDP添加报头,但不添加报尾。PDU向下传递时,每层都给上层PDU添加报头,还可能添加报尾。
请牢记表2.3列出的术语,另外,计算机使用二进制处理数据。
到达物理层后,将根据使用的物理介质类型将数据链路层帧的各位转换为电平、光信号、无线电波或其他信号。目标设备收到信息后执行相反的过程——对信息进行拆封:在信息沿OSI参考模型向上传递时,每层都将报头和报尾剥除。
图2.5通过一个示例说明了数据沿OSI参考模型向下和向上传递时的封装和拆封过程。在这个示例中,应用层、表示层和会话层创建了数据。当数据逐层向下传递时,每层都添加了报头(还可能添加报尾,大多数第2层协议都会这样做)。
接下来的几小节将帮助您加深了解信息在计算机之间的传输过程。下一小节将深入介绍如下过程:封装信息、将其沿协议栈向下传递并放到前往目的地的线缆上;随后的一小节介绍相反的过程:在目的地将信息拆封,并在应用层将其交给正确的应用程序。再下一小节介绍更复杂的情形:信息从源设备传输到目标设备的过程中涉及网桥、路由器和集线器的情形。
2.3.1 沿协议栈向下传递
本节讨论信息沿计算机的协议栈向下传递时,如何对其进行处理的基本机制。图2.5说明了PC-A向PC-B发送数据的过程。这个示例假定数据链路层为以太网,而物理层为铜质电缆。
在PC-A上发生的第一件事情是,坐在计算机前的用户创建了一些信息(这些信息被称为数据),再将其发送到另一个地方(PC-B)。数据包括用户的实际输入(应用层)以及格式设置信息(表示层)。在会话层,应用程序或操作系统判断数据的目的地是本地(如硬盘)还是远程的。在这个示例中,用户将信息发送给PC-B(假定用户是在执行Telnet连接)。
会话层确定目的地为远程的后,让传输层传输信息。Telnet连接使用TCP/IP并在传输层使用可靠连接(TCP),而TCP将来自高层的数据封装到数据段中。您将在第8章看到,TCP只添加报头。数据段包含源端口号和目标端口号等信息;其中的源端口为编号大于1023且当前未被PC-A使用的端口;而目标端口为著名端口23,目标设备看到这个端口号后,将把数据交给Telnet应用程序。
实践经验
根据RFC标准的规定,TCP或UDP源端口号应大于49151,但并非所有操作系统都严格地遵循了这个标准,因此在很多情况下,源端口号只是大于1023。
传输层将数据段向下传递给网络层,后者将其封装到数据包中。数据包只添加了报头,其中包含第3层逻辑地址信息(源地址和目标地址),还包含其他信息,如创建信息的上层协议。在这个示例中,信息是由TCP创建的,因此数据包报头指出了这一点;另外,PC-A在数据包中将源地址指定为自己的IP地址,并将目标地址指定为PC-B的IP地址。这些信息让目标设备的网络层能够做出如下判断:数据包是否是发送给自己的;应将封装的数据段交给哪个上层协议进程进行处理。在TCP/IP协议栈中,术语数据包和数据报是同义词,它们都可用于描述网络层PDU。在第5章您将看到,TCP/IP协议栈包含很多协议:ARP、TCP、UDP、ICMP、OSPF、EIGRP等。
接下来,网络层将数据包向下传递给数据链路层,后者将数据包封装到帧中:添加报头和报尾。在这个示例中,使用的数据链路层介质为第3章将更深入地讨论的以太网。以太网帧头包含的重要字段包括源MAC地址和目标MAC地址,还有一个校验和序列(FCS)值,它让目标设备能够确定收到的帧是否有效。在这个示例中,PC-A将其MAC地址加入源MAC地址字段中,并将PC-B的MAC地址加入目标MAC地址字段中。FCS的用途将在第3章更详细地讨论。
接下来,数据链路层帧被向下传递给物理层。此时别忘了PDU是我们给数据强加的一个概念,旨在方便理解以及帮助将信息传输到目的地,而在计算机看来,数据不过是一串二进制位(1和0)。物理层根据使用的线缆(连接)类型将这些位转换为物理信号;在这个示例中,线缆为铜质电缆,因此物理层将位转换为电平:用一种电平表示位值1,并用另一种电平表示位值0。
2.3.2 沿协议栈向上传递
为简单起见,假设PC-A和PC-B位于同一条铜质电缆上。目标设备收到物理层信号后,物理层将电平转换为二进制表示,并将位值向上传递给数据链路层。
数据链路层将位值重组为原来的数据链路帧(以太网)。在MAC层,NIC检查FCS以核实帧是有效的,它还查看目标MAC地址以核实以太网帧是发送给它的。如果目标MAC地址与自己的MAC地址不同,且不是组播或广播地址,NIC将把帧丢弃;否则NIC将对帧进行处理。在这个示例中,NIC发现封装的数据包是TCP/IP数据包,因此剥除(拆封)以太网帧信息,并将数据包交给网络层的TCP/IP协议栈。如果封装的是IPX数据包,NIC将把它交给网络层的IPX协议栈。
接下来,网络层查看数据包报头中的逻辑目标地址。如果逻辑目标地址与其地址不同,且不是组播或广播地址,网络层将把数据包丢弃。如果逻辑地址相同,目标设备将查看数据包报头中的协议信息,以确定应将数据包交给哪个协议。在这个示例中,逻辑地址相同且指定的协议为TCP,因此网络层剥除数据包信息,并将封装的数据段交给传输层的TCP协议。
收到数据段后,传输层协议可能执行很多功能,这取决于连接是可靠的还是不可靠的。这里重点讨论传输层的多路复用功能。在这个示例中,传输层查看数据段报头中的目标端口号。在这个示例中,用户在PC-A上使用Telnet向PC-B传输信息,因此目标端口号为23。传输层看到这个端口号后,知道需要将封装的数据交给Telnet应用程序。如果PC-B不支持Telnet,传输层将把数据段丢弃;否则,传输层将剥除数据段信息,并将封装的数据交给Telnet应用程序。如果这是新连接请求,操作系统将启动Telnet进程。
请注意,两台设备的对应层之间发生了逻辑通信;例如,PC-A和PC-B的传输层之间发生了逻辑通信,PC-A和PC-B的网络层之间和数据链路层之间亦如此。
考试要点
务必熟悉在设备之间传输数据时,数据沿协议栈向下传递(封装)和向上传递(拆封)的过程。
2.3.3 分层和通信
从前面介绍的封装和拆封过程可知,为收发信息,源设备和目标设备都需要执行大量的处理。如果源设备和目标设备位于不同的网段,而这些网段之间还有集线器、交换机和路由器等网络设备,情况将更加复杂。图2.6提供了一个这样的示例。
在这个示例中,PC-A想向PC-B发送数据。请注意,每台设备都需要在特定层处理信息,例如,PC-A将信息放到线缆上后,与PC-A相连的交换机需要对这些信息进行处理。本章前面说过,交换机运行在OSI参考模型的第2层。路由器根据第3层目标地址选择路径,而交换机根据帧中的第2层目标MAC地址选择路径。因此,交换机的物理层必须将物理层信号转换为位,将它们向上传递给数据链路层,并在这里重组为帧。交换机查看目标MAC地址,做出交换决策并确定需要将帧从哪个端口转发出去。接下来,它将帧向下传递给物理层,后者将帧的位转换为物理层信号。交换将在第4章讨论。
在物理层,遇到的下一台设备是路由器。本章前面说过,路由器运行在OSI参考模型的第3层。这台路由器首先在物理层将物理层信号转换为位;这些位被向上传递给数据链路层,并在这里被重组为帧。接下来,路由器查看帧中的目标MAC地址,如果该MAC地址与它自己的MAC地址不同,路由器将把帧丢弃;如果相同,路由器将剥除帧信息,并将数据包向上传递给网络层。
在网络层,路由器的功能之一是将数据包路由到目的地。为此,路由器查看数据包中的目标逻辑地址,并提取其中的网络号。然后,路由器将该网络号与其路由选择表中的条目进行比较。如果没有找到匹配的条目,路由器就将数据包丢弃;如果找到了,就将数据包从出站接口(路由选择表指定的本地接口)转发出去。
为转发数据包,路由器将其向下传递给数据链路层,后者使用正确的数据链路层帧格式封装它。例如,如果是以太网帧,源MAC地址将为路由器的MAC地址,而目标MAC地址将为PC-B的MAC地址。接下来,数据链路层将帧向下传递给物理层,后者再将位转换为物理层信号。
考试要点
向位于不同网段中的设备发送数据时,第2层帧的源MAC地址为源设备的MAC地址,目标MAC地址为默认网关的MAC地址;第3层数据包的源地址为源设备的第3层地址,但目标地址不是默认网关的第3层地址,而是实际目的地的第3层地址。别忘了,第2层地址用于在位于同一个物理或逻辑网段/网络内的设备之间通信,而第3层地址用于在位于不同网络(网段)的设备之间通信。换句话说,数据从一条链路移到另一条链路时,MAC地址可能发生变化,但第3层逻辑地址不会。
请注意,路由器用于分隔物理或逻辑网段,而网桥和交换机没有这样的功能。因此,向PC-B发送数据时,PC-A使用路由器的MAC(第2层)地址将数据移到当前网段的出口,同时使用PC-B的逻辑(第3层)地址来告诉路由器,数据不是发送给它的,而是发送给另一个网段中的一台设备的。这个过程将在第3和9章更详细地讨论。
收到这些物理层信号的下一台设备是集线器。本章前面说过,集线器和转发器运行在物理层。集线器其实就是多端口转发器:转发收到的所有物理层信号。因此,集线器在一个接口上收到信号后,将把它转发到其他所有接口。这些信号随后被PC-B收到,它将像前一节介绍的那样沿协议栈向上传递这些信息。
要更详细地了解本节介绍的过程,请参阅第9章,该章讨论了如何使用TCP/IP在位于不同以太网网段中的设备之间进行通信。
考试要求
OSI参考模型简介
请务必熟悉OSI参考模型及其开发初衷。
OSI参考模型的各层
一定要知道各层的名称和顺序:应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。还一定要知道运行在各层的设备(路由器运行在网络层,交换机运行在数据链路层,集线器运行在物理层)以及这些设备的一些重要功能。例如,路由器在网段之间交换数据包,禁止广播继续传播,可根据第3层逻辑地址进行过滤,确定前往目标逻辑网络的路径。您还必须能够指出运行在各层的协议;例如,Telnet和FTP运行在应用层。
一定要特别熟悉传输层、网络层和数据链路层及其功能。例如,传输层建立、维护和拆除连接;它可提供可靠或不可靠的数据传输;它将数据划分为更小、更容易处理的数据段;它可通过就绪/未就绪信号或使用序列号和确认的窗口技术来控制流量,从而避免拥塞;它使用缓冲区来存储到来的数据,并使用端口号和第3层地址来多路复用连接。TCP和UDP都是运行在传输层的协议。
网络层定义逻辑地址,通过使用路由器上的路由选择表来找出前往目标逻辑地址的最佳路径,并将不同类型的第2层链路连接起来。别忘了路由器提供的优点,如通过使用层次型网络设计和路由选择协议提供的可扩展性、限制广播的传播、智能地选择路径、QoS和流量过滤。
数据链路层定义了设备如何连接到第2层介质,以及设备如何使用物理地址(如以太网中的MAC地址)彼此通信。务必要知道MAC地址是什么样的:它长48位,用十六进制表示。
封装和拆封
务必熟悉OSI参考模型各层使用的PDU术语:数据段(传输层)、数据包或数据报(网络层)、帧(数据链路层)和位(物理层)。另外,务必要能够描述设备在各层是如何彼此通信的:在从信源和目的地的各种设备之间,使用什么样的第2 层和第3层地址。别忘了,数据从一条链路传输到另一条链路时,MAC地址可能发生变化,但第3层地址(如TCP/IP地址)通常不变。