注:本文章为华为HCIA-Datacom学习指南的整理,作者为王达老师,感兴趣的朋友可以去看看
1.1 计算机网络的基本组成
计算机网络是以计算机终端、计算机网络通信设备为主体的网络,旨在实现各计算机终端间信息或资源共享。如今已实现三网融合,终端设备包括计算机及智能手机、平板电脑、网络电视等。
计算机网络覆盖范围大小不一,最大为覆盖全球的Internet,最小可能是两台计算机互连。无论规模如何,均由硬件设备和软件系统构成,分为"计算机网络硬件系统"和"计算机网络软件系统"两部分。
【说明】随着网络虚拟化技术兴起,可通过VirtualBox、VMWare等虚拟机软件,在一台物理计算机中模拟多个独立计算机系统,组成虚拟计算机网络。
1.1.1 计算机网络硬件系统
计算机网络硬件系统是指计算机网络中用于连接和通信的物理设施,包括计算机终端设备、网络通信设备、传输介质三部分。
(1)计算机终端设备
组建计算机网络是为计算机终端用户的网络通信提供平台,计算机终端设备是用户控制和使用的各类终端,如PC、计算机服务器、笔记本电脑、平板电脑、智能手机等。
(2)网络通信设备
网络通信设备用于构建"通信子网",与通信线路(传输介质)共同构成计算机网络骨干。最简单网络可通过两台终端计算机用串/并口电缆直接连接或利用虚拟技术在一台计算机上构建虚拟网络,但非主流。
在计算机网络系统中,网络通信设备通常指除计算机终端以外的设备,包括:安装在计算机、服务器上的网卡(有线、无线);连接计算机的交换机;连接不同网络的网关、路由器;提供安全防护的防火墙、入侵检测系统(IDS)、入侵防御系统(IPS);用于远程广域网连接的各种Modem(调制解调器)、宽带接入服务器、光端机(光纤收发器)等。
(3)传输介质
传输介质用于在计算机网络中构建数据通信通道,是传输数据的载体,没有它网络信号、数据无法传输。
传输介质可以是有形的,如同轴电缆、双绞线、光缆等,如图1-1所示,以及串口电缆等,也有无形的,各种无线网络使用的传输介质是无线电磁波,常用于卫星通信、WLAN通信、移动通信等。

1.1.2 计算机网络软件系统
仅有硬件设备不能组成计算机网络,还必须有相应的软件系统支持,否则就成了裸机或者裸网络了。网络通信软件可帮助用户实现网络通信连接、应用等各方面功能。它可分为三大类别。
(1)网络操作系统软件
网络操作系统软件是各种网络设备必须要安装的基础平台软件,如在用户计算机、各种服务器上安装的,支持网络功能的 Windows、Linux、UNIX 等操作系统;安装在交换机、路由器、防火墙等设备上的网络操作系统,如安装在 Cisco 设备上的 IOS、IOS XE 等系统;安装在华为设备上的 VRP(Versatile Routing Platform,通用路由平台)系统等。
(2)网络应用软件
计算机网络软件还包括要实现某项网络应用的软件,像即时通信类软件(如 QQ、微信等)、文件传输类软件、电子邮件通信类软件(如 Outlook、Foxmail、Gmail 等)、网络或应用服务器软件、浏览器访问软件(如 IE、Chrome 等浏览器)等。
(3)通信协议
计算机网络软件系统除了以上计算机网络软件之外,还包括独立或者内嵌于操作系统中的网络通信协议,如 TCP(Transmission Control Protocol,传输控制协议)/IP(Internet Protocol,网际互连协议)协议簇、IEEE 802 协议簇等,网络设备中的 VLAN(Virtual Area Network,虚拟局域网)、STP(Spanning Tree Protocol,生成树协议)、RIP(Routing Information Protocol,路由信息协议)、OSPF(Open Shortest Path First,开放式最短路径优先)、BGP(Border Gateway Protocol,边界网关协议),拨号通信的 PPP(Point to Point Protocol,点对点协议)、PPPoE(Point - to - Point Protocol Over Ethernet,以太网上的点对点协议)协议,VPN(Virtual Private Network,虚拟专用网络)通信的 IPSec(Internet Protocol Security,互联网安全协议)、PPTP(Point - to - Point Tunneling Protocol,点对点隧道协议)、GRE(Generic Routing Encapsulation,通用路由封装)、L2TP(Layer 2 Tunneling Protocol,第二层隧道协议)等。
1.2 计算机网络拓扑结构
拓扑是用来研究与大小、距离无关的几何图形特性的。"网络拓扑结构"是由网络节点设备和传输介质通过物理连接所构成的逻辑结构图。网络拓扑结构从逻辑上表示出网络服务器、工作站以及各网络设备的网络部署位置、相互连接方式和服务关系。
不同的计算机网络环境中,可能要采用不同的拓扑结构。我们在选择拓扑结构时主要考虑的因素有:通信协议类型;不同设备所担当的角色(或者设备间服务的关系);各节点设备工作性能要求、重新配置的难易程度、维护的相对难易程度以及通信介质发生故障时,受到影响的设备的情况。
常见的计算机网络拓扑结构有:星形网络、总线形网络、环形网络、树形网络、网状网络,如图1-2所示(图中的小圆圈代表一个节点设备,如交换机、路由器等,也可以是用户终端)。其各自主要的特点、优缺点见表1-1。

