文章目录
1. 概念描述
节点:运行链路层协议的设备;
链路:连接节点的通信信道;
链路层帧:通过某个链路时,传输的节点封装的数据报。
链路层提供了下面描述的服务:
成帧:每个网络层数据报经链路传送之前, 几乎所有链路层协议都会将其用链路层帧封装起来;
链路接入:媒体访问控制(MAC, Medium Access Control)协议规定了帧在链路上传输的规则;
可靠交付:保证无差错地经链路层移动每个网络层数据报;
差错检测和纠正:不仅能检测帧中出现的比特差错, 而且能够准确地确定帧中的差错出现的位置。
前面介绍过运输层中两种协议,UDP和TCP,其中UDP提供了数据交付和差错检测两种最基本的传输层的服务,TCP在此基础上还提供了可靠的数据传输、网络拥塞控制和流量控制服务;在网络层的描述中,我们提过IP是一种尽力而为的服务,其实可以理解为并不提供上述提及的服务。
2. 差错检测和纠错技术
数据在传输的过程中难免会出现差错(比如经过路由转发时),因此我们需要一些差错检测和纠正技术来检测数据中的差错并纠正,使接收方收到正确的数据,也避免发送方对数据进行重传。在具体介绍之前,我们先定义下面的变量:
EDC= 差错检测和纠错比特 (冗余);
D = 数据由差错校验保护,可能包括首部字段
在发送节点,为了避免比特差错,使用差错检测和纠错位 EDC 来增强网络层传递下来需要通过链路传输的数据报 D。链路层帧中的 D 和 EDC 都被发送到接收节点。在接收节点, 接收到比特序列 D’和 EDC’。注意到因传输中 0/1 翻转所致,D’和 EDC’可能与初始的 D 和 EDC不同。
接收方面临的问题是,在它只收到 D’和 EDC’的情况下来判决 D’是否和初始的 D 相同。注意接收方仅能检测是否发生一个差错,并不能判断此次传输是否出现了差错。因此还是会存在未检测出比特差错的情况。
下面将介绍三种常见的检错技术:
- 奇偶校验——最基本方法
- 检验和方法——传输层常用方法
- 循环冗余检测——链路层常用方法
2.1 奇偶校验
奇偶校验是最简单的差错检测方式,发送方通过附加比特位去使得发送的数据比特中1的个数是奇数个还是偶数个,而接受方通过计算接收的数据比特中的1的个数是奇数还是偶数来判断是否发生了差错。
2.1.1 单个奇偶校验
单个奇偶校验顾名思义发送方只需包含一个附加的比特,选择它的值,对于包含d个比特的信息D,使得这d+1个比特数据中的1的个数为奇数或者偶数个。接收方只需要数一数接收的d+1比特中1的数目即可,比如在采用偶校验方案中发现了奇数个数值1的比特,接收方知道了至少出现了一个比特差错。但是这要是出现了偶数个比特位差错,这时候 单个偶校验便检测不出来,导致未检测出比特差错。单个奇偶校验示意图如下所示:
- 可以查出任意奇数错,但是不能发现偶数个错误;
- 若比特差错概率很小,差错独立发生,一比特奇偶校验可满足要求;
- 若差错集中一起“突发”,一帧中未检查到错误的概率是50%。
2.1.2 二维奇偶校验
在实际的测量过程中,测量已经表明了差错经常以“突发”方式聚集在一起,而不是独立的发生,因此单个奇偶校验存在一定的缺陷,因此这里单个奇偶校验进行扩展。这就是二维奇偶校验方法,该方法还具有一定的纠错功能。
其基本思想是将要传信息D(d比特)划分为i行j列,然后对每行和每列分别计算奇偶值,结果的i+j+1个奇偶比特构成了链路层的差错检测比特,如上图左图所示。中间的图表示的是将发送数据比特10101 11110 01110分成3组,每组5个比特,然后进行行、列校验。我们可以看出,对于该方法可以检测并纠正单个比特差错,如右图所示,位置(1, 1)上的比特数据发生差错,这时可以通过行列计算出发生错误比特的位置。但是对于数据比特中两个比特差错的任意组合,该方法可以检测但是无法纠正。试想一下位置(0, 0)和(0, 1)的比特发生差错,但是行校验没有检测出差错,其他行也没有差错,因而无法通过列校验去定位具体的位置。对于任意两个位置的比特差错可以自行分析。
2.2 检验和方法
发送方将要传信息D(d比特)视为为一个k比特整数的序列处理。一般取看k=16,然后将所有的16位的整数求和,对得到的和逐位取反,作为检查和,放在报文段首部,一起发送。
接收方对接收到的信息与发送方相同的方法求和,全“1”表示收到的数据无差错,其中有“0”表示收到的数据出现差错。
检查和方法分组开销较小,检查和位数比较少,差错检测能力较弱,关于这个部分在传输层也有相关描述,这里不再赘述。特别注意,当数字做加法时,最高位的进位要回加到结果中。
2.3 循环冗余检测
循环冗余检测即多项式编码,把要发送的比特串看作为系数为0或1的一个多项式,对比特串的操作看作为多项式运行。其基本思想是对于发送数据D(d比特),发送方和接收方先共同选定一个生成多项式G(r + 1),最高有效位(最左边)是1。
发送方计算一个r位附加比特R,添加到D的后面产生DR(d + r 比特),DR能被生成多项式G模2运算整除,一起发送。接收方用生成多项式G去除接收到的DR,如果余数非0则传输发生差错,若余数为0则表示传输正确,去掉尾部r位,得所需数据D。
𝑿𝑶𝑹 表示模2运算,也就是异或运算,2r,即比特模式左移r个位置,
下面给出计算R的过程,DR能被G模2运算整除,即
等式两边都用R异或,得到
即用G来除D x 2r,余数值刚好为R,R的计算,将数据D后面添加r个0,除以给定的生成多项式G,所得余数即为R。
3. 多路访问链接问题
网络链路有两种类型:点对点链路和广播链路。而多路访问链接问题指的是广播链路问题,广播链路能够让多个发送和接收节点都连接到相同的、单一的、共享的广播信道上。当任何一个节点传输一个帧时,信道广播该帧,每个其他节点都收到一个副本。如何去协调多个发送和接收节点对一个共享广播信道的访问,这就是多路访问链接问题。因为所有的节点都能够传输帧,所以多个节点可能会同时传输传输帧,当发生这种情况时,所有节点同时接到多个帧,也就是传输的帧在所有的接收方处碰撞,因此没有一个节点能够有效地获得任何传输的帧。
多路访问协议则是为解决这个问题提出来的,在理想的情况下,对于速率为R bps的广播信道,多路访问协议应该具有以下希望的特性:
- 当仅有一个节点发送数据时,该节点具有R bps的速率;
- 当有M 个节点发送数据时,每个节点的平均吞吐量为 R/M bps;
- 协议是分散的,不会因为某主节点故障而使整个系统崩溃;
- 协议是简单的,实现不复杂。
3.1 信道划分协议
时分多路复用(TDM)和频分多路复用(FDM)是两种划分广播信道带宽的常用技术,而码分多址则是一种较新的信道划分协议。
- TDM
TDM 将时间划分为时间帧,并进一步划分每个时间帧为 N 个时隙,然后把每个时隙分配给 N 个节点中的一个,无论何时某个节点需要发送数据,它都只能在循环的 TDM 帧中指派给它的时隙内传输分组比特。通常选择的时隙应使一个时隙内能够发送一个分组。 - FDM
FDM 将 R bps信道划分为不同的频段,并把每个频段分配给 N 个节点中的一个。 - CDMA
CDMA 对每个节点分配一种不同的编码,每个节点用它唯一的编码来对发送的数据进行编码。如果选择合适的编码还可以使得发送方可以同时发送数据,并且各自相应的接收方可仍能正确接收发送方编码的数据比特(假设接收方知道发送方的编码)。
3.2 随机接入协议
在随机接入协议中,一个传输节点总是以信道的全部速率进行发送,当有碰撞时,涉及碰撞的每个节点反复地重发它的帧,到该帧无碰撞地通过为止。在每一个节点经历一次碰撞时,它不必立刻重发该帧,相反,它在重发该帧之前等待一个随机时延,涉及碰撞的每个节点独立地随机选择时延。
-
时隙ALOHA
提出以下假设:(1) 所有帧由 L 比特组成;(2) 时间被划分成长度为 L/R 秒的时隙;(3) 节点只在时隙起点开始传输帧;(4) 节点是同步的,每个节点都知道时隙何时开始;(5) 如果在一个时隙中有两个或者多个帧碰撞,则所有节点在该时隙结束之前检测该碰撞事件。
当节点有一个新帧要发送时,它等到下一个时隙开始并在该时隙传输整个帧。如果没有碰撞,该节点成功地传输它的帧;但是如果有碰撞,该节点在时隙结束之前检测到这次碰撞。该节点将在后续的每个时隙中以概率 p 重传它的帧,直到该帧被无碰撞的传输出去。
-
纯ALOHA
当一帧首次到达时,节点立刻将该帧完整的传输进广播信道。如果一个传输的帧与一个或多个传输经历了碰撞,该节点立即以概率 p 重传该帧,否则等待一个帧传输时间,之后以概率 p 重传该帧, 或者以 概率 1 - p 在另一个帧时间等待。
-
CSMA
在一个节点进行传输之前先听信道,如果来自另一个节点的帧正向信道上发送,节点则等待直到检测到一小段时间没有传输,人后开始传输;
-
CSMA/CD
在CSMA的基础上又增加了碰撞检测,即当一个传输节点在传输时一直侦听此信道,如果它检测到另一个节点正在传输干扰帧,它就停止传输,在反复 “侦听 - 当空闲时传输” 循环之前等待一段随机时间。
1) 适配器从网络层一条获得数据报,准备链路层帧,并将其放入帧适配器缓存中;
2) 侦听到信道空闲,则开始传输帧,忙则等待;
3) 传输过程,监听该信道是否有其他节点传输;
4) 如果传输整个帧而没有监听到有其他节点传输,则认为传输完成,如果监听到了其他节点传输则立即停止传输;
5) 终止传输后,则等待一个随机时间量,然后返回步骤2。
3.3 轮流协议
-
轮询协议
要求节点之一要被指定为主节点,主节点以循环的方式轮询每个节点,主节点能够通过观察在信道上是否缺乏信号,来决定一个节点何时完成了帧的发送。
-
令牌传递协议
该节点没有主节点,一个被称为令牌的小的特殊帧在节点之间以某种固定的次序进行交换,只有拿到令牌的节点才可以发送数据。
信道划分协议 | 仅有一个节点,该节点具有 R bps的吞吐量 | M 个节点同时发送数据, 每个节点平均吞吐量 R/M bps | 协议是发散的 | 协议是简单的 |
---|---|---|---|---|
TDM | 否 | 是 | 是 | - |
FDM | 否 | 是 | 是 | - |
CDMA | 是 | 是 | 是 | - |
时隙ALOHA | 是 | 否 | 是 | - |
纯ALOHA | 是 | 否 | 是 | - |
CSMA | 是 | 否 | 是 | - |
CSMA/CD | 是 | 否 | 是 | - |
轮询协议 | 是 | 是 | 否 | - |
令牌传递协议 | 是 | 是 | 否 | 否 |
4. 地址解析协议
地址解析协议的任务是完成网络层地址 (ip 地址)和链路层地址 (mac 地址)之间的映射。
- 每个主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址之间的对应关系。
- 主机(网络接口)新加入网络时(也可能只是mac地址发生变化,接口重启等), 会发送免费ARP报文把自己IP地址与Mac地址的映射关系广播给其他主机。
- 网络上的主机接收到免费ARP报文时,会更新自己的ARP缓冲区。将新的映射关系更新到自己的ARP表中。
- 某个主机需要发送报文时,首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC 地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送 ARP 数据包,该数据包包括的内容有:源主机 IP 地址,源主机 MAC 地址,目的主机的 IP 地址等。
- 当本网络的所有主机收到该 ARP 数据包时:
(A)首先检查数据包中的 IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包。
(B)如果是,则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中,如果已经存在,则覆盖。
(C) 然后将自己的 MAC 地址写入 ARP 响应包中,告诉源主机自己是它想要找的 MAC 地址。 - 源主机收到 ARP 响应包后。将目的主机的 IP 和 MAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。
关于ARP协议有两件有趣的事情,首先,查询ARP报文是在广播帧中发送的,而响应ARP报文在一个标准帧中发送。其次,ARP是即插即用的,这就是说ARP表是自动建立的,即不需要系统管理员配置。最后,ARP 只为在同一个子网上的主机和路由器接口解析 IP 地址。
现在考虑一下两种情况,即同一个子网ARP与不同子网ARP之前的差异。
对于同一个子网的ARP的解析过程如下,主机A 172.16.20.20要发送数据给主机 B 172.16.20.5:
- 主机A 172.16.20.20 首先查询 ARP 的缓存表,如果没有查询到则转到第二步;
- 主机A 172.16.20.20 广播发送 ARP 查询报文查询主机 B 172.16.20.5 的MAC ;
- 子网中其他主机收到该查询报文后,主机会比对自己的 IP 地址;如果不匹配则丢弃,否则进行应答并携带自己的 MAC,并将主机A的MAC写入自己的ARP表中;
- 主机A 172.16.20.20 在收到应答报文后,也会将主机 B 的MAC保存到自己的ARP表中,并开始发送数据。
对于不同子网的ARP的解析过程如下,主机A 172.16.20.20要发送数据给主机 B 172.16.20.5:
- 主机A首先比较目的IP地址与自己的IP地址是否在同一子网中,如果在同一子网,则向本网发送ARP广播,获得目标IP所对应的MAC地址;
- 如果不在同一子网,就通过ARP询问默认网关对应的MAC地址,将数据转发给网关,网关进行与主机A类似的ARP解析过程,将数据发送给主机B,或者转发给下一个网关继续进行路由,直到到达主机B。