计算机网络|谢希仁版|数据链路层

数据链路层

数据链路层研究的是什么?

在同一局域网中,分组怎么从一台主机传送到另一台主机,但并不经过路由器转发。或者说我们研究的是相邻站点的传播

数据链路层的几个共同问题

数据链路与链路

链路:就是一个节点到其他相邻节点的一段物理线路

数据链路:物理链路以外+必要的通信协议除了来控制这些数据的传输

若把实现这些协议的硬件和软件加到链路上,就构成了数据链路,

现在最常用的方法是使用网络适配器(既有硬件也有软件)

,一般的适配器都包括了数据链路层和物理层的功能

点对点信道的数据链路层的协议数据单元

通信规程

早期的数据通信协议的叫法

三个基本问题

封装成帧

就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧 ,接收端在物理层收到上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。

首部和尾部一个重要的作用就是帧定界 。此外首部和尾部还有必要的控制信息比如目的地,来源。

为了提高帧的传输效率,应当使帧的数据部分长度尽可能地大于首部和尾部的长度。但是每一种链路层协议都规定了所能传送的帧的数据部分长度上限---最大传送单元MTU(max transfet unit)

我们一般使用 SOH(start of header) 二进制 0000 0001

EOT(end of transmission 二进制 0000 0100

他们都是不可打印字符。

当我们传送文本文件时,使用他们完全没问题,但是二进制文件时可能数据中就有 0000 01000 使得提前结束传输

透明传输

透明传输就是,不管你从键盘上输入什么都可以传输过去,表示无论什么比特组合,都可以通过数据链路层这些数据看不见数据链路层有什么阻碍传输的东西。上面的提前终止就不是透明传输。

为了实现透明传输,就必须使数据中出现的控制字符"SOH"和"EOT"在接收端不被解释为控制字符具体的做法是在SOH或EOH前面加入一个转义字符"ESC"其十六进制编码1B ,二进制00011011。而在接收端的数据链路层在把数据送往网络层前删除这个转移字符,这种方法称为字符填充 或者字节填充

如果转移字符也出现在数据里 那就再转移字符前再加一个转移字符,因此收到两个连续的转移字符时删除一个

差错检测

比特在数据传输的过程中可能会发生差错,1变0,0变1等,这称为比特检验。

常见的检验方法有

  1. 奇偶检验,奇偶检验是在数据位的后面添加一位,看 1或者 0 是不是 和以前的奇偶性一样。这个方法不是很靠谱 因为一个数据中有两个 0 变为 1 奇偶性还是一样的。只能检验奇数比特位的出错。
  2. 汉明检验,插入的检验码位数k 与 数据的位数的n 的关系要满足 2^k>= n + k +1 一个八比特的信息 根据公式要插入4位检验码冗余度比较高
  3. 循环冗余检验CRC,发送端我们根据生成多项式的系数生成除数,比如生成多项式P(x) = X^3 + x^2+1 生成的系数就为 1101
    构造被除数在发送的信息后面添加生成多项式最高次数个的0 , 让如要发送的数据是101001就在后面添加3个零 1011001000
    两者相除,计算可得余数就是冗余码FCS,如果余数不够生成多项式最高位的次数的,则在余数前面补0让和P(X)最高项次数一样,把冗余码添加到数据中发送
    接收端还是用由生成多项式的系数生成的除数来除,看余数是否为0,如果为0则没有发送错误。
    在数据链路层层若只是用CRC检验,只能做到对帧的
    无差错接受:即凡是接收端数据链路层接受的数据,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错
    。接收端丢弃的帧虽然曾收到了,但最终还是因为有差错被丢弃,即没有被接受 ,接受和接收是不一样的概念。或者说凡是数据链路层接收端接的帧均无差错

可靠传输

我们这里并没有要求数据链路层向网络层提供"可靠传输 "的服务,可靠传输值的是 发送端发送什么接收端非常信任都接受。

除了比特差错 还有可能 另一种 关于帧的传输差错,比如帧丢失,帧重复或帧失序

我们使用帧编号,确认和重传机制来接近这一问题,但一般针对的是通信质量较差的无线传输链路,对于通信质量良好的有线传输链路则不用,出现差错则由上面的层次负责

点对点协议PPP

PPP(Point-to-Point Protocol),ppp协议就是用户计算机和ISP进行通信时所使用的数据链路层协议

PPP协议应满足的需求

  1. 简单 ,IETF设计互联网体系结构时,数据链路层的帧,不需要纠错,不需要序号,也不需要流量控制,由上面层次完成。所以IETF把"简单"作为首要的需求 ,接收方每收到一个帧就进行CRC检验 正确就手下不正确就丢弃,其他什么也不做
  2. 封装成帧,. PPP协议规定必须把特殊的字符作为帧定界符
  3. 透明性,如果数据中出现和帧定界符一样的比特组合时,就要采取有效的措施来解决这个问题
  4. 多种网络层协议:PPP协议能够在同一条物理链路上同时支持多种网络层协议
  5. 多种类型链路:PPP协议还要能够在多种类型的链路上运行
  6. 差错检测:对接收端收到的帧进行检测,并且丢弃有差错的帧
  7. 检测连接状态:能够及时检查链路是否处于正常状态
  8. 最大传输单元 设置MTU的标准默认值
  9. 网络层地址协商:提供一种机制使通信的两个网络层的实体能够知道或者能够配置彼此的网络层地址,因为只连接不知道地址就不知道传送到哪
  10. 数据压缩协商:提供一种方法来协商使用数据压缩算法

PPP协议的组成

  1. 一个将IP数据报封装到串行链路的方法
  2. 一个用来建立,配置和测试数据链路连接的链路控制协议LCP
  3. 一套网络控制协议NCP

PPP协议帧的格式

各字段的意义

首部的AC暂时没有意义

首部和尾部的F都是帧定界符 0x7E 01111110,标准一个帧的开始或结束

协议字段 表明
0x0021 PPP帧的信息字段IP数据报
oxC021 PPP链路控制协议
0x8021 网络层控制的数据

字节填充

我们把转义字符定为0x7D(01111101),并异步传输时使用字节填充

填充方法

  1. 把信息字段中出现的的每一个0x7E(帧定界符)字节转变为2字节序列(0x7D,0x5E)
  2. 若出现一个0x7D的字节则把0x7D转变为两个字节序(0x7D,ox5D)
  3. 若信息中出现ASCII码的控制字符(即数值小于0x20的字符)则在该字符前要加入一个0x7D字节,同时将该字符的编码加以改变。例如 0x03就要把它转变为2字节序列(0x7D,0x23)

零比特填充

我们发现帧定界符0x7E 0111 1110

中间是连续的5个1,当我们使用在SONET/SDH链路时,使用同步传输,扫描信息字段,发现5个1 就插入0

PPP协议的工作状态

用于个人电脑向ISP发送一系列的的链路控制协议LCP分组,以便建立LCP连接,接着还要进行网络层配置,网络控制协议NCP给新接入的用户电脑分配临时的IP

当通信完毕时,NCP释放网络层连接,收回原来分配的IP地址。接着LCP释放数据链路层连接。最后释放的是物理层链接

使用广播信道的数据链路层

局域网

以太网和局域网是同义词

局域网有如下的优点:

1)具有广播功能

