计网笔记-第五章:数据链路层
第五章复习重点
- 奇偶校验(一比特 & 二维)
- 校验和
- CRC
- ALOHA效率的计算
- CSMA
- MAC(比较IP地址和MAC地址的不同)
- 发送数据报到子网以外的例子
- 泛洪和自学习
- 交换机和路由器(个人感觉还是有可能考吧)
- VLAN
- 逛淘宝的Web历程(综合应用)
第五章复习大纲
- 理解链路层服务的主要功能
- 差错检查、纠错
- 共享广播信道:多点接入问题
- 链路层寻址
- 局域网技术:Ethernet、VLANS
- 链路层技术的实现
5.1 链路层概述
术语:
- 节点(nodes):主机和路由器
- 链路(links):沿着通信路径连接相邻节点的通信信道。分为:有线 & 无线。
- 数据帧(frame):第二层的分组,封装了的数据报
职责:将第三层网络层封装的数据报 从一个节点传到与该节点 直接有物理链路相连的 另一个节点
数据报在不同链路上发送:例如在第一段链路上采用以太网技术,在中间链路采用帧中继技术,在最后一跳链路采用802.11无线以太网技术。(类比先坐小汽车到机场,到机场又坐飞机,最后坐火车)
三段链路采取不同的链路层协议(不同的协议提供不同的服务,数据传输 靠谱/不靠谱)
链路层提供的服务:
- 封装成帧,接入链路
- 在相邻节点间可靠传输数据帧
- 流量控制
- 差错检查
- 错误纠正
- 半双工和全双工(半双工:链路的两个节点都可以发送数据,但是不能同时发)
区分两个服务:
链路层提供的服务:
将数据报封装成数据帧,增加相应的头部和尾部信息。如果是共享链路,则接入链路。
不同于 IP 地址,在数据帧头部用 MAC 地址来标志 源/目的MAC 地址
以太网能够提供的链路层服务:
- 在相邻节点之间可靠传输数据帧,当传输链路是比特错误率很低的链路时,例如光纤和双绞线,很少使用可靠数据传输机制;
- 而在无线链路这样的高比特错误率链路时,通常会增加可靠数据传输机制。
- 为什么要在链路层和端到端都实现可靠传输?
答:链路层负责处理 局部链路上的错误和重传,确保邻近设备之间的传输可靠性;端到端层次则负责 整个路径的错误检测和纠正,确保数据完整性和顺序。这种多层次的策略可以更有效地应对不同类型的传输问题,提升整体网络通信的可靠性和性能。
- 既然在传输层实现了端到端的可靠数据传输,为什么还需要在链路层提供可靠数据传输呢?
答:这种多层次的设计提供了局部错误的 快速处理、减少了传输层的负担、提高了局部链路的效率、确保了不同网络技术之间的互操作性,并满足了不同应用和服务的需求。通过在多个层次上提供可靠性,可以构建一个更健壮、高效的网络传输系统。
链路层实现的位置:主机、路由器
主机:网络适配器(网卡)上
以太网卡,802.11卡;以太网芯片组
实现链路层和物理层功能
发送方:
- 封装数据报为数据帧
- 增加差错检测比特,可靠数据传输,流量控制等机制
接收方
- 执行检查错误、可靠数据传输、流量控制
- 抽取数据报,将其递交上层(网络层)
5.2 差错检测和纠错
差错检测和纠错技术不是100%可靠的,差错校验位越多,检测和纠正功能越好
三种技术
奇偶校验:最基本的方法
Internet 校验和:常用于运输层
循环冗余检测:常用于链路层
奇偶校验
1. 一比特奇偶校验
- 发送方:在要发送的信息 D(d位)后面附加一个奇偶校验位,使得1的个数是奇数(奇校验)或偶数(偶校验),将这 d+1 位一起发送
- 接收方:
- 检测收到的信息(d+1位)中 1 的个数
- 奇校验:如果发现偶数个1,至少有一个比特发生差错。
- 偶校验:如果发现奇数个1,至少有一个比特发生差错。
- 可以查出任意奇数个错误,但不能发现偶数个错误(因为偶数个错误奇偶性是匹配的)。
- 若比特差错概率很小,差错独立发生,那么一比特奇偶校验就可以满足要求了
- 若差错集中一起出现,一帧中未检测差错的概率达50%
- 检测收到的信息(d+1位)中 1 的个数
2. 二维奇偶校验
基本思想:(将一比特中不能发现偶数个错误中的偶数个错误拆开,这样可能就拆成奇数了,可以检测了但还是不能纠正)
将要传的信息划分为 i 行 j 列( i 个组,每组 j 列)
对每行每列分别计算奇偶值
结果的
i+j+1
个奇偶比特构成了帧的差错检测比特
例子:要发送的数据比特 10101 11110 01110,划分3组,每组5个比特。进行 行、列 偶校验。
特点:
可以检测并纠正单个比特差错(数据或校验位中)
能够检测(但不能纠正)分组中任意两个比特的差错
两个比特的话,两横两纵就有4个交点了
Internet 校验和方法(回忆)
发送方:
- 将数据每两个字节当作一个16位的整数,可分成若干整数。
- 将所有 16 位的整数求和(高位要回卷)
- 对得到的和逐位求反,作为检查和,放在报文段首部。
接收方:
- 对接收到的信息(包括检查和)按相同方法求和
- 全1:收到的数据无差错
- 全0:收到的数据有差错
- 对接收到的信息(包括检查和)按相同方法求和
特点:
- 分组开销小(检查位数少)
- 差错检测能力弱
- 适用于运输层(用软件实现差错检测,简单快速)
- 链路层中的差错检测由适配器中的 专用硬件 实现,采用更强的 CRC 方法
CRC(Cyclic Redundancy Check):循环冗余检测
即多项式编码,把要发送的比特串看作系数是 0 或 1 的一个多项式,对比特串的操作看作为多项式运算。
例如:
10111
→
x
4
+
x
2
+
x
+
1
10111 \space \rarr \space x^{4}+x^{2}+x+1
10111 → x4+x2+x+1
基本思想:
- 设发送节点要把数据D(d比特)发送给接收节点
- 发送方和接收方先共同选定一个 生成多项式G(r+1比特),最高位是1(最左边)
发送方:
- 计算出一个 r 位附加比特 R,添加到D的后面产生 DR(d+r 比特)
- DR能被生成多项式 G 模2运算 整除,一起发送
接收方:
- 用生成多项式 G 去除接收到的 DR(d+r 比特)
- 余数为0:传输正确,去掉尾部的r位,得到数据D
- 余数不为0:传输发生差错
- 用生成多项式 G 去除接收到的 DR(d+r 比特)
模2运算
操作数按位异或(XOR)
1011 XOR 0101 = 1110
乘以
2
r
2^{r}
2r ,即比特模式左移 r 个位置。
D
∗
2
r
X
O
R
R
=
D
00…00
X
O
R
R
=
D
R
D*2^{r} \space XOR \space R=D\space 00…00 \space XOR \space R=DR
D∗2r XOR R=D 00…00 XOR R=DR
因为 0 XOR 0 = 0 ,0 XOR 1 = 1,所以 D 左移之后低 r 位全0,和R异或刚好达到拼接的效果
计算 R:
DR 能被 G 模2运算整除,即
D
∗
2
r
X
O
R
R
=
n
G
D*2^{r} \space XOR \space R=nG
D∗2r XOR R=nG
等式两边都 XOR R,得:
D
∗
2
r
=
n
G
X
O
R
R
D*2^{r}=nG \space XOR \space R
D∗2r=nG XOR R
A XOR A = 0,0 XOR A = A
那么用
D
∗
2
r
D*2^{r}
D∗2r 除以 G ,余数刚好为 R
例1:假设数据 D=101110,d=6,生成多项式 G=1011,r=3
实际传输的数据形式是:101110011 (下划线不用写,这里是提醒这道题r=3,最后3位是R)
注意:不是减而是异或!
例2:通信双方协商的生成多项式为:
G
=
X
4
+
X
2
+
X
+
1
G=X^{4}+X^{2}+X+1
G=X4+X2+X+1 ,发送方要发送的数据是
D
=
11001100
D=11001100
D=11001100
CRC校验信息需要几位——4位
因为G=10111,CRC编码的位数是G的位数-1,即4位
发送方最终发送的数据是多少位—— 8+4=12位
发送方最终发送的数据内容是什么—— 110011000101
注意:上图第三次异或:10100和10111,10100比10111小,仍然可以算,只有位数少的时候才除得0(第四次异或)
如果传输过程中出现一位错误能否检测?出现六位错误能否检测?
- 一位错误可以检测到
- 六位错误一般情况下不可以
CRC 的特点
- 常见的有 8、12、16、32 比特生成多项式
- 8-位CRC用于ATM信元首部的保护,32-CRC用于大量链路层IEEE协议
- 能检测小于r+1位的突发差错、任何奇数个差错
各个差错方法的比较
奇偶校验能力最弱,CRC校验能力最强
奇偶校验常用于简单的串口通信
Internet校验和通常用于网络层及之上的层次,要求简单快速的软件实现方式
CRC通常应用于链路层,一般由适配器硬件实现
纠错基本原理(打*号不考)
从 原本的 m 位增加 r 位,就将原来的
2
m
2^{m}
2m 个信息码映射到
2
m
+
r
2^{m+r}
2m+r 个编码。
使得这
2
m
+
r
2^{m+r}
2m+r 个编码中,有效码占
2
m
2^{m}
2m 个,无效码占
2
m
+
r
−
2
m
=
2
m
∗
(
2
r
−
1
)
2^{m+r}-2^{m}=2^{m}*(2^{r}-1)
2m+r−2m=2m∗(2r−1) 个
海明码(打*号不考)
把两个等长二进制数(或两个等长码)不相同对应位的位数称为距离.
例如10000和00100的距离为2。
海明距离(Hamming Distance):某种编码任意两个有效码间的最小距离称为该编码的海明距离。
- 结论1:可以检出d个错误的检错码,其海明距离至少为d+1
- 结论2:可以纠出d个错误的纠错码,其海明距离至少为2d+1
海明码:能够纠正一位错误的编码称为海明码
5.3 多路访问链路和协议
两种网络链路
点对点链路:链路两端各一个节点。一个发送一个接收。如 点对点协议 PPP。
区分 PPP 和 P2P:
PPP:数据链路层的协议。提供点对点的连接,允许在两个单独的设备(通常是计算机或网络设备)之间进行数据交换。它可以在不同的物理介质(例如串行线或光纤)上传输数据。
P2P:应用层的分布式计算体系结构。每个参与者或节点可以充当客户端和服务器,直接交换资源。
广播链路:多个节点连接到一个共享的广播信道
广播:任何一个节点传输一帧时,信号在信道上广播,其他节点都可以收到一个拷贝。常用于局域网(LAN),如早期的以太网和无线局域网(WLAN)
WLAN 和 Wi-Fi:
简单来说,WLAN是一个网络系统,而Wi-Fi是这个网络系统中的一种技术,目的是改善基于IEEE 802.11标准的无线网络产品之间的互通性。(WLAN包含Wi-Fi,该解释来自 华为IP知识百科 )
广播信道要解决的问题:如何协调多个方式和接收节点对共享广播信道的访问。相关技术:多路访问协议。
多路访问协议:
目的:协调多个节点在共享广播信道上的传输。
- 避免多个节点同时使用信道,发生冲突,产生互相干扰
冲突(collide):两个以上的节点同时传输帧,使接收方收不到正确的帧(所有冲突的帧都会受损丢失)
- 造成广播信道时间的浪费
- 多路访问协议可用于许多不同的网络环境。如 有线和无线局域网、卫星网
理想的情况:(假设速率位
R
R
R bps的广播信道)
有 1 个节点有数据发送时,它能以
R
R
R bps的速率发送
当
M
M
M 个节点要发送数据时,每个节点的平均发送速率为
R
M
\frac{R}{M}
MR
完全分散:
不需要主节点协调传输
不需要时钟、时隙同步
简单
类型:
- 信道划分协议:信道分成小的“片”(时隙)
- 随机访问协议(满足理想情况的第4点”简单”,用的最多)
- 不划分信道,允许冲突
- 能从冲突中“恢复”
- 轮流协议:轮流访问信道,要发送的节点越多轮流的时间越长
信道划分协议
主要有 TDMA(Time Division Multiple Address)、FDMA(Frequency)、CDMA(Code)
TDMA:将时间划分为 时间帧,每个时间帧再划分为 N 个时隙(长度保证发送一个分组),分别分配 N 个节点。每个节点只在固定分配的时隙中传输。
例:6个站点的LAN,时隙1、3、4有分组,时隙2、5、6空闲
特点:
- 避免冲突、公平
- 节点速率有限、效率不高
FDMA:将总信道带宽
R
R
R bps划分为 N 个较小的信道(频段,带宽为 R/N)分别分配给N个节点。
例:6个站点的LAN,频段1、3、4有分组,频段2、5、6空闲
特点:
- 避免冲突、公平
- 节点带宽有限、效率不高
CDMA:每个节点分配唯一的编码,每个节点用它唯一的编码来对它发送的数据进行编码。允许多个节点“共存”,信号可以叠加,即可以同时传输数据(如果编码是“正交化”的,那么不会产生冲突)
随机访问协议
基本思想:
发送节点以信道全部速率(
R
R
R bps)发送
发生冲突时,冲突的每个节点分别等待一个随机事件,再重发,知道帧(分组)发送成功,
节点间没有协调者
典型的随机访问协议:
- ALOHA协议(纯ALOHA、时隙ALOHA)
- 载波监听多路访问CSMA协议
- 带冲突检测的 CSMA/CD
- 带冲突避免的 CSMA/CA
ALOHA:采用星型拓扑结构,使得地理上分散的用户通过无线电来使用中心主机
- 中心主机通过下行信道向二级主机广播分组
- 二级主机通过上行信道向中心主机发送分组(可能会冲突,因为无线电信道是一个公用信道)
纯ALOHA
非时隙ALOHA:简单、无需同步
帧一到达,立即传输
如果与其他帧产生冲突,那么在该冲突帧传完之后:
- 概率 p:立即重传该帧
- 概率 1-p:等待一个帧的传输时间。然后循环该过程,直到重传该帧。
冲突概率:在
t
0
t_{0}
t0 发送的帧,和在
[
t
0
−
1
,
t
0
+
1
]
[t_{0}-1,t_{0}+1]
[t0−1,t0+1] 的发送的其他帧冲突
效率:
P
(
给定节点成功传送
)
=
P
(
节点传送
)
∗
P
(
没有其他节点在
[
t
0
−
1
,
t
0
]
内传送
)
∗
P
(
没有其他节点在
[
t
0
,
t
0
+
1
]
内传送
)
P(给定节点成功传送)=P(节点传送)*P(没有其他节点在[t_{0}-1,t_{0}]内传送)*P(没有其他节点在[t_{0},t_{0}+1]内传送)
P(给定节点成功传送)=P(节点传送)∗P(没有其他节点在[t0−1,t0]内传送)∗P(没有其他节点在[t0,t0+1]内传送)
=
p
∗
(
1
−
p
)
N
−
1
∗
(
1
−
p
)
N
−
1
=
p
∗
(
1
−
p
)
2
(
N
−
1
)
=p*(1-p)^{N-1}*(1-p)^{N-1}=p*(1-p)^{2(N-1)}
=p∗(1−p)N−1∗(1−p)N−1=p∗(1−p)2(N−1)
E
(
p
)
=
N
P
=
N
p
(
1
−
p
)
2
(
N
−
1
)
E(p)=NP=Np(1-p)^{2(N-1)}
E(p)=NP=Np(1−p)2(N−1) //
E
(
p
)
E(p)
E(p) 是单位时间内成功传输的帧数,相当于所有节点成功传输的帧数的期望值
为了得到N个活跃点的最大效率,必须找出使得上式取最大值的
p
∗
p^{*}
p∗,为了得到大量活跃节点的最大效率,我们要求
N
→
∞
N \rarr \infty
N→∞
l
n
P
=
l
n
p
+
2
(
N
−
1
)
l
n
(
1
−
p
)
⇒
令
1
p
−
2
(
N
−
1
)
∗
1
1
−
p
=
0
⇒
p
∗
=
1
2
N
−
1
lnP=lnp+2(N-1)ln(1-p) \space \Rarr \space 令\frac{1}{p}-2(N-1)*\frac{1}{1-p}=0 \space \Rarr \space p^{*}=\frac{1}{2N-1}
lnP=lnp+2(N−1)ln(1−p) ⇒ 令p1−2(N−1)∗1−p1=0 ⇒ p∗=2N−11
l
i
m
n
→
∞
E
(
p
∗
)
=
l
i
m
n
→
∞
N
2
N
−
1
∗
(
1
−
1
2
N
−
1
)
2
(
N
−
1
)
=
1
2
∗
e
l
i
m
n
→
∞
−
2
N
−
2
2
N
−
1
=
1
2
∗
e
−
1
=
1
2
e
=
0.18
\mathop{lim}\limits_{n\rarr \infty} \space E(p^{*})= \mathop{lim}\limits_{n\rarr \infty} \space \frac{N}{2N-1}*(1-\frac{1}{2N-1})^{2(N-1)} = \frac{1}{2}*e^{\mathop{lim}\limits_{n\rarr \infty} -\frac{2N-2}{2N-1}}=\frac{1}{2}*e^{-1}=\frac{1}{2e}=0.18
n→∞lim E(p∗)=n→∞lim 2N−1N∗(1−2N−11)2(N−1)=21∗en→∞lim−2N−12N−2=21∗e−1=2e1=0.18
时隙ALOHA
假设:
- 所有帧大小相同
- 时间被划分为相同大小的时隙,一个时隙等于传送一帧的时间
- 节点只能在一个时隙的开始才能传送
- 节点需要同步
- 如果一个时隙有多个节点同时传送,所有节点都能检测到冲突
实现:
当节点要发送新帧时,等到下一时隙开始时传送
没有冲突,节点可以在下一时隙发送新帧
如果有冲突,节点在随后的时隙以概率 p 重传该帧,成功为止。
优点:
- 单个活跃节点可以持续以满速率传送帧
- 高分散性:只需节点的时隙同步
- 简单
确定:
- 冲突,浪费时隙
- 空闲时隙
- 节点只有在传输数据包时才能检测到冲突
效率:当节点很多,每个节点要发的帧很多时,成功时隙所占的百分比
- 假设有 N 个节点,每个节点在时隙以概率 p 发送。
- 那么一个节点在一个时隙成功传送的概率为
p
(
1
−
p
)
N
−
1
p(1-p)^{N-1}
- 任一节点传送成功的概率为
N
p
(
1
−
p
)
N
−
1
Np(1-p)^{N-1}
- 同纯 ALOHA 计算方法,可得最大效率为
1
e
=
0.37
\frac{1}{e}=0.37
课后练习(*):假设信道帧到达率服从泊松分布,试从单位时间内帧到达数和信道吞吐量的角度,推导纯Aloha协议及时隙Aloha协议的效率。
- 泊松分布:
P
(
X
=
k
)
=
λ
k
k
!
e
−
λ
P(X=k)=\frac{\lambda ^{k}}{k!}e^{-\lambda}
λ
\lambda
P
(
X
=
0
)
=
e
−
λ
P(X=0)=e^{-\lambda}
P
(
X
=
1
)
=
λ
e
−
λ
P(X=1)=\lambda e^{-\lambda}
P
(
X
>
1
)
=
1
−
(
1
+
λ
)
e
−
λ
P(X>1)=1-(1+\lambda)e^{-\lambda}
- 如果是纯ALOHA,假设帧在
t
0
t_{0}
[
t
0
−
1
,
t
0
+
1
]
[t_{0}-1,t_{0}+1]
[
t
0
−
1
,
t
0
]
[t_{0}-1,t_{0}]
[
t
0
,
t
0
+
1
]
[t_{0},t_{0}+1]
- 记信道吞吐量为
S
S
S
=
e
−
λ
∗
(
λ
e
−
λ
)
=
λ
e
−
2
λ
S=e^{-\lambda}*(\lambda e^{-\lambda})=\lambda e^{-2\lambda}
λ
∗
=
1
2
\lambda^{*}=\frac{1}{2}
- 所以
S
m
a
x
=
1
2
e
=
0.18
S_{max}=\frac{1}{2e}=0.18
- 记信道吞吐量为
- 如果是时隙ALOHA,就只用考虑帧在
[
t
0
,
t
0
+
1
]
[t_{0},t_{0}+1]
S
=
λ
e
−
λ
S=\lambda e^{-\lambda}
λ
∗
=
1
\lambda ^{*}=1
S
m
a
x
=
0.37
S_{max}=0.37
- 所得结果和之前用
p
p
1
−
p
1-p
- 泊松分布:
CSMA(Carrier Sense Multiple Access):载波侦听多路访问
载波侦听:某个节点在发送之前,先监听信道
信道忙:有其他节点正在往信道发送帧,该节点随机等待
信道空:该节点开始传输整个数据帧
自己说话之前先听一下有没有其他人正在说话,不要打断别人!
特点:
发前监听,可减少冲突
由于 传播时延 的存在,仍然可能出现冲突,并造成信道浪费。
信道浪费:节点没有进行冲突检测,即使发生冲突,节点仍然继续传输它们的帧。但是该帧已经被破坏!
距离和传播时延对概率有影响
带冲突检测的 CSMA(CSMA/CD,Collision Detection)
增加了“冲突检测”
- 一旦检测到冲突就立即停止传输,尽快重发
目的:缩短无效传送时间,提高信道利用率
以太网采用 CSMA/CD
运行机制
适配器从网络层得到分组,创建帧
如果适配器侦听到信道空闲,开始传送帧。如果忙,等到信道空闲才传送帧
如果适配器在传送整个帧时,都没有检测到其他传输,则完成该帧的传送
如果适配器在发送中检测到其它传送,就放弃传送,并发送一个拥塞信号
放弃传送后,适配器进入 指数回退阶段 ,假设该帧经过
n
n
n 次冲突,取
m
=
m
i
n
(
n
,
10
)
m=min(n,10)
m=min(n,10) ,那么适配器会在
{
0
,
1
,
2
,
3
,
.
.
.
,
2
m
−
1
}
\{0,1,2,3,…,2^{m}-1\}
{0,1,2,3,…,2m−1} 中等概率随机选取一个
K
K
K 值,然后等待
K
∗
512
K*512
K∗512 比特时间后,回到第二步。
冲突次数越多,等待时间更长的概率更大,但是有上限
拥塞信号:48比特时间
对于10 Mbps Ethernet ,1 比特时间 = 0.1 μs,K=1023 时,等待时间大约为 50ms
轮流协议:
回顾 多路访问协议的理想特性:
- 只有一个节点活动时,吞吐量
R
R
- 有
M
M
R
M
\frac{R}{M}
ALOHA 和 CSMA 协议都只有第一个特性,但没有第二个特性
- 只有一个节点活动时,吞吐量
轮流协议分类:
- 轮询协议
- 令牌传递协议
轮询协议:主节点 “邀请” 从节点 依次传送
- 问题:轮询的开销、延时、单点故障(主节点)
令牌传递:控制令牌顺序从一个节点传递到下一个节点(丢手绢)
- 问题:令牌开销、延时、单点故障(主节点,圈断点——可以考虑双环,但是会更复杂)
多路访问控制协议的总结
- 信道划分:时分(TDMA)、频分(FDMA)、码分(CDMA)
- 随机接入:ALOHA,S-ALOHA(时隙ALOHA,Slot时隙),CSMA,CSMA/CD
- CSMA载波侦听:在有线中容易实现,但在无线中比较困难
- CSMA/CD 用在 以太网中
- CSMA/CA(A:Avoid) 用在 802.11中
- 轮流:
- 来自中心站的轮询
- 令牌传递
5.4 交换局域网
- 局域网(Local Area Network,LAN)
- 采用的协议:多路访问协议广泛(CSMA/CD更多,令牌很少)
- 特点:网络为一个组织所拥有,地理范围和站点数目有限
- 按拓扑结构分类:星形网、环形网、总线网、树形网、网状网
计算机和局域网通过 网络适配器(即网卡) 连接
数据链路层还可以细分为:逻辑链路控制子层、介质访问控制子层
每个节点有 网络层地址和 链路层地址
- 网络层地址:节点在网络中分配的一个唯一地址(IP地址)。用于把分组送到目的 IP 网络。(IPv4)
- 链路层地址:又叫作 MAC地址(Media Access Control) 或物理地址、局域网地址
- 用于把 数据帧 从一个节点传送到另一个节点(同一网络中)。6个字节。
MAC 地址:**局域网中 **每个网卡都有唯一的MAC地址
MAC地址分配:高24位向 IEEE 购买,低24位厂家自行分配
比较 IP 地址和 MAC 地址的不同?
- 层级和用途
- IP 地址用于网络层,帮助在不同网络中路由数据包。主要用于确定设备在网络中的位置
- MAC 地址用于数据链路层,帮助在同一局域网内传输数据包。用于唯一标志网络接口。
- 类型:
- IP 地址有 IPv4 和 IPv6 两种类型,可以是静态(DHCP分配)或者静态手动分配
- MAC 地址:硬编码到网络接口硬件中的 48 位地址,通常是固定不变的。
- 可见性和范围:
- IP 地址可以跨网络互连,全球唯一,互联网上可见
- MAC 地址仅在LAN使用,互联网上不可见
- 结构:
- IP 地址具有层次结构:当节点移动到不同网络时,节点的IP地址发生改变
- MAC 地址是平面结构:带有同一网卡的节点,在任何网络中都有同样的MAC地址
- 层级和用途
网络适配器:负责MAC地址的封装和识别
发送适配器:将目的 MAC 地址封装到帧中并发送。所有其他适配器都会收到这个帧。
接收适配器:检查该帧的目的 MAC 地址是否与自己的 MAC 地址相匹配
- 匹配:接收,取出数据报,交给上层
- 不匹配:丢弃
广播帧:发送给所有节点的帧:全1地址(用于寻找)—— FF-FF-FF-FF-FF-FF
节点的三种不同地址表示:主机名(应用层)、IP地址(网络层)、MAC地址(数据链路层)
在链路上传输时,根据 MAC 地址确定相应的节点
通信时,需要进行地址转换
DNS域名系统:将主机名解析到 IP 地址
DNS 为互联网中任何地方的主机解析主机名
ARP地址解析协议:将 IP 地址解析到 MAC 地址
ARP 只在一个 局域网 范围内起作用(只为同一 LAN 上的节点解析 IP 地址)
ARP(Address Resolution Protocol)
- ARP 表:LAN 上的每个节点(主机、路由器)都有这个表
- 为某些局域网节点进行 映射
- TTL(存活时间)通常为20分钟,20分钟后该表项会被删除
- 假设 主机A 希望发送数据报给 主机 B:
- 首先查找 B 的 MAC 地址是否在 A 的 ARP 映射表中
- 如果不在,那么 A 广播 ARP 查询分组,其中包含 B 的 IP 地址。(查询分组是一个广播帧,即目的MAC地址是FF-FF-FF-FF-FF-FF)
- 局域网中所有的节点都会收到 ARP 查询分组,其余主机发现查询的不是本机的MAC地址,因此不进行回应。只有 B 收到ARP查询分组后,返回 B 的 MAC 地址给主机 A ,包含有 B 的 MAC 地址的帧发送给主机 A (单播)。
- 于是,主机A在自己的ARP表中缓存B主机的IP地址和MAC地址。
- 注意:ARP是即插即用的(和DHCP一样)——节点创建 ARP 表不选哟网络管理员的干预。
- 漏洞:ARP 欺骗攻击!
广播在 计网 中的几个应用:
- ARP 广播(数据链路层的协议)
- DHCP 广播(应用层的协议)
- 路由器和邻居广播,更新路由表(网络层)
- ARP 表:LAN 上的每个节点(主机、路由器)都有这个表
发送数据报到子网以外的例子:
整个过程:
- A的网络层构建IP数据报,传给数据链路层封装成 数据帧(由于主机A发现接收主机B和自己不在同一LAN,所以目的MAC地址是路由器左边端口的MAC地址)
- 数据帧到达路由器后,接收并抽出数据报递交网络层,网络层根据IP地址判断该数据报要往右边端口转发,并且发现接受主机B和自己在同一LAN。因此数据帧的源MAC地址改为路由器右端的MAC地址,目的MAC地址改为接收主机B的。
注:整个过程只改变源/目的 MAC 地址,但是源/目的IP地址不会变!
WAN接口:路由器的广域网(WAN)接口通常有一个MAC地址,用于连接到外部网络或ISP(互联网服务提供商)。
LAN接口:路由器的局域网(LAN)接口通常有多个MAC地址,每个接口(如有多个以太网端口)都有一个独立的MAC地址,用于与局域网中的设备通信。
无线接口:如果路由器支持无线功能,它的无线接口(Wi-Fi)也会有一个MAC地址,用于无线通信。
以太网:迄今为止最著名的 有线 局域网技术
成功的原因:
- 第一个广泛使用的局域网技术
- 简单、便宜
- 版本不断更新,数据速率更高、成本更低
物理拓扑结构分为:总线(效率低,已淘汰);星形(目前流行,中心是交换机,每个端口运行一个独立的以太网协议,节点之间相互不发生碰撞,但不能2个同时给1个说)
以太网链路层控制技术
媒体访问控制(MAC)子层
- 数据封装:帧同步、帧定界;地址确定;错误检测机制
- 媒体访问管理:媒体分配(避免冲突);冲突解决
以太网的帧结构:
- 前同步码用于帧同步(收发双方的时钟同步,接收方一旦收到连续的8字节前同步码,可以确定有帧传过来),前同步码是无效信号,接收方收到后删除,不向上层传;CRC也不校验前同步码
- 类型:网络层协议的类型编号
- 数据:以太网的最大传输单元 MTU 是1500字节(若超出则要分段),最小长度是46字节(若小于要填充够46字节,接收方会去除填充的内容)
- 以太网:不可靠的无连接服务
- 无连接服务:通信时,不需要先握手
- 不可靠服务:收到的帧可能含比特差错
- 收到正确帧,不发确认帧
- 收到出错帧,丢弃但不发否定帧
- 发送适配器不重发
- 丢弃数据的恢复通过终端传输层的可靠数据传输机制来实现
- 以太网的MAC协议:使用无时隙的 CSMA/CD(二进制指数回退)
链路层交换机:链路层设备
工作:存储转发数据帧
- 对于到达交换机的数据帧,交换机首先检查其目的MAC地址,然后根据MAC地址,有选择的将数据帧转发到一个或多个输出链路;
- 如果输出链路是一个共享网段,将使用CSMA/CD来访问共享链路。
特点:
- 透明:主机不关心是否存在交换机(当一个主机向另一个主机发送数据帧时,它并不会知道某个交换机会收到这个数据帧,并将其转发到另一个节点)
- 即插即用(同 DHCP 、ARP)、自学习(不需要手工配置,有类似路由表的 交换机转发表 )
加入交换机后,支持多个节点同时传输数据帧,而不会发生碰撞(交换机可以缓存数据帧)
- 每个输入链路都使用以太网协议,全双工、无碰撞。转发率高。
交换机的过滤/转发过程:
- 首先,记录到达链路和发送主机的MAC地址;
- 第二步,使用数据帧的目的MAC地址,在转发表中进行检索;
- 如果在转发表条目中找到对应的MAC地址,则执行第 4 点;否则执行第 5 点
- 如果目的MAC地址对应的端口与数据帧的到达端口相同,说明接收主机属于同一个共享网段,则直接将该数据帧丢弃。因为接收主机也会收到该数据帧;否则,转发端口与达到端口不一致,则将该数据帧转发到指定端口。结束。
- 交换机将该数据帧向除到达端口之外的所有端口转发,也就是泛洪。结束。
交换机互联时:
问:如果主机A发送数据帧给主机G,那么交换机S1是怎么知道需要先把数据转发到S4和S3的?
答:通过 泛洪和自学习。
- 当数据帧到达S1时,可能S1的转发表中没有G主机的MAC地址的表项,于是S1将该数据帧泛洪
- 那么S4的端口也会收到这个泛洪的数据帧,如果S4的转发表也没有G主机的MAC地址对应的表项,则S4会继续泛洪
- 于是S3也会收到数据帧,如果S3的转发表仍然没有G主机的MAC地址,则S3会继续向它的端口泛洪,直到数据帧到达G主机。
多个交换机自学习:
问:交换机在识别目的MAC地址和源MAC地址的过程中是否需要接收并缓存完整的帧呢?
答:两种模式:
- 快速分组(直通交换):交换机只需要读取前几个字节就可以做出转发决定,而不需要缓存整个帧。这样可以显著降低延迟。
- 存储转发:交换机会接收并检查整个帧,包括数据部分和帧校验序列(FCS),以确保帧没有错误。只有在帧被确认没有错误后,交换机才会转发帧。这种模式会增加延迟,但能提高数据传输的可靠性。
三层交换机
三层交换时相当于传统交换概念提出的
传统的交换技术是在 OSI 网络参考模型中的第二层(从下往上数,即数据链路层)进行操作的,称为 二层交换机
三次交换技术能够在网络模型中的第三层(网络层)实现数据包的高速转发
简单来讲,就是 二层交换技术 + 三层转发技术。(二层交换机+基于硬件的路由器)
- 一次路由,多次交换。(图中 A B 不在同一子网)
工作原理:
- A在发送时,比较源和目的IP地址,判断是否在同一子网。
- 若在,则二层转发
- 若不在,则A要向“缺省网关”发出ARP请求,请求获取B的MAC地址。如果三层交换机知道B的MAC地址则回复A,否则广播。B收到广播后回复三层交换机。三层交换机将B的MAC地址保存到二层交换引擎的MAC地址表中,并回复A。
- 然后 A 直接用B的MAC地址封装成数据帧,三层交换机接收到数据帧后直接进行二层交换。
交换机 和 路由器 的比较
- 二者都是存储转发设备
- 路由器:网络层设备,检查网络层IP地址头部
- 交换机:数据链路层设备,检查数据链路层MAC地址头部
- 二者都有转发表
- 路由器:使用路由算法计算转发表。基于IP地址转发
- 交换机:通过泛洪、自学习来学习转发表。基于MAC地址转发
VLAN(Virtual Local Area Network)
- 动机:假设CS的用户想要连入EE的交换机(如上图),如果把图中所有设备划分为一个LAN,会出现如下问题:
- 所有2层广播流量(ARP、DHCP)会跨越整个网络
- 安全、隐私、效率
- VLAN定义:利用支持VLAN的交换机,可以在一个实际的物理局域网内,定义多个虚拟的局域网
- 基于端口的VLAN:利用交换机内置的管理软件,将端口分组,使得一个单独的交换机像多个交换机那样工作
功能:
- 流量隔离:从1-8号端口进/出的帧,只能访问1-8号端口
- 动态成员:端口可以在VLAN之间动态调整
- VLAN间转发:通过路由完成(此处通信必须通过路由器,若只有一个节点则会使用单臂路由器)
跨越多个交换机的 VLAN:
- 干线端口承载定义在多个物理交换机之上的 VLAN 间的流量
- 某一个 VLAN 内的流量帧,如果要跨域物理的交换机,需使用 802.1q 格式(以太网帧上 + 一个VLAN号)
- 802.1q协议的作用:对干线端口之间传输的帧,添加/移除额外的头部字段
总结与综合应用:
参考:访问一个网页的全过程(超详细版)-CSDN
以下的流程忽略了真实情景中的很多细节,但用于考试应该差不多了。
应用层
- DNS 请求
- 浏览器通过操作系统向配置的DNS服务器发起DNS请求,将域名
www.taobao.com
解析为IP地址。
- 浏览器通过操作系统向配置的DNS服务器发起DNS请求,将域名
- 生成 HTTP 请求报文
- 获得IP地址后,浏览器构建HTTP请求报文,通常包括:请求/响应行,请求/响应头部,空白行,请求体/响应数据。
- 发送到传输层
- HTTP请求报文 准备好后,发送到传输层。
传输层
- TCP 三次握手
- 在发送HTTP请求之前,浏览器与服务器需要建立TCP连接。这个过程包括:
- SYN:客户端发送SYN报文段给服务器,表示请求建立连接。
- SYN-ACK:服务器收到SYN后,回应SYN-ACK报文段,表示同意建立连接。
- ACK:客户端收到SYN-ACK后,回应ACK报文段,连接建立完成。
- 在发送HTTP请求之前,浏览器与服务器需要建立TCP连接。这个过程包括:
- 打包为 TCP 报文段
- 建立连接后,浏览器将HTTP请求报文加上TCP首部,形成TCP报文段。TCP首部包含源端口、目的端口、序列号等信息。
- 发送到网络层
- TCP报文段 准备好后,发送到网络层。
网络层
- 获取网络参数
- 使用DHCP协议获取本地网络参数,包括IP地址、子网掩码和默认网关。
- 打包为 IP 数据报
- 将TCP报文段加上IP首部,形成IP数据报。IP首部包含源IP地址、目的IP地址、TTL等信息。
- 发送到数据链路层
- IP数据报 准备好后,发送到数据链路层。
数据链路层
- ARP协议获取MAC地址
- 在局域网内,如果不知道目的IP地址对应的MAC地址,使用ARP协议进行查询。ARP请求会广播到局域网,目标主机响应其MAC地址。
- MAC 寻址与转发
- 数据链路层将IP数据报加上以太网帧首部,形成 以太网帧 。以太网帧包含源MAC地址、目的MAC地址等信息。
- 以太网帧通过交换机和路由器传输,逐步到达淘宝服务器所在的局域网。
服务器接收请求
- 服务器处理请求
- 服务器的网络接口接收到以太网帧后,逐层解包,最终还原出HTTP请求报文。
- 根据请求的URL路径、参数等,服务器处理相应的业务逻辑,生成HTTP响应。
- 服务器提供响应
- 服务器将响应内容加上HTTP首部,形成HTTP响应报文,发送到传输层。
传输层
- 打包为 TCP 报文段
- 服务器将HTTP响应报文加上TCP首部,形成TCP报文段,发送到网络层。
网络层
- 打包为 IP 数据报
- 将TCP报文段加上IP首部,形成IP数据报,发送到数据链路层。
数据链路层
- MAC 寻址与转发
- 数据链路层将IP数据报加上以太网帧首部,形成以太网帧,通过网络设备逐步传回到客户端。
客户端接收响应
- 四次挥手
- 当所有数据传输完毕后,客户端和服务器通过四次挥手断开TCP连接:
- FIN:客户端发送FIN报文段,表示不再发送数据。
- ACK:服务器回应ACK报文段,表示收到。
- FIN:服务器发送FIN报文段,表示不再发送数据。
- ACK:客户端回应ACK报文段,连接断开。
- 当所有数据传输完毕后,客户端和服务器通过四次挥手断开TCP连接:
浏览器解析和渲染页面
总结如下:
输入URL → DNS获得IP → 生成HTTP请求报文到传输层 →
三次握手 → 打包为TCP报文段(加含源/目的端口号的首部)发到网络层
→ DHCP协议获得IP地址、网关地址、子网掩码 → 打包为IP数据报(加含源/目的 IP 地址的首部)发送到数据链路层
→ ARP协议获取MAC地址 → 打包为以太网帧(加含源/目的MAC地址的首部)通过交换机和路由器传输到淘宝的LAN
→ 淘宝服务器
→ 服务器网络接口逐层解包,还原出HTTP请求报文,生成HTTP响应报文,发送至传输层
→ 打包为TCP报文段
→ 打包为IP数据报
→ 打包为以太网帧,逐步传回客户端
→ 四次挥手
→ 客户端逐层解包
→ 浏览器渲染展示
- DNS 请求
第六章不写了,看实验流程,大概率代码改错。