计算机网络 -- 链路层
本文参考资源:湖科大教书匠--计算机网络微课堂
-
链路(Link)就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。
-
数据链路( Data
Link)是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。 -
数据链路层以帧为单位传输和处理数据。
数据链路层的三个主要问题
封装成帧
-
帧头和帧尾中包含有重要的控制信息。
-
帧头和帧尾的作用之ー就是帧定界。
PPP帧的标志位置是为了标志每一个帧的开头和结尾
MAC帧没有包含帧定界的标志,当MAC帧在链路层封装好时会交给物理层,物理层会在MAC帧前面添加8字节的前导码,前导码前7个字节是前同步码,作用是为了使接收方时钟同步,之后的1字节是帧开始的定界符,表面后面紧跟的是MAC帧,同时以太网还规定了帧间间隔时间为96比特的发送时间,所以MAC协议也不需要帧结束定界符
透明传输
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
当传输的数据恰好内容和帧定界相同时,则会被误认为是结束,而丢弃了后面的内容,为了不出现类似情况,会在帧定界前插入传译符,当接收时则会吧帧定界前面的转义符去掉
而如果传输的数据内容恰好等于转义符,则在转义符前再次插入转义符,接收方则会将转义符前的转义符去掉
-
面向字节的物理链路使用字节填充(或称字符填充)的方法实现透明传输
-
面向比特的物理链路使用比特填充的方法实现透明传输。
为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些。
考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU
(Maximum Transfer Unit)
差错检测
传输过程中可能会产生误码:即0变成1或者1变成0(比特差错)
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER( Bit Error
Rate).
使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要向题之一
为了防止差错可以在帧尾添加检错码,接收端可以用算法,通过检错码来判断数据有没有出现问题
检测方法:
奇 偶校验
在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中“"1”的个数为奇数(奇校验)或偶数(偶校验)。
选择奇/偶校验,如果有偶/奇数个位发生误码,则奇偶性发生变化,可以检查出误码;反之,如果有奇/偶数个位发生变化,则奇偶性不发生变化,不能检查出误码(漏检)
循环冗余校验(CRC)
-
收发双方约定好一个生成多项式G(x);
-
发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起
传输; -
接收方通过生成多项式来计算收到的数据是否产生了误码
例题,发送方:
除法:做异或运算,不同为1相同为0
判断是否够除:当位数够就称之为够除?
例题,接收方:
与发送发不同,接收方的被除数即为它的本身,不需要根据多项式添加0
-
检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
-
要想纠正传输中的差错,可以使用元余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算
机网络中较少使用。 -
循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层。
-
在计算机网络中通常采用我们后续课程中将要讨论的检错重传方式来纠正传输中的差错,或者仅仅是丢奔检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。
可靠传输
当接收方接收到了误码时则会将其丢弃,如果不重发则成为不可靠传输
尽管误码是不能完全避兔的,但若能实现发送方发送什么接收方就能收到什么,就称为可靠传输。
-
一般情况下,有线链路的误码率比较低。为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的向题由其上层处理。
-
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
-
比特差错只是传输差错中的一种。
-
从整个计算机网络体系结枃来看,传输差错还包括分组丟失、分组失序以及分组重复。
-
分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层。
-
可靠传输服务井不仅局限于数据链路层,其他各层均可选择实现可靠传输。
-
可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求。
点对点协议PPP
帧格式
透明传输
实现透明传输的方法取决于说使用的链路类型
面向字节的异步链路采用插入转义字符的字节填充法
面向比特的同步链路来用插入比特0的比特填充法
差错检测
帧结尾带有两字节的FCS使用循环冗余校验CRC来计算该字段的取值
接收方每收到一个PP帧,就进行CRC检验。若CRC检验正确,就收下这个帧;反之,就丢弃这个帧。使用PPP的数据链路层向上不提供可靠传输服务
工作状态
使用广播信道的数据链路层
使用广播信道的数据链路层
-
共享式以太网的媒体接入控制协议 CSMA/CD
-
802.11局域网的媒体接入控制协议CSMA/CA
数据链路层的互连设备
-
网桥和交换机的工作原理
-
集线器(物理层互连设备)与交换机的区别
媒体接入控制
静态划分信道
随机接入
解决方法:
CSMA/CD
载波监听多址接入/碰撞检测CSMA/CD
争用期
最小帧长
最小帧长不固定,要根据网络跨距和数据传输速率计算
最小帧长 = 争用期 x 数据传输速率
最大帧长
截断二进制指数退避算法
信道利用率
MAC地址
使用点对点信道的数据链路层不需要使用地址
b0->b7
多播地址的判断方法:
数据包转发过程中IP地址与MAC地址的变化情况
-
数据包转发过程中源IP地址和目的IP地址保持不变;
-
数据包转发过程中源MAC地址和目的MAC地址逐个链路(或逐个网络)改变。
集线器与交换机的区别
集线器
-
使用集线器的以太网在逻辑上仍是一个总线网,各站共享总线资源,使用的还是CSMA/CD协议;
-
集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测(由各站的网卡检测);
-
集线器一般都有少量的容错能力和网络管理功能。例如,若网络中某个网卡出了故障,不停地发送帧。此时,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作。
交换机
-
以太网交换机通常都有多个接口。每个接口都可以直接与一台主机或另ー个以太网交换机相连。一般都工作在全双工方式。
-
以太网交换机具有井行性,能同时连通多对接口,使多对主机能
-
同时通信,无碰撞(不使用 CSMA/CD协议)
-
以太网交换机一般都具有多种速率的接口,例如:10Mb/s、100Mb/s、1Gb/s、10Gb/s接口的多种组合。
-
以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
-
以太网交换机是一种即插即用设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的。
-
帧的两种转发方式:
-
存储转发
-
直通交换:采用基于硬件的交叉矩阵(交换时延非常小,但不检查帧是否右差错
总结:
区别1:工作层次
集线器工作在物理层,属于1层设备,每发送一个数据,所有的端口均可以收到,采用了广播的方式,因此网络性能受到很大的限制。
交换机工作在数据链路层,属于2层设备,通过学习之后,每个端口形成一张MAC地址转发表,根据数据包的MAC地址转发数据,而不是广播形式。
区别2:转发方式
集线器的工作原理是广播形式,无论哪个端口收到数据之后,都要广播到所有的端口,当接入设备比较多时,网络性能会受到很大的影响。
交换机根据MAC地址转发数据,收到数据包之后,检查报文的目的MAC地址,找到对应的端口进行转发,而不是广播到所有的端口。
区别3:传输模式
集线器内部采用了总线型拓扑,各个节点共用一条总线进行通信,数据包的发送和接收采用了CSMA/CD协议,在同一时间内必须是单向的,只能维持在半双工模式下。两个端口不能同时收发数
据,并且当两个端口通信时,其他端口不同工作。
当交换机上的两个端口通信时,它们之间的通道是相互独立的,可以实现全双工通信。两个端口同时收发数据。
区别4:带宽影响
集线器无论有多少个端口,所有的端口共享一条宽带,同一时刻只能有两个端口传输数据,并且只能工作在半双工模式下。
以太网交换机自学习和转发帧的流程
A—>B:
假设主机A给主机B发送帧,该帧从交换机1的接口1进入交换机1。交换机1首先进行登记的工作,将该帧的MAC地址A记录到自己的帧交换表中,将该帧进入自己的接口的接口号1相应地也记录到帧交换表中。(上述登记工作就称为交换机的自学习)
之后,交换机1对该帧进行转发。该帧的目的MAC地址是B,在帧交换表中查找MAC地址B,找不到。于是对该帧进行盲目的转发,也成为泛洪。也就是从除该帧进入交换机接口外的其他所有接口转发该帧。可以看出,交换机一开始还是比较”笨“的,它还没有足够的知识来明确转发帧,只能进行盲目地转发。
主机B的网卡收到该帧后,根据帧的目的MAC地址B就知道这是发送给自己的帧,于是就接受该帧。主机C的网卡收到该帧后,根据帧的目的MAC地址B,就知道这不是发送给自己的帧,于是就丢弃该帧。
该帧从交换机2的接口2进入交换机2。交换机2首先进行登记的工作,将该帧的源MAC地址A记录到自己的帧交换表中,将该帧进入自己的接口的接口号2,相应地也记录到帧交换表中。之后,交换机2对该帧进行转发。该帧的目的MAC地址是B,在帧交换表中查找MAC地址B,找不到。于是对该帧进行盲目地转发。主机D、E、F都会收到该帧,根据帧的目的MAC地址B,就知道这不是发送给自己的帧,于是丢弃该帧。
B—>A:
接下来,主机B给主机A发送帧。该帧从交换机1的接口3进入交换机1。交换机1首先进行登记的工作,将该帧的源MAC地址B记录到自己的帧交换表中,将该帧进入自己的接口的接口号3相应地也记录到帧交换表中。之后,交换机1对该帧进行转发。该帧的目的MAC地址是A,在帧交换表中查找MAC地址A,可以找到。于是按照MAC地址A所对应的接口号1,从接口1转发该帧。这是明确的转发。主机A的网卡收到该帧后,根据帧的目的MAC地址A,就知道这是发送给自己的帧,于是接受该帧。很显然,交换机2不会收到该帧。
E—>A:
主机E给主机A发送帧,该帧从交换机2的接口3进入交换机2。交换机2首先进行登记的工作。之后,交换机2对该帧进行转发。该帧的目的MAC地址是A,在帧交换表中查找MAC地址A,可以找到。于是按照MAC地址A所对应的接口号2,从接口号2转发该帧。这是明确的转发。该帧从交换机1的接口4进入交换机1。交换机1首先进行登记的工作。之后,交换机1对该帧进行转发。该帧的目的MAC地址是A,在帧交换表中查找MAC地址A,可以找到。于是按照MAC地址A所对应的接口号1,从接口1转发该帧。这是明确的转发。主机A的网卡收到该帧后,根据帧的目的MAC地址A,就知道这是发送给自己的帧,于是接受该帧。
以太网交换机丢弃帧的情况:G—>A
为了演示该情况,我们给交换机1的接口再连接一台主机G。为了简单起见,没有画出集线器。这样,主机A、主机G、交换机1的接口1,就共享同一条总线。假设主机G给主机A发送帧,该帧通过总线进行传输,主机A和交换机1的接口1都可以收到。主机A的网卡收到该帧后,根据帧的目的MAC地址A,就知道这是发送给自己的帧,于是接受该帧。交换机1接收到该帧后,首先进行登记工作。之后,交换机1对该帧进行转发。该帧的目的MAC地址是A,在帧交换表中查找MAC地址A,可以找到。MAC地址A所对应的接口号是1,但是,该帧正是从接口1进入交换机1的,交换机1不会再从该接口将该帧转发出去,因为这是没有必要的,于是丢弃该帧。很显然,交换机2不会收到该帧。
MAC地址与交换机接口的对应关系并不是永久性的,帧交换表中的每条记录都有自己的有效时间,到期自动删除
原因是例如交换机某接口所连接的主机更换成另一台主机。又或者主机中的网卡坏了,更换了新的网卡。这些情况都会导致MAC地址与交换机接口的对应关系的改变。(之前介绍过的ARP高速缓存表,表中的IP地址与MAC地址的对应关系记录也是会定期自动删除的,这是因为IP地址与MAC地址的对应关系也并不是永久性的)
以太网交换机的生成树协议STP
如何提高以太网的可靠性?
添加冗余链路可以提高以太网的可靠性
网络环路会带来以下问题:
广播风暴--大量消耗网络资源,使得网络无法正常转发其他数据帧;
主机收到重复的广播帧--大量消耗主机资源
交换机的帧交换表震荡(漂移)
H1的广播由B转发给A和C,同理,A、C受到广播帧时也接着转发到B、C和A、B,导致循环
同时,由于数据包中的源MAC地址为H1的MAC地址,从第一次广播确认正确的端口时,连续的接受A、C的广播会使B的ARP表不断更改成错误的数据
STP
以太网交换机使用生成树协议STP( Spanning Tree
Protocol)可以在增加元余链路来提高网络可靠性的同时又避免网络环路带来的各种问题。
-
不论交换机之间采用怎样的物理连接,交换机都能够自动计算井构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的(无逻辑环路)
-
最终生成的树型逻辑拓扑要确保连通整个网络;
-
当首次连接交换机或网络物理拓扑发生变化时(有可能是人为改变或故障),交换机都将进行生成树的重新计算
自动计算生成树
网络发生改变时重新计算
虚拟局域网VLAN
分割广播域的方法
使用路由器
路由器默认不会对广播进行转发
VLAN
IEEE 802.1Q帧
交换机的端口类型
Access
Trunk
Hybrid