2)便用系统的扩展和逐渐地演变

3)提高系统的可靠性,可用性性和生存性

局域网可按网络拓扑结构进行分类,星形网,环形网,总线网

如何共享信道资源

  1. 静态划分信道,比如我们之前学过的频分复用,时分复用,分拨复用和码分复用。用户只要分配到了信道就不会和其他用户发送冲突
  2. 动态媒体接入控制,它又称为多点接入 ,其特点是信道并非在用户通信时固定分配给用户。 这里有分为两类
    1)随机接入,随机接入的特点是所有的用户可随机地发送信息。但如果恰巧有两个或更多用户在同一时刻发送信息,那么在共享媒体上就要产生碰撞,使得这些用户的发送都失败了。因此,必须有解决碰撞的网络协议
    2)受控接入,用户不再随机地发送信息而必须服从一定的控制。

以太网的两个主要标准

以太网1975年由美国施乐(Xerox)公司的Palo Alto简称PARC于1975年研制成功的

1980年 DEC(读音德克)公司,英特尔,施乐公司联合提出了10Mbit/s 以太网规约的第一个版本 DIX v1

1982年又修改为第二版规约 即DIX Etherent V2 成为世界上第一个局域网产品的规约

1983年IEEE 802委员会制定了第一个IEEE以太网标准

