计算机网络谢希仁第七版原版ppt获取方式:公众号后台回复”N3“即可获取。
由于公众号不支持显示LaTeX公式且公众号排版混乱,建议大家关注微信公众号"IT工匠",后台回复"N4-2"获取xmind源文件以及本文原文pdf文件获取更佳阅读体验。
本文主要内容:
数据链路层是计算机网络五层协议体系结构的第2层(从下往上计数),在整个体系结构中有非常重要的作用:
如图1所示,上半部分表示主机H1与主机H2通信所需经过的结点,下半部分是每一个结点对应拥有的计算机网络体系结构的抽象模型,可以看到网络中的主机、路由器等都必须经过数据链路层。
如图2所示,局域网中的主机、交换机等都必须实现数据链路层。
综上,数据链路层是实现设备之间通信的非常重要的一层。
如图3所示,点对点信道是使用一对一的点对点通信方式。
如图4所示,广播信道使用的是一对多的广播通信方式,因此必须使用专用的共享信道协议来协调这些主机的数据发送。
几个概念的明确:
链路(link):也称物理链路**,从一个结点到相邻结点的一段物理线路(有线或无线),中间没有任何交换结点。一条链路只是一条通路的一个组成部分。
数据链路(data link):也称逻辑链路,当需要在一条线路上传送数据时,除了必须有一条物理线路之外,还必须有一些必要的通信协议来控制这些数据的传输,若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
现在最常用的方法是使用网络适配器(即网卡)来实现这些协议的硬件和软件。
一般的适配器都包括了数据链路层和物理层这两层的功能。
数据链路层把网络层交付下来的数据构成帧发送到链路上,以及把接收到的帧中的数据取出并交付给网络层。如图5所示,点对点信道的数据链路层在进行通信时的主要步骤如下:
1:结点A的数据链路层将网络层传下来的IP数据报添加首部和尾部封装成帧;
2:结点A将封装好的帧发送给结点B的帧;
3:若结点B的数据链路层受到的帧无差错,则从受到的帧中提取出IP数据报交付至网络层,否则丢弃这个帧。
注意,数据链路层不需要考虑物理层如何实现比特传输的细节。甚至还可以更简单地设想好像是沿着两个数据链路层之间的水平方向把帧直接发送到对方,如图6所示,这也是我们把计算机网络体系结构分层的目的之一。
上一节的最后描述了点对点信道的数据链路层在进行通信时的主要步骤,那么为了完成数据链路层的工作,我们需要解决三个问题:封装成帧、透明传输、差错检测,虽然数据链路层协议有很多种,但是上述三个基本问题是共同需要解决的。
封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。 首部和尾部的一个重要作用就是进行帧定界,即确定帧的界限,进而识别出帧的开始和结束。
如图7所示,一个完整的帧包括首部、数据部分、尾部三个部分,发送帧的时候是从首部开始发送,尾部最后发送,很明显为了提高帧的传输效率,我们应该尽量使帧的数据部分尽可能地大于首部和尾部的长度。但是数据链路层的每一种协议都规定了所能传送的帧的数据部分长度上限——最大传送单元(MTU,Maximum Transfer Unit),图7展示了帧的各个部分以及数据部分与MTU部分的关系。
如图8所示,当数据是由可打印的 ASCII 码组成的文本文件时,帧定界可以使用特殊的帧定界符。 控制字符 SOH (Start Of Header) 放在一帧的最前面,表示帧的首部开始。另一个控制字符 EOT (End Of Transmission) 表示帧的结束。
当数据在传输中出现差错时,帧定界的作用更加明显。假定发送端在、尚未发送完一帧 时突然出现故障中断了传送,但随后又很快恢复正常,于是重新从头开始发送刚才的帧,由于使用了帧定界符,接收端就知道前面接收到的帧是个不完整的帧(因为它只有首部SOH而没有尾部EOT),应该丢弃,而后面受到的数据有明确的首部和尾部,因此这是一个完整的帧,应该收下。
由于帧的开始和结束的标记使用专门指明的控制字符,因此所传输的数据中的任何8比特的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误,如图9所示:
如图9所示,当数据部分出现了和SOH或EOT一样的代码时,数据链路层就会错误地"找到帧的边界"。
透明传输的定义是:某一个实际存在的事物看起来却好像不存在一样。在数据链路层透明传输表示无论什么样的比特组合的数据,都能够按照原样没有差错地通过这个数据链路层。很明显,上面提到的图9中帧的传输很明显就不是**“透明传输”**。
为了实现透明传输,我们可以使用字节填充 (byte stuffing) 或字符填充 (character stuffing),具体的做法是:
发送端的数据链路层在数据中出现控制字符**“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B)。 接收端的数据链路层在将数据送往网络层之前删除插入的转义字符**。 如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个,如图10所示:
现实的通信链路都不会是理想的,这也就是说,比特在传输过程中可能会产生差错:1可能会变成0、0可能会变成1.这就叫比特差错,如不加特殊说明,本文所说的**"差错"就是指比特差错**。
误码率 BER (Bit Error Rate)的概念:在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate)。
误码率与信噪比有很大的关系。 为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。 在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术,具体原理入下:
循环冗余检验的流程如下:
发送端
1:在发送端,先把数据划分为组,假定每组k个比特。
2:在每组数据M后面添加供差错检测用的n位冗余码,然后一起发送出去。
冗余码的计算方法:
1:用二进制的模 2 运算进行 2 n 2^n 2n 乘 M 的运算,这相当于在 M 后面添加 n 个 0。
2:得到的 (k + n) 位的数除以事先选定好的长度为 (n + 1) 位的除数 P,得出商是 Q 而余数是 R,余数 R 比除数 P 少 1 位,即 R 是 n 位。
3:将余数 R 作为冗余码拼接在数据 M 后面,一起发送出去。
接收端
接收端对收到的每一帧进行CRC检验,检验的方法是使用接收到的数据除以接收端与发送端事先约定好的除数P(模2运算),然后:
(1) 若得出的余数 R = 0,则判定这个帧没有差错,就接受 (accept)。
(2) 若余数 R ≠ 0,则判定这个帧有差错,就丢弃。
但这种检测方法并不能确定究竟是哪一个或哪几个比特出现了差错。 只要经过严格的挑选,并使用位数足够多的除数 P,那么出现检测不到的差错的概率就很小很小。
举例
比如要发送的数据M=101001,即k=6,事先约定好的除数P=1101,由于P为n+1=4位,所以n=3,冗余码的计算流程如下:
1:在M后面添加n个0,得到k+n位数:101001000
2:给得到的k+n位数初以P:
得到余数R=001
3:将余数R=001作为冗余码拼接在数据M后面,即M=101001001。
接收端接收到101001001后的检验流程如下:
使用101001001除以P(1101),得到余数0,说明无差错,接受。
在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence)。 循环冗余检验 CRC 和帧检验序列 FCS 并不等同。 CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。 FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的唯一方法。
一种较为方便的方法是使用多项式来表示循环冗余检验过程,我们可以用多项式:
P ( X ) = X 3 + X 2 + 1 P(X)=X^3+X^2+1 P(X)=X3+X2+1
来表示上述例子中的除数P=1101.
从以上讨论不难看出,如果数据链路层 不以帧为单位进行数据传送,就无法加入冗余码来进行差错检验。因此,如果要在数据链路层进行差错检测,就必须把数据划分为帧,每一帧都加上冗余码,一帧一帧地传送,然后在接收方逐帧进行差错检验。
注意:
1:仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受 (accept)。
2:“无差错接受”是指:“凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错”。接收端丢弃的帧虽然曾经收到了,但最终还是因为有差错被丢弃,即没有被接受。 也就是说:“凡是接收端数据链路层接受的帧都没有传输差错”(有差错的帧就丢弃而不接受)。
3:单纯使用 CRC 差错检测技术不能实现“无差错传输”或“可靠传输”。因为可靠传输指的是发送端发送什么、接收端就接收什么,而传输差错可以分为两类,一类是比特差错,数据链路层使用CRC检验可以解决这个问题,还有一类是帧丢失、帧重复、帧失序的错误,这类错误中并没有出现比特错误,而是以帧为单位出错的,所以CRC并没有解决这个问题.
5: 要做到“无差错传输”(即发送什么就收到什么)就必须再加上确认和重传机制。 本章介绍的数据链路层协议都不是可靠传输的协议。
6:现在互联网对于数据链路层采取了区别对待的策略:
对于点对点的链路,目前使用的最广泛的数据链路层协议是点对点协议PPP(Point-to-Point Protocol)。
我们知道,互联网用户通常都要接入到某个ISP才能接入到互联网。PPP协议就是用户计算机和ISP进行通信时所使用的数据链路层协议,如图11所示:
PPP协议应满足的要求:
PPP协议不需要的功能:
如图12所示,PPP 帧的首部和尾部分别为 4 个字段和 2 个字段。
当信息字段出现和标志字段一样的比特(0x7E,01111110)组合时,必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中,PPP异步传输时将转义符定义为0x7D(即01111101),并使用字节填充,方法如下:
1:将信息字段中出现的每一个0x7E替换为2字节序列0x7D,0x5E
2:若信息字段出现一个0x7D字节,则把0x7D转变为0x7D,0x5E
3:若信息字段出现ASCII码的控制字符,则在该字符前面加入一个0x7D字节,例如出现0x30(在控制字符中是"传输结束"ETX),就要把他转变为2字节序列0x7D,0x23.
由于在发送端进行了字节填充,因此链路上传送的信息字节数就超过了原来的信息字节数。但接收端在收到数据后再进行与发送端字节填充相反的变换,就可以正确地恢复原来的信息。
PPP 协议用在 SONET/SDH 链路时,使用同步传输(一连串的比特连续传送)。这时 PPP 协议为了避免出现信息字段出现和标志字段(0x7E,01111110)一样的比特组合的问题,采用零比特填充方法来实现透明传输。
其原理如图14所示,在发送端,只要发现有 5 个连续 1,则立即填入一个 0。 接收端对帧中的比特流进行扫描。每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除。
PPP 协议之所以不使用序号和确认机制是出于以下的考虑:
PPP协议的组成:
一个将 IP 数据报封装到串行链路的方法。
链路控制协议 LCP (Link Control Protocol)。
网络控制协议 NCP (Network Control Protocol)。
PPP协议的工作状态:
如图15所示,PPP协议的工作状态主要分为:
可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。
局域网最主要的特点是:
局域网具有如下主要优点:
如图16所示为局域网的几种常见的拓扑结构。
如图17所示,使用广播信道的数据链路层使用的是共享的信道,这种机制的问题是若多个设备在共享的广播信道上同时发送数据,则会造成彼此干扰,导致发送失败。要解决这一问题在技术上主要有两种方法:
1:静态划分信道(在物理层时已经介绍过)
2:动态媒体接入控制(多点接入)
随机接入
所有用户可随机发送信息,如果恰巧两个或更多用户同一时刻发送信息,那么在共享媒体上就要产生碰撞(即发生了冲突),使得这些用户的发送都失败。因此,必须要有解决碰撞冲突的网络协议。
受控接入
用户不能随机地发送信息,必须服从一定的控制。这类典型代表有分散控制的令牌环局域网和集中控制的多点线路探寻(polling),或称轮询。
最初的以太网是将许多计算机都连接到一根总线上。易于实现广播通信。当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件,如图19所示。
为了实现一对一通信,将接收站的硬件地址写入帧首部中的目的地址字段中。仅当数据帧中的目的地址与适配器的硬件地址一致时,才能接收这个数据帧,如图20所示。
这种方法的缺点就是若多台计算机或多个站点同时发送时 ,会产生发送碰撞或冲突,导致发送失败。
为了通信的简便,以太网采取了两种重要的措施:
1:采用较为灵活的无连接的工作方式
2:以太网发送的数据都使用曼彻斯特 (Manchester) 编码,如图21所示:
曼彻斯特编码缺点是:它所占的频带宽度比原始的基带信号增加了一倍(因为每秒传送的码元数加倍了)。
下面介绍CSMA/CD:
CSMA/CD 含义:载波监听多点接入 / 碰撞检测 (Carrier Sense Multiple Access with Collision Detection) 。
**“多点接入”**表示许多计算机以多点接入的方式连接在一根总线上。
“载波监听”是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。
总线上并没有什么“载波”。因此, “载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号。
“碰撞检测”就是计算机边发送数据边检测信道上的信号电压大小。当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。所谓“碰撞”就是发生了冲突。因此“碰撞检测”也称为**“冲突检测”**。
检测到碰撞之后:
在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送。
CSMA/CD协议的工作流程如图22所示:
这里就有一个问题了,**既然已经进行了"载波监听",理论上来说不可能再出现碰撞了啊,为什么还需要进行碰撞检测呢?**这是因为信号传播实验会对载波监听产生影响,如图23所示,在局域网的分析中,通常把单程端到端的传播时延记为 τ \tau τ:
结果是A和B均发送数据失败,二者都要推迟一段时间后发送数据。
由此可见,每一个站在自己发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。这一小段时间是不确定的,它取决于另一个发送数据的站到本站的距离。因此,以太网不能保证某一时间之内一定能够把自己的数据成功地发送出去(因为存在产生碰撞的可能)。以太网的这一特点称为发送的不确定性。如果希望在以太网上发生碰撞的机会很小,必须使整个以太网的平均通信量远小于以太网的最高数据率。
从图22可以看出,最先发送数据帧的A站,在发送数据后至多经过 2 τ 2\tau 2τ就可以知道所发送的数据是否遭受了碰撞,这个至多成立的条件就是 δ → 0 \delta \to 0 δ→0的情况。因此以太网的端到端往返时间 2 τ 2\tau 2τ称为争用期,争用期又称碰撞窗口(collision window)。一个站点发送完数据之后只有经过争用期这端时间之后还没有检测到碰撞,才能肯定这次发送不会产生碰撞。
发生碰撞的站在停止发送数据后,要推迟(退避)一个随机时间才能再发送数据。以太网使用**二进制指数类型退避算法(truncated binary exponential type)**来确定碰撞重传的时机,具体算法如下:
基本退避时间取为争用期 2τ 。
从整数集合$ [0, 1, … , (2^k- 1)]$ 中随机地取出一个数,记为 r。重传所需的时延就是 r 倍的基本退避时间。
参数 k 按下面的公式计算:
k = M i n [ 重 传 次 数 , 10 ] k = Min[重传次数, 10] k=Min[重传次数,10]
即当 k ≤10 时,参数 k 等于重传次数。
当重传达 16 次仍不能成功时即丢弃该帧,并向高层报告。
例如:
最短有效帧长:
现在考虑一种情况。某个站发送了一个很短的帧,但在发送完毕之前并没有检测出碰撞。假定这个帧在继续向前传播到达目的站之前和别的站发送的帧发生了碰撞,因而目的站将收到有差错的帧(当然会把它丢弃)。可是发送站却不知道这个帧发生了碰撞,因而不会重传这个帧。这种情况显然是我们所不希望的。为了避免发生这种情况,以太网规定了一个最短帧长64字节,即512 bit。如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于64字节。对于10Mbit/s以太网,发送512 bit需要51.2 μ s \mu s μs,也就是上面提到的争用期。由此可见,以太网在发送数据时,如果在争用期(共发送了64字节)没有发生碰撞,那么后续发送的数据就一定不会发生冲突。换句话说,如果发生碰撞,就一定是在发送的前64字节之内。由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于64宇节,因此凡长度小于64字节的帧都是由于冲突而异常中止的无效帧。只要收到了这种无效帧,就应当立即将其丢弃。
覆盖范围:
考虑这样一个问题:在 10 Mbit/s 以太网 51.2 μs 的争用期内,信号能传输多远的距离?
以太网上最大的端到端单程时延必须小于争用期的一半(即 25.6 μs),这相当于以太网的最大端到端长度约为 5 km。事实上,实用的以太网的覆盖范围远没有这样大。因此,实用的以太网都能在争用期51.2 μs 内检测到可能发生的碰撞。
实际上,以太网的争用期之所以定位51.2 μs ,除了考虑以太网的端到端时延,还考虑到了许多其他因素,如存在的转发器所增加的时延,以及下面要介绍的干扰信号的持续时间等。
强化碰撞:
当发送数据的站一旦发生了碰撞时,除了立即停止发送数据外,还要继续发送32bit或者48bit的人为干扰信号(jamming signal),以便让所有用户都知道已经发生了碰撞,如图24所示,对于10Mbit/s以太网,发送32bit只需要3.2 μ s \mu s μs,发送48bit只需要4.8 μ s \mu s μs.
注意:B也能够检测到冲突,并立即停止发送数据帧,接着就发送干扰信号,这里为了简单起见,只画出 A 发送干扰信号的情况。
CSMA/CD 协议的重要特性:
CSMA/CD 协议的要点:
传统以太网最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜和更灵活的双绞线。 采用双绞线的以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫做集线器 (hub)。
传统以太网使用的是同轴电缆,采用的是总线型拓扑结构,如图26所示:
采用双绞线的以太网对应的是包含集线器的星形拓扑结构,如图27所示:
如图27所示,双绞线以太网总是和集线器配合使用,每个站需要用两根无屏蔽双绞线(放在一根电缆内),一根负责发送、另一个根负责接收,双绞线的两端使用RJ-45插头,由于集线器使用了大规模的集成电路芯片,因此集线器的可靠性得到了大大的提高。。
1990年,IEEE制定出了采用双绞线的星形以太网10BASE-T的标准802.3i,10BASE-T的通信距离稍短,每个站到集线器的距离不超过100m。
10BASE-T的代表意义如下:
10BASE-T 以太网在局域网中的统治地位:
这种 10 Mbit/s 速率的无屏蔽双绞线星形网的出现,既降低了成本,又提高了可靠性。 具有很高的性价比。 10BASE-T 双绞线以太网的出现,是局域网发展史上的一个非常重要的里程碑,它为以太网在局域网中的统治地位奠定了牢固的基础。 从此以太网的拓扑就从总线形变为更加方便的星形网络,而以太网也就在局域网中占据了统治地位。
集线器的一些特点:
集线器是使用电子器件来模拟实际电缆线的工作,因此整个系统仍然像一个传统的以太网那样运行。 使用集线器的以太网在逻辑上仍是一个总线网,各工作站使用的还是 CSMA/CD 协议,并共享逻辑上的总线。 集线器很像一个多接口的转发器,工作在物理层。 集线器采用了专门的芯片,进行自适应串音回波抵消,减少了近端串音。
多个站在以太网上同时工作就可能会发生碰撞。 当发生碰撞时,信道资源实际上是被浪费了。因此,当扣除碰撞所造成的信道损失后,以太网总的信道利用率并不能达到 100%。
假设τ 是以太网单程端到端传播时延。则争用期长度为 2τ ,即端到端传播时延的两倍。检测到碰撞后不发送干扰信号。 设帧长为 L (bit),数据发送速率为 C (bit/s),则帧的发送时间为 T0 = L/C (s)。
一个站在发送帧时出现了碰撞。经过一个争用期 2τ 后,可能又出现了碰撞。这样经过若干个争用期后,一个站发送成功了。假定发送帧需要的时间是 T0,如图28所示:
注意到,成功发送一个帧需要占用信道的时间是 T0 + τ ,比这个帧的发送时间要多一个单程端到端时延 τ 。 这是因为当一个站发送完最后一个比特时,这个比特还要在以太网上传播。 在最极端的情况下,发送站在传输媒体的一端,而比特在媒体上传输到另一端所需的时间是 τ 。
要提高以太网的信道利用率,就必须减小 τ 与 T0 之比。 在以太网中定义了参数 a ,它是以太网单程端到端时延 τ 与帧的发送时间 T0 之比:
a = τ / T o a=\tau /T_o a=τ/To
a → 0,表示一发生碰撞就立即可以检测出来, 并立即停止发送,因而信道利用率很高。 a 越大,表明争用期所占的比例增大,每发生一次碰撞就浪费许多信道资源,使得信道利用率明显降低。
对以太网参数 a 的要求:
为提高利用率,以太网的参数 a 的值应当尽可能小些。
对以太网参数 a 的要求是:
信道利用率的最大值 S m a x S_{max} Smax:
在理想化的情况下,以太网上的各站发送数据都不会产生碰撞(这显然已经不是 CSMA/CD
,而是需要使用一种特殊的调度方法),即总线一旦空闲就有某一个站立即发送数据。 发送一帧占用线路的时间是 T0 + τ ,而帧本身的发送时间是 T0。于是,我们可计算出理想情况下的极限信道利用率 S m a x S_{max} Smax 为:
S m a x = T 0 T 0 + τ = 1 1 + a S_{max}=\frac{T_0}{T_0+\tau}=\frac{1}{1+a} Smax=T0+τT0=1+a1
只有当参数 a 远小于 1 才能得到尽可能高的极限信道利用率。 据统计,当以太网的利用率达到 30% 时就已经处于重载的情况。很多的网络容量被网上的碰撞消耗掉了。
在局域网中,硬件地址又称为物理地址,或 MAC 地址(因为这种地址用在MAC帧中)。
请注意,如果连接在局域网上的主机或路由器安装有多个适配器,那么这样的主机或路由器就有多个“地址”。更准确些说,这种 48 位“地址”应当是某个接口的标识符。
IEEE 802 标准规定 MAC 地址字段可采用 6 字节 ( 48位) 或 2 字节 ( 16 位) 这两种中的一种。 IEEE 的注册管理机构 RA 负责向厂家分配地址字段 6 个字节中的前三个字节 (即高位 24 位),称为组织唯一标识符。 地址字段 6 个字节中的后三个字节 (即低位 24 位) 由厂家自行指派,称为扩展唯一标识符,必须保证生产出的适配器没有重复地址,如图29所示:
一个地址块可以生成 2 24 2^{24} 224 个不同的地址。这种 48 位地址称为 MAC-48,它的通用名称是 EUI-48。 生产适配器时,6 字节的 MAC 地址已被固化在适配器的 ROM,因此,MAC 地址也叫做硬件地址 (hardware address) 或物理地址。 “MAC 地址”实际上就是适配器地址或适配器标识符 EUI-48。
IEEE 规定地址字段的第一字节的最低位为 I/G 位。I/G 表示 Individual / Group。
当 I/G 位分别为 0 和 1 时,一个地址块可分别生成 2 23 2^{23} 223 个单个站地址和$ 2^{23}$ 个组地址。 所有 48 位都为 1 时,为广播地址,只能作为目的地址使用。
IEEE 把地址字段第一字节的最低第 2 位规定为 G/L 位,表示 Global / Local。
我们知道适配器有过滤功能,但适配器从网络上每收到一个MAC帧就先用硬件检查MAC帧中的目的地址。如果是本站的帧则收下,然后再进行其他处理(过滤),否则就将此帧丢弃,不再进行其他的处理。这样做就不浪费主机的处理器和内存资源,这里**“发往本站的帧”**包括以下三种:
所有的适配器都至少能够识别前两种帧,即能够识别单播地址和广播地址。 有的适配器可用编程方法识别多播地址,当操作系统启动时,它就把适配器初始化,使适配器能够识别某些多播地址,显然, 只有目的地址才能使用广播地址和多播地址。
以太网适配器还可设置为一种特殊的工作方式,即混杂方式 (promiscuous mode) ,此方式工作的以太网适配器只要**“听到”有帧在以太网上传输就都接收下来,而不管这些帧时发往哪个站的**。请注意,这种方式实际上是**"窃听"其他站点的通信但并不中断其他站点的通信**,网络上的黑客常利用这种方法非法获取网上用户的口令。
当然,混杂方式有时也是非常有用的,比如网络维护人员和管理人员需要这种方式来监视和分析以太网上的流量。一种很有用的网络工具叫**嗅探器(sniffer)**就设置为混杂方式的网络适配器。
常用的以太网 MAC 帧格式有两种标准:
最常用的 MAC 帧是以太网 V2 的格式,这里主要介绍这个V2格式:
如图30所示,V2的MAC帧由以下几个部分组成:
这里有个问题,MAC帧中并没有表示数据字段长度的字段,这样接收方的MAC子层怎么知道应该从接收到的以太网帧中取出多少字节的数据交付给上一层协议呢?
答案:我们在发送数据的时候使用的是曼彻斯特编码,曼彻斯特编码的特点是其每一个码元的正中间一定又一次电压的转换(从高到低或者从低到高),当发送方把一个以太网帧发送完成后,就不再发送其他码原了,因此,接收方很容易可以找到以太网帧结束的位置,然后从结束的位置向前找4个字节(FSC的长度),就能找到数据字段结束的位置。
与以太网 V2 MAC 帧格式相似,区别在于:
现在市场上流行的都是以太网 V2 的 MAC 帧,但大家也常常把它称为 IEEE 802.3 标准的 MAC 帧。
对于检查出的无效 MAC 帧就简单地丢弃。以太网不负责重传丢弃的帧。
在许多情况下,我们希望对以太网的覆盖范围进行拓展,本节主要介绍以太网的拓展方法,这种拓展的以太网在网络层看来仍然是一个网络。
主机使用光纤(通常是一对光纤)和一对光纤调制解调器连接到集线器。 很容易使主机和几公里以外的集线器相连接,如图31所示:
将多个以太网段连成更大的、多级星形结构的以太网,如图32所示:
优点 :
缺点:
这里提到了一个碰撞域的概念,我们来看看什么是碰撞域:
碰撞域(collision domain)又称为冲突域,是指网络中一个站点发出的帧会与其他站点发出的帧产生碰撞或冲突的那部分网络。 碰撞域越大,发生碰撞的概率越高。
扩展以太网更常用的方法是在数据链路层进行。早期使用网桥,现在使用以太网交换机,如图33所示:
什么是网桥:
网桥工作在数据链路层。 它根据 MAC 帧的目的地址对收到的帧进行转发和过滤。 当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的 MAC 地址,然后再确定将该帧转发到哪一个接口,或把它丢弃。
什么是交换机:
以太网交换机实质上就是一个多接口的网桥,通常都有十几个或更多的接口。每个接口都直接与一个单台主机或另一个以太网交换机相连,并且一般都工作在全双工方式。以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信。
以太网交换机的接口有存储器,能在输出端口繁忙时把到来的帧进行缓存。
以太网交换机是一种即插即用设备,其内部的帧交换表(又称为地址表)是通过自学习算法自动地逐渐建立起来的。
以太网交换机使用了专用的交换结构芯片,用硬件转发,其转发速率要比使用软件转发的网桥快很多。
以太网交换机的性能远远超过普通的集线器,而且价格并不贵。
交换机的优点:
用户独享带宽,增加了总容量,如图35所示:
从共享总线以太网转到交换式以太网时,所有接入设备的软件和硬件、适配器等都不需要做任何改动。
以太网交换机一般都具有多种速率的接口,方便了各种不同情况的用户。
以太网交换机的交换方式:
存储转发方式
把整个数据帧先缓存后再进行处理。
直通 (cut-through) 方式
接收数据帧的同时就立即按数据帧的目的 MAC 地址决定该帧的转发接口,因而提高了帧的转发速度。
缺点是它不检查差错就直接将帧转发出去,因此有可能也将一些无效帧转发给其他的站。
在某些情况下,仍需要采用基于软件的存储转发方式进行交换,例如,当需要进行线路速率匹配、协议转换或差错检测时。
如图36-a所示,我们假设当前交换机有4个接口,各连接一台计算机,其MAC地址分别是A、B、C、D,一开始以太网交换机中的交换表示空的,然后:
经历了以上两步之后,交换机的交换表如图36-所示,同理可将C、D也更新至交换表。
以上就是以太网交换机的自学习过程。
考虑到可能有时要在交换机的接口更换主机,或者主机要更换其网络适配器,这就需要更改交换表中的项目。为此,在交换表中每个项目都设有一定的有效时间。过期的项目就自动被删除。
以太网交换机的这种自学习方法使得以太网交换机能够即插即用,不必人工进行配置,因此非常方便。
交换机的自学习和转发帧的流程如图37所示:
有时为了增加网络的可靠性,在使用以太网交换机组网时,往往会增加一些冗余的链路,在这种情况下,自学习的过程就可能导致以太网帧在网络的某个环路中无限制地兜圈子,我们以图38为例说明:
假定一开始主机A通过交换机#1向主机B发送一帧,那么就会存在这么一条路径:
A -> #1.1 ->#1.3->#2.1->#2.2->#1.4->#1.3
,这样就会无限制地循环下去,白白浪费了网络资源。
为了解决这种兜圈子的问题,IEEE802.1D标准制定了一个生成树协议STP(Spanning Tree Protocol),思路是不改变网络的实际拓扑,但在逻辑上则切断某些链路,使得从一台主机到所有其他主机的路径是无环路的树状结构,从而消除了兜圈子现象,如图39所示:
上图中,左边是原始的拓扑结构,存在回路,右边去切断了某些链路(虚线部分),这样没有影响整个网络的拓扑结构(该连通的还是能连通),但是解决了回路循环问题。
早期,以太网采用无源的总线结构。 现在,采用以太网交换机的星形结构成为以太网的首选拓扑。 总线以太网使用 CSMA/CD 协议,以半双工方式工作。 以太网交换机不使用共享总线,没有碰撞问题,因此不使用 CSMA/CD 协议(相关的"争用期”也没有了),以全双工方式工作。但仍然采用以太网的帧结构。
局域网存在以下几个问题:
总线以太网和10Base-T星形以太网的所有计算机都处于同一个碰撞域(冲突域)、同一个广播域中,如图41所示。
广播域(broadcast domain):指这样一部分网络,其中任何一台设备发出的广播通信都能被该部分网络中的所有其他设备所接收。
采用以太网交换机的星形以太网每一个接口都处于一个独立的碰撞域中,但所有计算机都处于同一个广播域中,如图42所示:
利用以太网交换机可以很方便地实现虚拟局域网 VLAN (Virtual LAN)。 IEEE 802.1Q 对虚拟局域网 VLAN 的定义: 虚拟局域网 VLAN 是由一些局域网网段构成的与物理位置无关的逻辑组,而这些网段具有某些共同的需求。每一个 VLAN 的帧都有一个明确的标识符,指明发送这个帧的计算机是属于哪一个 VLAN。
虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网。由于虚拟局域网是用户和网络资源的逻辑组合,因此可按照需要将有关设备和资源非常方便地重新组合,使用户从不同的服务器或数据库中存取所需的资源。
如图43所示,设有10台计算分别处于3个楼层中,使用以太网交换机可以很轻松地将这10台计算机划分为3个虚拟局域网VLAN1、VLAN2、VLAN3,每一个虚拟局域网都是一个广播域,VLAN1、VLAN2、VLAN3是3个不同的广播域,当 B1 向 VLAN2 工作组内成员发送数据时, 工作站 B2 和 B3 将会收到其广播的信息。VLAN1 和 VLAN3 中的工作站 A1,A2 和 C1 等都不会收到 B1 发出的广播信息。
虚拟局域网限制了接收广播信息的工作站数,使得网络不会因传播过多的广播信息 (即**“广播风暴”)** 而引起性能恶化。
虚拟局域网的帧格式:
IEEE 批准了 802.3ac 标准,该标准定义了以太网的帧格式的扩展,以支持虚拟局域网。 虚拟局域网协议允许在以太网的帧格式中插入一个4字节的标识符,称为 VLAN 标记 (tag),用来指明该帧属于哪一个虚拟局域网。 插入VLAN标记得出的帧称为 802.1Q 帧或带标记的以太网帧,如图44所示:
那么在整个以太网上,各个站点的帧是这么传送的:
如图45所示,在计算机与交换机之间采用的还是标准的以太网帧,但是在交换机与交换机之间采用的是具有VLAN标记的802.1Q帧。
虚拟局域网的优点:
随着电子技术的发展,以太网的速率也不断提升,从传统的10Mbit/s以太网一直发展到现在常用的1Gbit/s的吉比特以太网,甚至更快的以太网,本节简单介绍几种高速以太网技术。
速率达到或超过 100 Mbit/s 的以太网称为高速以太网。 100BASE-T 在双绞线上传送 100 Mbit/s 基带信号的星形拓扑以太网,仍使用 IEEE 802.3 的 CSMA/CD 协议。 100BASE-T 以太网又称为快速以太网 (Fast Ethernet)。 1995 年IEEE已把 100BASE-T 的快速以太网定为正式标准,其代号为 IEEE 802.3u。
100BASE-T以太网的特点:
100 Mbit/s 以太网的三种不同的物理层标准:
100BASE-TX
使用 2 对 UTP 5 类线 或 屏蔽双绞线 STP。
网段最大程度:100 米。
100BASE-T4
100BASE-FX
允许在 1 Gbit/s 下以全双工和半双工两种方式工作。 使用 IEEE 802.3 协议规定的帧格式。 在半双工方式下使用 CSMA/CD 协议,全双工方式不使用 CSMA/CD 协议。 与 10BASE-T 和 100BASE-T 技术向后兼容。
吉比特以太网可用作现有网络的主干网,也可在高带宽(高速率)的应用场合中。
使用两种成熟的技术:一种来自现有的以太网,另一种则是美国国家标准协会 ANSI 制定的光纤通道 FC (Fiber Channel)。
以太网宽带接入具有以下特点:
PPPoE (PPP over Ethernet) 的意思是“在以太网上运行 PPP”,它把 PPP 协议与以太网协议结合起来 —— 将 PPP 帧再封装到以太网中来传输。 现在的光纤宽带接入 FTTx 都要使用 PPPoE 的方式进行接入。在 PPPoE 弹出的窗口中键入在网络运营商购买的用户名和密码,就可以进行宽带上网了。 利用 ADSL 进行宽带上网时,从用户个人电脑到家中的 ADSL 调制解调器之间,也是使用 RJ-45 和 5 类线(即以太网使用的网线)进行连接 的,并且也是使用 PPPoE 弹出的窗口进行拨号连接的。