文章目录
前言
这一章将专注于以太网技术展开,包含以太网的媒介访问控制、以太网与帧和以太网交换。
媒介访问控制
冲突域
我们在之前的学习中知道了,以太网冲突域(Collision domain)是指在以太网中,如果两个或多个设备同时发送数据到同一条物理介质上,就会发生信号冲突的区域。
冲突域是可能发生冲突的连接物理网段。 使用第1层设备(如中继器或集线器(repeater or hub))扩展了冲突域。 两侧的网络可能是一个更大的冲突域,如图。
其中有4个L1 domain,它们全部组成了一个大的冲突域。两个信号同时发送时会发生冲突。
CSMA/CD
以太网提供了一种MAC方法用于检测冲突,即带冲突检测的载波侦听多路访问(Carrier Sense Multiple Access with Collision Detection,CSMA/CD),用于控制主机如何访问共享介质。
CSMA是一个一次只允许一台主机传输的系统。 网络上的主机都可以随时访问介质,在发送数据之前,CSMA主机会监听(listen)网络,以确定网络是否已在使用中。
- 如果介质正在使用中,则主机等待。
- 如果介质不正在使用,主机开始传输数据。 发送数据时,CSMA系统仍然在监听网络的动态。
但是如果两个主机同时发送或因为延迟而临近发送,还是可能会产生冲突。因为电信号需要时间(延迟)沿电缆传播,因此导致冲突。 每当网络上发生冲突时,所有传输都会停止一段时间。
因为使用CSMA/CD,主机在传输数据时还在检测冲突。 一旦检测到冲突,源主机(source host)就会发送一个32位的jam
信号来处理冲突。这样做会使任何正在传输的数据损坏,并且所有主机都会检测到冲突。如图:
当发送冲突后,之后的数据包会被直接舍弃,之后两方的主机都会暂停一会。接下来通过两台电脑通过半双工(half duplex)传输数据遇到冲突的图示来理解不同的冲突产生情况。
因为网线长度不能过长,在标准的情况下认为两台主机之间由四个第一层设备相连,每一段网线都是100m。如图1:
在这个网络中,我们可以计算它的往返时延(Round-Trip Time, RTT):
RTT = Length of cables in a round/Transmit Speed = 500*2 m / 3*108 m/s = 3.2µs
- 刚开始,PC1检测到离它最近的cable没被使用,于是开始向PC2发送信息。
- 在时刻2时,PC1的信息传输到连接的中间,此时PC2检测到离它最近的cable没被使用,也发送一个信息。
- 时刻3时,PC1的数据包与PC2的数据包发生冲突,但是此时冲突位置均不在PC1和PC2的检测范围,故继续传播。
- 时刻4,PC1的数据包进入PC2的检测范围,而PC2还在发送数据包,此时PC2检测到冲突,它立即截断当前传输,替换32位阻塞信号
JAM
。 - 时刻5,PC2完成了32位阻塞信号的传输,并在冲突传播回PC1之前变得静默,PC1仍然没有意识到冲突并继续传输。此时冲突还在传回的路上。
- 时刻6,当冲突片段最终到达PC1时,它也截断了当前的传输,并用32位的阻塞信号
JAM
代替它正在传输的帧的剩余部分。在发送32位阻塞信号时,PC1停止所有传输。
PC1最长经过了6个时刻,即一个RTT时刻才知道发生了冲突。
我们可以把冲突分成3种:
- 本地冲突(Local collision),即在半双工UTP(非屏蔽双绞线)电缆上同时在接收端和发送端检测到信号,或在同轴电缆上检测到过压信号的冲突。
- 远程冲突(Remote collision),存在损坏的帧大小小于最小字节数(minimum bytes, 64 octets)且FCS(Frame Check Sequence, 帧校验序列)无效的冲突。它也发生在中继器的远端,可能被其他主机接收到。
- 延迟冲突(Late collision),在发送了前64个bytes的数据之后发生的冲突。对于此类冲突,网卡不会自动重新传输。它会在slot time之后发生同时传输。
为了使以太网(CSMA/CD)运行,发送主机必须在完成最小大小帧的传输之前意识到冲突。我们引入一个计算指标:
时隙时间(slot time)是指实际上计算出刚好长于(因为存在设备间处理的时间)在冲突域的最远点之间行进、在最后可能的时刻与另一个传输发生冲突、然后使冲突片段返回到发送主机并被检测到的理论所需时间量。
时隙时间仅适用于半双工链路。 全双工操作改变了时序考虑,消除了时隙时间的概念。
我们可以发现,全双工链路中,经过了第二层的设备进行交换,第二层设备将整个链路分成了两个冲突域,这两个冲突域互不干扰。
我们用一个生活中的例子来解释半双工与全双工链路的冲突情况:
人们通过人行道过桥,需要观察车辆行驶情况,如果不观察就会发生车祸(冲突)。当行人走在人行中途道的时候,此时他不需要观察了。当他接着往下走的时候,需要观察另一侧的行车情况。这样就是一个全双工的链路情况,只有两侧分别存在冲突域,而两侧行车并不互相影响。
相比之下半双工,则是没有人行中途道的地方过马路,这个时候左右两侧都需要观察才能顺利通过,这样就是一个半双工的状态。
故总结:半双工通信是指数据可以沿两个方向传送,但同一时刻一个信道只允许单方向传送,因此又被称为双向交替通信。全双工则是指数据可以同时进行信号的双向传输。
故我们可以重复之前学习冲突域的时候的总结:
L1拓展了冲突域,经过L1的主机之间共享一个冲突域;L2分割了冲突域,经过L2的主机之间存在多个冲突域
退避算法(Back-off Algorithm)
退避算法是CSMA/CD中使用的冲突解决机制。用于调度冲突后的重传。如果两个站之间发生冲突,它们可以在冲突后尽快重新开始传输。这总是会导致另一次碰撞,并形成无限的碰撞循环,导致死锁。为了防止这种情况,使用了退避算法。
退避算法是通过扩展在每次重发尝试时从中选择随机重发时间的间隔来实现。其中,n是该主机的冲突次数。
Random waiting period = [0, (2n – 1) x (slot time) ]
我们直接通过一个例子来理解:
首先是一个简单的两个主机之间的冲突:
此时,两个主机都是第一次冲突,两个主机都从集合 K 中随机选择一个整数,即 {0, 1}。此时存在4种情况:
- 当 A 和 B 都选择 K = 0 –> A的等待时间为0,B的等待时间为0,因此,两个主机将同时发送,从而发生冲突。
- 当 A 选择 K = 0,B 选择 K = 1 –> A 的等待时间为0,B 的等待时间为1,因此,A先发送数据包,B 等待时间1后发送。
- 当 A 选择 K = 1,B 选择 K = 0 –> A 的等待时间为1,B 的等待时间为0,因此,B先发送数据包,A 等待时间1后发送。
- 当 A 和 B 都选择 K = 1 –> A 的等待时间为1,B 的等待时间为1,因此,双方都会等待相同的时1,然后发送。因此,A, B再次发生碰撞。
我们再举一个例子:在三个主机中,当A开始发送时,B也同时发送。
此时产生第一次冲突,A和B都在{0,1}中随机选择一个。假设A选择了1,B选择了0,B先发送。但是同时,C也向B发送信息,产生第二次冲突。
因为B为第二次冲突,n = 2,B从{0,1,2,3}中随机选择,而C是第一次冲突,从{0,1}中选择。
以太网帧
把数据包封装成帧的过程在第二层上实现的,帧(frame)是第2层协议数据单元(PDU)。
存在由各种标准所描述的许多不同类型的帧。 单个通用帧包含称为字段(field),每个字段都由字节组成。 一个帧有如下字段:
- 开始帧字段:指示字节的开始信号序列。
- 地址字段:包含源地址(source)的MAC地址和目的地址(destination)的MAC地址。
- 长度/类型字段:以字节为单位指定帧的确切长度,或指定发出发送请求的第3层协议。
- 数据字段:数据包有两部分,即用户数据和要发送到目标计算机的封装字节。可以添加填充字节,使得帧具有用于定时目的的最小长度。
- 帧校验序列字段(Frame Check Sequence field, FCS):包含由源节点基于帧中的数据计算的数字,并且由接收设备重新计算以检查损坏的帧。
FCS
FCS(帧校验序列字段)包含了帧中的header + data。FCS被添加到正在发送的帧的末尾。 当目的节点接收到帧时,FCS号被重新计算,并与帧中包含的FCS号进行比较。如果这两个数字不一样,则可能存在传输有错误,帧会被丢弃,并要求源重新发送。
有很多种计算FCS的方法,主要分为:
- 循环冗余检验算法(Cyclic Redundancy Check, CRC)
- 奇偶校验位(Two-dimensional parity)
- 和校验法(Internet checksum)
通过CRC计算FCS的方法如下例子展示:
假设帧中的header + data =
10101011
,假设Trailer为4位。我们把10101011转换为,1的进制表达多项式:
M(x) = x7 + x5 + x3 + x + 1
因为Trailer只有4位,存在一个生成函数
g(x) = x4 + 1
我们将M(x)增加4位后,与生成函数G(x)相除:
M(x) * x4 / g(x) = Q(x) + r(x)/g(x)
其中Q(x)是商,而r(x)为余数。因为二进制的除法是异或(XOR),我们可以计算出结果如图:
可以得到
Q(x) = 10100001, r(x) = 0001
于是我们就计算出FCS为0001了。需要检验的时候,我们可以反向计算:设检验函数
T(x) = M(x) * x4 + r(x)
,若R(x) = T(x) / g(x)
可以整除,则我们可以认为检验正确。这样的检验成功率高达99.99%,如果检验不正确,说明R(x) = T(x) + E(x) / g(x)
,错误位E(x)不为空。此时T(x) / g(x) = R(x)
不同版本以太网的帧
在不同版本,例如IEEE 802.3和Ethernet中,帧会存在一些排序的区别。例如:
以太网交换
交换(Switching)是在一个接口上接收传入帧并将该帧从另一个接口传递出去的过程。第2层交换与第3层交换之间的区别在于:帧内用于确定正确输出接口的信息类型(type)。
- 第2层交换基于数据链路层的信息,例如MAC地址。交换机(通常代表第2层交换机)使用第2层交换来转发帧。
- 第3层交换基于网络层地址信息,例如IP地址。路由器或第3层交换机使用第3层交换来路由数据包。
MAC
MAC地址(或物理地址)用于唯一标识本地帧传递的主机和接口。MAC地址是一长度为48位,用12个十六进制数字表示的地址。
由IEEE管理的前六个十六进制数字标识制造商或供应商。 这部分被称为OUI(组织唯一标识符)。其余六个十六进制数字表示接口序列号,或由特定设备制造商管理的其他值。
在以太网中,所有主机都可以看到冲突域内网络上的所有帧。每台主机都有一个唯一的MAC地址,该地址位于NIC(网卡)上。NIC使用MAC地址来评估是否应将消息传递到OSI模型的上层(确定是否是目的主机)。
当此数据沿网络介质传播时,网络上每台主机中的NIC都会检查MAC地址是否与数据帧携带的物理目的地址匹配。
- 如果不匹配,则NIC丢弃数据帧。
- 如果匹配,NIC将复制帧并将帧向上传递到OSI层。
例如源主机给MAC地址为PC3的主机发送,同一个冲突域的所有主机都能收到传输的帧,但是只有名为PC3的主机能匹配,其他主机都会将帧丢弃。
在以太网中,不同的MAC地址用于第2层单播(unicast)、多播(组播, multicast)和广播(broadcast)通信。
- 单播:包含单播MAC地址的数据包将数据传送到一个特定的目的主机。一对一的指定传输。
- 广播:包含广播MAC地址的数据包将数据传送到本地网络(广播域)上的所有主机。
- 多播:包含多播MAC地址,用于将数据传送到本地网络上的一组主机(特定的一组)。
当一个节点需要与网络上的所有主机通信时,它发送一个带有广播目的地地址。这是每个设备的网络接口卡(NIC)主机必须响应的地址。
- 第3层广播IP地址:255.255.255.255
- MAC层2广播MAC地址:FFFF.FFFF.FFFF
当一台主机向网络发送广播帧时,所有其他主机都将接收并接受该帧。而广播域包括处理相同广播帧的所有冲突域。这包括属于由第3层设备限定的网段的所有主机。
因为第2层设备(例如交换机)必须转发所有广播和多播流量,但是第3层设备(例如路由器)不转发广播。因此,第2层设备将LAN分解为多个冲突域,但只有第3层设备可以将LAN分段为多个广播域。
局域网分段
以太网是一种共享介质,这意味着一次只能有一个节点传输数据。通过增加单个段上的节点数量,冲突的概率增加,导致更多的重传。解决这个问题的一个方法是将大段分割成多个部分,并将其分离成孤立的冲突域。
冲突域的大小可以通过使用网桥、交换机和路由器(bridges, switches, and routers)来减小。
网桥将冲突域分为两个网段。网桥通过构建地址表(称为桥接表或交换表)来“学习”网络分段,该地址表包含每个设备的MAC地址以及使用哪个段来到达该设备。
网桥被认为是一种存储转发设备,因此它只在接收到整个帧后才转发帧。
举个例子,在如图的网络结构中,存在一个网桥和四台主机,初始化情况下桥接表为空表,只有当Source MAC经过网桥时才会被记录。
我们依次执行如下操作:
- A->B:此时桥接表为空,帧会被广播到冲突域中各个主机,B, C, D都能收到信息。信息经过网桥的时候知道了Source MAC为A,在Port1这一侧。
- B->A:此时桥接表已经存在A的MAC地址了,当广播到达Port1的时候,会被网桥阻断,从而只有A收到了消息,同时B写入桥接表。
- C->A:此时桥接表已经存在A的MAC地址了,但是不在Port2这一侧,故另一侧也都会传播到,A, B, D都收到了消息,同时C写入桥接表。
- A->C:此时桥接表已经存在C的MAC地址了,在Port2那一侧,消息会通过网桥,此时桥接表已经存在A的MAC地址了。
- D->C:此时桥接表已经存在C的MAC地址了,和D在同一侧,消息会被网桥阻断,同时D写入桥接表。
操作结束后,桥接表如图:
这样可以有效减少冲突的情况,因为冲突域变小了。但是网桥只有两个接口,在大型网络中还是不太够用,我们还可以引入交换机。
交换机只是一个有许多端口的网桥,每个端口都会产生自己的冲突域。交换机建立并维护交换表,并基于交换表中的条目将帧转发到适当的接口。
每次存储新地址时,都会为其添加时间戳。引用地址时,它会收到一个新的时间戳。如果在设定的时间段内未引用地址,则会将其从列表中删除。
交换表的记录存储在CAM(内容可寻址存储器)中,这允许交换机直接找到与MAC地址相关联的端口,而不使用搜索算法。
与网桥类似,以太网交换机仅根据第2层MAC地址执行交换和过滤。
举个例子,这个例子和网桥的很相似,只是使用了交换机:
- A->B:此时桥接表为空,帧会被广播到冲突域中各个主机,B, C, D都能收到信息。桥接表记录A处于端口1.
- B->A、C->A:因为A已经被记录,它们都直接单播给A即可。同时记录它们的端口。
- A->C:此时A和C都已经记录了,故单播给C。
- D->C:此时C已经记录了,故单播给C,同时记录D的端口。
网络延迟
延迟(Latency/delay)是帧/数据包从网络上的源主机传输到目的主机所需的时间。分为:
- 传播延迟,信号沿电缆传播所需的时间。
- 网卡延迟,源NIC在导线上放置电压脉冲所需的时间以及接收NIC解释这些脉冲所需的时间。
- 设备延迟,即在两台通信主机之间的路径中使用网络设备而增加的时间。
- 帧延迟,由帧的内容引起,在帧中可以做出切换决定。
帧交换模式
帧有如下主要交换模式:
- 存储并转发(Store-and-forward):在进行任何转发之前接收整个帧。在转发帧之前,将读取目的地址与源地址并应用过滤器分析帧信息。帧越大,延迟越大,因为必须在交换过程开始之前接收到整个帧。
- 直通(Cut-through):交换机在接收整个帧之前读取目的地址,然后在整个帧到达之前转发该帧。它又可以分为:
- 快速转发(Fast-forward):交换机在接收整个帧之前读取目的地址,然后在整个帧到达之前转发该帧。这种模式减少了传输的延迟,但LAN交换错误检测较差。
- 无分段(Fragment-free):这种交换模式读取以太网帧的前64个字节,然后开始将其转发到相应的端口。
后记
本章介绍了以太网的基本概念和技术,包括媒介访问控制、以太网帧、以太网交换和网络延迟。我们了解了以太网的工作原理,以及如何使用不同的设备和方法来提高网络性能和可靠性。我们还学习了如何计算和检验帧的完整性,以及如何根据MAC地址进行帧的转发和过滤。本章的内容为我们进一步探索网络通信的原理和实践打下了坚实的基础。
Comments 2 条评论
博主 澄沨
博主国庆快乐呀
博主 Hoyue
@澄沨 国庆快乐(⌒▽⌒)!抱歉这么晚才看到评论,之前评论系统炸了两周现在才看到