计算机网络,上一节课,遇到了八万个概念,简直看都看不过来。整理起来实属麻烦,所以我决定每一章,并不是整理所有知识点,整理大概和框架和重点知识点。课本刚好也是每一章节就是一个网络层次,也蛮容易理清楚滴。

第三章 数据链路层

数据链路层の任务

数据链路层 是在物理层提供的服务基础之上为网络层提供服务,最基本的功能就是将网络层中来的数据 可靠地传输到相连的节点的目标主机。主要作用就是将物理层中可能会出现的错误的物理连接改造成==逻辑上无差错的数据链路==,在网络层来看只要是数据链路层上来的数据就是100%正确的。

image-20210404143955195

有关概念

  1. 结点: 主机和路由器
  2. 链路:网络中两个结点之间的物理通道,传输介质主要有 双绞线、光纤,电磁波等。
  3. 数据链路:网络中两个结点之间的逻辑通道,光有物理通道(链路)是不够的,我们还需要一定的协议。将实现这些协议的软件和硬件加到链路上就构成 数据链路层,这就是 网络适配器干的活。
  4. 帧:数据链路层上的传输数据的数据单元,在第一章节概述讲到,数据链路层会将网络层中的ip数据报封装成 帧
image-20210404145058540

数据链路层就负责通过链路将数据从一结点发送到另一个结点。

数据链路层的功能

数据链路层为了完成本层的任务,立下了如下flag.

  1. 为网络层提供服务, 无确认无连接服务, 有确认无连接服务, 有确认面向连接服务。
  2. 链路管理 ,即 连接建立 ,维持,释放(对于有连接)
  3. 组帧。
  4. 流量控制。
  5. 操作控制(帧错/位错)

重点

本章中,我们需要终点学习的知识。

  1. 数据链路层 点对点信道广播信道 特点,以及在点对点信道上使用的ppp协议和在广播信道中使用的 CSMA/CD协议
  2. 数据链路层的三个基本问题: 封装成帧 ,透明传输、差错检测(CRC)
  3. 以太网 MAC层的mac地址
  4. 适配器,转发器,集线器,网桥,以太网交换机 ,他们的作用和使用场合

封装成帧和透明传输

封装成帧

image-20210404150624309

封装成帧 :就是从网络层中的数据报,加头和加尾(帧首部,帧尾部),就构成了一个帧。

帧头部和尾部的作用何在呢? ta们包含很多控制信息:

  1. 帧定界符(SOH,EOT),如果将长度不定的ip数据报混合在一起,我们就无法将他们分离开来了,所以帧定界是非常重要的。
  2. 差错控制信息
  3. 流量控制信息
  4. 物理地址信息

帧同步:接受方能够从接收到的二进制比特流中读取到 帧的起始和结束

帧长:帧首部+数据部分+尾部的总长度

我们在c语言中,字符串中含有一个 '\0',它就是为了标记字符串结尾的。这里的帧开始符(SOH 十六进制编码 01),帧结束符(EOT 十六进制编码 04)就是其这个作用的。

透明传输

所谓透明,就是上层服务使用下层服务,但是却感受不到下层的存在

由于组装成帧的时候,使用了一些控制信息,但是传输的数据恰好是 控制信息咋办呢? 就以 帧定界符为例子。传输的数据恰好有(04)H,如果链路层不做出处理,那么此帧就出错了。那我们规定 网络层中不能有 (04)H,如果遇到就替换掉,把这件事交给网络层来做,这就不叫透明传输了。

组帧方法

  1. 字符计数法,我们不适用控制符了,在帧首部使用一个数据空间来存储当前帧的长度。虽然我们可以通过此方法确定帧的边界,但是如果帧首部的数据丢失呢?我们该如何确定后面的数据那个属于此帧,和下一个帧的首部在哪?

  2. 字符填充法,c语言想要输出 回车 咋办? \n 使用 转义字符 \ 。在帧里也有 转义字符 ESC(1B)H, 数据部分中有 控制符号时就在前面加上转义字符来标记这不是正真的控制符 。等到接受方收到数据的时候,去掉ESC就好了。

  3. 零比特填充法: 口诀5110 ,使用本方法 ,帧定界 头尾都一样 二进制是 01111110 一共6个1

    • 在发送端,扫描数据部分,发现连续的五个1就填入一个0
    • 接受端,通过01111110 确定帧边界,遇到5个1就去掉后面的0.

    这个方法非常 简单,发现连续的五个1就填入一个0这就导致数据分布不可能有连续的6个1 ,无法和控制符重复。

  4. 违规编码法