为了使数据链路层能适应多种局域网标准,IEEE802委员会就把局域网的数据链路层分为两个子层,即逻辑链路控制子层LLC(Logic LInk' Control)和媒体接入控制子层MAC(Medium Access Control)子层,LLC层与传输媒体无关而MAC与 传输媒体相关,MAC对LCC是透明的。

现在IEEE802委员会规定取消LCC层的作用。

设配器的作用

网络适配器又称为网卡

计算机与外界局域网的链接是通过适配器连接的。适配器和局域网之间的通信是通过电缆和双绞线串行传输的。而适配器和计算机之间是通过计算机上的总线并行传输的。因此适配的一个作用就是数据串行传输和并行传输的转换。

CSMA/CD协议

总线上只要有一台计算机发送数据,总线的资源就被占用,所以在同一时间只允许一台计算机发送数据,否则计算机之间就会相互干扰,如何协调以太网上的计算机工作就是以太网要解决的一个问题。

CSMA/CD协议的要点

CSMA/CD就是载波监听多点接入/碰撞检测的意思

"多点接入 "就是说明这是总线型网络。
"载波接入 "就是"边发送边监听"就是不管在发送数据之前还是发送数据之中,每个站都必须不停检测信道。

"碰撞检测"当适配器检测到电压变化幅度超过一定阈值时,则表明发送了碰撞

以太网使用截断二进制退避算法来确定碰撞重传的时间。

截断二进制退避算法

  • r * 2t
  • r 与 k(重传次数有关)
  • r的选取是从 0 ~ 2^k - 1中选取的
  • k重传次数超过十 当十计算
  • 超过16则丢弃该帧

具体的争用期时间2t是51.2us 对于10Mbit/s的以太网可以发送512bite 64字节所以以太网规定一个最短帧的长度为64字节

如果发送了一个很短的帧,在发送完毕之前没有检测出碰撞(因为发送时延小于2t,发送之前可能检测不出碰撞)在假定在目的站之前发生了碰撞,目的站会丢弃,但是发送站不知道发生了碰撞所以不会重传(因为认为道路上是空的)。

为了避免这种情况以太网规定最短帧长为64字节,凡长度小于63字节的帧都是由于冲突而异常终止的无效帧。

51.2us 相当于算的的2.5km以太网端到端的长度 到远没有这么大实际为1km 不仅考虑到以太网端到端的时延,而且还包括其他因素。

强化碰撞

当数据发生碰撞后,除立即停止发送数据外还要继续发送32比特或48比特的人为干扰信号,以便让所有用户都知道发生了碰撞

帧间最小间隔

时间为9.6us 这样做是为了使刚刚收到的数据帧的站的接收缓冲来得及清理,做好下一次接收帧的准备

使用集线器的星形拓扑

以太网采用星形拓扑,在星形的中间增加了一种可靠性非常高的设备,叫做集线器

10BASE-T 双绞线以太网的出现是,局域网发展史上的一个里程碑

,使总线型变为星形

集线器的一些特点

1)用集线器的以太网在逻辑上还是一个总线网