| 拓扑结构类型 | 主要特点 | 主要优点 | 主要缺点 |
|---|---|---|---|
| 星形网络 | 所有节点通过一个中心节点(如交换机、路由器等)连接在一起,主要是以太网络 | 容易扩展,节点移动方便;易于维护;传输速率快 | 中心节点负荷重,且出现故障时会影响到整个网络的通信;布线比较复杂 |
| 总线形网络 | 所有节点通过一条总线(如同轴电缆)连接在一起,主要是令牌总线网络,以太网中也可实现 | 安装简便,节省线缆;维护较容易,某一节点的故障一般不会影响到整个网络的通信 | 总线故障会影响到整个网络的通信;某一节点发出的信息可以被其他节点收到,安全性低;故障诊断难;不易大规模扩展 |
| 环形网络 | 所有节点连成一个封闭的环形,主要是令牌环网 | 网络组建简单;节省线缆,成本低 | 不易扩展;连接用户少;维护困难 |
| 树形网络 | 一种层次化的星形网络,是当前以太局域网的主要结构类型 | 连接多个星形网络,易于扩充网络规模,同时具备星形网络的其他优点 | 层级越高的节点,其故障导致的网络问题越严重,同时具备星形网络的其他缺点 |
| 网状网络 | 各网络设备彼此互连,有"全网状网络"和"半网状网络"之分,主要应用于广域骨干网中 | 可靠性高,全网状网络具有较高的可靠性 | 组网复杂、成本高、维护难 |
1.3 通信模式
在数据通信中,通信模式(或者双工模式)包括"单工通信模式""半双工通信模式""全双工通信模式"3 种。同一物理链路上两台设备工作的双工模式必须保持一致。
1.3.1 单工通信模式
图 1-3(a)表示单工通信模式。在单工通信中,数据只能向一个方向传输,任何时候都不能改变数据的传输方向。

"单工"是指永远只能向一个方向传输数据,数据发送方和接收方固定。键盘输入是单工模式,因其只需发送数据,无需接收数据。
单工通信模式效率低,一般不采用,但现实中有时有需求,如仅允许客户端向服务器传输数据、不允许服务器向客户端发送数据时,可通过配置模拟该通信模式。
1.3.2 半双工通信模式
图1 - 3(b)表示半双工通信模式。在半双工通信模式中,数据是可以双向传输的,但必须交替进行,即同一时刻只能向一个方向传输,在不同时刻可以进行另一个方向的数据传输。
半双工通信模式相当于可双向行驶的单车道,同一时刻只允许一个方向的汽车通过,只有当另一方向没有车过来的时候,才能从自己一方发车,如图1 - 4所示。

与"单工"不同,半双工通信模式可双向数据通信,但两个方向不能同时进行,如对讲机。共享模式网络只能是半双工,像采用同轴电缆的10Base - 5网络需用CSMA/CD机制避免介质访问冲突。
1.3.3全双工通信模式
图1 - 3(c)表示该模式,信号可在任何时刻双向传输,同一条电缆至少有两条子信道用于不同方向数据同时传输。全双工通信模式如同现实中的"双向双车道",能提高汽车通过效率。对于数据通信,其提高了数据传输速率,最高可达线路带宽两倍,如100Mbit/s的全双工线路,数据传输速率最高可达200Mbit/s。

在千兆或万兆以太网中,为了能实现其标称的传输速率,都是采用全双工通信模式的。在全双工通信模式下,因为通信双方可以双向同时通信,不会产生介质访问冲突,所以无须采用CSMA/CD机制。
1.4 冲突域及冲突避免机制
所谓"冲突域"就是可能发生介质访问冲突的主机范围,是连接在同一共享介质上的所有节点的集合。同一冲突域内的各节点共享同一带宽,即一个节点发送的报文,域内其余节点均可接收到。
早期由集线器集中连接的网络,所有用户主机之间的通信都共享同一传输通道;在采用同轴电缆作为传输介质的10Base - 5网络中,所有用户主机均连接在同一条同轴电缆上,这些网络都被称为共享式网络。在共享式网络中,因为不同用户主机通信时需要共享使用至少一段传输通道或传输介质,所以多用户主机同时发送数据时会产生介质访问冲突的问题,冲突域就等于整个网络中的主机。
目前,集线器设备已不再使用,同轴电缆也不再使用,取而代之的是转发效率更高的交换机设备,这类以双绞线或光纤作为传输介质的网络被称为"交换式网络"。在交换式网络中,冲突域的范围缩小至交换机每个端口所连接的物理网段范围,因为一条物理链路下所连接的所有主机与网络中其他设备通信时都必须共享这一物理介质。
## 【注意】如果一个端口只连接一台设备,且支持全双工通信模式的情形下,不会发生介质访问冲突。
避免介质访问冲突的方法一般是采用CSMA/CD机制。CSMA/CD的介质访问控制原理包含4个处理内容,它们是监听、发送、检测、冲突处理,可以用以下几句话来概括:
① 先听后说("听"是指"监听","说"是指发送数据),边听边说;
② 一旦冲突,立即停说;
③ 等待时机,然后再说。
以上基本流程如图1 - 6所示,图中各步具体解释如下。
① 当一个站点想要发送数据的时候,它首先要检测传输介质上是否有其他站点正在传输,即监听介质是否空闲(也就是前面所说的"先听")。
② 如果介质忙,则继续监听,直到监听到介质状态为空闲。如果监听到介质状态为空闲,站点就马上发送数据(也就是前面所说的"后说")。