差错检测

通信链路不是完美的,总有会出现差错的地方。如果我们无法确定一个帧出错或者没有出错,正所谓牵一发而动全身,那么在此比特流上后面的帧我们都无法判断是否出错了。

差错有两种:

  1. 位错 , 比特位出错 0变1 1变0
  2. 帧错,丢帧,重复,失序

位错解决办法

  1. 检错编码
    • 奇偶检验码
    • 循环冗余码 CRC
  2. 纠错编码 海明码

检错编码 ,只能看出有错误,纠错编码可以看出哪里有错误

这里重点介绍 CRC.

奇偶检验码

奇偶校验码非常简单,但是我个人感觉不是很妥(主要是都能看懂了,一定不咋地,ahh)

奇偶校验码,是由 n-1是信息源(要传输的数据) 和1位校验元(可以是0,可以是1,这里假设为1),组成 。这里还分成两种

  1. 奇数校验码 ,如果是1的个数是奇数,就在前面加上1,不是就加0
  2. 偶数校验码,如果是1的个数是偶数,就在前面加上1,不是就加0

用此方法,只能看出错了奇数个的,如果偶数个位同时出错,那就无法检测出来了

循环冗余码

模2运算

这里涉及到的运算 都是 模2运算,其实也没啥特别的地方,与四则运算相同,模2运算也包括模2加法、模2减法、模2乘法、模2除法四种二进制运算,不产生进和退位的运算。加减就是按位异或 。

  • 模2加法: 0+0 =0,1+0 =0+1 =1,1+1=0 没有进位 按位加即可

    例如 1110+1111=0001

  • 模2减法 :0-0 =0,1-0 =0-1 =1,1-1=0 和加法一样,按位减法即可

    例如 1110-1111=0001

  • 模2乘法:0x0 = 1x0 =0x1 =0,1x1=1,和普通乘法一样 ,按位相乘 再相加即可,无需考虑进位的问题

    image-20210404223800062
  • 模2除法:乘法的逆运算,计算口诀是 位数不够商0,反之商1,按位减法,最后一次位数不够时,取余数。

    image-20210404224751842
CRC算法

CRC,循环冗余检验 算法如下:

在发送端,一个帧k bit数据,现在假设传送数据M为6位(k=6) 我们在发送端和接收端规定一个 长度位 n+1位的除数p

发送端:

  1. 对数据M乘以 2^n (左移,相当于后面加n个0)
  2. 现在计算M/p,求出余数 R(n位)
  3. M=R+M,发送端发送出去

接收端:

  1. 接受数据M, 计算 M/p,求余数R
  2. 如果R等于0 那么数据正确,帧保留,如果不等于0 则错误,帧丢弃!
  3. 检测数据正确 ,那么对数据右移3位

补充:

  1. p要求最高位和最低位必须为1
  2. 在发送端 ,用于检测是否出错的余数R叫做帧检错序列 FCS
  3. R的位数一定比P的少一位,因为模二运算除法位数够了商1

注意: CRC无法左到100%确定数据没有发生错误,也就说余数为0,但是数据出错的可能还是存在的。但是这样的情况的概率非常小,可以忽略不记。

我们这个除数P,我们可以用 生成多项式生成,例如 P(x)=X3 +X2+1 对于 1101 ,

  • 规则就是 X3 对应 最高位(第四位),有这一项 ,
  • X2 同理,
  • 但是没有 X1 所以第二位为0,X0=1 ,最低为为1

当然p不是只有4位的,这里最低位位一定为1 ,所以多项式有一个常数1

数据链路层如果仅仅使用CRC,只能检查数据是否出错,更具上述算法我们可以认为, 凡是接收端收到的数据都是正确的,但这不是可靠传输,可靠传输为发送端发啥,接收端就收到啥。