2)一个集线器有许多端口

3)集线器工作在物理层 ,不进行碰撞检测

4)采用了专门的芯片,进行自适应串音回波干扰

现在堆叠式集线器由4~8个集线器堆叠而成,集线器一般有少量的容错能力和网络管理能力 比如一个适配器除故障了不停发送以太网帧。这时集线器检测到这一问题,就断开与这适配器的连接

IEEE802.3标准还可以使用光纤作为传输媒体 相应的是10BASE-F

以太网的信道利用率

忽略争用期

就是发送时延和发送时延+传播时延之和的比值

以太网的mac层

在局域网中,硬件地址又称为物理地址和MAC地址

局域网中的地址应当是每个站的名字或标识符

MAC地址是6字节的,固化在适配器ROM中的地址
前三个字节称为OUI组织唯一标识符或公司标识符 但不能标明一个公司,后三字节称为拓展标识符

这6字节的MAC地址已经被固化在适配器ROM中,因此Mac地址由叫物理地址,硬件地址MAC地址实际上就是适配器地址或者适配器标识符EUI-48
第一个字节最低位称为I/G为 0的时候表示个人地址 1的时候表示组地址
第一个字节的倒数第二位称为G/L为 为0的时候全球管理 为1的时候本地管理

广播地址就是全1

适配器的过滤功能

当适配器从网络上每收到一个Mac帧就先用硬件检查MAC帧的目的地址,如果是发往本站的就收下不是则丢弃

发往本站的帧的三种格式

  1. 单播帧:即收到的帧的MAC地址与本站的MAC地址相同
  2. 广播帧:发送给本局域网上所有的帧 MAC为全1
  3. 多播帧:即发送给本局域网上部分站点的帧

混杂方式

只要听到有帧在以太网上传输就都悄悄接收下来,而不管这个帧发送到哪个站

mac帧的格式

常用的以太网mac帧格式有两种标准,一种是DIX Ethernet V2标准,另一种是IEEE的802.3标准,我们用得最多的是 DIX Ethernet V2 ,我们就只介绍它

  • 前面两个字段都是六个字节 用来表示目的地址和源地址
  • 第三个类型字段表示上一层使用的是什么协议
  • 第四个字段是数据字段范围是46~1800 (这个最小46字节 是因为其他的占了18字节 MAC帧规定最小帧长度是64字节)
  • 最后一个字段是FCS 循环冗余检验码 用于检验整个MAC帧(当然不包括在物理层插入的八个字节)

我们可以看到图中在物理层传输的时候插入了八个字节 这是因为 如果适配器的时钟尚未与到达的比特流达成同步,则Mac帧前面的若干位则无法接收,结果使得整个MAC帧成为无用的帧,为了让接收端实现位同步,mac帧到物理层时候还要插入八个字节的。

这八个字节又两个字段构成。第一个字段是七个气节的前同步码 (10交替),它的作用是使接收端的接收器在接收MAC帧时能迅速调整其时钟频率,使它和发送端同步,最后一个字段是一个字节的帧定界符10101011,最后的两个11就是告诉接收端MAC帧要来了。

注:如果我们使用SONET同步光纤网/SDH同步数字系列 进行同步传输则不需要前同步码帧定界符还是要的。因为以太网规定了帧间最小间隔96比特,用来处理接收缓冲,所以MAC帧之间必须有一定的间隔。因此不需要帧接收定界符,也不要需要使用插入字节来实现透明传输。