③ 在发送数据的同时,站点继续监听介质状态(也就是前面所说的"边听边说"),确定没有其他站点在同时传输数据,那么继续传输数据。有可能两个或多个站点同时检测到介质空闲,然后几乎在同一时刻开始传输数据。如果两个或多个站点同时发送数据,就会产生冲突;若无冲突则继续发送直到发完全部数据。
④ 若检测到有冲突(会导致信号不稳定),则立即停止发送数据(也就是前面所说的"一旦冲突,立即停说"),并发送一连串用于加强冲突的JAM(阻塞)信号,以便使用同一介质传输的其他站点都知道线路上发生了冲突,从而停止发送数据。
⑤ 本站点等待一个预定的随机时间(也就是前面所说的"等待时机"),然后在介质状态为空闲时,再重新发送数据(也就是前面所说的"然后再说")。
1.5 计算机网络体系结构
为了便于各厂商进行计算机网络软、硬件开发,开发人员需要有一个通用的计算机网络体系标准,于是计算机网络体系结构(也称计算机网络参考模型)的开发就成了当时的迫切需求。
计算机网络体系结构从宏观、逻辑意义上描述整个计算机网络通信功能的分层结构,是由计算机网络软、硬件系统共同实现的。
1.5.1 计算机网络体系结构的发展历程
计算机网络体系结构一开始并不是我们现在所提到的 OSI/RM(Open System Interconnection Reference Model,开放系统互连参考模型)或者TCP/IP体系结构,而是 经历了一个渐进式的发展过程,如图1 - 7所示。

- ARPAnet体系结构
1969年,DARPA(Defence Advanced Research Projects Agency,美国国防部高级研究计划局)开发的ARPAnet最初只有4个节点,即4所大学中的大型计算机,主要用于大学间的资源共享和军事研究。20世纪70年代中期,ARPAnet可以连接100多台主机,结束了网络实验阶段,进入了网络互联研究阶段。
ARPAnet将网络划分成了"资源子网"和"通信子网"两个层次,如图1 - 8所示。其中C1~C5代表用户计算机,存储了可供用户访问的网络资源,从而组成资源子网;IMP - 1~IMP - 4代表网络连接设备,它们组成通信子网,实现各用户终端的网络连接。这是计算机网络体系结构的雏形,后面许多公司提出的新的计算机网络体系结构都是基于这个雏形进行改进的,其中包括IBM公司提出的SNA(Systems Network Architecture,系统网络体系结构)以及ISO(International Organization for Standardiation,国际标准化组织)提出的OSI/RM体系结构。

- SNA体系结构
美国ARPAnet中的"资源子网"和"通信子网"两层结构划分方式显然是比较粗的,还不足以真正体现计算机网络通信的原理。于是,一些大公司和科研机构对计算机网络体系结构进行了细致研究,其中最具有代表性的就是IBM公司于1974年提出的SNA。
SNA基于其大型机的"主机---终端"通信模型,把整个计算机网络分成了7个层次,如图1 - 9所示。
- OSI参与模型
在IBM SNA体系结构产生后,其他一些大型公司也纷纷推出自己的网络体系结构,如1975年DEC推出的DNA(Digital Network Architecture,数字网络体系结构),但它们都是各自为政,彼此不兼容。为了解决这个问题,ISO成立了专门的研究机构,于1984年在原来IBM SNA的基础上,以国际标准形式发布了第一个国际标准化的OSI/RM,对应ISO 7489标准,OSI参考模型如图1 - 10所示。OSI/RM将整个网络通信的功能划分为7个层次,由低到高分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

与SNA体系结构对比可以看出,OSI/RM与SNA是相当类似的,都是7层结构,而且尽管有些层次的名称不一样,但实际功能基本一样。
另外,OSI/RM体系结构也继承了计算机网络体系结构雏形------ARPAnet在体系结构划分上的设计思想,因为OSI/RM的7个层次也分成了"资源子网"和"通信子网"两部分。其中"资源子网"包括高4层,即"传输层""会话层""表示层"和"应用层",而"通信子网"包括低3层,即"物理层""数据链路层"和"网络层"。
OSI/RM是由ISO提出的,是通用的,为各计算机网络软、硬件开发厂商提供统一的标准,解决了不同厂商产品的不兼容问题,极大地促进了计算机网络技术、产品和应用的发展。
- TCP/IP体系结构
理论上来讲,有了国际标准化的OSI/RM后,应该不会有人,开发新的计算机网络体系结构了。但事实上,我们今天的计算机网络体系结构已不是OSI/RM体系结构,而是称为TCP/IP的非国际化标准体系结构。
之所以会出现这样的结果,是因为OSI/RM自身仍存在比较明显的不足,主要是"会话层"和"表示层"功能太弱,区分不明显,这给计算机网络软、硬件产品开发带来许多不便。于是TCP/IP体系结构就把OSI/RM体系结构中的最高3层合并成了一层------应用层。
最初的TCP/IP体系结构还把OSI/RM中的最低两层("物理层"和"数据链路层")合并成了"网络接入层"。这样一来,TCP/IP体系结构只有4层。但后来发现,把OSI/RM最低两层合并的做法并不好,于是把"网络接入层"仍按OSI/RM一样划分成两层,即"数据链路层"和"物理层",这就有了现在普遍使用的5层TCP/IP体系结构。
TCP/IP体系结构中各层的主要功能基本上与OSI/RM的对应层次相同,只是TCP/IP体系结构中的应用层功能包括了OSI/RM中会话层、表示层和应用层这3层的功能,当然有些具体协议类型和功能还是有些区别的。图1 - 11所示是OSI/RM与TCP/IP体系结构的对比。