点对点信道 PPP协议

PPP の强大功能

PPP(point-to-point Protocol)协议目前数据链路层中最广泛的点对点协议,以前还有个 HDCL ,现在不常用了。

PPPOE你一定听说过,就是ISP(互联网移动提供商 ,电信联通这类的) ,就是所谓拨号上网,pppoe后面章节会讲到 现在之说前面的三个p.

目前ppp协议不是简单的数据链路层协议了,已经具有其他层的功能。我们仅从数据链路层来看 ppp协议应该满足数据链路层的所有条件:

  1. 简单
  2. 封装成帧且透明 这里ta采用的是 使用帧定界符 (7E)H,并且使用 比特填充法做到透明传输
  3. 支持多种链路类型,可以同步OR异步,可以串行或者并行,可以是高速或者低速,在物理上,可以电也可光
  4. 支持多种上层协议,比如说 IP 和IPX
  5. 差错检测

当然ppp还多完成了一些任务

  1. 身份验证,pppoe
  2. 检测连接状态
  3. 网络层地址协商,可以分配ip
  4. 规定了最大传送单元,MTU.这里不是最大帧的长度而是最大数据部分的长度

PPPの的组成

image-20210405103441964

  1. 将网络层中传来的数据报封装成帧的方法
  2. 网络控制协议 NCP,
  3. 建立、验证、检测的数据链路连接的链路控制协议LCP,

NCP相当于交通法律,来控制可以跑啥车,LCP 负责修路。

PPP先介绍到这里吧,这里还有许多没说。

广播信道 CSMA/CD 协议

广播信道就可以进行一对多的通讯,这里我们讨论局域网里的广播信道。

局域网

  1. 网络为一个单位所拥有,且地理范围和站点数据有限

  2. 局域网要有以下特点

    • 具有广播功能,从一个站点可以很方便的访问局域网

    • 便于系统的扩展,可以灵活的调整

    • 提高系统的可靠性和生存性以及可用性

  3. 局域网可以按照网络拓扑分类 星状 ,环状,总线

广播信道の困难

广播信道,其实面临大的问题是,如何让多个用户共享使用 信道,当然前面第二章讲到的方法, 时分复用,频分复用,码分复用等,我们称它们为 静态划分信道,但是ta们的代价对局域网来说太过昂贵。

