第五章 数据链路层
5.1 数据链路层服务
5.1.1 数据链路层概述
1. 术语
(1) 主机和路由器: 结点 (nodes)
(2) 连接相邻结点的通信信道: 链路 (links)
✦ 有线链路 (wired links)
✦ 无线链路 (wireless links)
✦ 局域网 (LANs)
(3) 链路层 (第2层) 数据分组: 帧 (frame),封装网络层数据报
2. 任务
针对于两个以物理链路直接相连的结点,数据链路层负责将高层的数据报 (例如网络层数据报) 从一个结点传输至另一个结点。
5.1.2 链路层服务
(1) 组帧 (framing)
✦ 封装来自高层的数据报,构成数据帧,加首部和尾部
✦ 帧同步:
✧ 数据链路层的数据帧在物理层传输的时候就是一系列比特
✧ 接收端收到这一系列比特之后,如何从里面识别出一个一个的数据帧呢
✧ 常用办法是在数据帧首尾添加特殊的字符或字符串
✧ 接收端看到这个特殊字符 / 字符串就知道数据帧开始了
✧ 再次看到这个特殊字符 / 字符串就知道数据帧结束了
✧ 当然还要考虑这个特殊字符 / 字符串不能和数据本身混淆的问题
(2) 链路接入 (link access)
✦ 一段链路如果被多个结点使用,那么这段链路就是共享介质
✦ 对于共享介质,需要解决信道接入 (channel access) 问题
✦ 链路接入问题即: 谁使用这条链路?如何保证不同结点的数据之间不发生干扰?
✦ 帧首部中的 “MAC” 地址,用于标识帧的源和目的
✧ 不同于IP地址!后面具体展开
(3) 相邻结点间可靠交付
✦ 在低误码率的有线链路上 (如光纤,某些双绞线等) 很少采用可靠的协议
✦ 在误码率高的无线链路上,就需要可靠数据交付机制,以确保传输是可靠的
(4) 流量控制 (flow control)
✦ 协调 (pacing) 相邻的发送结点和接收
(5) 差错检测 (error detection)
✦ 信号衰减和噪声会引起差错
✦ 接收端检测到差错:
✧ 提供可靠传输的协议: 通知发送端重传
✧ 不提供可靠传输的协议: 直接丢弃帧
(6) 差错纠正 (error correction)
✦ 接收端直接纠正比特差错
(7) 全双工和半双工通信控制
✦ 全双工:链路两端结点同时双向传输
✦ 半双工:链路两端结点交替双向传输
5.1.3 链路层的具体实现
1. 在网卡上实现
(1) 并非所有链路层协议都要提供上述所有功能
(2) 链路层在 “适配器” (即网络接口卡-NIC) 中实现或者在一个芯片上实现
✦ 例如以太网网卡、802.11网卡、以太网芯片组
✦ 同时实现链路层和物理层的功能
2. 网卡间通信
(1) 发送端:
✦ 网卡控制器将来自高层的数据报封装成帧,通过物理链路发出去
✦ 增加差错检测比特,实现可靠数据传输和流量控制等.
(2) 接收端:
✦ 接收数据帧,检测差错,实现可靠数据传输和流量控制等
✦ 提取数据报,交付上层协议实体
5.2 差错编码
数据链路层有一个重要的功能就是差错检测,甚至还要完成差错纠正,而差错检测和差错纠正都建立在差错编码的基础上。
5.2.1 差错编码基本原理
差错编码的基本原理就是在初始数据上增加一些冗余信息,冗余信息中存放着位和位之间原本并不存在的关联关系 (所谓关联关系就是一个函数,或者叫映射)。将初始数据和冗余信息一起发送给接收端,接收端收到之后,再去判断这个关联关系是否存在。
D→DR,其中R为差错检测与纠正比特 (或叫冗余比特、监督位)。
事实上就算数据错的一塌糊涂,R也依旧可能等于R
′
'
′,差错编码不能保证100%可靠!
5.2.2 差错编码的检错能力
在设计差错编码时,我们希望差错编码的检错能力更强,而冗余信息更少。
(1) 差错编码可分为检错码 (只能检测差错) 与纠错码 (既能检错也能纠错)
(2) 对于检错码,如果编码集的汉明距离d
s
_s
s=r+1,则该差错编码可以检测r位的差错,也就是说,可以100%检测出来r位的差错,而r位以上的差错就不一定能检测出来了
✦ 汉明距离即两个码字对应比特位不同的位数,例如 {0, 0 }和 {1, 1} 汉明距离为2
✦ 编码集的汉明距离即集内任意两个码字的汉明距离的最小值
✦ 可以用上图直观理解: C
i
_i
i和C
j
_j
j是编码集中的两个有效码字,则二者汉明距离大于等于r+1,那么如果C
i
_i
i错了r个比特,错成了C
′
'
′,那么C
′
'
′和C
j
_j
j的汉明距离一定大于等于1,也就是说C
′
'
′不会错成另外一个有效码字
✦ 例如,编码集 {0000, 0101, 1010, 1111} (这个例子是重复码,即把数据重复一份作为R) 的汉明距离ds=2,可以100%检测1比特差错
(3) 对于纠错码,如果编码集的汉明距离ds=2r+1,则该差错编码可以纠正r位的差错
✦ 可以用上图直观理解: 如果C
i
_i
i错了r个比特,错成了C
′
'
′,那么C
′
'
′和C
j
_j
j的汉明距离一定大于等于r+1,也就大于C
′
'
′和C
i
_i
i的汉明距离,按照概率最大化原则,C
′
'
′会被纠错为C
i
_i
i
✦ 例如,编码集 {000000,010101,101010,111111} (这个例子是重复码,即把数据重复两次作为R) 的汉明距离ds=3,可以纠正1比特差错,如100010纠正为101010
5.2.3 奇偶校验码
1. 1比特奇偶校验位:
(1) 在数据之后加一个校验位,例如奇校验,如果数据中1的个数是奇数,那么校验位就是1
(2) 可以检测所有奇数位差错,而偶数位差错检测不出来,即检错能力50%
(3) 好处在于只需要加一个校验位,效率很高
2. 二维奇偶校验:
(1) 把数据组织成二维矩阵形式,然后对每一行和每一列分别添加1比特奇偶校验位
(2) 可以检测所有奇数位差错、部分偶数位差错 (如果没错在同一行 / 列就能检测出来)
(3) 纠正同一行 / 列的奇数位错,因为如果只有一位错了,那么这一位所对应的行和列1比特奇偶校验位都会发生错误,这样就可以精准定位哪一位出错了,并将其纠错;同理,如果是奇数位错了,也是可以把错误的位全部找出来的
5.2.4 Internet校验和 (Checksum)
1. 发送端:
(1) 将 “数据” (校验内容) 划分为16位一组的的二进制 “整数” 序列
(2) 求和 (sum):补码求和 (最高位进位的 “1”,返回最低位继续加)
(3) 校验和 (Checksum):sum的反码
(4) 放入分组 (UDP、TCP、IP) 的校验和字段
2. 接收端:
(1) 与发送端相同算法计算
(2) 按照和发送端同样的算法计算得到的 “checksum”:
✦ 取反码之后为16位全0(或不取反码的sum为16位全1):无错
✦ 否则:有错
5.2.5 循环冗余校验码 (CRC)
1. 简介
(1) 是检错能力更强大的差错编码
(2) 将数据比特D视为一个二进制数
(3) 选择一个r+1位的比特模式 (生成比特模式) G
(4) 目标: 确定一个 r 位的CRC比特R满足:
✦ <D, R>就是在D后面加 r 位检验位R
✦ <D, R>刚好可以被G整除 (模2除法,即按位除,不进位、不借位,实际上就是异或)
✧ 模2除法举例
✦ 接收端检错:利用G除<D,R>,余式全0,无错;否则,有错!
✦ 只要找到一个优良的G,那么检错能力就是非常强的
✦ 可以检测所有突发长度小于r+1位差错。
(5) 广泛应用于实际网络 (以太网,802.11 WiFi,ATM)
2. R如何求
3. 优点
(1) 检错能力强
(2) 一旦G的位数确定后,R的位数也确定,对于数据很长的情况也可以有一个很短的R
(3) 硬件电路容易实现
5.3 多路访问控制 (MAC) 协议
——multiple access control protocol
5.3.1 背景介绍
网络中的链路主要分两类:
(1) 点对点链路 (只连接两个结点)
✦ 例如 拨号接入的PPP
✦ 例如 以太网交换机与主机间的点对点链路
(2) 广播链路 (共享介质)
✦ 例如 早期的总线以太网
✦ 例如 802.11无线局域网
那么,如果大家共享物理介质来进行通信,那么就必须有一个机制来协调到底谁来使用这个介质 (链路)。这个机制就是多路访问控制 (MAC) 协议。
5.3.2 MAC简介
1. 适用场景
(1) 单一共享广播信道
(2) 两个或者两个以上结点同时传输,就势必会产生干扰 (interference)
✦ MAC协议中,通常把这种相互干扰称作 冲突(collision)
✧ 会导致其他结点同时接收到两个或者多个信号 → 接收失败!
2. 要求
(1) 希望采用分布式算法决定结点如何共享信道,即决策结点何时可以传输数据,而不需要一个额外的集中结点
(2) 必须基于信道本身来协调,使用通信信道共享协调信息,而不是再建立一个新的信道
3. 理想MAC协议
(1) 给定一个速率为R bps的广播信道
(2) 期望:
✦ 当只有一个结点希望传输数据时,它可以使用全部带宽以速率 R发送.
✦ 当有M个结点期望发送数据时,每个节点平均发送数据的平均速率是R/M
✦ 完全分散控制:
✧ 无需特定结点协调
✧ 无需时钟、时隙同步
✦ 简单
4. MAC协议分类
根据使用到的技术手段可以分为三大类:
(1) 信道划分 (channel partitioning) MAC协议
✦ 使用多路复用技术,将信道资源划分为资源片
✦ TDMA (时分)、FDMA (频分)、CDMA (码分)、WDMA (波分) 等
(2) 随机访问 (random access) MAC协议
✦ 随时随地每个结点都可以全带宽使用链路
✦ 信道不划分,允许冲突 (冲突就意味着数据发送失败)
✦ 采用冲突 “恢复” 机制
(3) 轮转 (“taking turns”) MAC协议
✦ 基于某种轮转机制,结点轮流使用信道
✦ 综合前面两类,既不产生冲突,每个结点在使用链路时又可以使用全部带宽
5.3.3 信道划分MAC协议
1. 信道划分MAC协议:TDMA
TDMA: time division multiple access
✦ 把时间划分为一个个时隙,将时隙分配给结点
✦ 不同结点 “周期性” 接入信道
✦ 每个结点在每个周期,占用固定长度的时隙
✦ 若某个结点不发数据,分配给它的时隙也要保留,未用时隙空闲 (idle)
✦ 例如:6-站点LAN,1, 3, 4传输分组,2, 5, 6空闲
2. 信道划分MAC协议:FDMA
FDMA: frequency division multiple access
✦ 信道频谱划分为若干频带 (frequency bands)
✦ 每个站点分配一个固定的频带
✦ 无传输频带空闲
✦ 例如: 6站点LAN, 1, 3, 4频带传输数据,2, 5, 6频带空闲。
5.3.4 随机访问MAC协议
1. 简介
(1) 当结点要发送分组时:
✦ 利用信道全部数据速率R发送分组
✦ 没有事先的结点间协调
(2) 两个或多个结点同时传输:➜ “冲突”
(3) 随机访问MAC协议需要定义:
✦ 如何检测冲突
✦ 如何从冲突中恢复 (e.g., 通过延迟重传)
(4) 典型的随机访问MAC协议:
✦ 时隙 (sloted) ALOHA
✦ ALOHA
✦ CSMA、CSMA/CD、CSMA/CA
2. 时隙ALOHA协议
(1) 假定:
✦ 所有结点发送的数据帧大小相同
✦ 时间被划分为等长的时隙 (每个时隙可以传输1个帧)
✦ 结点只能在时隙开始时刻发送帧
✦ 结点间时钟同步
✦ 如果2个或2个以上结点在同一时隙发送帧,结点即检测到冲突
(2) 运行过程:
✦ 当结点有新的帧时,在下一个时隙 (slot) 发送
✦ 如果没发生冲突:该结点可以在下一个时隙继续发送新的帧
✦ 如果发生了冲突:该结点在下一个时隙以概率p重传该帧,直至成功
(3) 举例
✦ 如果一个时隙有多个结点发送数据帧,则发生冲突
✦ 如果一个时隙没有结点发送数据帧,则时隙空闲
✦ 只有当某个时隙只有一个结点发送数据帧时,发送才成功
(4) 优缺点
优点:
✦ 单个结点活动时,可以连续以信道全部速率传输数据
✦ 高度分散化: 只需同步时隙
✦ 简单
缺点:
✦ 冲突,浪费时隙
✦ 可能造成空闲时隙
✦ 结点也许能以远小于分组传输时间检测到冲突
✧ 既然已经检测到冲突了,那么那一次的发送就已经没有意义了,没必要继续发送
✦ 必须要求所有结点时钟同步
(5) 效率
效率 (efficiency): 长期运行时,成功发送帧的时隙所占比例
✦ 假设: N个结点有很多帧待传输,每个结点在每个时隙均以概率p发送数据
✦ 对于给定的一个结点,在一个时隙将帧发送成功的概率= p(1-p)
N
−
1
^{N-1}
N−1
✦ 对于任意结点成功发送帧的概率= Np(1-p)
N
−
1
^{N-1}
N−1
✦ 最大效率: 求得使Np(1-p)
N
−
1
^{N-1}
N−1最大的p*
✦ 对于很多结点,求Np*(1-p*)
N
−
1
^{N-1}
N−1当N趋近无穷时的极限,可得:
✧ 当有无穷结点时的最大效率= 1/e = 0.37
✧ 当有无穷结点时的最好情况: 信道被成功利用的时间仅占37%!
3. ALOHA协议
(1) 特点
✦ 非时隙 (纯) Aloha:更加简单,无需同步
✦ 当有新的帧生成时立即发送
✦ 冲突可能性增大:
✧ 在t
0
_0
0时刻发送帧,会与在[t
0
−
1
_{0-1}
0−1, t
0
+
1
_{0+1}
0+1]期间其他结点发送的帧冲突
✧ [t
0
−
1
_{0-1}
0−1, t
0
+
1
_{0+1}
0+1] 叫做易损时间区
(2) 效率
比时隙ALOHA协议更差!
4. CSMA协议
<1> 简介
载波监听多路访问协议CSMA (carrier sense multiple access)
(1) 发送帧之前,监听信道中的载波信号判断信道中是否有其他结点发送数据:
✦ 发现信道空闲 (没有载波): 发送完整帧
✦ 发现信道忙 (有载波): 推迟发送
✧ 1-坚持CSMA (发现信道忙之后依旧一直监听信道)
✧ 非坚持CSMA (发现信道忙之后随即等待一段时间再监听信道)
✧ P-坚持CSMA (发现信道忙之后以概率p监听信道,概率1-p等待一段时间)
(2) 冲突可能仍然发生:
✦ 两个结点可能同时发送数据
✦ 信号传播延迟
(3) 冲突举例
✦ t
0
_0
0时刻B发送数据,t
1
_1
1时刻B的信号还没有到达D
✦ D以为信道空闲,也发送数据,造成冲突
✦ 事实上,当B的信号后来到达D时,D就应该能判断出来已经发生冲突了
✦ 同理,D的信号到达B时,B也应该能判断出来已经发生冲突了
✦ 一旦知道发生冲突,就该立即停止发送数据,否则就会像上图那样造成大量浪费
<2> CSMA/CD协议
CSMA/CD: CSMA with Collision Detection
✦ 边发送数据帧,边监听信道
✦ 可以在很短的内就可以检测到冲突
✦ 发现冲突后传输中止,减少信道浪费
冲突检测:
✦ 有线局域网易于实现: 通过测量信道中的信号强度,比较发射信号 (一个结点最大发射信号可能是5V) 与接收信号 (接收到的信号强度为10V,说明有其他结点在发送)
✦ 无线局域网很难实现: 无线信号在空气中衰减很快,接收信号强度淹没在本地发射信号强度下
<3> CSMA/CD协议的特性
(1) 假设:
✦ 网络带宽: R (bps)
✦ 数据帧最小长度: L
m
i
n
_{min}
min (bits)
✦ 信号传播速度: V (m/s)
(2) 极端情况:
✦ A发送数据后,当A的信号到达B的前一瞬间,B以为信道空闲,也发送数据
✦ B当时就发现了冲突,于是中止了传输
✦ 而A只有当B的信号到达A的时候才能发现冲突
✦ 也就是说从A开始发送数据到检测到冲突,用时 2d
m
a
x
_{max}
max / V
✦ 如果此时A的数据帧已经送达,那么A就无法挽回发生冲突的数据帧
(3) 要求:
✦ L / R ≥ 2d
m
a
x
_{max}
max / V
✦ 那么 L
m
i
n
_{min}
min / R = 2d
m
a
x
_{max}
max / V
✦ 也即 L
m
i
n
_{min}
min / R = RTT
m
a
x
_{max}
max
(4) 例题:
<4> CSMA/CD协议的效率
✦ t
p
r
o
p
_{prop}
prop = 2个结点间信息传播的最大传播延迟
✦ t
t
r
a
n
s
_{trans}
trans = 最长帧传输延迟
✦ t
p
r
o
p
_{prop}
prop趋近于0或者t
t
r
a
n
s
_{trans}
trans趋近于∞时,效率趋近于1
✦ 远优于ALOHA,并且简单、分散!
5. 轮转访问MAC协议
(1) 比较
✦ 信道划分MAC协议:
✧ 网络负载重时,共享信道效率高,且公平
✧ 网络负载轻时,共享信道效率低!
✦ 随机访问MAC协议:
✧ 网络负载轻时,共享信道效率高,单个结点可以利用信道的全部带宽
✧ 网络负载重时,产生冲突开销
✦ 轮转访问MAC协议:
✧ 综合两者的优点!不冲突且每个结点使用信道全部带宽
轮转访问MAC协议也有很多种类,这里只举两个例子:
(2) 轮询 (polling):
✦ 网络中有一个主结点轮流 “邀请” 从属结点发送数据
✦ 从属结点只有接收到邀请才能发送数据
✦ 典型应用: “哑(dumb)” 从属设备 (非智能设备)
✦ 问题:
✧ 轮询也需要发送一个数据帧占用信道,轮询是有开销的
✧ 某个结点想要发送数据需要等到主结点轮询到他才能发,有等待延迟
✧ 如果主机结点单点故障,那么网络就会瘫痪
实际中会考虑到这种情况,安排一个备用主结点
(3) 令牌传递 (token passing):
✦ 网络中有且只有一个令牌,令牌代表着网络介质的使用权
✦ 控制令牌依次从一个结点传递到下一个结点
✦ 令牌就是一个特殊帧,结点获取到令牌才能发送数据
✦ 问题:
✧ 令牌的传递也会占据信道,是有开销的
✧ 某个结点想要发送数据需要等到令牌到来,具有等待延迟
✧ 如果某个结点发生故障,导致令牌丢失,网络就会瘫痪
实际中会考虑到这种情况,安排一个主结点检测令牌存在与否
如果主结点长时间没有收到令牌,意味着令牌丢失,就重新产生一个令牌
6. MAC协议总结
(1) 信道划分MAC协议:时间、频带、码片划分
✦ TDMA、FDMA、CDMA
(2) 随机访问MAC协议:
✦ ALOHA, S-ALOHA, CSMA, CSMA/CD
✦ CSMA/CD应用于以太网
✦ CSMA/CA应用802.11无线局域网
(3) 轮转访问MAC协议:
✦ 主结点轮询;令牌传递
✦ 蓝牙、FDDI、令牌环网
5.4 ARP协议
5.4.1 MAC地址
1. 对比IP地址 (以IPv4为例) 和MAC地址
(1) 32位IP地址:
✦ 表示一个接口的网络层地址
✦ 作用: 用于标识网络层 (第3层) 分组的源目的分组,支持分组转发
(2) 48位MAC地址 (或称LAN地址,物理地址,以太网地址) :
✦ 用于大部分LANs,固化在网卡的ROM中,有时也可以软件设置
✦ 作用:用于局域网内标识一个帧从哪个接口发出,到达哪个物理相连的其他接口
✧ e.g.: 1A-2F-BB-76-09-AD (16进制表示)
✦ 局域网中的每块网卡都有一个唯一的MAC地址
2. MAC地址的管理
(1) MAC地址由IEEE统一管理与分配
(2) 网卡生产商购买MAC地址空间 (前24比特),后24比特分配给网卡
(3) 类比:
✦ MAC地址: 身份证号
✦ IP地址: 邮政地址
(4) MAC地址是 “平面” 地址: ➜ 可 “携带”,不管把网卡带到哪里去,MAC地址都不变
✦ 可以从一个LAN移到另一个LAN
(5) IP地址是层次地址: ➜ 不可 “携带”,具有和某个区域之间的的归属关系
✦ IP地址依赖于结点连接到哪个子网
5.4.2 ARP: 地址解析协议
1. 简介
你每一台主机都有一个接口,接口有网络层的IP地址;每一台主机又有网卡,网卡有数据链路层的MAC地址。
问题: (在同一个LAN内通信时) 网络层的数据报要通过数据链路层进行转发,那么如何在已知目的接口的IP地址前提下确定其MAC地址?
答案: ARP表: LAN中的每个IP结点 (主机、路由器) 都会维护一个表
✦ 存储某些LAN结点的IP/MAC地址映射关系: < IP地址;MAC地址;TTL>
✦ TTL(Time To Live): 经过这个时间以后该映射关系会被遗弃 (典型值为20min)
2. 举例
(1) A想要给同一局域网内的B发送数据报
✦ A查询ARP表发现: B的MAC地址不在A的ARP表中
(2) A通过ARP协议在局域网内广播ARP查询分组,其中包含B的IP地址
✦ 查询分组封装在链路层的数据帧中
✦ 广播目的MAC地址 = FF-FF-FF-FF-FF-FF (全1)
✦ LAN中所有结点都会接收ARP查询
(3) B接收ARP查询分组,IP地址匹配成功,向A应答B的MAC 地址
✦ 利用单播帧 (封装在链路层的数据帧中) 向A发送应答
(4) A在其ARP表中,缓存B的IP-MAC地址对,直至超时
✦ 超时后,再次刷新
(5) ARP是 “即插即用” 协议:
✦ 结点自主创建ARP表,无需管理员干预
问题: 假设A要给B发送数据,但是A和B不再同一个局域网内,该怎么办呢?
5.4.3 寻址: 从一个LAN路由至另一个LAN
1. 通信过程: A通过路由器R向B发送数据报
(1) 最关注的是如何寻址: IP地址 (数据报中) 和MAC地址 (帧中)
(2) 假设A知道B的IP地址 (由用户输入B的url再查询IP地址,或者直接输入B的IP地址)
(3) 假设A知道第一跳路由器R (左) 接口IP地址 (A的默认网关即第一跳路由左接口IP地址)
(4) 假设A知道第一跳路由器R (左) 接口MAC地址 (通过ARP协议获取)
(5) 过程:
✦ A构造IP数据报,其中源IP地址是A的IP地址,目的IP地址是B的IP地址
✦ A构造链路层帧,其中源MAC地址是A的MAC地址,目的MAC地址是R(左)接口的MAC地址,封装A到B的IP数据报
✦ 帧从A发送至R
✦ R接收帧,提取IP数据报,传递给上层IP协议
✦ R转发IP数据报 (源和目的IP地址不变!)
✦ R创建链路层帧,其中源MAC地址是R (右) 接口的MAC地址,目的MAC地址是B的MAC地址,封装A到B的IP数据报
✦ 数据帧就到达了B,B完成链路层功能,发现数据帧没问题
✦ B把数据帧中封装的IP数据报提取出来,交给上层的IP协议
✦ 再交给传输层,再交给应用层 (目的主机)
5.5 以太网
5.5.1 以太网 (ETHERNET) 简介
(1) 以太网已经成为具有 “统治地位” 的有线LAN技术,优势在于:
(2) 造价低廉 (NIC不足¥100.00)
(3) 应用最广泛的LAN技术
(4) 比令牌局域网和ATM等,简单、便宜
(5) 满足网络速率需求:10 Mbps – 10 Gbps
丛草图中我们可以看到,以太网通过共享的网络介质 (中间黄色的线) 来连接局域网中的所有主机,当时把这个共享网络介质称作以太,所以网络也起名叫以太网。
网络中的每一个结点或每一个主机通过一个触头和共享介质进行接触,通过收发器向介质发送信号、从介质接收信号。
收发器通过接口电缆连接网络接口卡,网络接口卡通过主机总线与主机连接。
5.5.2 物理拓扑
(1) 总线 (bus): 上世纪90年代中期前流行
✦ 所有结点在同一冲突域 (collision domain) (可能彼此冲突)
✦ 冲突域是指,在这样一个范围内,两个结点同时发送数据就会产生冲突
(2) 星型 (star): 目前主流网络拓扑
✦ 使用中心交换机 (switch) 连接主机
✦ 每个结点一个单独冲突域 (结点间彼此不冲突)
5.5.3 不可靠、无连接服务
(1) 无连接 (connectionless): 发送帧的网卡与接收帧的网卡间没有 “握手” 过程
(2) 不可靠 (unreliable): 接收网卡不向发送网卡进行确认
✦ 由于以太网应用在局域网内,出现差错的概率比较低
✦ 差错帧直接丢弃
✦ 丢弃帧中的数据恢复依靠高层协议 (e.g., TCP),否则,发生数据丢失
(3) 以太网的MAC协议: 采用二进制指数退避算法的 CSMA/CD
✦ 二进制指数退避算法用来计算发生冲突之后等待多长时间在进行传输
5.5.4 以太网CSMA/CD算法
- NIC从网络层接收数据报,创建数据帧。
- NIC监听信道:如果NIC监听到信道空闲,则开始发送帧;如果NIC监听到信道忙,则一直等待到信道空闲,然后发送帧。
- NIC发送完整个数据帧的过程中,没有检测到其他结点的数据发送,则NIC确认帧发送成功!
- 如果NIC检测到其他结点传输数据,则中止发送,并发送堵塞信号 (jam signal)
- 中止发送后,NIC进入二进制指数退避:
✦ 第m次连续冲突后:
✧ 取n = Min(m, 10)
✧ NIC 从{0,1,2, …, 2 n ^n n-1}中随机选择一个数K
✧ NIC等待K×512比特的传输延迟时间,再返回第2步
✦ 连续冲突次数越多,平均等待时间越长。
✦ 如果连续16次冲突,就不会再尝试了,向上层协议报告差错
5.5.5 以太网帧结构
发送端网卡将IP数据报 (或其他网络层协议分组) 封装到以太网帧中:
(1) 前导码 (Preamble) (8B):
✦ 7个字节均为10101010,第8字节为10101011
✦ 用于发送端与接收端的时钟同步
✦ 当前导码从10101…变成11时,告诉接收端要开始发送有效数据帧内容了
✦ 一般来说讨论以太网数据帧长度时,不包含前导码
(2) 目的MAC地址、源MAC地址 (各6B,48bits):
✦ 如果网卡的MAC地址与收到的帧的目的MAC地址匹配
✦ 或者帧的目的MAC地址为广播地址(FF-FF-FF-FF-FF-FF)
✦ 则网卡接收该帧,并将其封装的网络层分组交给相应的网络层协议
✦ 否则,网卡丢弃 (不接收) 该帧
(3) 类型 (Type) (2B): 指示帧中封装的是哪种高层协议的分组
✦ 如,IP数据报、Novell IPX数据报、AppleTalk数据报等
(4) 数据 (Data) (46-1500B): 指上层协议载荷。
✦ 数据必须大于46B,否则用其他内容填充
✦ R=10Mbps,RTTmax=512μs,Lmin / R = RTTmax
✦ Lmin=512bits=64B,Datamin=Lmin-18=46B
(5) CRC (4B): 循环冗余校验码
✦ 如果出现差错,丢弃差错帧
5.5.6 802.3以太网标准
许多不同的以太网标准
✦ 相同的MAC协议和帧格式
✦ 不同速率: 2 Mbps,10 Mbps,100 Mbps,1Gbps,10G bps
✦ 不同物理介质: 光纤, 线缆
5.6 交换机
5.6.1 以太网交换机 (switch)
在以太网中,交换机使用的非常多,因此也把以太网中的交换机叫做以太网交换机。实际上其他网络 (例如电话网络) 中也有交换机,但是我们讨论的是以太网的交换机。
(1) 交换机是链路层设备
✦ 存储-转发以太网帧
✦ 检验到达帧的目的MAC地址,选择性 (selectively) 向一个或多个输出链路转发帧
✦ 利用 CSMA/CD 访问链路,发送帧
(2) 透明 (transparent) 交换机 (使用最广泛的一类交换机)
✦ 主机感知不到交换机的存在
(3) 透明交换机是即插即用 (plug-and-play) 设备
(4) 透明交换机是自学习 (self-learning) 设备
✦ 交换机无需配置
5.6.2 多端口间同时传输
(1) 主机利用独享 (dedicated) 链路直接连接交换机
(2) 交换机缓存帧
(3) 交换机在每段链路上利用 CSMA/CD 收发帧,但无冲突,且支持全双工
✦ 每段链路是一个独立的冲突域
(4) 交换 (switching): A-A
′
'
′与B-B
′
'
′的传输可以同时进行,没有冲突
✦ 注: 这里的A、B应该是MAC地址,为了讨论方便用字母代替
5.6.3 交换表
交换机如何保证数据能够正确地、动态地在不同接口之间进行传输呢?
Q: 交换机怎么知道A
′
'
′可以通过接口4到达,而B
′
'
′可以通过接口5到达?
✦ 每个交换机有一个交换表 (switch table),每个入口 (entry) (表项):
✦ 记录了主机的MAC地址、到达主机的接口、时间戳
✦ 看起来很像路由表!
Q: 交换表入口信息如何创建和维护的那?
✦ 类似于路由协议?
5.6.4 自学习
交换机通过自学习,获知到达主机的接口信息
✦ 当收到帧时,交换机 “学习” 到发送帧的主机 (通过帧的源MAC地址),位于收到该帧的接口所连接的LAN网段
✦ 将发送主机MAC地址 / 接口信息记录到交换表中
5.6.5 帧过滤 / 转发 过程
当交换机收到帧:
- 记录帧的源MAC地址与输入链路接口
- 利用目的MAC地址检索交换表
- if 在交换表中检索到与目的MAC地址匹配的入口(entry)
then {
if 目的主机位于收到帧的网段
then 丢弃帧
else 将帧转发到该入口指向的接口
}
else 泛洪(flood) /* 向除收到该帧的接口之外的所有接口转发 */
5.6.6 自学习与转发过程举例
从A发向A
′
'
′时,目的MAC地址A
′
'
′,位置未知:泛洪
从A
′
'
′发向A时,目的MAC地址A,位置已知:选择性转发
5.6.7 交换机互联
交换机可以互联
Q: 当A向G发送帧时,S1怎么知道通过S4转发?S4又怎么知道通过S3转发?
A: 自学习!(工作过程与单一交换机情形相同!)
✦ 假设初始转发表全为空
✦ S
1
_1
1泛洪到达S
4
_4
4,S
4
_4
4泛洪到达S
3
_3
3,S
3
_3
3泛洪到达G
✦ 如此一来,S
1
_1
1、S
4
_4
4、S
3
_3
3都学习到了发送到A的网络接口
5.6.8 组织机构 (Institutional) 网络
5.6.9 交换机 vs. 路由器
(1) 两者均为存储-转发设备:
✦ 路由器: 网络层设备 (检测网络层分组首部)
✦ 交换机: 链路层设备 (检测链路层帧的首部)
(2) 二者均使用转发表:
✦ 路由器: 利用路由算法 (路由协议) 计算或设置,依据IP地址
✦ 交换机: 利用自学习、泛洪构建转发表, 依据MAC地址
(3) 网络设备对比
✦ 直通传输: 一个接口上接收数据帧的同时,直接从另一个接口发送出去
✦ 交换机的基本工作方式是存储-转发,有些交换机支持直通传输
5.7 虚拟局域网(VLAN)
5.7.1 VLANs的动机
考虑以下情形:
(1) 想要把广播限制在每个系之内,例如CS系的广播只在CS系内传播。实际上把顶层交换机换成一个路由器就可以完成这个任务,但是不一定非要使用路由器
(2) CS用户迁移到EE,但是希望连接至CS交换机,怎么办?
(3) 单一广播域:
✦ 所有第2层广播流量 (ARP,DHCP,未知目的MAC地址位置) 必须穿越整个LAN
✦ 从安全、隐私、效率角度考虑,希望广播被限制在某个域之内
5.7.2 VLANs
利用软件技术,再物理局域网LAN之内,再划分出多个VLAN
比较典型的一种方法是基于端口的VLAN:
✦ 把交换机的每一个端口当作一个VLAN (例如下图1-8为一组,9-16为一组)
✦ 于是, 单一的物理交换机 就像多个虚拟交换机一样运行
5.7.3 基于端口的VLAN
(1) 流量隔离 (traffic isolation): 去往/来自端口1-8的帧只到达端口1-8
✦ 除了基于端口进行划分,也可以基于MAC地址定义VLAN
(2) 动态成员: 可以把随时把某个端口动态分配给不同VLAN
✦ 这也是与使用路由器的方案相比的优点
(3) 在VLAN间转发: 通过路由器进行转发 (就像在独立的交换机之间转发一样)
✦ 看起来需要设立一个独立的路由器,但是实践中,厂家会将交换机与路由器集成在一起,在这种设备上就会很容易地实现多个VLAN之间的转发
5.7.4 跨越多物理交换机的VLAN
如何把跨越多个物理交换机的VLAN连接在一起?
(1) 多线缆连接
✦ 每个线缆连接一个VLAN
✦ 如果VLAN很多的话,就要用到很多电缆,就会占用很多交换机接口
(2) 中继端口 (trunk port):
✦ 用中继端口连接两个物理交换机
✦ 在跨越多个物理交换机的任意两个VLAN之间传输数据帧
✦ 终极端口被一个VLAN中的端口共用所以:
✦ 为多VLAN转发标准802.1数据帧容易产生歧义 (因此必须携带VLAN ID信息)
✦ 802.1q协议为经过中继端口转发的帧增加 / 去除额外的VLAN ID首部域
5.8 PPP协议
前面讲的MAC协议都是针对广播链路 (单一共享广播信道) 的协议,而PPP协议是针对点对点链路的。
5.8.1 点对点数据链路控制
(1) 一个发送端,一个接收端,一条链路:比广播链路容易
✦ 无需介质访问控制 (Media Access Control,MAC)
✦ 无需明确的MAC寻址
✦ e.g., 拨号链路,ISDN链路
(2) 常见的点对点数据链路控制协议:
✦ HDLC: High Level Data Link Control
✦ PPP: Point-to-Point Protocol
5.8.2 PPP设计需求
(1) 组帧: 作为链路层协议,完成将网络层数据报封装到数据链路层帧中的任务
✦ 可以同时承载任何网络层协议分组 (不仅IP数据报)
✦ 可以向上层实现分用 (在数据帧中增加一个字段描述封装的是哪一个协议的分组)
(2) 比特透明传输: 数据域必须支持承载任何比特模式
(3) 差错检测: (无纠正)
(4) 连接活性 (connection liveness) 检测: 检测、并向网络层通知链路失效
(5) 网络层地址协商: 端结点可以学习 / 配置彼此网络地址
5.8.3 PPP无需支持的功能
(1) 无需差错纠正/恢复
(2) 无需流量控制
(3) 不存在乱序交付
(4) 无需支持多点链路
差错恢复、流量控制等由高层协议处理!
5.8.4 PPP数据帧
(1) 标志 (Flag): 定界符 (delimiter),标志一个帧的开始和结束
(2) 地址 (Address): 由于点对点,所以无效 (仅仅是一个选项)
(3) 控制 (Control): 无效;未来可能的多种控制域
(4) 协议 (Protocol): 上层协议 (eg, PPP-LCP,IP,IPCP,etc) (实现复用分用)
(5) 信息 (info): 上层协议分组数据
(6) 校验 (check): CRC校验,用于差错检测
经过双方协商,可以省略地址字段、控制字段,并使用1位协议字段和2位校验字段,1个PPP帧最多可以节省5个字节。
5.8.5 字节填充 (Byte Stuffing)
(1) “数据透明传输” 要求:
✦ 数据域必须允许包含标志模式<01111110>
✦ 而不能把这一段数据当作标志处理
✦ Q: 如何判断该作为数据接收,还是作为标志处理?
(2) 发送端:
✦ 在数据中的<01111110>和<01111101>字节前
✦ 添加额外的字节<01111101> (“填充(stuffs)”)
(3) 接收端:
✦ 单个字节<01111101>表示一个填充字节,丢弃,保留后面的1个字节数据
✦ 连续两个字节<01111101>:丢弃第1个,第2个作为数据接收
✦ 单个字节<01111110>: 标志字节
5.8.6 PPP数据控制协议
在交换网络层数据之前,PPP数据链路两端必须:
(1) 配置PPP链路
✦ 双方协商最大帧长
✦ 双方进行身份认证 (authentication)
✦ 包不包括地址字段和控制字段,协议字段和校验字段使用几位
✦ etc.
(2) 学习 / 配置网络层信息
✦ PPP协议支持不同的网络层协议,针对不同的网络层协议,使用不同的网络层控制协议对网络信息进行配置 (主要是地址信息)
✦ 对于IP协议: 通过交换IPCP协议 (IP Control Protocol ) 报文 (IP分组首部的 “上层协议” 字段取值: 8021),完成IP地址等相关信息配置
休眠 → 物理链路建立成功 (→ 身份认证) → 网络层信息配置 → PPP链路建立完成 → 断开连接 → 休眠