TCP/IP协议栈中定义了一系列通信协议或标准,常见的如图1-12所示(不包括全部),同一层中的不同协议可能位于不同子层,如网络层中,IP位于中间子层,比它高的子层协议有ICMP(Internet Control Message Protocol,互联网控制报文协议)和IGMP(Internet Group Management Protocol,互联网组管理协议)等,比它低的子层协议有ARP(Address Resolution Protocol,地址解析协议),数据链路层中也有这种情况。

制定以上这些协议或标准的国际组织主要有以下3个。
(1)IETF(Internet Engineering Task Force,互联网工程任务组)
IETF于1985年底成立,是一个负责开发和推广互联网协议的志愿组织,通过RFC(Request For Comments,请求评议文件)发布更新的协议标准。当前绝大多数国际互联网技术标准出自IETF。
(2)IEEE(Institute of Electrical and Electronics Engineers,电气和电子工程师协会)
IEEE于1963年1月1日由AIEE(American Institute of Electrical Engineers,美国电气工程师学会)和IRE(Institute of Radio Engineers,无线电工程师学会)合并而成,是一个美国的电子技术与信息科学工程师的协会,电子、电气和计算机科学领域的主要标准制定者,如以太网的IEEE 802.3、WLAN的IEEE 802.11等都是IEEE制定的。
(3)ISO
ISO于1947年2月成立于瑞士日内瓦,许多领域如信息技术、交通运输、农业、品质管理、保健和环境等的国际标准都是由ISO开发和制定的,在制定计算机网络标准方面,ISO起着重大作用,如前面介绍的ISO/RM就是ISO制定并发布的。
1.5.2 OSI/RM 各层主要功能
在 OSI/RM 的 7 层体系结构中,低 4 层(从物理层到传输层)定义了如何进行端到端的数据传输,就是定义了如何通过网卡、物理电缆、交换机和路由器进行数据传输;而高 3 层(从会话层到应用层)定义了终端系统的应用程序和用户如何彼此通信,即定义了如何重建从发送方到目的方的应用程序数据流。
如果按 ARPAnet 中的体系结构划分,可把 OSI/RM 的 7 层结构分成低 3 层和高 4 层,低 3 层负责创建网络通信所需的网络连接(面向网络),属于"通信子网"部分;高 4 层具体负责端到端的用户数据通信(面向用户),属于"资源子网"部分。OSI/RM 中各层的基本功能如下。
① 物理层:定义网络接口的机械、电气、功能和规程特性。在传输介质上传输比特流。
② 数据链路层:数据帧封装和解封装、数据帧组装和帧同步,并提供流量控制、差错控制等功能。
③ 网络层:定义用于区分网络的逻辑地址,使路由设备确定数据在不同网络间传输的路径,负责将数据从源网络传输到目的网络,负责数据包的封装和解封装、IP 寻址,并提供流量控制、差错控制、拥塞控制和服务质量控制等功能。
④ 传输层:建立端到端的传输通道,提供面向连接(如 TCP)或非面向连接 [如 UDP(User Datagram Protocol,用户数据报协议)] 的数据传输,以及进行重传前的差错检测。
⑤ 会话层:负责建立、管理和终止表示层与实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。
⑥ 表示层:定义数据表示形式,如对数据进行加/解密、压缩和解压缩,提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。
⑦ 应用层:对各种网络通信应用提供服务支持,为各种网络应用服务提供 API(Application Program Interface,应用程序接口)。
【经验之谈】在 OSI/RM 中,低 3 层通过它们自己对应层协议功能构建数据通信所需的网络平台,可以看成基础设施平台,更通俗地说就是构建一条用于数据传输的网络通道。但低 3 层均不能识别和处理来自应用层的网络应用数据,仅用于为用户的网络应用数据通信提供通信线路、网络基础架构,或者说是网络通信平台。高 4 层上进行的才是真正面向用户的网络应用,为各种具体的网络应用构建应用平台和端对端的数据传输通道,是基于网络通信平台之上的具体应用。我们经常听别人说,在局域网中仅可以通过数据链路层的MAC(Media Access Control,介质访问控制)地址进行通信,很多人就误解为网络应用也可以仅通过数据链路层进行通信,其实这是完全错误的。这里所说的"通信"其实仅仅指二层设备之间建立网络通信连接时进行的"网络通信"(并不是"数据通信"),用于建立数据通信所需的链路。数据链路层根本不能识别网络应用的用户数据。局域网中进行具体的网络应用仍需要用到OSI/RM的网络层及以上各层,只是这些高层通常是由用户主机的操作系统来完成的。
OSI/RM的每一层完成特定的功能,每层都直接为它的上一层提供服务,同时又调用它的下一层所提供的服务。所有层次都互相支持、相互协同,发送端的通信流程是自上而下进行的(也就是自上而下调用服务),接收端的通信流程是自下而上进行的(也就是自下而上提供服务),但双方必须在对等层次上进行通信。当然,并不是每一个通信过程都需要经过OSI/RM的全部7层,要视具体通信的类型而定,有的甚至只需要双方对应的某一层即可,如物理层中的物理接口之间的转接,以及中继器之间的连接就只需在物理层中进行即可,而网络层中的路由器之间的连接通常只需经过网络层、数据链路层和物理层即可。
1.5.3 局域网体系结构
目前计算机局域标准是由IEEE发布的,对应的标准为IEEE 802.1a。局域网体系结构中仅包括了OSI/RM或者5层TCP/IP体系结构中的最低两层("物理层"和"数据链路层"),因为这仅是针对局域网内部的体系结构,不考虑网络之间的通信,不需要进行网络层寻址,因此不需要体现上层各层。
另外,局域网体系结构中把"数据链路层"进行了细分,分成了MAC子层和LLC(Logical Link Control,逻辑链路控制)子层,如图1-13所示。其中的MAC子层主要是用来解决传输介质争用和进行局域网内部物理地址寻址的,而LLC子层担负着与OSI/RM或者TCP/IP体系结构中的"数据链路层"的功能。

