HCIP笔记
一、网络类型分类 (OSPF 视角)
OSPF (开放最短路径优先) 协议会根据不同的二层链路类型生成不同的网络类型,这主要体现在其邻居发现、链路状态通告 (LSA) 泛滥方式以及指定路由器 (DR) / 备份指定路由器 (BDR) 的选举机制上。
1.多点接入网络
(1)原因: 在一个共享媒体(如以太网)上,多个设备共享同一网段。OSPF 需要机 制来避免 LSA 的重复泛滥和选举一个代表(DR/BDR)来维护邻接关系,以减少 不必要的网络流量。
(2) 广播型多点接入 :
a.特点: 支持广播。OSPF 进程会向 224.0.0.5 (AllSPFRouters - 所有 OSPF 路由 器)地址发送 Hello 包以发现邻居。
b.DR/BDR 选举: 在 BMA 网段,OSPF 会选举 DR 和 BDR。只有 DR 和 BDR 之 间会建立完全邻接关系 ,并负责泛滥 LSA;其他路由器 (DROther) 只与 DR/BDR 建立完全邻接关系,而与其他 DROther 仅建立2-WAY状态(非完全邻接),不交 换LSA。
c.优点: 减少了网络中需要维护的邻接关系数量,降低了 CPU 和内存的消耗。
d.例子: 以太网 (Ethernet)。
(3)非广播型多点接入:
a.特点: 不支持广播,OSPF 无法直接通过广播 Hello 包发现邻居。
b.解决方案:
1.手动指定邻居 : 在 OSPF 接口配置 neighbor<IP> 命令,直接指定对方为邻 居。
2.配置虚拟邻居: 在 NBMA 网络上模拟点对点(P2P) 链路,这样 OSPF 就可 以基于 P2P 的模式进行通信。
c.DR/BDR 选举: NBMA 网络也可以选举 DR/BDR,但配置相对复杂。可以手动 指定 DR/BDR,或者通过优先级 (Priority) 来选举。
d.网络类型模拟: NBMA 网络可以被 OSPF 视为 broadcast、 non-broadcast 或 point-to-multipoint。
1.ospf network-type broadcast:模拟 BMA,需要配置邻居,选举 DR/BDR。
2.ospf network-type non-broadcast:最原始的 NBMA 类型,需要手动配 置所有邻居,并选举 DR/BDR。
3.ospf network-type point-to-multipoint:将 NBMA 网络视为一个点到多点 (P2MP) 结构,不选举 DR/BDR,所有邻居之间都建立完全邻接关系。这种 方式相对简单,尤其适用于 Spoke-to-Spoke (分支到分支) 连接不重要的场景。
e.例子: 帧中继 ,ATM (异步传输模式)。
f.帧中继特殊性: 帧中继的 DLCI ( 数据链路连接标识符) 相当于逻辑连接。在一个 共享的帧中继接口上,可以创建多个子接口,每个子接口可以配置一个 DLCI,并模 拟成不同的 OSPF 网络类型。
2.点到多点网络
(1)背景: 适用于不适合进行 DR/BDR 选举或不需要 DR/BDR 的场景。
(2)特点:
a.不选举 DR/BDR: 所有路由器在 P2MP 网段上都会与所有其他路由器建立完全 邻接关系。
b.LSA 类型: 使用 Type 2 LSA来描述整个网段,然后由邻居(Hub - 中心节点) 再发送 Type 1 LSA 来描述其连接的 Hub-and-Spoke (中心辐射型) 拓扑。
c.配置: 通常在 NBMA 网络中,为了简化配置(避免 DR/BDR 选举和邻居关系 管理),将其手动配置为 point-to-multipoint。
(3)使用场景: 当一个 NBMA 网络中的连接是非永久性或分支较多的情况下,可以 简化管理。
3.点到点网络
(1)特点:
a.无 DR/BDR 选举: 两个设备直接连接,自动建立完全邻接关系。
b.LSA 类型: 只使用 Type 1 LSA (Router LSA)。
c.配置简便: 适用于串行链路、PPP、HDLC 等。
(2)OSPF 行为: 在 P2P 链路上,OSPF 发送 Hello 包到 224.0.0.5,并与对端直接建立 FULL 邻接关系。
总结 OSPF 网络类型的影响:
网络类型 | Hello 报文目标地址 | DR/BDR 选举 | 邻接关系建立 | LSA 类型 (主要) | 配置复杂性 |
多点接入 | 224.0.0.5 | 是 | 仅 DR/BDR 与其他完整 | Type 1, Type 2 | 中等 |
点到多点 | 224.0.0.5 | 否 | 所有邻居都完整 | Type 1 | 低 |
点到点 | 224.0.0.5 | 否 | 直接建立完整 | Type 1 | 低 |
二、数据链路层协议
1.MA 网络:以太网协议
(1)CSMA/CD ( 载波侦听多路访问/冲突检测): 以太网早期的媒体访问控制方法。设备 在发送前监听载波,当多个设备同时发送时会发生冲突,设备检测到冲突后会停止发 送,并随机等待一段时间后再重试。
(2)现代以太网 (交换式以太网 ): 通过交换机 工作在数据链路层,每个端口为一个独立 的冲突域 。设备直接与交换机通信,不再需要 CSMA/CD。交换机使用 MAC 地址表 来转发帧,实现了全双工通信 ,大大提高了效率。
(3)以太网帧格式 :
a.起始帧定界符: 用于同步和帧开始。
b.目标 MAC 地址: 目标设备的 MAC 地址。
c.源 MAC 地址: 源设备的 MAC 地址。
d.以太网类型: 指示上层协议类型(如 0x0800 for IP, 0x0806 for ARP)。
e.载荷: 上层数据。
f.帧校验序列: CRC (循环冗余校验) 校验,用于错误检测。
g.最大传输单元: 以太网帧的最大载荷大小,通常为 1500 字节。
2.P2P 网络
(1) HDLC 协议 (高级数据链路控制协议)
a.应用场景: 早期的串行链路,常用于路由器之间的点对点连接。
b.帧结构:
Flag (标志) (0x7E): 起始/结束标志。
Address (地址): 地址字段(通常为 0xFF)。
Control (控制): 控制字段(定义帧类型,如信息帧 I, 监控帧 S, 无编号帧 U)。
Protocol (协议): 标识上层协议。
Information (信息): 上层数据。
FCS (帧校验序列): 帧校验序列。
c.特性: 是一种面向比特的同步协议,支持差错检测。但因其私有性和功能限制 (不如 PPP 灵活),在现代网络中已较少使用,尤其是在提供 IP 服务的场景。
d.关键点: Cisco 默认使用 HDLC,导致 Cisco 和非 Cisco 设备之间串行链路无法 直接通信,除非对端也配置为 HDLC 或 Cisco 端改为 PPP。
(2) PPP 协议 (点对点协议)
a.协议栈: PPP 协议栈包括 LCP (链路控制协议), NCP (网络控制协议,如 IPCP IP 控制协议), 以及认证协议 (PAP - 口令认证协议, CHAP - 挑战握手认证协议)。
b.LCP 协商阶段:
1.MTU 协商: 双方协商链路的最大传输单元。
2.认证协议协商: 确定是否进行认证,以及使用哪种认证方式。
3.Magic Number (魔术数字): 用于检测链路环回 (Loopback)。
4.Echo Request/Reply (回声请求/应答): 用于链路质量测试。
c.NCP 协商阶段 (例如 IPCP):
1.IP 地址分配 (IP Address Allocation): 动态分配 IP 地址(主动方分配, 被动方获取),或静态配置。
2.DNS 服务器地址、WINS 服务器地址等协商。
d.PAP (口令认证协议):
1.过程: 客户端发送用户名和密码给服务器,服务器验证。
2.安全性: 密码以明文传输,容易被截获。
e.CHAP (握手认证协议):
1.过程:
(1)Challenge (挑战): 服务器向客户端发送一个随机的“挑战”字符串。
(2)Response (响应): 客户端使用挑战字符串和其密码(本地存储的 哈希值)进行哈希计算,并将结果发送给服务器。
(3)Verification (验证): 服务器使用相同的挑战字符串和存储的密码哈 希值进行计算,如果结果匹配,则认证成功。
2.安全性: 密码本身不传输,安全性更高。
f.PPP MP (多链路 PPP)
1.工作原理: 将多个物理 PPP 链路(例如,多条 ISDN 线路,或多条串行 链路)捆绑成一个逻辑链路。
2.分片与重组: 当数据包过大无法一次性通过单条链路时,MP 会将数据包 分割成小片段 ,通过多条链路并行传输,然后在对端重新组装。
3.配置: 需要配置 MP-GROUP 接口,并将物理 PPP 接口加入该组。
4.应用: 增加带宽、提高吞吐量、实现负载均衡和链路冗余。
三、TCP 协议详解
1.面向连接
(1)三次握手:
a.SYN (Client -> Server): 客户端发送 SYN 包,请求建立连接,并包含自己的 初始序列号 。
b.SYN-ACK (Server -> Client): 服务器收到 SYN 后,回复 SYN-ACK 包,表 示同意建立连接,并包含自己的 ISN 以及对客户端 SYN 的确认号 (Client ISN + 1)。
c.ACK (Client -> Server): 客户端收到 SYN-ACK 后,发送 ACK 包,确认服务 器的 SYN-ACK,并包含对服务器 SYN 的确认号 (Server ISN + 1)。此时连接建 立。
2.TCP 报文结构 (关键字段)
(1)Source Port (源端口), Destination Port (目标端口): 源端口和目标端口。
(2)Sequence Number (序列号): 当前发送的字节流的起始序列号。
(3)Acknowledgment Number (确认号): 期望接收的下一个字节的序列号。
(4)Data Offset (数据偏移 / 头部长度): TCP 头部长度。
(5)Flags (标志位,如 URG, ACK, PSH, RST, SYN, FIN):
a.SYN (同步): 建立连接。
b.ACK (确认): 确认号有效。
c.FIN (终止): 释放连接。
d.RST (重置): 中断连接。
e.PSH (推送): 尽快交给应用层处理。
f.URG (紧急): 紧急指针有效。
(6)Window Size (窗口大小): 接收方希望发送方发送的缓存大小(用于流量控制)。
(7)Checksum (校验和): 校验和,用于检测数据错误。
(8)Urgent Pointer (紧急指针): 指示紧急数据的位置。
3.TCP 异常连接 (RST - Reset)
(1)RST 报文的产生:
a.收到一个连接请求(SYN),但没有对应的监听端口 (Listening Port)。
b.收到一个报文段,但目标端口或 IP 地址不匹配。
c.收到一个无效的 ACK,用于终止连接。
d.接收方缓冲区已满,无法处理。
4.TCP 可靠传输机制
(1) 连接确认机制
a.累计确认: ACK 字段表示期望收到的下一个字节的序列号。例如,如果收到了 1000 字节数据(序列号 1000),ACK 号就是 1001。这表示之前的所有字节都已 成功接收。
b.窗口字段 : 接收方通过此字段告知发送方自己还有多少可用缓冲区空间 。发送 方根据此值来限制发送的数据量,实现流量控制 (Flow Control)。
(2) 重传机制
a.超时重传:
1.RTO (重传超时时间): TCP 使用 RTT (往返时间) 的加权平均值来估 算 RTO。常用的算法是 Karn 算法,它在计算 RTT 时忽略带有 ACK 标志的 重传数据包。
2.超时间隔加倍 : 当发生重传时,TCP 会将 RTO 乘以一个因子(通常 是 2),以避免在网络拥塞时加剧问题。
b.快速重传:
1.触发: 收到 3 个或更多重复的 ACK (Duplicate Acknowledgement),这通 常意味着中间有数据包丢失。
2.操作: 发送方立即重传丢失的数据包,而无需等待超时。
3.快速恢复: 在快速重传后,TCP 进入快速恢复阶段。它会将 cwnd(拥塞 窗口)设为 ssthresh(慢启动阈值)加上 3 个 MSS(因为收到了 3 个 Duplicate ACK),然后每收到一个 Duplicate ACK,cwnd 再加 1 MSS,直 到收到未丢失数据段的 ACK 后才恢复正常。
(3) 流控机制
a.滑动窗口概念: 发送方维护一个发送窗口 (Send Window),接收方维护一个接 收窗口 (Receive Window)。发送方可以发送的字节数不能超过发送窗口大小。接 收方告知发送方的可用缓存大小(接收窗口)决定了发送方的发送窗口上限。
b.发送窗口大小 = min(接收方通告的 Window Size, 拥塞窗口 cwnd)
c.零窗口探测 : 当接收方通告零窗口时,发送方会暂停发送。为了避免死 锁 (Deadlock),发送方会每隔一段时间(RTO/3)发送一个非常小的探测包 (1 字节),以检查接收方窗口状态。
d.SWS 阻止: TCP 头部中的 Window Scale 选项用于增大窗口值(支持更大的 窗口,特别是在高延迟、高带宽的网络中,避免带宽时延乘积。
(4) 校验和
a.计算: 包含 TCP 头部、TCP 数据以及伪头部 (Pseudo Header,包含源 IP, 目 标 IP, 协议号, TCP 长度)。
b.作用: 确保数据的完整性 (Integrity)。
5.TCP 拥塞控制
(1)拥塞: 指网络中路由器队列 (Router Queues) 过长,导致丢包和延迟急剧增加。
(2)目的: 避免 TCP 连接加剧网络拥塞。
(3)拥塞判断 (Congestion Detection):
a.丢包 (Packet Loss): 接收方未收到 ACK(超时重传),或收到重复 ACK(快 速重传)。
(4)TCP 拥塞控制方法 (加法增加,乘法减小):
a.慢启动 :
1.阶段: 连接建立初期,cwnd (拥塞窗口) 较小。
2.增长: cwnd 指数级增长(每 RTT 增加一倍)。
3.目标: 快速探测网络的可用带宽。
b.拥塞避免:
1.阶段: cwnd 达到 ssthresh (慢启动阈值) 后进入。
2.增长: cwnd 线性增长(每 RTT 增加一个 MSS)。
3.目标: 缓慢增加发送速率,避免再次引发拥塞。
c.拥塞发生与恢复:
1.检测到丢包 (通过 3 个 Duplicate ACK):
(1)ssthresh 减半: ssthresh = max(cwnd / 2, 2 * MSS)
(2)cwnd 设为 ssthresh: cwnd = ssthresh
(3)进入快速恢复: 允许发送方在收到 Duplicate ACK 时发送新的数据, 直到收到未丢失数据段的 ACK。
2.检测到超时重传:
(1)ssthresh 减半: ssthresh = max(cwnd / 2, 2 * MSS)
(2)cwnd 重置为 1 MSS: cwnd = 1 MSS
(3)重新进入慢启动: 再次进行指数级增长。
TCP Tahoe: 发生丢包(超时或重复 ACK)时,ssthresh 减半,cwnd 设为 1 MSS,并重回慢启动。
TCP Reno: 发生丢包(超时)时,ssthresh 减半,cwnd 设为 1 MSS,重回慢启动;发生丢包(重复 ACK)时,ssthresh 减半,cwnd 设为 ssthresh,并进入快速恢复。
TCP NewReno: 对 Reno 的改进,在快速恢复期间,如果有多于一个的数据包丢失,NewReno 能够更有效地处理。
TCP CUBIC: 现代 TCP 版本(如 Linux 默认)使用的算法,在慢启动和拥塞避免之间引入了“立方体”增长函数 (Cubic Growth Function),在高带宽、高延迟网络中性能更好。