【计网】数据链路层笔记
【计网】数据链路层
数据链路层概述
数据链路层在网络体系结构中所处的地位
链路、数据链路和帧
链路(Link)是指从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他的交换节点。
数据链路(Data Link)是基于链路的。当在一条链路上传送数据时,除需要链路本身,还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
计算机中的网络适配器(俗称网卡)和其相应的软件驱动程序就实现了这些协议。一般的网络适配器都包含了物理层和数据链路层这两层的功能。
帧(Frame)是数据链路层对等实体之间在水平方向进行逻辑通信的协议数据单元PDU
数据链路层三个重要问题
封装成帧和透明传输
封装成帧
封装成帧是指数据链路层给上层交付下来的协议数据单元PDU,添加一个首部和一个尾部,使之成为帧。
为了提高数据链路层传输帧的效率,应当使帧的数据载荷的长度尽可能地大于首部和尾部的长度。
考虑到对缓存空间的需求以及差错控制等诸多因素,每一种数据链路层协议都规定了帧的数据载荷的长度上限,即最大传送单元(MaximumTransferUnit,MTU)。例如,以太网的MTU为1500个字节。
透明传输
透明传输是指数据链路层对上层交付下来的协议数据单元PDU没有任何限制,就好像数据链路层不存在一样。
对于面向字节的物理链路使用字节填充的方法实现透明传输。
例如在帧定界符填充转义字符
对于面向比特的物理链路,使用比特填充的方法实现透明传输。
差错检测
误码相关概念
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错(称为比特差错)
比特1可能变成比特0
比特0可能变成比特1
在一段时间内,传输错误的比特数量占所传输比特总数的比率称为误码率(BitError Rate,BER)
提高链路的信噪比,可以降低误码率。但在实际的通信链路上,不可能使误码率下降为零。
使用差错检测技术来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要
问题之一。
奇偶校验
奇校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为奇数。
偶校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为偶数。
循环冗余校验
数据链路层广泛使用漏检率极低的循环冗余校验(Cyclic Redundancy Check,CRC)检错技术。
循环冗余校验CRC的基本思想:
收发双方约定好一个生成多项式G(X)。
发送方基于待发送的数据和生成多项式G(X),计算出差错检测码(冗余码)
将冗余码添加到待发送数据的后面一起传输。
接收方收到数据和冗余码后,通过生成多项式G(X)来计算收到的数据和冗余码是否产生了误码。
接收方CRC
奇偶校验、循环冗余校验等差错检测技术,只能检测出传输过程中出现了差错,但并不能定位错误因此无法纠正错误。
要想纠正传输中的差错,可以使用冗余信息更多的纠错码(例如海明码)进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用。
在计算机网络中,通常采用我们后续课程中将要介绍的检错重传方式来纠正传输中的差错,或者仅仅丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。
循环冗余校验CRC具有很好的检错能力(漏检率极低)虽然计算比较复杂,但非常易于用硬件实现因此被广泛应用于数据链路层。
可靠传输
可靠传输的相关基本概念
使用差错检测技术(例如循环冗余校验CRC)接收方的数据链路层就可检测出帧在传输过程中是否
产生了误码(比特差错)。
数据链路层向其上层提供的服务类型
不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做。
可靠传输服务:通过某种机制实现发送方发送什么,接收方最终就能收到什么。
可靠传输服务并不局限于数据链路层,,其他各层均可选择实现可靠传输。
可靠传输的实现比较复杂,开销比较大,是否使用可靠传输取决于应用需求。
选择重传协议
点对点协议PPP
点对点协议(Point-to-Point Protocol,PPP)是目前使用最广泛的点对点数据链路层协议。
点对点协议PPP是因特网工程任务(interetEngineeringTaskForce,IETF)于1992年制定的。经过多次修订,目前PPP已成为因特网的正式标准IRFC1661,RFC16621。
从网络体系结构角度看点对点协议PPP的组成。
PPP帧格式
标志(Flag)字段:PPP帧的定界符,取值为0x7E。
地址(Address)字段:取值为0xFF,预留(目前没有什么作用)
控制(Control)字段:取值为0x03,预留(目前没有什么作用)
协议(Protocol)字段:其值用来指明帧的数据载荷应向上交付给哪个协议处理
PPP帧的透明传输
发送方的处理:
(1)将数据载荷中出现的每一个0x7E减去0x20(相当于异或0x20),然后在其前面插入转义字符0x7D
若数据载荷中原来就含有0x7D,则把每一个0x7D减去0x20,然后在其前面插入转义字符0x7D.
(2)将数据载荷中出现的每一个ASCII码控制字符(即数值小于0x20的字符)
(3)加上0x20(相当于异或0x20,将其转换成非控制字符),然后在其前面插入转义字符0x7D
接收方的处理:
进行与发送方相反的变换,就可以正确地恢复出未经过字节填充的原始数据载荷。
PPP帧的差错检测
PPP的工作状态
以用户主机拨号接入因特网服务提供者ISP的拨号服务器的过程为例
共享式以太网
网络适配器
要将计算机连接到以太网,需要使用相应的网络适配器(Adapter),网络适配器一般简称为“网卡”。
在计算机内部,网卡与CPU之间的通信,一般是通过计算机主板上的I10总线以并行传输方式进行。
网卡与外部以太网(局域网)之间的通信,一般是通过传输媒体(同轴电缆、双绞线电缆、光纤)以串行方式进行的。
网卡除要实现物理层和数据链路层功能,其另外一个重要功能就是要进行并行传输和串行传输的转换。由于网络的传输速率和计算机内部总线上的传输速率并不相同,因此在网卡的核心芯片中都会包含用于缓存数据的存储器。
在确保网卡硬件正确的情况下,为了使网卡正常工作,还必须要在计算机的操作系统中为网卡安装相应的设备驱动程序。驱动程序负责驱动网卡发送和接收帧。
MAC地址
当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯
的标识,即一个数据链路层地址。
在每个主机发送的帧的首部中,都携带有发送主机(源主机)和接收主机(目的主机)的数据链路层地址。由于这类地址是用于媒体接入控制(MediumAccessControl,MAC)的,因此被称为MAC地址。
MAC地址一般被固化在网卡的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址
MAC地址有时也被称为物理地址,
IEEE 802局域网的MAC地址格式
网卡从网络上每收到一个无误码的帧,就检查帧首部中的目的MAC地址,按以下情况处理:
(1)如果目的MAC地址是广播地址(FF-FF-FF-FF-FF-FF),则接受该帧。
(2)如果目的MAC地址与网卡上固化的全球单播MAC地址相同,则接受该帧。
(3)如果目的MAC地址是网卡支持的多播地址,则接受该帧。
(4)除上述(1)、(2)和(3)情况外,丢弃该帧。
网卡还可被设置为一种特殊的工作方式:
混杂方式(Promiscuous Mode)。,工作在混杂方式的网卡。而不管帧的目的MAC地址是什么。只要收到共享媒体上传来的帧就会收下,对于网络维护和管理人员,这种方式可以监视和分析局域网上的流量,以便找出提高网络性能的具体措施。
嗅探器(Snifer)就是一种工作在混杂方式的网卡,再配合相应的工具软件(WireShark),就可以作为一种非常有用的网络工具来学习和分析网络。
CSMA/CD协议的基本原理
在以太网的发展初期,人们普遍认为“无源的电缆线比有源器件可靠”,因此将多个站点连接在一条
总线上来构建共享总线以太网。共享总线以太网具有天然的广播特性,即使总线上某个站点给另一个站点发送单播帧,表示帧的信号
也会沿着总线传播到总线上的其他各站点。
当某个站点在总线上发送帧时总线资源会被该站点独占。此时,如果总线上的其他站点也要在总线
上发送帧,就会产生信号碰撞。
当两个或多个站点同时使用总线发送帧时,就会产生信号碰撞。
为了解决各站点争用总线的问题,共享总线以太网使用了一种专用协议CSMAICD,它是载波监听多址接入/碰撞检测(Carrier Sense Multiple Access Colision Detection)的英文缩写词。
共享式以太网的争用期、最小帧长和最大帧长
懒得学
共享式以太网:退避算法、信道利用率
在使用CSMA/CD协议的共享总线以太网中,正在发送帧的站点一边发送帧一边检测碰撞,当检测到碰撞
时就立即停止发送,退避一段随机时间后再重新发送。共享总线以太网中的各站点采用截断二进制指数退避(Truncated Binary Exponential Backoff)算法来选择退避的随机时间。
懒得学
使用集线器的共享式以太网
早期的传统以太网是使用粗同轴电缆的共享总线以太网,后来发展到使用价格相对便宜的细同轴电缆.。
当初认为这种连接方法既简单又可靠,因为在那个时代普遍认为有源器件不可靠,而无源的电缆线才是
最可靠的。
然而实践证明这种使用无源电缆线和大量机械接口的总线型以太网并不像人们想象的那么可靠。
在使用细同轴电缆的共享总线以太网之后,以太网发展出来了一种使用大规模集成电路来替代总线、并
且可靠性非常高的设备,叫作集线器(Hub)
站点连接到集线器的传输媒体也转而使用更便宜、更灵活的双绞线电缆。
集线器特点:
IEEE于1990年制定了10BASE-T星型以太网的标准802.3i,这种以太网是局域网发展史上的一座非常重要的
里程碑,它为以太网在局域网中的统治地位奠定了牢固的基础。
10BASE-T以太网的通信距离较短,每个站点到集线器的距离不能超过100m。
IEEE 802.3以太网还可使用光纤作为传输媒体,相应的标准为10BASE-F,“F”表示光纤。光纤主要用作
集线器之间的远程连接。
物理层扩展以太网
共享总线以太网中两站点之间的距离不能太远,否则它们之间所传输的信号就会衰减到使CSMAVCD协议
无法正常工作。
在早期广泛使用粗同轴电缆或细同轴电缆共享总线以太网时,为了提高网络的地理覆盖范围,常用的是
工作在物理层的转发器。
IEEE 802.3标准规定,两个网段可用一个转发器连接起来任意两个站点之间最多可以经过三个网段。
数据链路层扩展以太网
使用网桥在数据链路层扩展以太网。
网桥(bridge)工作在数据链路层(包含其下的物理层),因此网桥具备属于数据链路层范畴的相关能力网桥可以识别帧的结构、网桥可以根据帧首部中的目的MAC地址和网桥自身的帧转发表来转发或丢弃所收到的帧。
网桥的主要结构和基本工作原理
交换式以太网
仅仅使用交换机而不使用集线器的以太网就是交换式以太网。
以太网交换机(以下简称交换机)本质上就是一个多接口的网桥:
交换机自学习和转发帧的流程与网桥是相同的。
另外,交换机也使用生成树协议STP,来产生能够连通全网但不产生环路的通信路径。
交换机的每个接口可以连接计算机,也可以连接集线器或另一个交换机。
当交换机的接口与计算机或交换机连接时,可以工作在全双工方式并能在自身内部同时连通多对接口,使每一对相互通信的计算机都能像独占传输媒体那样,无碰撞地传输数据。这样就不需要使用CSMAICD协议了
当交换机的接口连接的是集线器时,该接口就只能使用CSMAICD协议并只能工作在半双工方式
现在的交换机和计算机中的网卡都能自动识别上述两种情况,并自动切换到相应的工作方式。
交换机一般都具有多种速率的接口,例如10Mb/s、100Mb/s、1Gb/s甚至10Gb/s的接口,大部分接口支持多速率自适应。
一般的交换机都采用“存储转发”方式,为了减小交换机的转发时延,某些交换机采用了直通(Cut.Through)交换方式。
采用直通交换方式的交换机,在接收帧的同时就立即按帧的目的MAC地址决定该帧的转发接口,然后通过其内部基于硬件的交叉矩阵进行转发,而不必把整个帧先缓存后再进行处理。
直通交换的时延非常小。
直通交换不检查差错就直接将帧转发出去,有可能会将一些无效帧转发给其他主机。
共享式以太网与交换式以太网对比
以太网的MAC帧格式
虚拟局域网VLAN
VLAN诞生背景
将多个站点通过一个或多个以太网交换机连接起来就构建出了交换式以太网。
交换式以太网中的所有站点都属于同一个广播域。
随着交换式以太网规模的扩大,广播域也相应扩大。巨大的广播域会带来一系列问题。
广播风暴:广播风暴会浪费网络资源和各主机的CPU资源
难以管理和维护,带来潜在的安全问题。
虚拟局域网(Virtual Local Area Network,VLAN)是一种将局域网内的站点划分成与物理位置无关的逻辑
组的技术,一个逻辑组就是一个VLAN,VLAN中的各站点具有某些共同的应用需求
属于同一VLAN的站点之间可以直接进行通信,而不同VLAN中的站点之间不能直接通信网络管理员可对局域网中的各交换机进行配置来建立多个逻辑上独立的VLAN。
连接在同一交换机上的多个站点可以属于不同的VLAN,而属于同一VLAN的多个站点可以连接在不同的交换机上。虚拟局域网VLAN并不是一种新型网络,它只是局域网能够提供给用户的一种服务。
虚拟局域网VLAN的实现机制 — IEEE 802.1Q帧
IEEE 802.1Q帧也称为Dot One Q帧,它对以太网V2的MAC帧格式进行了扩展:在源地址字段和类型字段之间插入了4字节的VLAN标签(tag)字段。
以太网的发展
可以连接在不同的交换机上。虚拟局域网VLAN并不是一种新型网络,它只是局域网能够提供给用户的一种服务。
虚拟局域网VLAN的实现机制 — IEEE 802.1Q帧
IEEE 802.1Q帧也称为Dot One Q帧,它对以太网V2的MAC帧格式进行了扩展:在源地址字段和类型字段之间插入了4字节的VLAN标签(tag)字段。