数据链路层概述
链路:从一个节点到相邻节点的物理链路,而中间没有其他的交换节点
数据链路:是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路
数据链路以帧为单位传输和处理数据
数据链路层点对点传输的三个问题
封装成帧
封装成帧:数据链路层给网络层交付的协议数据单元添加帧头和帧尾的操作
帧头帧尾中包含有重要的控制信息
帧定界:确定哪里的帧的开头,哪里是帧的结尾
透明传输
是指数据链路层对上层交付的传输数据没有任何限制,犹如数据链路层不存在一样
- 面向字节的物理链路使用字节填充的方式实现透明传输
- 例:当网络层交付的数据单元中包含了帧定界符,则此时接收方会不清除该帧的结束位置,因此数据链路层会对帧进行扫描,在数据单元中出现的帧定界符之前添加转义字符,确保接收方识别定界符无误
- 面向比特的物理链路使用比特填充的方式实现透明传输
为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些
同时考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU
差错检测
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1 变成 0 ,0 变成 1 ,称为比特差错
在一段时间内,传输错误的比特占传输总比特的比率称为误码率
使用差错检测码来检测在传输过程中是否出现了比特差错,是数据链路层所以解决的重要问题之一
奇偶校验:在待发送的数据后面添加1位奇偶检验位,使整个数据(包括奇偶检验位)中“ 1 ” 的个数为奇数或偶数
结果:
- 如果有奇数个位发生误码,则奇偶性发生化,可以检测出误码
- 但是有偶数个位发生误码,则奇偶性没有发生变化,无法检测出误码(漏检)
循环冗余校验CRC:
- 收发双方约定好一个生成多项式
- 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输
- 接收方通过生成多项式来计算是否产生误码
检测码只能检测出帧在传输过程中出现误码,并不能定位错误,因此无法纠正错误
可靠传输
检测到误码后的情况
- 帧在传输过程中遭到干扰后可能会出现误码
- 发送方在发送帧之前,基于待发送的数据和检错算法计算出检错码,并将其封装在帧尾
- 接收方主机收到帧后,通过检错码和检错算法就可以判断出帧在传输过程中是否出现了误码
- 接上方情况,接收方主机收到有误码的帧后,不会接收该帧,并将其丢弃
- 如果数据链路层向上提供的是不可靠传输,那么丢弃后并不会有后续操作
- 如果数据链路层向上提供的是可靠服务,则需要其他措施,确保接收方主机重新收到该已被丢弃的帧
- 尽管误码是不能完全避免的,但若能实现对方发送什么,接收方就能收到什么,就称为可靠传输
一般情况下,有线链路的误码率比较低,为了减少开销,并不要求数据链路层向上提供可靠传输服务,即使出现了误码,可靠传输的问题由其上层处理
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务
- 比特差错只是传输差错中的一种
- 从整个计算机网络体系结构来看,传输差错还包括分组丢失,分组失序,分组重复(网络层)
- 可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输
三种可靠传输(各层)的实现机制
三种可靠传输实现机制的基本原理并不仅限于数据链路层,可以应用到计算机网络体系结构的各层协议中
停止-等待协议SW
- 接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传。但对于误码率较高的点对点链路,为使发送方尽早重传,也可给发送方发送NAK分组
- 为了让接收方能够 判断所受到的数据分组是否重复的,需要给数据分组编号,由于停止-等待协议的停等特性,只需要1个比特编号就足够
- 为了让发送方能够判断所受到的ACK分组是否是重复的,需要给ACK分组编号,数据链路层一般不会出现该情况,因此数据链路层实现停止-等待协议一般不用给ACK分组编号
回退N帧协议GBN
选择重传协议SR
MAC地址,IP地址以及ARP协议
- MAC地址是以太网的MAC子层所使用的地址(数据链路层)
- IP地址是TCP/IP体系结构网际层所使用的地址(网际层)
- ARP协议属于TCP/IP体系结构的网际层,作用是已知设备所分配到的IP地址,使用ARP协议可以通过该IP地址获取到设备的MAC地址(网际层)
MAC地址
- 使用点对点信道的数据链路层不需要使用地址
- 使用广播信道的数据链路层需要使用地址来区分各个主机
- 在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC(Media Access Control),因此这类地址被称为MAC地址
- MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读储存器EEPROM中,因此MAC地址也被称为硬件地址
- MAC地址也被称为硬件地址(但仍然是属于数据链路层)
- 一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡)。每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器往往拥有更多的网络接口,所以会用有更多的MAC地址。综上所述,严格来说,MAC地址是对网络上个接口的唯一标识,而不是对网络上各设备的唯一标识
IP地址
IP地址是因特网上的主机和路由器所使用的地址,用于标识两部分信息
- 网络编号:用于标识因特网上数以百万计的网络
- 主机编号:标识同一网络上不同主机(或路由器各个接口)
MAC地址不具备区分不同网络的功能
- 如果只是一个单独的网络,不介入因特网,可以指使用MAC地址
- 如果主机所在的网络要接入因特网,则IP地址和MAC地址都需要使用
从网络体系结构中看IP地址和MAC地址
数据包转发过程中IP地址和MAC地址的变化情况
- 数据包转发过程中,源Ip地址和目的IP地址保持不变
- 数据包转发过程中,源MAC地址和目的MAC地址逐个链路改变
在传输过程中,各节点都存在一个共同的问题:
上一节点知道下一节点的IP地址,但不知道相应的MAC地址,此时需要地址解析协议ARP来实现功能
ARP协议 地址解析协议
- 主机H1给主机H2发送数据包,主机H1知道主机H2的IP地址(默认),但不知道它的MAC地址,因此主机H1在数据链路层封装MAC帧时,无法填写目的MAC的地址。
- 实际上每个主机都会有一个ARP高速缓存表,当主机H1给主机H2发送数据包时,会先在自己的ARP高速缓存表中查找主机H2的IP地址所对应的MAC地址,但未找到
- 因此主机H1需要发送ARP请求报文来获取主机H2的MAC地址
- ARP请求报文通俗描述
- ARP相应报文通俗描述
ARP高速缓存表中的类型
- 动态:记录是主机自动获取到的,记录的生命周期默认为两分钟;当周期结束,记录删除,因为IP地址与MAC地址的对应关系并不是永久的(换网 卡等行为)
- 静态:记录是用户或网络维护人员手工配置的;可设置为系统重启后依然有效,或重启后无效
注意:ARP协议只能在逐个链路或者逐个网络中使用,而不能跨网络使用
另外,除了ARP请求和相应外,ARP还有其他类型的报文(用于检查网络冲突的无故ARP和免费ARP等)
ARP没有安全验证机制,存在ARP欺骗(攻击)问题
集线器与交换机的区别
集线器
使用双绞线和集线器HUB的星型以太网
- 使用集线器的以太网在逻辑上仍然是一个总线网(半双工方式),各站共享总线资源,使用的还是CSMA/CD协议
- 集线器只是工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测(碰撞检测由各站的网卡负责)
- 集线器一般拥有少量的容错能力和网络管理功能
- 例如网络中某个网卡故障,不停发送帧,此时集线器可以检测问题,并断开与故障网卡的连接,使得整个以太网仍然正常工作
当使用集线器HUB在物理层扩展以太网
但是由于总线特性,当二系中多台主机同时发送数据帧时,就会发生信号碰撞,为了使得各系中的以太网可以进行通信,可再使用一个集线器,互连三个系;如此,则互连称为一个更大的以太网,原来三个独立的碰撞域,也合并称为一个更大的碰撞域。
交换机
先忽略ARP过程,假设交换机帧交换表已经配置好
- 以太网交换机一般拥有多个接口,每个接口都可以直接与一台主机和另一个以太网交换机连接,一般都工作在全双工方式
- 以太网交换机具有并行性,能同时连通多个接口,使多对主机能同时通讯,而无碰撞(不使用CSMA/CD协议)
- 以太网交换机一般都具有多种速率的接口
- 以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧
- 以太网交换机是一种即插即用的设备,其内部的帧交换表是通过自动学习算法自动地逐渐建立起来的
- 帧的转发方式:
- 存储转发
- 直通交换:在接收帧的同时,就立即按照帧的目的MAC地址决定该帧的转发接口(缺点:不检查帧是否有差错)
两者区别
一台主机发送广播帧给其他主机
- 使用集线器的共享总线型以太网中的各主机,属于同一个广播域;
- 使用交换机的交换式以太网中的各主机,也属于同一个广播域;
多台主机发送单播帧给一台主机
- 使用集线器的共享总线型以太网,总线会发生碰撞,碰撞的帧会传播到总线上的各个主机
- 使用交换机的交换式以太网,交换机会先缓存,然后逐个转发给目的主机
两者扩展以太网的情况
- 单播帧
- 发送
- 集线器竞争总线情况
- 发送
- 广播帧
- 不管使用交换器还是集线器扩展以太网,扩展后的以太网的各主机都属于同一个广播域
- 使用交换机扩展以太网,扩大了广播域
- 但是使用集线器扩展以太网,扩大了广播域,也扩大了碰撞域
以太网交换机自学习和交换帧的流程
- 以太网交换机工作在数据链路层(也包括物理层),同时也有三层交换机(包括网络层)
- 以太网交换机收到帧后,在帧交换表中查找帧目的MAC地址所对应的接口号,然后通过该接口转发帧
- 以太网交换机刚上电启动时,其内部的帧交换表是空的,随着网络中各主机间的通信,以太网交换机通过自学习算法自动逐渐建立起帧交换表
案例中,假设主机知道网络中其他各主机的MAC地址
交换机刚开始:
- A需要发送帧给B
- 交换机1接收帧,并在帧交换表中登记A的MAC地址和对应接口,查找B的MAC地址和接口
- 没有查找到对应信息,于是盲目泛洪(给除了A的接口外的其他所有接口都转发帧)
- 交换机一开始并没有足够的信息支持明确转发帧,只能进行盲目转发
- B收到盲目泛洪转发的帧后确认接收人是自己,则接收该帧;其他主机收到该帧,则丢弃;
- 交换机2也会接收该帧,并在帧交换表登记A的MAC地址和对应接口
- 交换机2重复交换机1的泛洪,接入交换机2中的主机收到该帧,并丢弃
通过案例可知,交换机先会自行登记发送方的MAC地址和对应接口在帧交换表中,因此以太网中的各主机都发送帧后,该网络中的各交换机就可以学习到各主机的MAC地址
注意:帧交换表中的记录都有自己的有效时间,到期自动删除(某主机换网卡,换网络等情况)
以太网交换机的生成树协议STP
如何提高以太网的可靠性?
- 添加冗余链路
- 负面影响:会形成网络环路,带来广播风暴
- 广播风暴:广播帧在交换机之间反复转发,分别按顺时针,逆时针方向兜圈转发
- 大量消耗网络资源(不断转发)
- 也大量消耗主机资源(不断收到)
- 使交换机的帧交换表震荡(漂移,不断在增删记录)
- 广播风暴:广播帧在交换机之间反复转发,分别按顺时针,逆时针方向兜圈转发
- 负面影响:会形成网络环路,带来广播风暴
- 以太网交换机使用生成树协议STP(Spanning Tree Protocol),可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题
- 不论交换机之间采用何种物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络(自动阻塞链路),其逻辑拓扑结构必须是树状(无逻辑环路)
- 最终生成的树形逻辑拓扑要确保联通整个网络
- 当首次连接交换机或网络物理拓扑发生变化时(人为或者故障),交换机都将进行生成树重新计算
虚拟局域网VLAN概述
网路中会频繁出现广播信息
- TCO/IP协议栈中的很多协议都会使用广播
- 地址解析协议ARP(已知IP地址,找出相应的MAC地址)
- 路由信息协议RIP(一种小型的内部路由协议)
- 动态主机配置协议DHCP(用于自动配置IP地址)
分割广播域的方法
- 使用路由器可以分割广播域,但是路由器成本较高
虚拟局域网VLAN简介(Virtual Local Area Network)
- 是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求
- 划分VLAN,同一个VLAN内可以广播通信,不同VLAN之间不可广播通信
虚拟局域网VLAN的实现机制
VLAN技术是在交换机上实现的,需要交换机实现以下功能
- 能够处理带有VLAN标记的帧 :IEEE 802.1 Q帧
- 交换机的各个端口可以支持不同的端口类型
IEEE 802.1 Q帧
IEEE 802.1 Q帧 也称Dot One Q帧 ,对以太网的MAC帧格式进行了扩展,插入了4字节的VLAN标记
- VLAN标记的最后12比特称为VLAN标识符VID,它唯一地标志了以太网帧属于哪一个VLAN
- VID的取值范围时0-4095
- 0 和 4095 都不用来标识VLAN,因此用于标识VLAN的VID的有效取值范围时1-4094
- 802.1 Q帧 是由交换机来处理的,而不是用户主机来处理的。
- 当交换机收到普通的以太网帧时,会将其插入4字节的VLAN标记转变为802.1 Q帧,简称打标签
- 当交换机转发802.1 Q帧时,可能会删除其4字节VLAN标记转变为普通以太网帧,简称去标签
交换机端口类型
- Access
- 端口一般用于连接用户计算机
- 只能属于一个VLAN
- PVID值与端口所属VLAN的ID相同
- 接收处理方法:
- 一般只接受未打标签的普通以太网MAC帧,根据接收帧的端口的PVID给帧打标签
- 发送处理方法:
- 若帧中的VID与端口的PVID相等,则去标签并转发该帧,否则不转发
-
从用户主机收到帧,打标签,
其他端口收到后,判断VID是否匹配,去标签,
转发端口对应主机
- Trunk
- 一般用于交换机之间或交换机与路由器之间的互连
- 可以属于多个VLAN
- 用户可以设置Trunk端口的PVID值,默认为1
- 发送处理方法
- 对VID等于PVID的帧,去标签再转发
- 对VID不等于PVID的帧,直接转发
- 接收处理方法
- 接收未打标签的帧,根据接收帧的端口的PVID给帧打标签,VID的取值与端口的PVID取值相等
-
VLAN1的主机A发送广播帧
Trunk端口去标签转发 -
VLAN2的主机C发送广播帧
Trunk端口直接转发 - 互连的Trunk端口的PVID值不相等,可能会造成转发错误
- Hybrid
- 拥有Trunk和Access特点,可以用户与交换机,交换机之间,交换机和路由器之间
- 可以属于多个VLAN
- 可以这只端口的PVID值,默认1
- 发送处理方法:(与Trunk不相同)
- 查看帧的VID是否在端口的去标签列表中
- 存在,去标签转发
- 不存在,直接转发
-
去标签列表:
规定了该端口只能去除(接收)某些设定的VID的帧
- 接收处理方法:(与Trunk相同)
- 接收未打标签的帧,根据接收帧的端口的PVID给帧打标签,VID与端口的PVI的相对
- 接收已打标签的帧
- 查看帧的VID是否在端口的去标签列表中