我们这里主要介绍 动态媒体接入控制 ,又叫多点接入(multiple access) ,特点就是 信道并非是固定分配给用户,主要有如下几种方法

  1. 随机接入 ,所有用户都可以随时发消息,但是会发生碰撞,所以要对碰撞处理
  2. 受控接入,用户不能随时的发消息,必须服从一定的控制,经典代表是 探询(轮询

我们这里介绍几个名词:

碰撞:对于 随机接入来说,一个信道只能传输一个信号,如果两个用户同时随机的发消息,信号被叠加,那么接收方就看不出这是啥信号了。这就叫碰撞,就好比两个人同时说话,第3个人听不清他们分别在说啥。

监听:用于广播信道是共有一个信道,所以一个用户发消息,其实所有的用户都可以收到,监听就是在描述用户在看本信道的空闲状态。

一个用户发消息,信道上所用用户都可以接受,用户如何判断消息如何是自己的消息呢,其实很简单,只需要看发送的目的(mac物理地址)地址就好了,如果目的地址和自己的地址一样就接受,不一样就丢弃。

image-20210405194324387

这里重点说明 CSMA/CD 协议

CSMA/CD 适用于 通信 在有线连接之上局域网

CSMA/CA 适用于通信在无线连接之上的局域网

CSMA/CD

从名字入手

我们先了解一下 CSMA的这些字母的含义

CS :载波监听,发送数据的站要检测总线上是否有其他的计算发送数据

MA: 多点接入(multiple access)

CSMA的主要思想就是 空闲就直接传输数据不必等待直接发送数据,忙就监听,直到空闲再次发送数据 ,如果冲突了(发送了碰撞,导致接受方无法收到正确的消息,接受方没有返回消息),就空闲一段时间重复前面的过程,知道收到了接收方的回复。

大概了解 CSMA就了解一下 CSMA/CD ,CD的含义就是碰撞检测,那么CA呢碰撞避免。

CSMA/CD工作原理

碰撞检测

更具前面的铺垫,那么可以推断出CSMA/CD是半双工的信道(无法同时发送数据和接受数据)

主要要点:

  1. 多点接入
  2. 载波监听,不管是否发送数据,都要和检测信道
  3. 碰撞检测, 边发送边监听
  4. 使用 曼切斯特编码,保证了每一个码都有一次变换,使用曼切斯特编码的好处就是可以方便的提取同步信号来。

我们再次回顾一下,CSMA的大致思路:

SMA的主要思想就是 空闲就直接传输数据不必等待直接发送数据,忙就监听,直到空闲再次发送数据 ,如果冲突了(发送了碰撞,导致接受方无法收到正确的消息,接受方没有返回消息),就空闲一段时间重复前面的过程,知道收到了接收方的回复。

这里忽视了一个重要的问题,就是传播延迟

假设 A站点发送了数据到B站点, 在数据还没有到B站点之前,B也发送了数据到 A站点,因为共用一个信道,所以在之后的一个时间里一定有这两个信号一定会发生碰撞。两个结点都这样了,多个结点还不爆炸?

image-20210405201715502

看上图,竖轴为时间,正方向向下。假设 数据从A到B要 τ 时间,如果在A发送数据δ时间后,B发送了数据 ,那么信号就在 τ-δ 时间 发生了碰撞,碰撞就是两个信号的叠加,这就会导致在此信道上原本只能出现0和1信号,却出现了 2(超出了信号的范围)。

由于共有一个信道 ,所以A,B都会收到碰撞后的信号(第三方 C或者其他用户都可以收到),但是由于延时的存在 B和A都到 碰撞之后的信号时间不同,B在 T=τ知道碰撞了,A呢? T=2τ-δ 时间。

那么A最晚何时知道自己发送的数据发生了碰撞,T=2τ ,也就是说 A发送的数据刚到B家门口,B就发送了数据。

换一句话说,A如果发现在 T=2τ 时间内,自己的数据都没有发送碰撞,那么数据就一定发送出去了!

T=2τ 就是所谓的争用期

如果检测到碰撞就立即停止传输数据,准备重新发送数据。

重传机制

如果检测碰撞就立马再次重发,那么大家都这样干,就会一直碰撞下去。

正确的做法就是,大家先休息一些时间后,再去发送,休息的这段时间就叫退避时间。基本的退避时间为 2τ(如果小于2τ,就会和自己发送的信号发送冲突)。

我们取一个离散集合 [0,1,2k-1] (k= 0 1 2 3 ) ,随机取出一个数 r, 那么本次规避的时间就是 r*2τ,如果重传的次数达到 16此,就说明现在网络太卡了,重传失败。

最小传输帧

这里我们就可以得出一个结论,帧的传输时延至少要两倍于信号在总线中的时延(就是 一次都没发生冲突,不存在 重传)。

帧的传输时延=帧长/传输速率

那么更具前面两句话,就可以得出,最小帧长 =传输速率*2τ

以太网规定最小帧长为·64字节,也就是512bit,如果帧长小于 64字节,那么一定是碰撞导致无效帧。

强化碰撞

这个其实举一个非常生动的例子,就是多个人在同时说话(发生碰撞),其中一个人想要大家安静,那么就 嘘(强化碰撞) 一声,大家就安静了。

对于站点发现碰撞了,就立刻停止传输数据,还要发送一段人为的干扰信号(32bit 或者 48bit)

信道利用率

假设10Mbit/s ,有10个设备,那么一个设备的平均带宽是 1/Mbit/s ?

在 CSMA/CD 协议下, 然则不是这样,因为有冲突的存在,浪费了一定的带宽。

结语

当然,还有一些知识点:

  1. 以太网 MAC层的mac地址
  2. 适配器,转发器,集线器,网桥,以太网交换机 ,他们的作用和使用场合

书上讲的非常详细了,这里暂时不补充了。

努力成长的程序员