以太网和数据封装独家课堂知识点
以太网和数据封装
★
01
以太网
以太网是一种基于竞用的介质访问方法,可让一个网络中的所有主机共享链路带宽。以太网很常见,因为它是可扩展的,这意味着在现有网络基础设施中引入新技术(如从快速以太网升级到吉比特以太网)相对容易。另外,以太网实现起来也相对简单,这使得排除故障也比较容易。以太网使用了数据链路层规范和物理层规范,本章将介绍数据链路层和物理层知识,这些知识足以帮助你高效地实现和维护以太网以及排除其故障。
★
02
冲突域
冲突域是一个以太网术语,指的是这样一种网络情形,即网段上的一台设备发送分组时,该物理网段上的其他所有设备都必须侦听它。这很糟糕,因为如果同一个物理网段中的两台设备同时传输数据,将发生冲突( 即两台设备的数字信号将在线路上相互干扰),导致设备必须在以后重传数据。冲突对网络性能有严重的负面影响,因此绝对要避免冲突。前面描述的情形通常出现在集线器环境中,在这种环境中,所有主机都连接到一个集线器,它们组成一个冲突域和一个广播域。这令人想到了一个问题:什么是广播域?
03. 广播域:
广播域的书面定义如下:广播域指的是网段中的一组设备,它们侦昕在该网段上发送的所有广播。
广播域的边界通常为诸如交换机和路由器等物理介质,但广播域也可能是一个逻辑网段,其中每台主机都可通过数据链路层(硬件地址)广播访问其他所有主机。
介绍广播域的基本概念后,下面来看看半双工以太网使用的一种冲突检测机制。
04
CSMACD
以太网使用CSMA/CD ( Carrier Sense Multiple Access with Collision Detection,载波侦听多路访问/
冲突检测),这是-种帮助设备均衡地共享带宽的协议,可避免两台设备同时在网络介质上传输数据。多个节点同时传输分组时,将发生冲突,而开发CSMACD就旨在避免这种问题。请相信我,妥善的冲突管理至关重要,因为在CSMACD网络中,一个节点传输数据时,其他所有节点都将接收并查看这些数据。只有交换机和路由器才能避免数据传遍整个网络。
那么,CSMA/CD协议是如何工作的呢?先来看看图2-1。主机想通过网络传输数据时,它首先检查线路上是否有数字信号。如果没有其他主机传输数据,该主机将开始传输数据。但到这里并非万事大吉,传输主机将持续地监视线路,确保没有其他主机开始传输。如果该主机在线路上检测到其他信号,它将发送一个扩 展的拥堵信号( jam signal ),使网段上的所有节点都不再发送数据(想想电话忙音吧)。检测到拥堵信号后,其他节点将等待一段时间再尝试传输。后退算法决定了发生冲突的工作站多长时间后可重新传输,如果连续15次尝试都导致冲突,尝试传输的节点将超时。
在以太网LAN中发生冲突后,将出现如下情况:
○ 拥堵信号告诉所有设备发生了冲突;
○ 冲突激活随机后退算法;
○ 以太网网段中的每台设备都暂停传输,直到其后退定时器到期。
定时器到期后,所有主机的传输优先级都相同。
CSMA/CD网络持续发生严重冲突时,将导致如下结果:
○ 延迟;
○ 低吞吐量;
○ 拥塞。
!注意:在以太网中,后退指的是冲突导致的重传延迟。发生冲突后,主机将在指定的延迟时间后重新传输。后退延迟时间过后,所有工作站的数据传输优先级都相同。
05
半双工和全双工以太网
半双工以太网是在最初的以太网规范IEEE 802.3中定义的。思科认为,半双工只使用一对导线,
数字信号在导线中双向传输。IEEE 规范对半双工的描述稍有不同,但思科的说法大致描述了以太网中发生的情况。
半双工以太网也使用CSMA/CD协议,以帮助防范冲突,并在发生冲突时支持重传。如果集线器与交换机相连,它必须运行在半双工模式下,因为终端必须能够检测冲突。半双工以太网的效率只有30%~ 40%,因为在大型100BaseT 网络中,通常最大传输速度只有30~ 40 Mbits。
与半双工以太网只使用一对导线不同,全双工以太网同时使用两对导线。在传输设备的发射器和接收设备的接收器之间,全双工使用一条点到点连接,这意味着使用全双工时,数据传输速度比半双工时快。另外,由于使用不同的线对传输数据和接收数据,因此不会发生冲突。
你无需担心冲突,因为全双工提供了一条“多车道高速公路”,而不像半双工那样提供-条“单车道公路”。全双工以太网在两个方向的效率都为100%,例如,在采用全双工模式的10 Mbit/s以太网中,传输速率为20 Mbit/s,而在快速以太网中,传输速率为200 Mbit/s。然而,这种速率称为总速率,换句话说,效率为100%才能达到,但与在现实生活中一样,在网络中这也是没有保证的。
全双工以太网可用于下面6种情形:
口交换机到主机的连接;
口交换机到交换机的连接;
口主机到主机的连接(使用交叉电缆);
口交换机到路由器的连接(使用交叉电缆);
口路由器到路由器的连接(使用交叉电缆);
口路由器到主机的连接(使用交叉电缆)。
注意:在只有两个节点的情况下,全双工以太网要求使用点到点连接。除集线器外,其他所有设备都可在全双工模式下运行。
现在的问题是,为何全双工以太网有时提供的速度低于它支持的速度呢?全双工以太网端口通电后,它首先连接到快速以太网链路的另- -端并与之协商,这称为自动检测机制。这种机制首先确定交涣能力,即检查它能够在10 Mbit/s、 100 Mbit/s还是1000 Mbit/s的速度下运行。然后,它检查能否在双工模式下运行,如果不能,则在半双工模式下运行。
注意 :别忘了,半双工以太网只有一个冲突城,其有效吞吐量比全双工以太网低。在全双工以太网中,通常每个端口都对应一个独立的冲突城,且有效吞吐量更高。
最后,请牢记如下要点:
口在全双工模式下,不会发生冲突;
口每个全双工节点都必须有一一个专用的交换机端口;
口主机的网卡和交换机端口必须能够在全双工模式下运行。
下面来看看以太网在数据链路层的工作原理。
06
以太网的数据链路层
在数据链路层,以太网负责以太网编址,这通常称为硬件编址或 MAC 编址。以太网还负责将来 自网络层的分组封装成帧,为使用基于竟用的以太网介质访问方法在本地网络中传输数据做好准备。
以太网捕址
下面介绍以太网如何编址。它使用固化在每个以太网网卡(NIC)中的 MAC(MediaAccessControl,介质访问控制)地址。MAC (硬件)地址长 48位 (6B),采用十六进制格式。
图 2-2说明了 48位的 MAC地址及其组成部分。
OUI ( Organizationally Unique Identifier,组织唯一标识符)是由 IEEE分配给组织的,它包含 24 位 (3B),而组织结其生产的每个网卡都分配一个唯一的(据说如此,但不保证 ) 全局管理地址,该 地址长 24位 (3 B)。如果仔细查看图 2-2,你将发现最高位为 I/G (Individual/Group) 位:如果它的 值为 0,我们就可认为相应的地址为某台设备的 MAC地址,很可能出现在 MAC报头的摞地址部分; 如果它的值为 1,我们就可认为相应的地址要么是以太网中的广播地址或组播地址,要么是令牌环和 FDDI 中的广播地址或功能地址 。
接下来是 G几位(全局/本地位,也称为 U几位,其中 U表示 universal):如果这一位为 0,则表 示相应的地址为全局管理地址,由 IEEE 分配;如果为 1,则表示相应的地址为本地管理地址 。在以 太网地址中,右边 24 位为本地管理(制造商分配)的编码,特定制造商生产第一个网卡时,通常将 这部分设置为 24个 0,然后依次递增,直到将其生产的第 1677 216个网卡设置为 24个 1。实际上,很多制造商都将这部分地址对应的十六进制值作为网卡序列号的最后 6个字符。
2. 从二进制转换为十进制和十六进制
介绍 TCPIIP协议和 E 地址(见第 3 章)前,你需要真正明白二进制、十进制和十六进制数之间的差别以及如何在这些格式之间转换,这很重要 。
下面首先介绍二进制,它非常简单。二进制只使用数字 0和 1,其中每个数字对应于一位( 二进制位)。通常,我们将每 4位或 8位作为一组,分别称它们为半字节(旧bble) 和字节 。
我们感兴趣的是二进制值对应的十进制值——十进制以 10 为基数,我们从幼儿园起就开始使用它了 。二进制位接从右向左的顺序排列,每向左移动一位,位值就翻一倍 。
表 2-1列出了半字节和字节中各位代表的十进制值。别忘了,半字节包含 4位,字节包含 8位。
这意味着如果某-位的取值为1,则计算半字节或字节对应的十进制值时,应将其位值与其他所有取值为1的位值相加。如果为0,则不考虑。
下面更详细地阐述这一点。如果半字节的每- -位都为1, 则将8、4、2和1相加,结果为15——半字节的最大取值。假设半字节的取值是1010,即位值为8和2对应的位为1,则对应的十进制值为10。如果半字节的取值为0110,则对应的十进制值为6,因为位值4和2对应的位为1。
然而,字节的最大取值比15要大得多,因为如果字节中每位都为1,则其取值如下(别忘了,字节包含8位);
11111111
此时若要计算字节对应的十进制值,可将所有取值为 1 的位的位值相加,如下所示:
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255
这是字节的最大可能取值。二进制数还可对应众多其他的十进制值,下面来看一些例子。假设二进制数取值如下:
10010110
哪些位的取值为 1 呢?答案是位值为 128、 16、 4和 2的位,因此只需将这些位值相加: 128+ 16+4+2= 150。再举个例子,假设二进制数取值如下:
01101100
哪些位的取值为 1 呢?答案是位值为 64、 32、 8和 4的位,因此只需将这些位值相加: 64+32+8+4=108。再者,如果二进制数取值如下:
11101000
哪些位的取值为 1 呢?答案是位值为 128、 64、 32和 8的位,因此只需将这些位值相加: 128+64+32+8=232。
十六进制地址与二进制和十进制完全不同,我们通过读取半字节将二进制转换为十六进制。通过 半字节,我们可轻松地将二进制转换成十六进制。首先需要明白的是,十六进制只能使用数字 0-9,而不能使用 10、 11、 12等(因为它们是二位数),因此使用 A、 B、 C、 D、 E和 F分别表示 10、 11、12、 13、 14和15。
注意:十进制使用 10 个数字,十六进制又使用了字母表的前 6 个字母,即 A-F。
表 2-3列出了每个十六进制数字对应的二进制值和十进制值。
前10个十六进制数字 (0-9)与相应的十进制值相同,你注意到了吗?因此,这些值转换起来非常容易。
假设有十六进制数 Ox6A (有时候,思科喜欢在字符前添加 Ox, 让你知道它们是十六进制值。Ox并没有其他特殊含义),它对应的二进制值和十进制值是多少呢?你只需记住,每个十六进制字符相当于半字节,而两个十六进制字符相当于一字节。要计算该十六进制数对应的二进制值,可将这两个字符分别转换为半字节,然后将它们合并为一个字节 :6=0110,而 A= 1010,因此整个字节为 01101010。
要从二进制转换为十六进制,只需将字节划分为半字节,下面具体解释这一点。
假设有二进制数 01010101。首先将其划分为半字节 0101 和 0101 ,这些半字节的值都是 5,因为
取值为 1 的位对应的位值分别是 1 和 4。因此,其十六进制表示为 Ox55。要将二进制数 01010101 转换为十进制数,方法为 64 + 16 + 4 + 1 = 85。
下面是另一个二进制数:
11001100
其中 1100=12, 1100= 12,因此它对应的十六进制数为 cc。将其转换为十进制时,答案为 128+64+8 +4 =2040
下面再介绍一个例子,假设有如下二进制数:
10110101
它对应的十六进制数为 OxB5,因为 1011 对应的十六进制值为 B, 0101 对应的十六进制值为 5。将其转换为十进制时,结果为 128+32+ 16+4+ 1 = 181。
注意:要进行更多二进制/十六进制/十进制转换。
3. 以太网帧
数据链路层负责将比特合并成字节,再将字节封装成帧。在数据链路层,我们使用帧封装来自网络层的分组,以便通过特定类型的介质进行传输。
以太网工作站的职责是,使用 MAC 帧格式彼此传递数据帧。这利用 CRC (Cyclic RedundancyCbeck,循环冗余校验)提供了错误检测功能 , 但别忘了,这是错误检测,而不是纠错。图 2-3说明了802.3帧和以太网帧的格式 。
注意:使用一种帧封笨另一种愤称为隧道技术 。
802.3帧和以太网帧的各个字段。
口前导码交替的 0和 1,在每个分组的开头提供 5 MHz的时钟信号,让接收设备能够跟踪到来的比特流。
口帧起始位置分隔符 (SFD) I同步前导码为 7B,而 SFD (同步)为 lBo SFD的值为 10101011,其中最后两个 l让接收方能够识别中间的 0和 1交替模式,进而同步并检测到数据开头。
口目标地址 (DA) 包含一个 48位的值,且 LSB (Least Significant Bit,最低有效位)优先。接收方根据 DA判断到来的分组是否是发送给特定节点的。目标地址可以是单播地址、广播地址或组播 MAC 地址 。别忘了,广播地址全为 1 (在十六进制格式下全为 F), 广播发送给所有设备,而组播只发送给网络中一组类似的节点。
口源地址 (SA) SA是一个 48位的 MAC 地址 ,用于标识传输设备,也使用 LSB优先格式 。在 SA字段中,不能包含广播地址或组播地址。
口长度或类型 802.3 帧使用长度字段,而 Etbemet_II 帧使用类型字段标识网络层协议。802.3不能标识上层协议,只能用于专用 LAN,如 IPX。口数据这是网络层传递给数据链路层的帧,其长度为 46-15∞ B。
口帧校验序列 (FCS) FCS字段位子,用于存储 CRC (Cyclic Redundancy Check,循环冗余校验 ) 结果的帧的帧尾 。CRC是一种数学算法,创建每个帧时都将运行它 。作为接收方的主机收到帧并运行 CRC时,其结果必须相同,否则,接收方将认为发生了错误,进而将帧丢弃。
下面我们看看信任的网络分析器捕获的一些帧。正如你看到的,这里只显示了 3个帧字段:目标地址、源地址和类型(这里表示为 Protocol乃pe):
这是一个 Ethernet -II帧。注意,类型 (Type) 字段为 IP,况下表示为 Ox800)。因其十六进制表示为 08-00 (在大多数情
下一个帧包含的字段与前一个帧相同,也是 Ethernet -II帧:
这个帧是广播,你注意到了吗?这是因为其目标硬件地址的二进制表示全为 1,而十六进制表示全为 F。下面再来看一个 Ethernet-II帧 。正如你看到的,该以太网帧与被路由协议为 IPv4的 E也ernet-II帧相同。帧包含的是 IPv6数据时,类型字段的值为 Ox86dd,而包含的是 IPv4数据时,类型宇段的值为 Ox0800。
这就是 Ethemet-II帧的优点 。由于包含类型字段,无论使用哪种被路由的网络层协议, Ethemet-II帧都可包含相应的数据,因为它能标识网络层协议 。