1.6 计算机网络通信基本原理
计算机网络体系结构中各层及其顺序的设计并不是随意的,各层之间也不是完全孤立的,必定遵循一定的通信原理协同工作,本节具体介绍计算机网络体系结构中各层之间的通信流程,以及发送端与接收端之间的通信原理。
1.6.1 计算机网络通信基本流程
在各种计算机网络体系结构的网络连接的建立和数据传输的流程中,发送端总是把报文从上层向下层传输,直到最低的物理层;而接收端是把报文从下层(从最低的物理层开始)向上层传输,直到接收端与发送端发起通信的对等层,这就是计算机网络体系结构中各层之间的总体通信流程。如图1-14所示的是OSI/RM情形下数据通信的流程,其他体系结构的数据通信流程类似。

网络通信连接和数据传输都不能凭空建立或进行,必须通过计算机网络中最基础的,也是网络体系结构中的最低层------物理层,通过传输介质来传递各种通信信号和数据。但在进行具体的数据传输前,必须先建立好相应的连接,可以是永久连接,也可以是非永久连接。比如,我们使用互联网要进行拨号连接(专线连接的除外),打电话首先也要拨号。
计算机网络体系结构中的这种源端自上而下、目的端自下而上的通信连接建立和数据传输流程,与我们在公司安排、完成一个具体任务的流程是一样的。
假设A公司的总经理要与B公司的总经理签个协议,一般是按照以下流程进行的:①首先A公司总经理向他的某下级部门经理交待这个协议要求;②然后该部门经理把这项具体的任务交待给他下面的某个负责这方面工作的员工,该员工做好相应准备;③具体负责的员工负责与对方公司取得联系。
B公司的执行流程与A公司的正好相反,因为这个任务请求最先是由B公司下面负责具体联系工作的员工收到的,所以他需要一级级地向上反馈。在接收到A公司的这个请求后,他会向他的直接上级部门经理反映,然后该部门经理又把这个请求向他的上级经理反映,有时需要汇报给总经理。
B公司的总经理还可能要根据他具体的工作任务来安排签协议日程,然后把这些信息依次向下反馈到他公司中具体负责这方面的工作人员,再与A公司的具体工作人员沟通,A公司人员接到B公司的这些信息后,又要依次向上传达到他们总经理。这其中可能要经过反复沟通,A公司总经理与B公司总经理最终完成整个签协议事件的信息下达(在A公司)、上传(在B公司)任务。接下来的事,就是两公司总经理之间的事了,这就是本节后面要介绍的对等层通信原理。
1.6.2 对等层通信原理
通信双方的网络连接建立好之后,就可以进行各种具体的网络应用和网络通信了,但通信双方的最终通信是在双方对等层次上进行的,即源端发送的数据一定只会在目的端相同的层上被接收和处理,也就是我们通常所说的"对等层"通信原理。当然,"源端"和"目的端"不一定是用户设备,还可以是网络通信路径中的网络设备,要视具体的通信类型而定。不同的对等层通信时所用的数据类型是不一样的,具体如图1 - 15所示(注意其中的虚线代表的是非直接通信,实线代表直接通信)。
对等层通信一方面是因为只有双方是对等层次的通信才可能使用相同类型的协议,彼此才能"听得懂",才有"共同语言";另一方面,数据只有到达相同层才具有相同的最外层协议封装,才可能识别本层次的相关地址信息,然后再根据这些地址信息来寻址。
在网络体系结构中,每一层都是独立完成其工作的,其他层不干预,也不了解。如一方的物理层只能与对方的物理层直接通信,不可能与对方的"数据链路层"或其他层进行对话。同理,一方的网络层只能与对方的网络层通信,一方的传输层只能与对方的传输层通信,以此类推。只有"物理层"的通信才是直接的,其他各层之间的通信都是逻辑意义上的。
计算机网络通信的对等层会话原理可以理解为级别相当的双方才能有"共同语言"。如经理级的只能与经理级的直接对话,不能越级,否则大家没有共同语言。
1.7 报文封装和解封装
从上面的分析我们已经知道,在整个报文传输过程中,报文在发送端(源端)是自上而下逐层传输的,每经过一层(除"物理层"外)都要进行一次"报文封装"。在来自上层报文的最前面加上本层所使用通信协议的头部(即"协议头"),目的就是用以标识报文在使用某通信协议时所配置的参数信息,特别是各层的"地址"信息。
报文在接收端(目的端)是自下而上逐层传输的,报文每经过一层(除"物理层"外)都要进行一次"报文解封装",去掉来自下层报文原来所携带的下层协议头部,这个过程是发送端"报文封装"的逆过程。报文解封装的目的是使报文原来在发送端封装的头部信息能被识别,因为每种通信协议只能识别报文的相同协议头部信息,而且这些头部信息必须是在报文的最外层封装中,否则这些头部信息就会被当作"数据"字段进行处理。
【说明】报文从哪层发起不固定,每一层都可以发送报文(不一定是来自应用层的报文),但是报文源自发送端哪一层,接收端最终也只会在相同层次进行处理(不会再向上传),这就是对等层通信原理。
图1 - 16左边箭头所示的顺序就是OSI/RM各层的报文封装流程,每向下传输一层就会从上层接收的报文的最前面加上本层运行的协议的协议头(数据链路层中还要同时加上"协议尾")。

