一、链路层协议原理
1.1 链路层概述
数据链路层负责通过一条链路从一个结点向另一个物理链路直接相连的相邻结点传送数据报。
运行链路层协议的任何设备均称为结点,包括主机、路由器、交换机与wifi接入点。沿着通信路径连接相邻结点的通信信道称为链路,包括以太网链路、Wifi链路等。在通过特定的链路时,传输结点将数据报封装在帧【fame】中。
链路层的主体部分是在网络适配器中实现,通常是一个实现了许多链路层服务的专用芯片,因此链路层的许多功能基于硬件实现。
1.2 链路层提供的服务
链路层协议能够提供的可能服务包括:
-在每个网络层数据报经链路传送之前,几乎所有的链路层协议都要将其用链路层帧封装起来,称为组帧;
-如果帧的传输共享介质,需要解决链路接入的问题,通过帧首部的MAC地址进行标识;
-在低误码率的有线链路上一般不采用可靠交付,但在误码率高的有线链路中提供可靠交付;
-协调相邻结点的发送与接收,形成流量控制;
二、差错检测
2.1 差错编码
差错编码可分为检错码与纠错码。考虑有效编码的集合,称为编码集,编码集中有效编码之间汉明距离的最小值,称为编码集的汉明距离。对于检错码,若编码集的汉明距离为
d
s
d_s
ds,则该差错编码可以检测出至多
d
s
−
1
d_s - 1
ds−1位的差错。考虑
C
C
C为合法码,
C
′
C'
C′与
C
C
C有
d
s
−
1
d_s - 1
ds−1位的差错,即
D
s
(
C
,
C
′
)
=
d
s
−
1
D_s(C, C') = d_s-1
Ds(C,C′)=ds−1,那么
C
′
C'
C′一定不是合法码,因为两个合法码之间的汉明距离至少为
d
s
d_s
ds;
而对于纠错码,差错编码可以纠正至多
(
d
s
−
1
)
/
2
(d_s - 1)/2
(ds−1)/2位的差错。考虑
C
1
C_1
C1、
C
2
C_2
C2为合法码,
C
′
C'
C′与
C
1
C_1
C1有
(
d
s
−
1
)
/
2
(d_s - 1)/2
(ds−1)/2位的差错,那其与
C
2
C_2
C2至少有
(
d
s
+
1
)
/
2
(d_s + 1)/2
(ds+1)/2位的差错,那么
C
′
C'
C′将会被纠正位
C
1
C_1
C1。
2.2 奇偶校验码
考虑输入信号为
D
D
D,通过编码函数
f
f
f,可以得到一位冗余的比特
R
=
f
(
D
)
R = f(D)
R=f(D),称为检测和纠正比特,用来增强信号,得到
D
R
DR
DR。再通过信道后,接收到了
D
′
R
′
D'R'
D′R′在传输正确的条件下,应该依然满足
R
′
=
f
(
D
′
)
R' = f(D')
R′=f(D′)。然而,可能出现即使传输出现差错,但依然差错编码成立的情况。
差错检测最简单的方式就是用单个奇偶校验位作为检测和纠正比特。考虑发送方发送的d位信息,其附加一位奇偶校验位,使得d+1个比特的和为0;接收方也通过该操作,当出现比特和为1时,就发生可奇数个比特差错。
然而,单个奇偶校验位不能检测出偶数个比特差错。二维奇偶校验将信息划分为二维矩阵,对每行每列计算奇偶值,不仅可以检测出比特差错,甚至可以通过行于列的索引纠正比特差错。
2.3 校验和
链路层的校验和与传输层的校验和相同。发送方将检验内容划分为16位二进制的序列进行补码求和,并将校验和的反码放入校验和字段;接收方则将检测内容的校验和与校验字段的校验和相加,当不全为0时证明传输出现差错。
2.4 循环冗余校验码
冗余循环校验码【Cyclic Redundancy Check,CRC】是一种检错能力强大的差错编码。考虑
d
d
d位的数据
D
D
D,发送方要将其传输给接收方,双方协商选择
r
+
1
r+1
r+1位的比特模式
G
G
G,称为生成多项式,其中
G
G
G的最高位为1。发送方要选择一个r位的附加比特
R
R
R,使得增强信号得到的
D
R
DR
DR,将其解释为二进制数,可以被
G
G
G模二整除。
发送方将
D
R
DR
DR发送给接收方,接收方对其进行
G
G
G的模二除法,那么如果也可以整除,说明传输无错;否则传输差错。
考虑数据
D
=
1101
0110
11
D = 1101\ 0110\ 11
D=1101 0110 11与比特模式
G
=
1001
1
G = 1001\ 1
G=1001 1,以及r位比特模式为0的序列
O
=
0000
O = 0000
O=0000,那么附加比特的计算形如
R
=
D
O
%
2
G
=
1110
R = DO\ \%_2\ G = 1110
R=DO %2 G=1110那么传输的比特序列为
D
R
=
1101
0110
1111
10
DR = 1101\ 0110\ 1111\ 10
DR=1101 0110 1111 10且若传输无误,则有
D
R
/
2
G
=
1100
0010
10
DR\ /_2\ G = 1100\ 0010\ 10
DR /2 G=1100 0010 10即被模2整除。
CRC广泛应用于以太网、Wifi等。
三、MAC
多路访问协议【Multi Access Protocol,MAC】用于协调多个发送与接收方对同一共享广播信道的访问问题。
3.1 信道划分MAC协议
信道划分MAC协议基于多路复用技术,包括时分、频分、码分多址协议等。
时分多址协议【TDMA】基于时分多路复用【TDM】,其将时间划分为时间帧,将每个时间帧分配给多个结点中的一个。其允许每个结点在固定的时间段占用信道,并允许另一个结点占用同样的时间,以此类推。
频分多址协议【FDMA】基于频分多路复用【FDM】,其将信道划分为若干频带,将每个频带分配给多个结点中的一个,允许结点占用自己频带的信道。
波分多址协议【WDMA】基于波分多路复用【WDM】,其在信道中传输不同波长的光脉冲信号。
码分多址协议【CDMA】基于码分多路复用【CDM】,其将信道根据码型分割。
信道划分MAC协议为每个结点分配了固定的信道,但结点在不需要使用信道时就浪费了信道。
3.2 随机访问MAC协议
如果结点之间没有协调的利用信道全速发送数据,就可能发生冲突。随机访问MAC协议定义了检测冲突与从冲突中恢复的方法。
时隙ALOHA协议是一种简单的随机访问MAC协议。其假定帧的大小固定,将时间划分为等长的时隙,并保持结点之间的时钟同步。结点在时隙开始时刻发送帧,当多个结点在同一时隙发送帧时,就发生了冲突。
当结点有新的帧时,就会在下一时隙发送帧,当不发生冲突时,就在下一个时隙继续发送新的帧;当发生冲突时,则以概率
p
p
p重传帧,直到成功。
ALOHA协议简单且在单结点的情况下可以全速使用信道,但多个结点同时传输时,其使用效率从概率意义上讲仅有37%。
非时隙ALOHA协议也称ALOHA协议,其在时隙ALOHA协议的基础上,不需要时钟的同步,但其冲突的可能性更大,其使用效率从概率意义上讲仅有18%。
载波监听多路访问协议【Carrier Sense Multiple Access,CSMA】利用载波监听,即当结点在传输前先监听信道,在信道空闲时发送帧;在信道忙时以某种策略推迟发送,策略包括:
-1-坚持CSMA,在信道忙时持续坚持监听,并在空闲后立即发送数据;
-非坚持CSMA,在信道忙时放弃监听,并在等待一个随机事件后再来监听;
-p-坚持CSMA,在信道忙时等待下一个时隙监听,并在空闲后以概率
p
p
p发送。
然而,由于信号传播的延迟,冲突仍然可能发生。考虑信号空间与信号源
A
A
A、
B
B
B,其在载波监听的情况下可能发生的冲突情况为
在
t
0
t_0
t0时刻,
A
A
A监听信道,传输信息;紧接着
t
1
t_1
t1时刻,
B
B
B监听信道,此时
A
A
A已经使用了信道,但暂时未传输到
B
B
B,故
B
B
B传输信息,导致了冲突的发生。
为了短时间内检测冲突,并在冲突后迅速中止传输,减少信道的浪费,为CSMA加入冲突检测机制,形成CSMA/CD【CSMA With Collision Detection】协议。冲突检测机制的方法为测量信道信号的强度,在无冲突的情况下,发射信号与接收信号应该保持一致。冲突检测不适用于无线局域网,因为无线局域网中的发射信号远远高于接收信号。
需要注意的是,CSMA/CD协议对网络与物理环境有所要求。考虑某结点发送数据的帧长度为
L
L
L,网络带宽为
R
b
p
s
Rbps
Rbps,那么该结点将数据完全推入链路的时间为
L
/
R
L / R
L/R;再考虑信号的传播速度为
V
V
V,两结点的距离为
d
d
d,那么数据的首个比特到达目的结点的时间为
d
/
V
d / V
d/V,若在到达时刻,目的结点由于信号延迟也进行了数据发送,产生了冲突,而冲突传回源结点的时间也为
d
/
V
d / V
d/V。那么,必须保证
L
/
R
≥
2
d
m
a
x
/
V
L / R \ge 2d_{max}/V
L/R≥2dmax/V否则,在结点检测到冲突时,数据已经全部被推送到信道中。
CSMA/CD的效率远远高于ALOHA,且简单、分散。
3.3 轮转访问MAC协议
信道划分MAC协议的信道效率低,而随机访问MAC协议会产生冲突开销。相比较之下,轮转访问MAC协议综合了二者的优点。
轮询协议是一种轮转访问MAC协议,其指定某个结点为主结点,主节点以循环的方式轮询结点,向其发送报文。指定某个结点允许发送帧的最多数量;在一个结点发送结束后,继续向下一结点发送报文,指定发送帧的最多数量。主节点通过观察信道上的信号来决定结点是否完成了数据的传输。轮询引入了轮询延迟,并且在主节点故障时,信道会变得不可操作。
令牌传递协议是另一种轮转访问MAC协议,其将一个特殊帧作为令牌,按某种特定的次序进行交换。在结点得到令牌且有帧发送时,其可以发送最大数目的帧数,并把令牌转发给下一个结点;如果无帧发送就必须立刻转发给下一个结点。令牌传递引入了传递延迟与开销,并在单点故障时,信道就可能崩溃。
四、交换局域网
局域网【Local Area Network,LAN】是局部区域内的封闭计算机组。
4.1 APR
事实上,并不是主机或路由器具有链路层地址,而是其适配器具有链路层地址,一般称为MAC地址。一般的MAC地址长度为6个字节,常用十六进制表示法表示。IEEE管理着MAC的地址空间,放置适配器出现相同的MAC地址。
由于存在网络层地址与链路层地址,典型的IP地址与MAC地址,故需要进行转换。对于因特网而言,这是地址解析协议【Address Resolution Protocal,APR】的任务,要注意的是,APR工作在链路层,但是属于网络层协议。
LAN中的每一个IP结点维护了APR表,储存了IP/MAC地址映射关系,并且映射具有一定的时效性。
考虑LAN中的结点
A
A
A与
B
B
B,
A
A
A维护着
B
B
B的IP地址,但是没有
B
B
B的MAC地址。那么查询步骤为:
-
A
A
A检查APR表,没有得到
B
B
B的IP/MAC,便广播APR查询分组,其中包含
B
B
B的IP地址与目的MAC,值为FF-FF-FF-FF-FF-FF;
-LAN中所有结点都会接收到APR查询,其中
B
B
B接收到后IP匹配成功,利用单播帧向
A
A
A应答。
-
A
A
A得到MAC地址后更新APR表,缓存
B
B
B的IP/MAC,直到超时后再次更新。
因此,APR是自学习的协议,即无需干预,结点将自主创建APR表。
再考虑不在一个LAN中的结点
A
A
A与
B
B
B,
A
A
A通过
R
R
R向
B
B
B发送数据报,且知道
R
R
R的IP/MAC与
B
B
B的IP。那么传输步骤为:
-
A
A
A的目的MAC设置为
R
R
R,并向
R
R
R发送数据报;
-
R
R
R提取帧,将源MAC设置为
R
R
R的出口结点,目的MAC设置为
B
B
B,并提交给IP协议重新封装。
再整个过程中,源与目的IP地址不发生改变,只有MAC地址发生了修改。
4.2 以太网
以太网是一种具有统治地位的有线LAN技术。目前主流的以太网采用星型拓扑结构,通过中心交换机连接主机,使得每一个结点使用一个单独冲突域,从而使得结点之间不会发生冲突。
以太网提供不可靠的无连接服务,差错帧会直接丢弃,并依赖上层协议进行数据恢复。以太网的MAC协议采用二进制指数退避算法的CSMA/CD,其算法如下:
1.网络适配器从网络层接收数据报,创建数据帧;
2.网络适配器监听信道,使用1-坚持CSMA策略,直到信道空闲,发送整个帧:
2.1.冲突检测未发现冲突,帧发送成功;
2.2.冲突检测发现冲突,则中止发送,并发送堵塞信号;
3.中止发送后,进入二进制指数退避状态:
3.1.在第m次冲突后,取
n
=
m
i
n
{
10
,
m
}
n = min\{10, m\}
n=min{10,m};
3.2.从
{
0
,
1
,
.
.
.
,
2
n
−
1
}
\{0, 1, ..., 2^n-1\}
{0,1,...,2n−1}中随机选择
K
K
K;
3.3.等待K×512bit的传输延迟,返回步骤2。
连续冲突次数越多,平均等待的时间将会越长。
发送端网络适配器将IP数据报封装在以太网帧中,形如
其中依次包括:
-前导码,一串8字节的比特模式,前7个字节为10101010,第八个字节为10101011,用于时钟同步;
-源MAC地址、目的MAC地址各6字节,在网络适配器的MAC地址与目的MAC匹配时,或帧的目的MAC地址为广播地址FF-FF-FF-FF-FF-FF,网络适配器接收该帧,并将数据报交给网络层协议;否则不接受该帧;
-类型,使用2字节标识高层协议的类型;
-数据,包含上层协议的载荷;
-CRC,4字节,循环冗余校验码,差错帧直接丢弃。
以太网的交换机用于存储与转发以太网帧,并选择性的向一个或多个输出链路转发帧。交换机是自学习的。
在以太网中,主机独享链路直接连接交换机,交换机在链路上使用CSMA/CD收发帧,但实际上链路是全双工的,不会发生冲突。交换机通过交换表自学习的获知到达主机的信息,包括
-收到帧时记录源MAC地址与输入链路接口;
-利用目的MAC地址检索交换表,查找输出链路接口;当目的主机与源主机网段一致,丢弃帧;否则将帧指向输出链路接口;如果未找到输出链路接口,则向源主机之外的所有主机泛洪。
交换机可以进行互联,并且互联结构下交换机的自学习方式同单一交换机相同。
4.3 虚拟局域网
在互联交换机结构中,交换机的广播要穿越整个LAN,可能会造成安全和效率的问题。使用虚拟局域网【Virtual LAN,VALN】划分交换机,使得一个物理LAN架构上配置多个VLAN。
基于端口的VLAN使用分组交换机端口,通过交换机管理软件,将同一LAN下的主机划分成了多个VLAN。并且,端口可以动态的分配VLAN的成员。VLAN之间的转发需要通过路由。
跨越多个物理交换机的VLAN可以通过中继端口进行数据转发,为了防止VLAN转发帧发生歧义,802.1q协议为经过中继端口转发的帧增加或去除额外的首部域,其位于源MAC与高层协议类型字段之间,依次为
-2个字节的标记协议ID,为0x8100;
-2个字节的标记控制信息,包括12bit的VLAN ID,3bit的优先级。
在通过中继端口,增加或去除额外的首部域以后,需要重新计算CRC。
4.4 PPP
当一条链路直接连接一个发送端和一个接收端时,便不需要MAC寻址,此时可以使用点对点数据链路控制协议,典型的为点对点协议【Point-to-Point Protocal,PPP】。
PPP需要提供组帧,差错检测,连接活性,即在链路失效时能够检测并通知网络层,以及网络层地址协商,即端结点可以学习并配置彼此的网络地址。
PPP的数据帧格式形如
其中依次为:
-标志符,比特模式为01111110,用于定界;
-地址,比特模式为11111111,实际无效;
-控制,比特模式为00000011,实际无效;
-上层协议,占用1或2字节,描述了上层网络协议类型;
-数据,包含上层协议的有效载荷;
-CRC,占用2或4字节,用于差错检测;
-标志位,比特模式为01111110,用于定界。
当数据中也存在标志位01111110时,就会出现解释的问题,为此,发送端需要在比特模式01111110和01111101前添加01111101作为填充字节,那么接收端有:
-单个字节01111101解释为填充字节;
-连续字节01111101 01111101将第2字节作为数据接收;
-单个字节01111110作为标志字节定界。
PPP数据链路的两端需要配置PPP链路,包括最大帧长与身份认证,并通过特殊的IP协议报文IPCP【IP Control Protocol】进行IP地址等相关信息的配置。
4.5 无线局域网
IEEE802.11规定了无线局域网的体系结构。无线主机通过基站通信,基站的覆盖范围称为基本服务集【Basic Service Set,BSS】,而基站也称为访问接入点【Access Point,AP】。信道的频谱被划分为不同的信道,每AP选择一个频率信道。
主机接入无线局域网需要与AP关联。关联的方式包括:
-被动扫描,各AP发送信标帧,主机接收信标帧之后向目的AP发送请求帧,AP在接受请求后发送关联响应帧;
-主动扫描,主机广播请求帧,AP在收到广播请求帧后响应探测响应帧,主机接受探测响应帧之后向目的AP发送请求帧,AP在接受请求后发送关联响应帧。
由于无线局域网中,结点的发送强度远远大于接收强度,使得CSMA/CD不适用于无线局域网;无线局域网使用避免冲突的机制,即CSMA/CA【CSMA with Collision Avoidance】协议。其基本思想为预约信道,发送端首先发送很短的发送请求【Request to send,RTS】帧,BSS在接收到RTS后广播发送禁止【Clear to send】帧,使得其他所有结点推迟发送。并且在接收端接收到数据帧后,需要响应ACK帧。
802.11MAC帧的格式为
其中,帧控制字段包含两个地址控制字段To AP与From AP,其控制了三个地址字段的解释方式:
当To AP置0,From AP置1时,三个地址字段依次解释为目的地址、AP地址、源地址;
当To AP置1,From AP置0时,三个地址字段依次解释为AP地址、源地址、目的地址。