计算机网络-自顶向下—第五章数据链路层重点复习笔记
未出现的一般考点较少,这里的复习笔记一般可以满足考试需求 o.O
全部章节都有哦,具体看此博客
计算机网络-自顶向下期末复习一篇就够了——重点复习笔记整理-CSDN博客
5.2错误检测和纠正
一维奇偶校验(Single-dimensional Odd Parity Check)
在原本的发送的数据上添加上一位,随后两台电脑协商是使用奇校验还是偶校验
奇校验
如果是奇校验,则要求原本的数据加上添加的一位上,所有的1出现了奇数次,如果不是,则是出现了错误
数据:1000110_此时有三个1,已经是奇数了,所以添加的一位数字为0--》10001100
接收方检验收到的数据(包括多出的位数)1的个数是不是奇数,如果不是则发送错误,要求重新发送
偶校验
偶校验也是同理,要求在原本的数据加上添加的一位,所有的1出现了偶数次,如果不是--》出现了错误
需要注意的,一维奇偶校验对于同时两位数据被干扰的情况可能无法发现,例如
发送的数据(奇校验):11000010,发送途中被干扰,接收方收到的:11001110,此时依然是奇数个1,无法发现错误
循环冗余校验(CRC Cyclic Redundancy Check)
(1)CRC原理
强大的差错检测码
将数据比特 D, 看成是二进制的数据
生成多项式G:双方协商r+1位模式(
r次方)
生成和检查所使用的位模式
目标:选择r位 CRC附加位R,使得
<D,R> 正好被 G整除 (modulo 2)
接收方知道 G, 将 <D,R>除以 G. 如果非0余数: 检查出错误!
能检出所有少于r+1位的突发错误
实际中广泛使用(以太网、802.1 WiFI,ATM)
多说无益,直接上例题
(2)如何通过CRC计算差错检测码
被除数就是信息位往后补n个0(n是冗余码长度)
计算过程如下,就是要一位一位,最后一位写1,直到全部数字使用
二进制除法(关键!)
- 逐位相除:从高位开始,拿除数和被除数当前段比:
-
- 如果被除数当前位 ≥ 除数,商 1,然后做「减法(异或)」消去高位。(注意,比较的不是数的大小,而是位数的大小,位数够了就能直接写商)
- 如果被除数当前位 < 除数,商 0,直接把下一位挪下来继续。
- 直到除完所有位,最后剩下的 余数就是 CRC 校验码(图里最后得到的
10110
)
最后把答案10110(5位)不足的往前补0(冗余码是要6位)
(3)接收方校验数据步骤
接收方校验步骤
- 拿到数据:接收方收到「原始数据 + 冗余码」(比如发送方发的是
原数据 + 010110
) - 用同样的除数再除:拿发送方用的同一个除数(图里的
1100011
),去除 接收到的完整数据(原数据 + 冗余码) - 看余数:
-
- 如果余数 =
0
→ 数据大概率没出错(能过校验) - 如果余数 ≠
0
→ 数据传输出错(校验失败,一般会要求重传)
- 如果余数 =
5.3多路访问协议(Multiple access protocols )
多路访问链路与协议(Multiple Access Links and Protocols)
链路的两种类型:
- 点对点链路(Point-to-point)
-
- 例如拨号上网使用的 PPP 协议
- 或主机与以太网交换机之间的点对点连接
- 广播型链路(Broadcast Links)【共享线路或媒介】
-
- 传统以太网
- 上行的混合光纤同轴(HFC)
- 802.11 无线局域网
多路访问协议(Multiple Access Protocols)
- 所有节点共享同一个广播信道。
- 如果两个或多个节点同时发送,将导致干扰(interference):
-
- 即碰撞(collision),当一个节点接收到两个或更多信号时发生。
多路访问协议:
- 是一个分布式算法,用于决定节点如何共享信道
- 具体目标是:决定节点何时可以发送数据
多路访问协议的三大分类:
1.信道划分/多路复用
- TDM(时分复用)
- FDM(频分复用)
- 码分多址(CDMA)
2.随机访问:
- 时隙ALOHA,纯ALOHA,载波侦听多路访问(CSMA),用于有线以太网( wired Ethernet)带冲突检测的载波侦听多路访问(CSMA/CD)以及用于无线网的(CSMA/CA)
3.轮流:
- 令牌环(Tokening Ring)
信道划分详细解析
TDMA(时分多址)
TDMA (Time Division Multiple Access):
- 通信过程按“轮次(rounds)”进行
- 每个站点(station)在每轮中获得一个固定长度的时间槽(slot)
-
- 时间槽长度 = 一个包的发送时间
- 没有数据的时间槽将被闲置
举例:
- 一个有 6 个站点(station)的 LAN,站点 1、3、4 有包要发送
- 则时间槽 2、5、6 将空闲(idle)
FDMA(频分多址)
FDMA (Frequency Division Multiple Access):
- 将信道频谱划分为多个频率带
- 每个站点分配一个固定的频带
- 若某站点没有数据要传输,则其频带将被闲置
举例:
- 一个有 6 个站点的 LAN,站点 1、3、4 有数据
- 则频带 2、5、6 将空闲
随机访问协议
发送机制:
- 当一个节点有包要发送时:
-
- 它会以信道的最大数据速率 R 直接发送
- 不提前与其他节点协调
- 如果有两个或以上节点同时发送 ➜ 产生碰撞
随机接入 MAC 协议应具备:
- 检测碰撞的机制
- 从碰撞中恢复的机制(如延迟重发)
典型协议包括:
- ALOHA 与分时 ALOHA(Slotted ALOHA)
- CSMA、CSMA/CD、CSMA/CA
时隙ALOHA(信道利用率37%)
纯ALOHA(信道使用率17.5%)
CSMA(载波监听多路访问)
基本原则:先听后发(Listen Before Transmit)
- 如果检测到信道空闲 ➜ 立即发送整个帧
- 如果检测到信道正忙 ➜ 延迟发送
类比:人类在交谈时不会打断他人讲话
碰撞问题:
即使采用了先听后发,仍可能发生碰撞,原因如下:
- 传播延迟(Propagation Delay):两个节点可能在彼此还未检测到对方发言前就开始发送
结果:
- 一个完整的数据包传输时间被浪费
- 距离和传播时延是碰撞概率的关键因素
CSMA/CD(带碰撞检测的载波监听多路访问)
CSMA/CD 工作原理:
- 和 CSMA 一样,先监听信道并决定是否发送
- 区别是:边发送边监听(碰撞检测)
- 一旦检测到碰撞:
-
- 立即停止发送
- 发送一个简短的“堵塞信号”(Jamming Signal),通知所有站点已发生碰撞
- 所有节点等待一个随机时间后再尝试重发
以太网的 CSMA/CD 算法步骤(Ethernet CSMA/CD Algorithm)
- 网卡接收到网络层传来的数据报后,创建帧
- 如果检测到信道空闲,开始发送;若信道忙,等待
- 若成功发送完整个帧且未检测到冲突 ➜ 完成发送
- 若在发送过程中检测到冲突 ➜ 停止发送,发送堵塞信号
- 退避机制(Binary Exponential Backoff):
-
- 第 m 次冲突后,从集合 {0, 1, …, 2^m - 1} 中随机选择一个 K
- 等待 K×512 比特时间后重新尝试
- 冲突越多,退避时间越长
- 若冲突达到 16 次,则放弃发送
CSMA/CA
在无线网中,没有冲突检测!
无法检测冲突:自身信号远远大于其他节点信号
即使能CD:冲突!=成功
轮流MAC协议之一:令牌环
5.4数据链路层寻址
(1)MAC地址的特别以及MAC&IP之间的区别
IP地址与MAC地址的区别:
- IP地址(32位):
-
- 是网络层的地址
- 用于第3层(网络层)进行转发
- MAC地址(又称LAN地址、物理地址、以太网地址):
-
- 用于在物理连接的接口之间局部传输帧
- 即:在同一物理网络(IP意义上)内,将帧从一个接口送到另一个接口
- 大多数局域网中使用48位MAC地址,烧录在网卡的ROM中(部分可由软件修改)
示例MAC地址(十六进制表示,每个数字代表4个比特):
1A-2F-BB-76-09-AD
MAC地址 :设备的物理地址,固化在网卡中,用于同一局域网内的帧寻址。
IP地址: 设备的逻辑地址,用于跨网络的路径选择
(2)ARP的功能以及ARP寻址的流程(地址解析协议)
LAN地址与ARP
- 每个连接到LAN的适配器(网络接口卡)都有一个唯一的MAC地址
广播地址:
FF-FF-FF-FF-FF-FF
局域网示意图:
IP地址 | MAC地址 |
137.196.7.23 | 1A-2F-BB-76-09-AD |
137.196.7.78 | 58-23-D7-FA-20-B0 |
137.196.7.14 | 0C-C4-11-6F-E3-98 |
137.196.7.88 | 71-65-F7-2B-08-53 |
ARP是什么,如何工作
ARP协议:地址解析协议(Address Resolution Protocol)
- 每个LAN内的IP节点(主机或路由器)都有一个ARP表
- ARP表的内容为:IP地址 ➜ MAC地址 的映射关系 示例条目:
< IP地址;MAC地址;TTL >
- TTL(生存时间):一段时间后映射将过期(通常为20分钟)
ARP协议如何工作:同一局域网内
假设:
- A主机想向B主机发送数据报,但不知道B的MAC地址
过程:
- A发送ARP查询包(query packet),包含B的IP地址
-
- MAC目的地址设置为广播地址
FF-FF-FF-FF-FF-FF
- 所有主机都会接收该ARP请求
- MAC目的地址设置为广播地址
- B收到ARP包后,向A回发ARP响应,告知其MAC地址
-
- 使用单播(unicast)帧发送(目标是A的MAC地址)
- A将B的IP-MAC映射缓存到ARP表中,直到超时为止
ARP的特点:
- “即插即用”(Plug-and-Play)
- 不需要网络管理员介入,节点自动维护ARP表
(3)路由器实现局域网间数据传输的过程(解析数据报经过不同设备各个接口的时候的IP地址和MAC地址)
示例:从A经由路由器R发送数据报到B
情境假设:
- A已知B的IP地址
- A也知道第一跳路由器R的IP地址和MAC地址
地址结构图与数据帧构造:
- A创建IP数据报:
源IP:111.111.111.111
,目标IP:222.222.222.222
- 然后A创建链路层帧:
源MAC:74-29-9C-E8-FF-55
,目标MAC:E6-E9-00-17-BB-4B
(R的MAC) - 帧从A发送到R,R接收并上交网络层
R转发数据报到B的过程:
- R检查IP头部,决定将数据报转发给B
- R创建一个新的链路层帧,封装原始数据报
-
源MAC:1A-23-F9-CD-06-9B
(R的MAC)目标MAC:49-BD-D2-C7-56-2A
(B的MAC)
-
- 帧被发送给B,B接收并上交网络层处理
从发送端发送出的帧中:
源IP:发送端的IP 目标IP:接收方的IP
源MAC:发送端的MAC 目标MAC:下一跳路由器的MAC(walk through)
下一步再通过下一跳路由器进行转发。
一个例题!
5.4链路层寻址(续)
交换机
(1)交换机的功能
- 链路层设备,比集线器更智能,主动参与数据转发:
- 功能包括:
-
- 存储与转发以太网帧
- 检查接收帧的MAC地址,有选择地将其转发至一个或多个输出端口
- 如果在段上转发帧,则使用 CSMA/CD 协议
- 透明性:
-
- 主机无需感知交换机的存在
- 即插即用,自学习能力:
-
- 不需要手动配置,交换机能自动学习网络拓扑
(2)和集线器的对比
- 集线器(Hub)是物理层设备,功能简单:
-
- 某端口收到的比特会以相同速率从其他所有端口广播出去
- 所有连接节点处于同一碰撞域,可能发生冲突
- 不具有帧缓存功能
- 不执行 CSMA/CD:冲突检测由主机网卡完成
设备 | 冲突域数量 | 广播域数量 | 数据传输方式 |
集线器(Hub) | 1 个(所有端口共享) | 1 个 | 广播(所有端口接收相同数据),易冲突 |
交换机(Switch) | 每个端口 1 个 | 1 个(默认) | 单播(按转发表转发),冲突概率极低 |
- 示例:
-
- 用 Hub 连接 3 台设备:任意两台同时发数据会冲突(共享同一冲突域),广播包(如 ARP 请求)会被所有设备接收。
- 用 Switch 连接 3 台设备:每台设备单独占用冲突域,可同时发数据;广播包仍会被所有端口接收(广播域未分割)。
(3)交换表的建立过程
问题:交换机如何知道某主机的MAC地址在哪个端口?
- 每个交换机维护一个交换表(Switch Table)
-
- 表项格式为:
<MAC地址,端口号,时间戳>
- 类似于路由器中的路由表
交换表的构建方式:
- 不是通过协议手动配置
- 而是通过交换机的“自学习机制”
交换机的自学习机制(Self-learning)
- 当交换机收到帧时,它会“学习”帧的发送方地址与端口映射关系
-
- 将
<发送方MAC地址,接收端口>
记录到交换表中 - 并加上时间戳,用于定期更新
- 将
帧的过滤与转发过程
当交换机收到一帧时:
- 记录该帧发送者所处的链路端口
- 使用帧中的目标MAC地址在交换表中查找
- 若找到了对应记录:
-
- 若目标端口就是输入帧的端口 ➜ 丢弃帧
- 若不是 ➜ 转发帧到目标端口
- 若未找到目标地址 ➜ 泛洪转发(flood),即发往除源端口外的所有端口
(4)交换机和路由器的区别
VLAN(虚拟局域网)
(1)VLAN的动机以及含义
VLAN 的动因(VLANs: Motivation)
假设:
- 计算机系(CS)的一位用户搬到了电子工程系(EE)的办公室,但仍希望连接原先的计算机系交换机
在传统局域网中:
- 所有第2层(链路层)的广播流量(如 ARP【源主机广播含有目标主机IP的ARP query packet】、DHCP【客户端广播“DHCP DISCOVER”】、未知 MAC 地址的定位)都会遍历整个 LAN
- 导致:
-
- 安全与隐私问题
- 效率问题
因此,需要一种方式,在物理网络结构不变的前提下实现逻辑分隔
其实意思就是,通过交换机链接的主机,一旦一个主机要求广播,就会将该信息广播给该交换机链接的所有主机
分割就是将交换机链接的主机分为多个广播域,一个域内广播的内容不会传播到其他广播域
VLAN 定义与结构(Virtual Local Area Networks)
端口式 VLAN(Port-based VLAN):
- 通过交换机管理软件将交换机端口分组
- 使得一台物理交换机可以被配置为多个虚拟交换机
- 支持创建多个逻辑隔离的 VLAN
例如:
- 端口1–8 属于“电子工程”VLAN
- 端口9–15 属于“计算机科学”VLAN
VLAN 的效果:就像多台交换机分别运行一样
VLAN 功能与路由(Port-based VLAN: Summary)
- 流量隔离:端口1-8 的帧只能到达端口1-8
- 也可以根据终端 MAC 地址定义 VLAN,而非端口
- 动态成员管理:端口可以动态地被分配到不同 VLAN 中
VLAN 之间的通信:
- 需要通过路由器完成(与独立交换机间通信相同)
- 实际中,厂商通常出售集成了交换和路由功能的设备
(2)在VLAN中怎么传输数据
前置知识
跨交换机的 VLAN(VLANs Spanning Multiple Switches)
- Trunk 端口(中继端口):
-
- 用于在多台交换机间传输不同 VLAN 的帧
注意:
- 在交换机之间转发的帧不能是普通的 802.1 帧
- 必须包含 VLAN ID 信息
- 使用802.1Q 协议:
-
- 在帧中添加或去除额外的 VLAN ID 字段
802.1Q VLAN帧格式(VLAN Frame Format)
相比普通的 802.1 帧,802.1Q 帧在 类型字段后添加:
- 2字节标签协议标识符(Tag Protocol Identifier):值为
0x8100
- 标记控制信息(Tag Control Information):
-
- 包含12位 VLAN ID 字段
- 3位优先级字段(类似于 IP 中的 TOS 字段)
preamble:前导码,用于解决接收端时间同步问题。
同时重新计算帧的 CRC
Trunk (中继)使用场景(Trunk)
Trunk 可用于:
- 交换机之间连接
- 路由器与交换机之间连接
- 服务器与交换机之间连接
Trunk 保证了跨物理网络设备的 VLAN 数据帧传输与识别
传输过程解析
- VLAN 标签技术(802.1Q 协议)
-
- 标签结构:
交换机在数据帧中添加 4 字节的 VLAN 标签,包含:
- 标签结构:
-
-
- TPID(标签协议标识符):固定值
0x8100
,标识这是带 VLAN 标签的数据帧。 - VID(VLAN 标识符):12 位数字,标识数据所属的 VLAN 编号(范围 1-4094)。
- TPID(标签协议标识符):固定值
-
-
- 示例:
设备 A(属于 VLAN 10)发送数据时,交换机添加VID=10
的标签,其他支持 VLAN 的交换机根据该标签判断数据应转发至哪个 VLAN。
- 示例:
- 同 VLAN 内的数据传输
-
- 流程:
-
-
- 设备发送数据至交换机,交换机识别设备所属 VLAN(如 VLAN 10),添加对应
VID=10
的标签。 - 交换机根据转发表将带标签的数据帧转发给目标设备所在的交换机。
- 目标交换机解析标签,确认目标设备属于 VLAN 10,移除标签并转发数据。
- 设备发送数据至交换机,交换机识别设备所属 VLAN(如 VLAN 10),添加对应
-
-
- 类比:
如同在快递包裹上贴 “部门标签”(如 “财务部”),所有贴相同标签的包裹会被送到同一部门,中途转运时快递员根据标签分拣。
- 类比:
5.7网页请求的生命周期的完整实例
(1)网络请求中使用的协议以及功能
1. 应用层协议
- HTTP/HTTPS(基于TCP):定义客户端与服务器间数据请求与响应格式(如获取网页内容),HTTPS 额外提供加密传输。
- DNS(基于UDP):将域名(如
www.baidu.com
)解析为 IP 地址,实现网络资源的逻辑寻址。 - DHCP(基于UDP):动态分配设备的 IP 地址、默认网关、DNS 服务器等网络配置参数。
2. 传输层协议
- TCP(基于IP):建立可靠连接,确保数据有序、无丢失传输(如 HTTP 基于 TCP),通过三次握手和四次挥手实现连接管理。
- UDP:无连接传输,适合对实时性要求高的场景(如 DNS、DHCP),头部开销小但不保证可靠性。
3. 网络层协议
- IP:提供跨网络的逻辑寻址(IP 地址),规划数据包的路由转发路径(如从本地网络到目标服务器)。
- ARP(基于帧,请求以广播帧发送):将 IP 地址解析为 MAC 地址(物理地址),用于局域网内数据帧的传输。
4. 数据链路层协议
- Ethernet(以太网):定义局域网内数据帧格式(如 MAC 地址、帧校验),实现相邻设备间的数据传输(如电脑→路由器)。
(2)网页请求的完整流程
第一步:连接互联网(Connecting to the Internet)
笔记本首次连接时需要获取:
- 自身的 IP 地址
- 第一跳路由器的地址
- DNS 服务器的地址
使用 DHCP 完成以上任务
- DHCP 请求封装在 UDP 中,进一步封装为 IP 和 802.3 Ethernet 帧
- 帧以广播方式(MAC地址
FF:FF:FF:FF:FF:FF
)发送到局域网 - 路由器(运行 DHCP 服务器)收到请求,解封装后处理 DHCP 消息
DHCP 服务器响应:
- 回送 DHCP ACK,包含:
-
- 客户端 IP 地址
- 第一跳路由器 IP 地址
- DNS 服务器名称与 IP 地址
第二步:DNS 与 ARP(Before DNS, Before HTTP)
为了发送 HTTP 请求,需先获取目标网站的 IP 地址:使用 DNS
- DNS 查询通过 UDP/IP/Ethernet 帧发送
- 若不知道第一跳路由器的 MAC 地址 ➜ 需使用 ARP 解析
ARP 流程:
- 客户端广播 ARP 查询
- 路由器返回自身接口的 MAC 地址
- 客户端记录地址并用于发送 DNS 查询帧
第三步:DNS 查询与响应(Using DNS)
- 客户端将 DNS 查询帧经交换机发送至第一跳路由器
- 路由器将该帧转发到 Comcast 网络中的 DNS 服务器
- DNS服务器查询并返回
www.google.com
的 IP 地址 - 客户端收到响应后,即可准备发送 HTTP 请求
第四步:建立 TCP 连接并发送 HTTP 请求(TCP + HTTP)
步骤:
- 客户端打开 TCP 套接字,与 Web 服务器建立连接
- 首个 TCP 段为 SYN(握手第一步)
- SYN 被跨域转发到服务器
- 服务器回复 SYN-ACK(第二步)
- 客户端确认 ACK(第三步),连接建立完成
接下来:
- HTTP 请求通过 TCP 发送
- Web 服务器响应 HTTP 回复(包含网页内容)
- HTTP 数据通过 TCP/IP/Ethernet 一路传输回客户端
最终:
- 网页成功显示!