其中Data为应用层报文,AH为应用层协议头,PH为表示层协议头,SH为会话层协议头,TH为传输层协议头,NH为网络层协议头,DH为数据链路层协议头,DT为数据链路层协议尾(这是数据链路层所特有的,用于接收方对帧进行正确性校验)。物理层为最低层,传输的是最小单位的bit(比特),不需要再进行封装,所以没有"物理层头"。
到了接收端,设备从物理层收到比特流后重新将报文还原为原始的帧,并将其上送链路层;当数据帧继续向上面的网络层上传时,会去掉数据帧中的帧头,还原为原始的数据包;数据包继续向上面的传输层上传时,再去掉数据包中的包头......以此类推,直到与报文在源端的发送层同等层次。
1.8 以太网帧格式
以太网(Ethernet)技术最初是在1972年由施乐公司的帕洛阿尔托研究中心(PARC)开发的,后来施乐公司再联合数字设备(Digital Equipment)公司和英特尔(Intel)公司于1982年公布了其改进版本,也就是现在仍广泛使用的Ethernet Ⅱ。
随着以太网技术和应用的发展,IEEE成立了专门的802委员会,在Ethernet Ⅱ的基础上开发了一个系列的局域网标准,其中IEEE 802.3 就是以太网标准。下面主要介绍Ethernet Ⅱ和IEEE 802.3标准。
1.8.1 Ethernet Ⅱ帧格式
Ethernet Ⅱ支持多种网络层协议,其帧格式如图1-17所示。

① DMAC(Destination MAC,目的 MAC 地址):6 个字节,标识帧的接收者。
② SMAC(Source MAC,源 MAC 地址):6 个字节,标识帧的发送者。
MAC 地址用来标识网络的二层地址,且是全球唯一的。MAC 地址长度为 48bit,配置时通常用 12 个(分成 3 段,中间用连接符"-"连接)十六进制数表示,如 0016 - EAAE - 3C40,也可用 6 段表示,每段一个字节,但配置时通常都以 3 段表示。
MAC 地址包含两部分:高 24bit 是组织的标识符(Organizationally Unique Identifier,OUI),由 IEEE 统一分配给制造商。例如,华为的网络产品的 MAC 地址高 24bit 为 0x00e0fc,低 24bit 是厂商自行分配给每个产品的唯一序列。
③ Type(类型):标识"Data"字段中包含的上层协议,2 个字节。取值为 0x0800(0x 代表十六进制格式)时代表上层协议为 IPv4 协议;取值为 0x0806 时代表上层协议为 ARP。
【说明】在 EthernetⅠ、EthernetⅡ帧中没有 LLC 子层部分,对应的帧格式就是 MAC 帧格式,而后面的 IEEE 802.3 帧格式中包括 LLC 子层部分。
另外,这里所说的"上层协议"不仅指各种网络层协议,还可能指同在数据链路层中,比 EthernetⅡ以太网协议更高层次的其他数据链路层协议,如 LLDP(Link Layer Discovery Protocol,链路层发现协议)、PPPoE 等。
④ Data(数据):上层协议数据,长度为 46~1500 个字节,整个数据帧的最小长度为 64 个字节(帧头和帧尾共 18 个字节),最大长度不超过 1518 个字节。
⑤ FCS(Frame Check Sequence,帧校验序列):CRC(Cyclic Redundancy Check,循环冗余校验)数据,属于帧尾部分,4 个字节,用于验证帧在传输过程中是否出现了非法数据篡改,在接收端进行帧组装时会去掉该字段。
1.8.2 IEEE 802.3 帧格式
IEEE 802.3 包括多项由 IEEE 颁布的以太网标准,如最初的 RAW 802.3、正式的 802.3/802.2 LLC(网络层仅支持 IP)、支持多种网络层协议的 802.3/802.2 SNAP(SubNetwork Access Protocol,子网访问协议)。IEEE 802.3 帧格式如图 1 - 18 所示,基于原来的 EthernetⅠ/Ⅱ帧新增了 LLC 和 SNAP 两个字段(SNAP 字段仅 802.3/802.2 有)。Data 字段长度为 38~1492 个字节,但帧总长度仍为 64~1518 个字节。

【说明】由于在IEEE 802局域网体系结构中,数据链路层被划分成了LLC子层和MAC子层,因此IEEE 802.3以太网帧中包括了这两个子层的协议封装。又因为MAC子层位于LLC子层之下,所以最终的以太网帧就是MAC帧,LLC、SNAP这两个字段都是MAC帧的数据部分。
①Length(长度):以字节为单位,表示Data字段中的数据长度,2个字节。
②LLC:包括DSAP(Destination Service Access Point,目标服务访问点)、SSAP(Source Service Access Point,源服务访问点)和Control(控制)3个子字段。
• SSAP和DSAP两个子字段分别表示数据发送方、接收方的LLC子层的SAP(Service Access Point,服务访问点),各占1个字节。DSAP和SSAP的结构如图1 - 19所示。

