课程链接:https://www.bilibili.com/video/BV1Hx411D7rn?p=23
文章目录
数据链路层的基本概念
数据链路层的简单模型:
帧
- 帧就是在网路层传下来的信息上加上帧头和帧尾,再加上物理层地址(MAC地址)、校验值
- 帧就好比一列火车,有车头、车尾。当火车进站(接收数据的时候),从车头开始检查这列火车车厢是不是全到齐了,如果到齐了就让他进站,不然不让他进站。
数据链路层的三个基本问题
封装成帧
- 封装成帧就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。确定帧定界(帧的开始、结束)
- 首部和尾部一个重要的作用就是进行帧定界
用控制字符进行帧定界的方法举例:
透明传输
- 透明传输是指不管所传数据是什么样的比特组合,都应当能够在链路上传送。当所传数据中的比特组合恰巧与某一个控制信息完全一样时,就必须采取适当的措施,使接收方不会将这样的数据误认为是某种控制信息。这样才能保证数据链路层的传输是透明的。
- 透明传输就是说,数据链路层对上层交付的传输数据没有任何限制。就像数据链路层不存在一样
解决透明传输的两种方法: - 面向字节的物理链路使用字节填充(或称字符填充)的方法实现透明传输
- 对于面向比特的物理链路使用比特填充的方法实现透明传输(发送方在发送数据中,每5个连续1后面就插入一个比特0。接收方只需要每5个连续1,剔除一个0即可)
面向比特的时候:
差错控制
- 数据链路层只保证链路上收到无差错数据,如果有错就丢掉,不纠错。
- 实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1.这称为比特差错
- 在一段时间内,传输错误得比特占所传输比特总数的比率称为误码率BER
- 使用差错检测码来检测数据在传输过程中是否产生了比特差错,思数据链路层要解决的重要问题之一
如下图:MAC帧和PPP帧都有FCS,帧检验序列,就是为了检错
奇偶校验
- 在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中“1”的个数为奇数(奇校验)或偶数(偶校验)
- 如果有奇数个位发生误码,则奇偶性发生改变,可检查出误码
- 如果有偶数个位发生误码,则奇偶性不发生变化,不能检测出误码(漏检)
如图所示,主机A给主机B发送数据,如果是奇校验,那么主机B收到的数据应该是奇数,但如果主机B收到的是偶数,就知道传输过程中发生了误码
循环冗余校验(CRC)
- 步骤:
- 收发双方约定好一个生成多项式G(x)
- 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输
- 接收方通过生成多项式来计算数据是否产生误码
发送方的处理:
-
余数就是冗余码,长度应和生成多项式最高次数相同
接收方的处理:
为什么无误码的时候余数会为0呢?
证明链接:https://baike.baidu.com/item/CRC/1453359#2
练习1: -
做除法实际上是异或运算。商0的时候表示不够除,商1的时候表示够除
练习2:
-
检错码只能检测出帧在传输过程中出现了差错,但不能定位错误,因此无法纠正错误。
-
要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用
-
循环冗余校验CRC有很好的的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层
-
在计算机网络中通常采用**检错重传的方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,**这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务
两种情况下的数据链路层
使用点对点信道的数据链路层
点对点信道:
- 点对点协议通常使用ppp协议(数据链路层的协议,而且是广域网的协议)
- 这种信道使用一对一的点对点通信方式
- 就是说发送端和接收端中间没有其他设备,如图:
PPP协议的组成:
三个组成部分:
- 数据链路层协议可以用于异步串行或同步串行介质
- 他使用LCP(链路控制协议)建立并维护数据链路连接(LCP协议可以用于身份验证、计费功能)
- 网络控制协议(NCP)允许在点到点的连接上使用多层网络层协议,如图所示
PPP协议的帧格式:
- F是开始和结束,用16进制的7E表示
- A是地址,因为这是点到点的通信,发送方和接收方中间没有其他设备,所以这个地址没什么用,是固定的FF(16进制)
- C暂时没用
- 协议字段用来代表信息部分里面的是啥内容,比如是0x0021的话,就代表信息部分是IP数据报,如下图:
- FCS是帧检验序列,接收方用来检查这个帧是否有错误的
- PPP是面向字节的,所有PPP帧的长度都是整数字节
使用广播信道的数据链路层
- 使用的协议是CSMA/CD协议 ,是局域网的协议
广播信道:这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送
如图,主机A发送信息,主机B、C都是可以收到的
计算机怎么实现共享通信媒体: - 静态划分信道:任意两端想实现通信的话就划分一个通信信道
- 动态媒体接入控制(多点接入)
认识以太网:
- 当采用集线器通信:
A发送数据给B,通过集线器会发送给B、C、D、E。然后CDE的网卡会发现发送过来数据的目的MAC地址不是自己,就不予接收
载波监听多点接入/碰撞检测 以太网使用CSMA/CD协议:
CSMA——CD协议
争用期(说明了为什么MAC帧的最小长度为64字节)
链路与数据链路
- 链路:指的是物理上的一根线。是一条点到点的物理线路段,中间没有任何其他交换结点
- 一条链路只是一条通路的一个组成部分
- 如下图,交换机和主机之间的那一段线就叫链路
- 数据链路:除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路
- 现在最常用的是使用适配器(即网卡)来实现这些协议的硬件和软件
- 一般的适配器都包括了数据链路层和物理层这两层的功能
以太网
- 以太网是目前应用最普遍的局域网技术
以太网的两个标准:(现在应该是802.3协议取代了dix协议)
- DIX Ethernet V2是世界上第一个局域网产品(以太网)的规约
- IEEE的802.3标准
- DIX Ethernet V2标准与IEEE的802.3标准只有很小的差别,因此可以将802.3局域网简称为“以太网”。
- 严格来说,“以太网”应当是指符合DIX Externet V2标准的局域网
其实只要满足CSMA-CD 的都算是以太网
以太网与数据链路层的两个子层:(LLC子层已经被抛弃了)
- 现在很多厂商生产的适配器上就仅装有MAC协议而没有LLC协议,所以我们认为只有一个子层就行了
为了使数据链路层能更好的适应多种局域网标准,802委员会就将局域网的数据链路层拆成两个子层:
- 逻辑链路控制LLC子层
- 媒体接入控制MAC子层
与接入到传输媒体有关的内容都放在MAC子层,而LLC子层则与传输媒体无关,即不管采用何种协议的局域网对LLC子层来说都是透明的。。
由于TCP/IP体系经常使用的局域网是DIX Ethernet V2而不是802.3标准中的几种局域网,因此现在802委员会制定的逻辑链路控制子层LLC(即802.2标准) 的作用已经不大了
- 注:很多厂商生产的适配器上仅装有MAC协议而没有LLC协议
MAC层
- LLC 子层现在几乎取消了
- 计算机的网卡都有一个地址,网卡那个地址就叫媒体访问控制地址,又叫MAC地址
适配器检查MAC地址
- 适配器从网络上每收到一个MAC帧就首先用硬件检查MAC帧中的MAC地址
- 如果是发往本站的帧则收下,然后再进行其他处理
- 否则将此帧丢弃,不再进行其他处理
- “发往本站的帧” 包括以下三种帧:
- 单播帧:只发给一个主机
- 广播帧:发给所有的主机
- 多播帧:分给多个指定的主机
MAC帧格式
- 以太网帧长最少是64字节
- 前同步码不属于帧里面的内容
无效的MAC帧:
帧间最小间隔:
以太网提供的服务:
以太网提供的服务是不可靠的交付,即尽最大努力的交付
- 当接收站接收到有差错的数据帧时就丢弃此帧,其他什么都不做。差错的纠正由高层(传输层)来决定
- 如果高层发现丢失了一些数据而进行重传,但以太网并不知道这是一个重传的帧,而是当做一个新的数据帧来发送
以太网的拓扑结构:
集线器的一些特点
集线器是使用电子器件来模拟实际电缆线的工作,因此整个系统仍然像一个传统的以太网那样运行。集线器使用了大规模集成电路芯片,因此这样的硬件设备的可靠性已大大提高了。
使用集线器的以太网在逻辑上仍是一个总线网,各工作站使用的还是CSMA/CD协议,并共享逻辑上的总线。
集线器很像一个多接口的转发器,工作在物理层
- 一台计算机两根线发数据,两根线收数据。发送数据的那两根线会通道其他所有计算机接收数据的两根线上
- 国际互联网给用集线器连接的以太网定了标准:
交换机和集线器的区别
- 工作层次
- 集线器工作在物理层,属于1层设备,没法送一个数据,所有端口都可以收到,采用了广播的方式,因此网络性能受到很大的限制
- 交换机工作在数据链路层,属于2层设备,通过学习之后,每个端口形成一张MAC地址转发表,根据数据包的MAC地址转发数据,而不是广播形式
- 转发方式
- 集线器的工作原理是广播形式,无论哪个端口收到数据,都要广播到所有端口
- 交换机根据MAC地址转发数据,收到数据包之后,检查报文的目的MAC地址,找到对应的端口进行转发,而不是广播到所有端口
- 传输模式
- 集线器内部采用了总线型拓扑,各个节点共用一条总线进行通信,数据包的发送和接收采用了CSMA/CD协议,在同一时间内必须是单向的,只能维持在半双工模式下。两个端口不能同时收发数据,并且当两个端口通信时,其他端口不能工作
- 当交换机的两个端口通信时,他们之间的通道是相互独立的,可以实现全双工通信。两个端口同时收发数据
信道利用率
在物理层扩展以太网
- 使用双绞线连的网,不能超过100m。光纤可以几公里
距离上的扩展:
数量上的扩展:
- 把独立的碰撞域通过集线器连起来。但是这样会构成一个更大的碰撞域
在数据链路层考虑扩展(现在应该使用的是交换机而不是网桥)
- 其实是对物理层采用集线器扩展这个方式的优化
- 以前网桥比较珍贵,接口比较少,所以只和集线器直接相连。但是后来网桥不那么珍贵了,接口也变多了,就直接和计算机相连接,这样的话,网桥就变成了现在的交换机(可以说交换机的前身是网桥)
- 交换机是存储转发的(有缓冲区),所以用交换机可以全双工通信。
- 交换机是端口带宽独享、安全、基于MAC地址转发、能够自学习构建MAC地址表
- 交换机是现在的主流设备
网桥的内部结构
使用网桥扩展以太网
- 因为网桥是基于MAC地址转发的,如果主机A给主机B发送消息,连接主机B所在碰撞域的这个网桥里面没有B对应的MAC地址信息,就不会转发出去。这样就隔离了碰撞域
透明网桥:
- “透明”是指局域网上各站点并不知道所发送的帧经过哪几个网桥,因为网桥对各站来说是不可见的。
交换机
以太网交换机自学习和转发帧的流程
-
以太网交换机工作在数据链路层(也包括物理层,有的也有网络层的)
-
以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应接口号,然后通过该接口转发帧
-
以太网交换机是一种即插即用设备,刚上电启动时其内部的帧交换表是空白的,随着网络中个主机间的通信,以太网交换机通过自学习算法自动逐渐建立起帧交换表
-
交换机盲目转发又称为泛洪
-
帧交换表中的每条记录都有自己的有效时间,到期自动删除。因为MAC地址与交换机接口的对应关系并不是永久性的(例如更换了主机,或者更换了主机里的网卡 )
以太网交换机的生成树协议STP
如图所示,如何提高以太网的可靠性?
- 添加冗余链路可以提高以太网的可靠性
- 例如给B和C之间添加一条链路,这样AB之间的链路故障,AB仍然是可以通信的
- 但是,冗余链路也会带来负面效应—形成网络环路。网络环路可能会造成广播风暴
- 为了可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题,以太网交换机使用生成树STP协议
- 不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树形的(无逻辑环路)
- 交换机根据生成树算法,自己阻塞自己的一些接口,或恢复一些接口
虚拟局域网VLAN概述
-
分割广播域的方法
- 使用路由器可以隔离广播域,但是路由器的成本较高,所以虚拟局域网VLAN技术应运而生 -
虚拟局域网VLAN是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组 具有某些共同的需求。
如图所示,这本来是一个大的局域网,网络中的各主机属于同一个广播域。但是,现在根据应用需求,把他划分成VLAN1和VLAN2。VLAN1中的广播数据包不会传送到VLAN2,VLAN2中的广播数据包也不会传到VLAN1,VLAN1和VLAN2相当于被划分成了两个广播域。
那么如何实现VLAN呢?
虚拟局域网VLAN的实现机制
-
虚拟局域网VLAN技术是在交换机上实现的
-
需要交换机实现以下两个功能
- 一个是能处理带有VLAN的帧
- 另一个是交换机的各端口可以支持不同的端口类型 -
第一个功能:处理IEEE 802.1Q帧的时候:
- IEEE 802.1 Q帧对以太网的MAC帧格式进行了扩展,插入了4字节的VLAN标记。如下图,是普通的MAC帧和插入了VLAN标记之后的MAC帧
- 就是这个VLAN标记,才可以把一个广播域划分成多个广播域
- VLAN标记的最后12比特称为VLAN标识符VID,它唯一地标志了以太网帧属于哪一个VLAN
- VID的取值范围是0~4095(0 ~ 2^12-1)
- 0和4095都不用来表示VLAN,因此用于表示VLAN的VID的有效取值范围是1~4094
- 802.1 Q帧是由交换机来处理的,而不是用户主机来处理的
- 当交换机收到普通的以太网帧时,会将其插入4字节的VLAN标记转变为802.1 Q帧,简称“打标签”
- 当交换机转发802.1Q帧时,可能会删除其4字节VLAN标记转变为普通以太网帧,简称“去标签” -
第二个功能:交换机的端口类型:
Access:
Trunk:
Hybrid(华为私有的):
高速以太网
- 标准的以太网是10Base-T