第三章:数据链路层
一、数据链路层基本概念及基本问题
1.1、基本概念
1.1.1 数据链路层使用的信道类型
1.1.2 链路与数据链路
1.1.3 下面这张图显示的是H1向H2发送数据
1.1.4 帧
1.2、三个基本问题
1.2.1 封装成帧
1.2.2 透明传输
1.2.3 差错控制
二、两种情况下的数据链路层
2.1、使用点对点信道的数据链路层
2.1.1 PPP协议应该满足和不需要满足的要求如下表所示
2.1.2 PPP协议的组成
2.1.3 PPP协议的帧格式
2.2、使用广播信道的数据链路层
2.2.1 局域网的数据链路层
2.2.2 CMSA/CD协议
三、以太局域网(以太网)
3.1、使用集线器的星型拓扑
3.2、以太网的信道利用率
3.3、以太网的MAC地址
3.3.1 MAC帧的分类
3.3.2 MAC帧的格式
四、扩展以太网
4.1、在物理层扩展以太网
4.2、在数据链路层扩展以太网
4.2.1 以太网交换机的特点
4.2.2 以太网交换机的自学习功能
4.2.3 虚拟局域网
五、高速以太网 -- 了解
5.1 100BASE-T以太网
5.2 吉比特以太网
5.3 10吉比特以太网(10GE)和更快的网
(1)点对点信道:这种信道使用一对一的点对点通信方式;
(2)广播信道:这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享通道协议协调这些主机的数据发送。
(1)链路(link):是从一个结点到相邻结点的一段物理线路(有线或无线),而中间没有任何其他的交换结点。
(2)数据链路(data link):除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
现在最常用的方式是使用适配器(即网卡)来实现这些协议的硬件和软件。一般的适配器都包括了数据链路层和物理层这两层的作用。
数据链路层传送的是帧。帧是数据链路层的协议单元。
数据链路层要解决的三个基本问题是:封装成帧、透明传输与差错控制。
封装成帧就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。首部和尾部的一个重要作用就是进行帧定界。
说明:MTU(Maximum Transfer Unit):最大传输单元,数据部分长度的上限(1500个字节)
1.2.1.1 用控制字符进行帧定界的方法举例
计算机在收取数据的时候,必须包括帧的开始符和结束符,如果少了任何一个则认为数据不完整,直接丢弃,不接收。
用字节填充法解决透明传输的问题:发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入字符“ESC”。
字节填充(byte stuffing)或字符填充(character stuffing):接收端的数据链路层将数据送往网络层之前删除插入的转义字符。如果转义字符也出现在数据中,那么应该在转义字符前插入一个转义字符。当接收端连续收到连续的两个转义字符时,就删除其中的前面的一个。
对于发送者和接收者并不知道加了ESC转义字符,所以叫做透明传输。
传输过程中可能会产生比特差错:1可能会变成0,而0也可能变成1。
在一段时间内,传输错误的比特占所传输比特总数的比率为误码率BER(Bit Error Rate),误码率和信噪比有很大的关系。
为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。目前在数据链路层广泛使用的是循环冗余检验CRC。使用CRC循环冗余差错技术只能做到无差错接收,即凡是接收到数据链路层的帧都没有传输差错。
我们知道,互联网用户通常都需要连接到某个ISP才能接入到互联网。点对点(PPP:Point-to-Point Protocol)协议才能接入到互联网。PPP协议就是用户计算机和ISP进行通信时所使用的数据链路层协议。
应该满足的要求 | 不需要满足的要求 |
---|---|
简单---这是首要的要求 | 纠错 |
封装成帧 | 流量控制 |
透明性 | 序号 |
多种网络层协议 | 多点线路 |
多种类型链路 | 半双工或单工链路 |
差错检测 | ......... |
检测连接状态 | |
最大传输单元 | |
网络层地址协商 | |
数据压缩协商 |
PPP协议由3个部分组成:
(1)一个将IP数据报封装到串行链路的方法;
(2)一个用来建立、配置和测试数据链路层的数据控制协议LCP(Link Control Protocol);
(3)一套网络控制协议NCP(Network Control Protocol),其中的每一个协议支持不同的网络层协议。
2.1.3.1 帧中各字段的意义
PPP帧的首部和尾部分别为4个字段和2个字段。
(1)首部的第一个字段和尾部的第二个字段都是标志字段F(Flag),规定为0x7E,其中0x代表16进制,所以7E即为:01111110。标志字段表示一个帧的开始或结束。因此标志字段是PPP帧的定界符,连续两帧之间只需要一个标志字段;
(2)首部中的A和C,是最初考虑以后用的,但是至今也未用。所以这两个字段实际上并没有携带PPP帧的信息;
(3)PPP首部的第四个字段是2字节的协议字段。当协议字段是0x0021时,PPP帧的信息字段就是IP数据报。若为0xC021,则信息字段是PPP链路控制的LCP的数据等等;
(4)信息部分的长度是可变的,但是最大长度为1500个字节;
(5)尾部的第一个字段(2字节)是使用CRC的帧检验序列FCS。
2.1.3.2 字节填充
当信息字段中出现了和标志字段一样的比特(0x7E)组合时,就必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中。
当PPP使用异步传输的时候,它把转义字符定义为0x7D,并使用字节填充。
2.1.3.3 零比特填充
如上图所示:在发送端,只要发现有5个连续的1,就填入一个0,避免出现连续6个1(01111110:0x7E)。在接收端当发现5个连续1时,就把这5个连续1之后的0删除,还原成以前的比特流。
2.1.3.4 PPP协议的工作状态
如上图的PPP协议的状态图可以看出,从设备之间的无链路开始,到先建立物理链路,再建立链路控制协议LCP链路。再经过鉴别后再建立网络控制协议NCP链路,然后才能交换数据。由此可见,PPP协议已经不是存粹的数据链路层的协议,它还包含了物理层和网络层的内容。
广播信道可以进行一对多的通信,局域网使用的就是广播信道。
(1)局域网的最主要特点是:网络为一个单位所拥有,且物理范围和站点数目均有限。
(2)局域网的优点:
<1> 具有广播功能,从一个站点很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源;
<2> 便于系统的扩展和逐渐演变,各种设备的位置可灵活调整和改变;
<3> 提高了系统的可靠性、可用性和生存性。
(3)局域网按照拓扑结构可以分为:星型网、环型网以及总线网。
(4)局域网可使用多种传输媒体:比如双绞线和光纤,在这里说明下,局域网的工作跨越了数据链路层和物理层。
特此说明:由于以太网技术应用广泛,现在以太网已经成为了局域网的同义词,后面讨论的都是以太网的技术。
共享通道要着重考虑的一个问题就是如何使众多的用户能够合理而方便地共享通信媒体资源。这在技术上有两种方法:
<1> 静态划分通道;
<2> 动态媒体接入控制
<2.1> 随机接入:所有用户可随机的发送信息,如果有多个用户同一时间发送信息,就会发生碰撞;以太网采用的是随机接入方式,后面会讲到如何解决碰撞问题。
<2.2> 受控接入:用户不能随机的发送信息,必须服从一定的控制。用的较少。
以太网是将许多计算机接入到一根总线上,而总线的特点是:当一台计算机发送数据的时候,总线上其他所有计算机都可以检测到这个数据。而且总线上只要有一台计算机在发送数据,总线的传输数据就被占用。因此,在同一时间只能允许一台计算机发送数据。
因此,以太网采用CSMA/CD(Carrier Sense Multiple Access with Collision Detection)协议,即载波监听多点接入/碰撞检测去协调总线上各计算机的工作
为了更好的理解碰撞以及CSMA/CD,下面举一个例子:有一屋子的人在开讨论会,没有会议主持人控制发言。想发言的随机发言,不用举手示意。但我们还必须有个协议来协调大家的发言。这就是:如果你听见有人在发言,那么你就必须等别人讲完了才能发言(否则就干扰了别人发言)。但有时碰巧两个或更多的人同时发言了,那么一旦发生冲突,那家都必须立即停止发言,等到没有人发言了你再发言。以太网采用的CSMA/CD协议和上面场景很像。
2.2.2.1 CSMA/CD协议的几个概念
(1)多点接入:说明这是总线网络;
(2)载波监听:用电子技术检测到总线上由没有其他计算机也在发送;不管在发送前还是发送中都要不停的检测信道;
(3)碰撞检测:边发送边监听,即适配器边发送数据边检测信道上的信号电压的变化情况,以便判断自己在发送数据的时候其他站点是否也在发送数据。
2.2.2.2 争用期
最先发送的数据帧的站,在发送数据帧后至多经历过时间2τ(2倍的端到端往返时延)就可以知道发送的数据帧是否遭受到了碰撞。
经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
以太网的争用期:
(1)以太网的端到端往返时延2τ称为争用期,或碰撞窗口。通常取51.2us(微秒)为争用期长度;
(2)对于10Mb/s的以太网,在争用期内可发送512bit,即64字节;
(3)以太网在发送数据时,若前64字节未发生冲突,则后续的数据就不会发生冲突了。
最短有效帧长:
(1)如果发生冲突,则一定是在发送前的64字节之内;
(2)由于一检测到冲突就立即终止发送,这时已经发送出去的数据一定小于64字节;
(3)以太网规定了最短有效帧长为64字节,凡长度小于64字节的帧都是由于冲突而异常终止的无效帧。
强化碰撞:
当发送数据的站一旦发现发生了数据碰撞时,除了立即停止发送数据外,还要继续发送32比特或48比特的人为干扰信号,以便让所有的用户都知道发生了碰撞。
2.2.2.3 CSMA/CD协议的要点
(1)准备发送:先检测信道;
(2)检测信道:若信道忙,则一直检测,直至信道转为空闲。若检测到信道空闲,并在96比特时间内信道保持空闲(以太网规定帧间最小间隔为9.6us,相当于96比特)就发生这个帧;
(3)在发送过程中仍不停的检测信道,即网络适配器边发送边监听。
<1> 发送成功:未发生碰撞;
<2> 发送失败:停止发送数据,并且发送人为干扰信号。
以太网每发送完一次帧,一定要把自己发送的帧暂时保留一下。如果在争用期内检测出发生了碰撞,那么还要在推迟一段时间后把这个暂时保留的帧再发送一次。
集线器基本上没人用了,简单了解即可。一般能用集线器的地方都被交换机取代了。
使用集线器的以太网在逻辑上仍然是一个总线网,各工作站使用的还是CSMA/CD协议,并共享逻辑上的总线。集线器很像一个多接口的转发器,工作在物理层。
假定发送帧需要的时间是T0,成功发送一个帧占用信道的时间为T0 + τ (τ为一个站发送完最后一个比特时,这个比特还要在以太网上传播)。
从上图可以看出来,要提高信道的利用率,就要减小τ与T0之比,以太网中定义了参数:
a = τ / T0。
对以太网参数的要求:
(1)a的值要尽可能的小一些;
(2)当数据率一定时,以太网的连线长度受到限制,都在τ的值会太大;
(3)以太网的帧长不能太短,否则T0(T0 = 帧长 / 发送速率)的值会太小,使a的值过大。
理想情况下的信道利用率:
假定各站发送数据的过程没有发生数据碰撞(实际上是不太可能的),即总线一有空闲就有某一个站立即发送数据。这样一帧占用的线路时间为T0 + τ,而帧本身的发送时间是T0,所以极限信道利用率为:
可以看出来,只有参数a远小于1才能得到尽可能高的信道利用率。
在局域网中,硬件地址又称为物理地址或者MAC地址(因为这种地址要用到MAC帧中)。
MAC地址一共48位,6字节。前24位由注册管理机构分配给网络适配器的厂家,后24位由厂家自行指派扩展。
MAC地址已经被固话在适配器的ROM中,因此MAC地址也叫硬件地址或者物理地址。
【Tip:可以更改MAC地址:修改注册表或者直接网络属性里面改-----蹭网用!】
我们都知道适配器有过滤功能。但适配器从网络上没收到一个MAC帧就先用硬件检查MAC帧中的目的地址。如果是发往本站的帧则收下,然后再进行其他处理。否则就将次帧丢弃,不再进行其他处理。这里“发往本站的帧”包括以下三种:
(1)单播帧(一对一):即收到的帧的MAC地址与本站的硬件地址相同;
(2)广播帧(一对全体):即发送给本局域网上所有站点的帧(全1地址);
(3)多播帧(一对多):即发送给本局域网上一部分站点的帧。
【可以利用抓包工具,抓个包出来进行分析】
3.3.2.1 MAC帧字段说明
(1)第一个字段:目的地址,6字节;
(2)第二个字段:源地址,6字节;
(3)第三个字段:类型,用来标志上一层使用的是什么协议,以便把MAC帧的数据上交给上一层这个协议。比如,当类型字段的值为0x0800时,就表示上层使用的是IP数据报;
(4)第四个字段:数据,其长度在46~1500之间(46 = 最小长度64字节 - 18字节的首部和尾部),当数据字段小于46字节时,在数据字段后面一个整数字节的填充字段,以保证以太网的MAC帧不小于64字节;
(5)第五个字段:帧校验序列FCS,4字节,使用CRC校验。
说明:
(1)MAC帧没有结束符,因为以太网采用的是曼彻斯特编码的方式,发送方把一个以太网帧发送完毕后,就不再发送码元了,即适配器接口上的电压不再变化,很容易就能找到以太网帧结束的位置。在这个位置往前数4字节(FCS 4个字节),就可以确定数据字段的结束位置了。
(2)由上图可以发现,以太网帧的前面还有8个字节。这是因为在一个站刚开始接收MAC帧时,由于适配器的时钟尚未与到达的比特流达成同步,因此MAC地址的最前面的若干位就无法接收,结果整个MAC成为无用的帧。为了接收端迅速实现位同步,从MAC子层向下传到物理层时还要在帧前面插入8字节,由2部分构成,7个字节的同步码和1个字节的帧开始定界符。
3.3.2.2 无效MAC帧
出现以下三种情况之一的即视为无效的MAC帧:
(1)帧的长度不是整数个字节;
(2)用收到的帧校验序列FCS查出有差错;
(3)收到的帧的MAC客户数据字段的长度不在46~1500字节之间。考虑到MAC帧首部和尾部的长度共18字节,可以得出有效的MAC帧长度为64~1518字节。
说明:对于检查出无效的MAC帧就简单地丢弃,以太网不负责重传丢弃的帧。
以太网上的主机距离不能太远(比如200米),否则主机发送的信号经过铜线的传输就会衰减到使CSMA/CD协议无法正常工作。
扩展主机和集线器之间的距离的一种简单的方法就是使用光纤和一对光纤调制解调器,如下图所示。
光纤调制解调器的作用就是进行电信号和光信号的转换。由于光纤带来的时延很小,并且带宽很宽,因此这种方法可以很容易使主机和几公里以外的集线器相连接。
下面放一张用多个集线器连成更大的以太网的图,不进行说明了,知道会产生一个更大的碰撞区域就行了。
扩展以太网更常用的方法是在数据链路层进行。最初人们使用的是网桥(bridge)。网桥对收到的帧根据其MAC帧的目的地址进行转发和过滤。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是根据此帧的目的MAC地址,查找网桥中的地址表,然后确定帧发到哪一个接口,或者是把它丢弃(即过滤)。
但是,1990年问世的交换式集线器(switching hub),很快就淘汰了网桥。交换式集线器常被称为以太网交换机和第二层交换机,强调这种交换机工作在数据链路层。
(1)以太网交换机实质上就是一个多接口的网桥,通常都有十几个接口。以太网交换机的每个接口都直接与一个单台主机或另一个以太网交换机相连,并且一般都工作在全双工方式。以太网交换机还具有并行性,即能同时连通多对接口,使多对主机能同时通信(而网桥只能进行一次分析和转发一个帧)。相互通信的主机都是独占传输媒体,无碰撞地传输数据。
(2)以太网交换机的接口还有存储器,能在输出端口繁忙时把到来的帧进行缓存;
(3)以太网交换机是一种即插即用设备,其内部的帧交换表(又称为地址表)是通过自学习算法自动地逐渐建立起来的。
4.2.2.1 自学习功能举例
如上图所示,以太网交换机有4个接口,各连一台计算机,其MAC地址分别为A、B、C、D。一开始的时候交换表都是空的。下面进行这样一个案例:
(1)假如A先向B发送一帧,从接口1进入到交换机。交换机收到帧后,先查找交换表,没有查到应该从哪个接口转发这个帧。然后交换机把这个帧的源地址A和接口1写入到交换表里,并向接口1以外的所有接口广播这个帧;
(2)C和D丢弃这个帧,因为目的地址不对。只有B收下这个目的地址正确的帧,这个过程称过滤;
(3)以后不管从哪一个接口发出帧,只要其目的地址是A,就应当把收到的帧从接口1转发出去。
上面这个过程就是以太网交换机的自学习功能,只要有帧从该接口进入到交换机,就会记录在交换表里,下次就可以查询出来用,不用再广播了。
说明:交换表设置的有有效时间,过期会被自动删除。
4.2.2.2 生成树协议STP
有时为了增加网络的可靠性,在使用以太网交换机组网的时候,往往增加一些冗余的链路。在这种情况下,自学习过程就可能导致以太网帧在网络的某个环路中无限地兜圈子。如下图所示:
在上图中,如果一开始主机A通过接口交换机#1向主机B发送一帧。交换机#1收到这个帧后就向其所有接口的地方进行广播发送。现观察这样一个接口的走向:离开交换机#1的接口3-->交换机#2的接口1-->交换机#2的接口2-->交换机#1的接口4-->交换机#1的接口3-->交换机#2的接口1.......这样就无限地循环兜圈子下去了。这就是两个以太网交换机形成环的案例。
解决办法:生成树协议STP(Spanning Tree Protocol)。其要点就是不改变网络的实际拓扑,但是逻辑上则切断某些链路,使一台主机到所有的其他主机的路径都是无环路的树状结构,从而消除兜圈子的现象。
利用以太网交换机可以很方便地实现虚拟局域网VLAN(Virtual LAN)。【LAN:局域网】
虚拟局域网的定义是:由一些局域网网段构成的与物理地址无关的逻辑组,而这些网段具有某些共同的需求。每一个VLAN的帧都有一个明确的标识符,指明发送这个帧的计算机属于哪一个VLAN。
如下图所示,则按照部门划分VLAN,每个部门就是一个VLAN。
随着电子技术的发展,以太网的速率也不断提升。从传统的10Mbit/s以太网一直发展到现在常用的速率为1Gbit/s的吉比特以太网,甚至更快的以太网。
100BASE-T是在双绞线上传输100Mbit/s基带信号的星型拓扑以太网,仍然使用IEEE802.3的CSMA/CD协议,又被称为快速以太网(Fast Ethernet)。
吉比特以太网的标准IEEE802.3z有以下几个特点:
(1)允许在1Gbit/s下以全双工和半双工两种方式工作;
(2)在半双工方式下使用CSMA/CD协议,而在全双工方式下不使用CSMA/CD协议
...............
10GE只工作在全双工方式,因此不存在争用问题,当然也不需要使用CSMA/CD协议。