DSAP的最高位(I/G)用来表示目的服务访问点的类型,为1时代表一组或者同类协议的全部SAP(此时为G位,即Group Address),为0时代表单个SAP(此时为I位,即Individual Address)。
SSAP的最高位(C/R)用来表示帧类型,为1时表示是响应帧(此时为R位,即Response Frame),为0时表示是命令帧(此时为C位,即Command Frame)。
因为DSAP可以代表一个目的访问点,也可以代表多个目的访问点,所以发送端的一个SSAP可以与一个或者一组或者同类协议的全部接收端DSAP进行通信,分别如图1 - 20上、中、下图所示。

- 当DSAP和SSAP都取值为0xff时,代表Netware网络数据帧;
- 当DSAP和SSAP都取值为0x42时,代表802.1d(STP)协议帧;
- 当DSAP和SSAP都取值为0x06时,代表IPv4网络数据帧;
- 当DSAP和SSAP都取值为0xaa时,代表802.3/802.2 SNAP以太网帧;
- 当DSAP和SSAP为其他值时,表示普通的802.3/802.2 LLC帧。
- Control子字段占1个字节,用于指示数据链路层所用的服务类型,以太网中都是采用无连接服务,固定为0x03,表示为无编号信息帧。
- ③SNAP:仅IEEE 802.3/802.2 SNAP帧才有,包括Org Code(组织代码)和Type两个子字段,其中Org Code子字段占3个字节,目前值均为0;Type子字段的含义与Ethernet Ⅱ帧中Type字段的含义相同,为2个字节,用于指示上层协议类型(可位于网络层,也可能同位于数据链路层)。
由于IEEE 802.3/802.2 LLC帧中添加了3个字节的LLC字段,而以太网帧的最大长度不变(仍为64~1518个字节),所以此时帧中的Data部分的长度范围也要减少3个字节(原来为46~1500个字节),即43~1497个字节。因为IEEE 802.3/802.2 SNAP帧中添加了共5个字节的SNAP字段,所以此时帧中的Data部分的长度范围要再减少5个字节,即38~1492个字节。
1.9 MAC地址
在以太局域网内,数据帧有单播、广播和组播3种发送方式,依据目的MAC地址的类型而定。在IP网络中,IP数据包也有这3种发送方式,它们是一一对应的,就是数据分别在网络层和数据链路层的3种发送方式。如果网络层进行的是单播发送,则在数据链路层也必须是单播发送;如果网络层是组播发送,则在数据链路层也应是组播发送方式,广播发送方式也一样。
1.9.1 MAC 地址类型
MAC 地址是在 IEEE 802 标准中定义并规范的,凡是符合 IEEE 802 标准的以太网卡,都必须拥有一个唯一的 MAC 地址,用 MAC 地址来定义网络设备的位置。MAC 地址共 48 位,6 个字节,但通常是以 12 个十六进制数表示,高 24 位代表 OUI,可以看成厂商代码,低 24 位由制造商分配。
依据第一个字节第 8 位的值,我们可以把 MAC 地址分为单播 MAC 地址、广播 MAC 地址和组播 MAC 地址 3 种类型。
(1)单播 MAC 地址
单播 MAC 地址最高字节的最高位固定为 0,用于标识链路上的一个单一节点。帧中目的 MAC 地址为单播 MAC 地址时,数据将仅向对应设备发送,对应帧的单播发送方式,应用于单播通信,也是最常用的一种帧发送方式。单播 MAC 地址具有全球唯一性。
(2)广播 MAC 地址
广播 MAC 地址 48 位全为 1,即 FFFF:FFFF:FFFF(不区分大小写),这是一个通用的MAC地址,用来表示网络上的所有终端设备。
帧中目的MAC地址为广播MAC地址时,数据帧将向局域网内所有设备发送,对应数据帧的广播发送方式。后面将要介绍的ARP请求数据帧中的目的MAC地址就是这种广播类型的MAC地址,所以它将在整个局域网内进行发送。但并不是局域网内所有设备都会接收,还需要比较目的IP地址,只有目的IP地址与本地IP地址相同的设备才会接收这个广播帧。
(3)组播MAC地址
这是一个逻辑的MAC地址,用于代表网络上的一组终端。组播MAC地址最高字节的最高位是1(与广播MAC地址的区别是,组播MAC地址的其他位不全为1),例如000000011011101100111010101110101011111010101000。组播MAC地址不能作为源MAC地址,只能作为目的MAC地址。
组播MAC地址是由对应的组播IP地址映射而来的,不是随便取的。IANA(The Internet Assigned Numbers Authority,互联网数字分配机构)规定,IPv4组播MAC地址的高24位固定为0x01005e,第25位固定为0,低23位为IPv4组播地址的低23位,映射关系如图1 - 21所示(IPv4组播地址中的低23位映射到组播MAC地址的低23位)。例如,组播组地址224.0.1.1对应的组播MAC地址为01 - 00 - 5e - 00 - 01 - 01。