IEEE 802.3标准规定凡出现下列情况之一的即为无效的MAC帧

  1. 帧的长度不是整数字节
  2. 用收到的帧检验序列FCS查出有错误
  3. 收到的MAC帧客户数据字段的长度不在46`1500之间 mac帧的有效长度是64~1518字节

IEEE 802.3 与 VA 规定的MAC帧格式的区别主要有以下三点

  1. IEEE 规定第三个字段是长度/类型 最大的长度是1518字节当这个字节大于等于**0x0600(1536)**时,这个字段就表示类型,小于0x600时表示长度,若数据长度与该字段标记的长度不一致时表示出错
  2. 当长度/类型字段小于0x600时,数据字段必须装入上面的逻辑链路控制LLC子层的LLC帧
  3. IEEE 802.3 这里的MAC帧包含了帧同步码和帧定界符

扩展的以太网

在物理层扩展以太网

我们一般用集线器扩展以太网,

这样有两个好处

  1. 使不同系的以太网上的计算机能够跨系通信
  2. 扩大了以太网的覆盖范围

但同时也带来了缺点

  • 扩大了碰撞域
  • 如果不同的系使用不同的以太网技术,那么就不可能用集线器将他们互连起来

在数据链路层扩展局域网

这个方法更常用,人们最开始使用的是网桥。

网桥对收到的帧根据MAC帧的目的地址进行转发和过滤 ,当网桥收到一个帧的时候,并不是向所有的端口转发此帧,而是根据此帧的目的MAC地址,查找网桥中的地址表,然后确定将该帧转发到哪一个端口,或者是把它丢弃。

但很快网桥就被交换机取代

交换机的特点

以太网交换机实际上就是一个多端口的网桥,并且常常都工作在全双工方式,不会扩大碰撞域,交换机是一张即插即用的设备其内部的帧交换表,是通过自学习算法建立起来的,大部分以太网交换机对收到的帧采用存储转发方式进行转发,但也有一些交换机采用直通方式进行交换

以太网交换机的自学习功能

举个例子说明。

首先 根据看源地址是否在路由器的交换表中,如果不在则登记源地址的进入的端口号和目的地址,然后看目的地址是否在交换表中,如果不在则广播。

比如 A 给B 发消息,A没有在1交换表中登记,B没有在1交换表中盲目转发,同理对路由器2也是这样登记A。

假设第二次 我们B->A发送信息

因为B没有在交换机2中,交换机1登记B的mac地址和对应的3端口号,然后看目的地址A,A在交换表中 就根据A对应的端口号,发送到对印的端口1,就不盲目转发了,所以路由器2就收不到信息了。

虚拟局域网

因为交换机不能减少广播域,所以我们迫切需要一种缩小广播域的技术------ 虚拟局域网技术

虚拟局域网技术的实现机制

虚拟局域网的实现有很多种,这里我们介绍一种基于交换机接口来实现VLAN。我们通过对帧进行VLAN标记,形成IEEE802.1 Q帧

IEEE802.1 Q帧的格式

由原先的最大帧长1518 +了四个字节 变为1522了

V2 帧中间插入了VLAN标签

这个VLAN标签由四个字段构成

  • TPID:长度固定为16比特 表示该帧是IEEE802.1Q帧
  • PRI:长度为3比特 其值为0~7,表示优先级,值越大表示堵塞的时候越优先发送
  • CFI:1比特表示该位置是否以MAC帧规范格式封装,其值为0表示是,其值为1表示不是,对于以太网其值为零
  • VID:虚拟局域网标识符长度为12比特,其值为0~4095,其中0和4095保留不使用VID是该帧所属于VLAN的编号

交换机的接口能处理代标记的帧,不同接口的对帧的处理方法不一样

交换机上缺省VLAN ID 称为 本征VLAN 或者端口VLAN PVID

不同的接口类型
  • ACCESS:这是默认的接口类型,一般用于连接用户计算机,其PVID值于所属VLAN相同
  • TRUNK:一般用于交换机之间的连接,可以通过属于不同VLAN的帧

具体的例子

比如VLAN2之间 发送信息P , P通过接口3ACCESS端口 因为没有打标签就给它打上 VID = 3的标签, 对于1,2端口PVID 于 P的VID不同则不接收,对于4号端口相同则接收,对于TRUNK 端口因为已经打了标签了所以直接通过 同理对交换机 2的1,2,3,4端口只有3,4接受信息

总的来说:

对于ACCESS端口:

  • 接受时:只接受没有标签的,没有标签就给它打对应ACCESS端口的PVID值的标签。
  • 转发时:看PVID和帧的VID是否相同,相同则去标签,不相同则丢弃

对于TRUNK端口

  • 接受时:如果有标签,且VID不等于PVID则直接通过相连的TRUNK端口,如果等于则去标签,如果没有标签就打上对应的标签。
  • 转发时,看帧的VID是否等于PVID,等于则去标签转发,不等于则直接转发

高速以太网

100BASE-T 以太网

100BASE-T是在双绞线上传送 100Mbit/S 基带信号的星形拓扑以太网它又称为快速以太网。在全双工模式下下不适用CSMA/CD协议但在半双工时则使用CSMA/CD协议

吉比特以太网

特点:

  • 允许在1Gbit/S下以全双工和半双工两种方式工作
  • 使用IEEE802.3协议规定的帧格式
  • 在半双工方式下使用CSMA/CD协议,而在全双工方式不使用CSMA/CD协议。
  • 与10BAST-T和100BASE-T技术向后兼容

当使用半双工方式时,为了使得a保持较小的值,只有减小最大电缆长度或增大帧的最小长度。若把以太网的最大电缆长度到10吗,那么网络的实际价值就大大减小。而若将最短帧长提高到640字节,则发送短数据时又开销太大。因此为了解决这个问题 想出

了载波延伸的方法,**最短帧仍为64字节,争用期增大为512字节

**凡发送的MAC帧长不足512字节时,就用一些特殊的字符填充在帧的后面,使MAC帧增大到512字节。因此对于连续的短帧时,这就造成了很大的开销。

为此,吉比特网还增加了一种功能称为分组突发只有第一个帧使用载波延伸的方法进行填充。但随后的短帧可以一个接一个发送。他们只需要留有必要的最短帧间隔就行。

注:全双工模式下就不用载波延伸和分组突发了。

10吉比特以太网和更快的以太网

10Mbit到 10Gbit/s的以太网帧的格式都相同。 10GbE只工作在全双工方式,因此不存在争用期问题,当然也不使用CSMA/CD协议。

使用以太网进行宽带的接入

以太网的帧格式标准中没有用户名字字段和密码字段。如果运营商要用以太网接入到互联网就必须解决这一问题。

于是有人就想法把数据链路层的两个成功的协议结合起来,即把PPP协议中的PPP帧封装到以太网中传输,就是是PPPoE协议(**PPP over Eehernet)**现在的光纤宽带接入FTT x都要使用PPPoE 的方式进行接入。

谢谢观看

相关推荐
小蜗牛慢慢爬行37 分钟前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
MARIN_shen42 分钟前
Marin说PCB之POC电路layout设计仿真案例---06
网络·单片机·嵌入式硬件·硬件工程·pcb工艺
打鱼又晒网1 小时前
linux网络套接字 | 深度解析守护进程 | 实现tcp服务守护进程化
linux·网络协议·计算机网络·tcp
m0_748240021 小时前
Chromium 中chrome.webRequest扩展接口定义c++
网络·c++·chrome
終不似少年遊*1 小时前
华为云计算HCIE笔记05
网络·华为云·云计算·学习笔记·hcie·认证·hcs
蜜獾云2 小时前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器
小林熬夜学编程3 小时前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
Hacker_Fuchen3 小时前
天融信网络架构安全实践
网络·安全·架构
上海运维Q先生3 小时前
面试题整理15----K8s常见的网络插件有哪些
运维·网络·kubernetes
ProtonBase3 小时前
如何从 0 到 1 ,打造全新一代分布式数据架构
java·网络·数据库·数据仓库·分布式·云原生·架构