帧中目的MAC地址是组播MAC地址时,数据将被发送到该组中所有设备上,对应帧的组播发送方式,应用于组播通信。
1.9.2 二层交换机的数据帧转发行为
在同一IP网段的以太局域网中,各设备间的数据转发是通过二层交换方式进行的。二层交换的依据是在交换机上为到达网段内各设备而生成的MAC表。
交换机在收到要转发的数据时,通过解析和学习以太网帧的源MAC地址来维护MAC地址与接口的对应关系,生成MAC表,并通过其目的MAC地址来查找MAC表,由此决定向哪个接口转发。MAC表可以手动创建,被称为静态MAC表;也可以通过交换机学习生成,被称为动态MAC表。在初始状态下,交换机的MAC表为空。
MAC表记录了交换机学习到的其他设备的MAC地址与接口的对应关系。交换机在转发数据帧时,根据数据帧的目的MAC地址查询MAC表。交换机(特指工作在数据链路层的二层交换机)会根据所接收到的帧的头部信息决定对帧的转发行为。交换机对接收到的单播数据帧的转发有3种方式:泛洪、转发和丢弃,如图1-22所示。
① 泛洪:交换机把从某一端口进来的帧通过其他端口发送出去。
② 转发:交换机把从某一端口进来的帧通过特定的另一端口转发出去。
③ 丢弃:交换机把从某一端口进来的帧直接丢弃。
在初始状态下,交换机并不知道所连接主机的 MAC 地址,所以 MAC 表为空。二层交换的基本原理如下。
① 二层交换机收到以太网帧后,将其源 MAC 地址与接收接口的对应关系写入 MAC 表,生成对应的动态 MAC 表项,作为以后的二层转发依据。如果 MAC 表中已有相同表项,就刷新该表项的老化时间(华为设备的 MAC 表项的老化时间默认为 300s)。动态 MAC 表项采取一定的老化更新机制,老化时间内未得到刷新的表项将被删除掉。
② 根据以太网帧的目的 MAC 地址的不同采用不同的转发方式。
• 如果目的 MAC 地址是广播 MAC 地址,则不查找 MAC 表,直接向所有接口(帧入接口除外)转发,最终只有 IP 地址与帧中"目的 IP 地址"相同的设备才会接收并处理。
• 如果目的 MAC 地址是单播 MAC 地址,则查找 MAC 表。
如果没有找到匹配的 MAC 表项(包括静态 MAC 表项和动态 MAC 表项,这类帧称为"未知单播帧"),则向所有接口(帧入接口除外)泛洪转发,最终只有 MAC 地址与帧中的"目的 MAC 地址"相同的设备才会接收并处理。同时,交换机将收到的数据帧的源 MAC 地址和对应接口编号记录到 MAC 表中。
如果能够找到匹配的 MAC 表项,则比较这个 MAC 地址在 MAC 表中对应的端口是不是这个帧进入交换机的那个端口:如果不是,则交换机执行转发操作,同时交换机将收到的数据帧的源 MAC 地址和对应端口编号记录到 MAC 表中;如果是,则交换机执行丢弃操作。
• 如果目的 MAC 地址是组播 MAC 地址,则交换机将采用二层组播方式转发。当一台主机从交换机的一个端口移除时,交换机检测到物理链路 Down,会立即从 MAC 表中清除对应主机的 MAC 表项。一旦主机连接到交换机另外一个端口,交换机就会检测到新端口对应的物理链路 Up,在主机发送报文后,交换机立即学习到主机的 MAC 地址与新端口的映射关系,并且将其添加到 MAC 地址表中。
1.9.3 二层交换示例
下面以图 1-23 为例介绍具体的二层交换过程,假设主机 A、主机 B 和主机 C 的 MAC 地址分别为 MAC A、MAC B 和 MAC C,主机 A 要向主机 C 发送数据。

① 主机 A 向主机 C 发送一个数据帧,帧中的源 MAC 地址是主机 A 的 MAC 地址:MAC A,目的 MAC 地址是主机 C 的 MAC 地址:MAC C。
【经验之谈】尽管二层交换机不能发送和处理 ARP 报文,但是用户主机是全层次的设备,可以发送和处理 ARP 报文。此处仅介绍二层交换机内部的二层转发原理,假设主机 A 已通过 ARP 学习到了目的主机 C 的 MAC 地址。
② 交换机 SW 收到帧后,因为初始情况下交换机没有任何 MAC 表,所以此交换机先从帧中学习源 MAC 地址和帧入接口(Port 1),生成动态的主机 A 的 MAC 表项,如图 1 - 24 所示。但因为没有基于目的主机 C 的 MAC 表项,所以帧会从包括 Port 2 和 Port 3 端口在内的其他交换机端口(不包括入端口 Port 1)泛洪发送。

③ 主机 B 和主机 C 均会收到泛洪而来的数据帧,然后比较自己的 MAC 地址与帧中的目的 MAC 地址,因为目的 MAC 地址是主机 C 的,所以只有主机 C 会接收,主机 B 不接收。这样主机 A 就成功地把数据发送到主机 C 上。
后续如果主机C要向主机A发送数据(因为已在交换机上生成了基于主机A的MAC表项),则数据可直接从其对应的Port 1端口转发出去,而不是采用泛洪发送方式,如图1-25所示。

此时,交换机还会学习来自主机C的帧中的源MAC地址(MAC C),生成主机C的MAC表项,出接口为连接主机C的Port 3。这样下次主机A再有数据发给主机C时,可直接利用生成的主机C的MAC表项从Port 3端口进行转发,不用再泛洪了。