这是本节的多页打印视图。
点击此处打印 .
返回本页常规视图 .
网络层 本章是计算机网络中的重点,会在选择题中考察,其中知识点也会与其他知识结合,放在大题中考察,需要熟练掌握 IP 协议以及 IP 数据包从一台主机发送到另一台主机的逻辑过程。
学习思维导图:
# 网络层
## 网络层功能
- 异构网络互联
- 路由和转发
- SDN基本概念
- 拥塞控制
## 路由算法
- 静态路由和动态路由
- 距离-向量路由算法
- 链路状态路由算法
- 层次路由
## IPV4
- IPv4分组
- IPv4地址和NAT
- 子网划分、路由聚集、子网掩码和CIDR
- ARP, DHCP, ICMP协议
## IPv6
- IPv6主要特点
- IPv6地址
## 路由协议
- 自治系统
- 域内路由和域间路由
- RIP路由协议
- OSPF路由协议
- BGP路由协议
## IP组播
- 组播的概念
- IP组播地址
## 移动IP
- 移动IP的概念
- 移动IP通信过程
## 网络层设备
- 路由器的组成和功能
- 路由表与分组转发
网络层功能
路由选择:网络层负责确定数据包从源到目的地的最佳路径,以确保数据包能够跨越多个网络或子网。路由选择算法用于决定数据包应该通过哪些中间路由器传输,以达到目的地。 数据包转发:一旦确定了数据包的路径,网络层将数据包从一个路由器或交换机传递到下一个路由器或交换机,直到到达目的地。这个过程称为数据包转发。 寻址和标识:网络层使用 IP 地址来唯一标识主机和路由器。IP 地址是网络层的核心标识机制,它帮助路由器和交换机将数据包正确地传送到目的地。 分段和重组:网络层可以将数据流分成更小的数据包(分段),以便在网络上传输。在目的地,这些分段将被重新组装成原始数据流。 数据包的传输和传递:网络层通过控制数据包的传输和传递来确保数据的可靠性和完整性。这包括错误检测、丢包处理和数据包的重新发送。 1 - IP 网络层的重点内容,需熟练掌握 IPv4 地址的格式、分组、CIDR 以及 NAT 内容,会在选择题和大题中考察。除此外,掌握组播、IPv6 和移动 IP 的概念,可能在选择题中考察。
IP 协议初探 在真实世界中,我们使用地址找到一个地点,比如 中国 北京市 海淀区 某街道 某小区 某一栋 某一户
。
在互联网中我们如果想定位某个机器,也需要使用同样的方式给其指定一个地址,这样的地址就叫做 IP 地址,IP 的英文全程是 Internet Protocol,直译作互联网协议。
但仅有地址是不够的,如何将数据从源地址发送到目的地址也是 IP 协议需要解决的一个问题。互联网是一个由众多网络设备组成的一个全球性的网络,从 一个机器 到 另一个机器,中间可能需要经过多个的网络设备,如何保证我们的数据可以 通过某条路径到达 正确地目的地呢,这个过程需要 IP 协议和协议共同配合以实现,在后面我们会逐步了解这个过程。
IP 协议目前包含两个版本,分别是 IPv4(Version 4)以及 IPv6(Version 6),后文将逐步介绍这两个协议,当然重点在于掌握 IPv4 的具体细节。
IPv4 地址格式 IPv4 的地址由 4 个字节构成,共有 32 位,比如 11000000.10101000.00000100.00000010
就是一个 IPv4 的地址。
点分十进制 二进制表示较为复杂,因此通常采用点分十进制表示法。
在点分十进制中,每个字节的值用十进制数表示,字节之间以点号分隔,因此得名点分十进制。
上述 IPv4 地址 11000000.10101000.00000100.00000010
的点分十进制形式为 192.168.4.2
。
网络和主机地址 前文已经谈到,IP 地址是帮助我们在互联网中定位到一个机器,从而可以根据该地址进行数据传输。
所以,从逻辑上来说,IP 地址可以被拆分为两个部分:
网络编号:IP 地址的前若干位,以确定一个网络。 主机编号:IP 地址的后若干位,以在网络中确定的一个机器。 网络编号确定 IP 地址在哪个网络中,主机编号确定该机器是网络中的哪一台机器。
IPv4 首部 IP 协议位于 OSI 7 层模型的网络层,其承载上层(传输层)的数据,对其进行 封装 ,然后传递给下层(数据链路层)进行进一步的处理。
封装的具体过程就是为 传输层的数据 加上 IP 协议的首部的二进制表示,IPv4 的首部的 逻辑格式 如下图所示,其中包含多个字段,长度通常为 20 个字节。
这一小节我会简单介绍各个字段,帮助大家建立一个粗略的了解,部分字段的细节我会在后面几个小节详解说明。
版本(Version):4 位字段,用于指定 IP 协议版本,IPv4 的版本为 4。 头部长度(Header Length):4 位字段,用于指示 IPv4 首部的长度,以 4 字节为单位。由于 IPv4 首部的固定部分长度为 20 字节,因此这个字段的值通常是 5(即该字段二进制表示为 0101
,5 * 4(4 字节为单位) = 20
,最终表示的长度为 20)。 服务类型(Type of Service):8 位字段,用于指定数据报的服务质量(Quality of Service,QoS),包括优先级、延迟、吞吐量等。 总长度(Total Length):16 位字段,指定整个 IPv4 数据报(包括首部和数据部分)的总长度,以字节为单位。最大值为 65535 字节。 标识(Identification):16 位字段,用于唯一标识数据报。通常在数据报分片时用于重新组装数据报。 标志(Flags):3 位字段,包括以下标志:最左边位:保留为 0,未使用。 DF(Don’t Fragment):如果设置为 1,表示数据报不允许分片。则路由器会丢弃该数据报,并发送一个 ICMP 错误消息(“Fragmentation Needed and DF Set”)返回给发送方,告知需要分片但不允许分片。 如果设置为 0,标识允许分片,路由器在传输过程中如果需要,可以将数据报分片,以确保数据报能够通过传输链路。 MF(More Fragments):如果设置为 1,还有更多的分片; 如果设置为 0,表示当前分片是对应数据报的最后一个分片,或者表示当前数据报根本没有分片。 片偏移(Fragment Offset):13 位字段,用于指示数据报分片的位置。以 8 字节为单位,表示相对于原始数据报的偏移量。 生存时间(Time to Live,TTL):8 位字段,指定数据报在网络中可存在的最大时间(跳数),每经过一个路由器,TTL 减 1,当 TTL 减至 0 时,数据报被丢弃。 协议(Protocol):8 位字段,指定上层协议,表示数据报的载荷是由哪个协议处理。例如,6 表示 TCP,17 表示 UDP。 首部校验和(Header Checksum): 源 IP 地址(Source IP Address): 目标 IP 地址(Destination IP Address): 选项(Options):可选字段,长度可变,用于包含一些额外的信息。IPv4 首部中的选项字段通常很少被使用。 分片和相关字段 简而言之,
IP 数据报的最大长度为 65535 字节(总长度字段为 16 位,16 位可以表示的最大非负整数为 65535),而数据链路层的 MTU 往往都小于该值(比如以太网 ethernet 的 MTU 为 1500),所以为了在数据链路上传输这些数据,就需要将数据报(ip packet)进行拆分为不同的分片(ip fragmentation),更多关于分片的细节可以查看 IP 数据报分片 。
这个时候就会出现两个问题,我将 packet A 和 packet B 都拆分为了不同分片,比如我将 packet A 拆分为分片 A1、A2 和 A3,将 packet B 拆分 B1、B2。那么我如何区分这些不同的分片,我怎么知道 A1 是来自于 packet A 而不是 packet B 的呢?以及我如何将同一个数据报的不同分片再结合起来形成原始数据报呢?
为了实现以上需求,IP 协议首部包含如下字段:
Identification 标识字段用于区分 不同数据报 以及其 分片 Fragment Offset 标识字段标识当前分片中的数据在整个数据报中的偏移 差错校验字段 IP 首部的 checksum 为 IP 协议的差错校验字段,用于检验 IP 首部在传输的过程中是否发生错误,接下来我会告诉你如何通过该字段进行校验。
当一个 IP 数据报被创建时,发送端设备会计算 IP 头部的校验和,并填充 IP 数据报中的 checksum 字段。
当 路由器 和 目标机器 在收到数据报时会重新计算首部校验和,并将计算得到的校验和和接收到的 IP 数据报中的 checksum 进行比较。如果不一致的话,则说明 IP 数据报中的某些数据在传输的过程中出现变动,就需要丢弃该 IP 数据报。
需要注意的是,当 IP 数据报 经过某个路由器时,路由器需要重新计算并填充 checksum 字段,因为 IP 数据报中的某些字段在经过路由器时会被改变(比如 TLL 会减 1 等)。
一般而言,对于校验和,了解到以上程度即可,如果你好奇校验和究竟是如何计算且学有余力的话,可以查看checksum 校验和计算方式 。
IPv4 分类寻址 在互联网早期,IP 地址采用了分类寻址(Classful Addressing),具体而言,就是将 IP 地址根据其网络编号(前几位)分为 A、B、C 和 D 类。
在分类寻址中,如果给定一个 IP 地址,我们可以马上判断出该 IP 地址属于哪一类网络(根据前几位的值),以及该 IP 地址的 网络编号 和 主机编号是多少。
类别 网络编号 主机数量 用途 网络数量 A 类 8 位,第一位一定是 1
$2^{24} - 2 = 16,777,214$ 大型网络 $2^7 = 128$ B 类 16 位,前两位一定是 10
$2^{16} - 2 = 65,534$ 中型规模网络 $2^{14}$ C 类 24 位,前三位一定是 110
$2^8 - 2 = 254$ 小型网络 $2^{21}$ D 类 4 位,固定为 1110
$2^{28} = 268,435,456$ 多播网络 $1$
分类寻址曾是 IP 协议设计的核心思路,旨在简化路由器设计和 IP 地址分配。这种简单策略在早期互联网中确实高效,很好地满足了当时的需求。然而,设计者未曾料到,短短几十年后,联网设备数量会爆炸式增长,每台设备都需要一个唯一的 IP 地址。IPv4 的 32 位地址空间(约 43 亿个地址)在全球设备激增的背景下,很快显得捉襟见肘。
分类 IP 这种“一刀切”的分配方式加剧了 IPv4 地址短缺的问题,这种分类方式过于不灵活,会造成地址空间浪费的现象。
例如,一个 B 类地址可以容纳 65,534 个主机,但如果一个组织只有几千台主机,剩余的地址就浪费了。同样,如果一个 C 类地址不足以满足一个组织的需求,但 B 类又太大,分配就变得困难。
为了解决这个问题,聪明的计算机专家们又发明了 CIDR、NAT 等技术 以及 IPv6 协议。
CIDR 无类别域间路由(CIDR,classless inter-domain routing)的主要目标是克服传统的基于类别的 IP 地址划分方法,使网络资源的分配更加灵活和高效。
在 分类寻址 中,每一类网络的网络编号的长度是固定的,在 CIDR 中,网络编号的长度是动态的,可以根据需求定制。其中网络编号的长度叫做前缀长度(Prefix Length),前缀长度通常以 IP 地址 斜杠后跟一个数字表示,例如,192.168.1.13/24
表示前 24 位是网络部分,剩下的位数用于主机。
子网掩码 这里就要提到子网掩码(subnet mask)这个概念,如果一个 CIDR 网络的前缀长度是 n 位的话,那么其子网掩码的二进制表示就是 111 (n 个 1) ... 0000 (32-n 个 0)
,该子网掩码对应的点分十进制如下图所示。
子网掩码的作用是找到 IP 地址的子网地址,IP 地址 与 子网掩码 进行 与操作计算 即可得到对应的子网地址。子网地址的主机位全部为 0。
子网划分 子网划分(Subnetting)是将一个较大的 IP 网络分割为多个更小的网络(子网)的过程。这种操作通常是在 IP 地址的网络部分与主机部分之间进一步引入子网位,以创建子网标识符。通过子网划分,网络管理员可以更有效地管理 IP 地址,减少网络流量,优化路由,并提高网络安全性。
在子网划分过程中,子网掩码(Subnet Mask)用于区分 IP 地址的网络部分和主机部分。常见的做法是通过调整子网掩码的长度,将更多位分配给网络部分,减少主机部分的位数。
子网划分包含 变长子网划分(Variable Length Subnet Masking, VLSM)和 固定长度子网划分(Fixed Length Subnet Mask, FLSM)两种方式。
变长子网划分 变长子网划分使用不同长度的掩码来划分 IP 地址空间,从而根据实际需求为各个子网分配不同数量的地址。
假设你有一个 C 类网络192.168.1.0/24
,需要划分给三个部门,其中 A 部门需要 100 个 IP 地址,B 部门需要 50 个 IP 地址,C 部门只需要 25 个 IP 地址。
使用 VLSM,你可能会这样划分:
部分名称 子网地址 掩码 地址个数 A 部门 192.168.1.0/25
255.255.255.128
128 B 部门 192.168.1.128/26
255.255.255.192
64 C 部门 192.168.1.192/27
255.255.255.224
32
定长子网划分 固定长度子网划分使用相同长度的子网掩码来划分网络。这种方法在划分时更为简单和直接,但通常不如 VLSM 灵活高效。
假设你有一个 C 类网络192.168.1.0/24
,需要划分给 A, B, C, D 四个部门,可以这样划分:
部分名称 子网地址 掩码 地址个数 A 部门 192.168.1.0/26
255.255.255.192
64 B 部门 192.168.1.64/26
255.255.255.192
64 C 部门 192.168.1.128/26
255.255.255.192
64 D 部门 192.168.1.192/26
255.255.255.192
64
注意以上地址个数中包含全 0 和全 1 的无效地址。
IP 数据报分片 P 数据报分片是一种网络通信中的过程,它允许较大的 IP 数据报在经过一些网络链路时被分割成多个较小的片段,以适应网络链路的最大传输单元(MTU,Maximum Transmission Unit)。MTU 是指网络链路能够传输的最大数据报大小,不同网络链路的 MTU 大小可能不同。当一个 IP 数据报的大小超过了某个链路的 MTU 时,它就需要被分片,以确保可以顺利传输。
MTU 指的是链路层帧中有效负载(Payload)部分的最大字节数,不包括链路层的帧头(Frame Header)和帧尾(Trailer)。
数据链路中的负载(Payload)包含 IP 数据报的首部(20B)和数据部分。
以下是 IP 数据报分片的基本过程:
发送端分片:发送端的主机首先创建一个 IP 数据报,并将它发送到目标主机。这个数据报的大小可能大于某些链路的 MTU。 路由器检查 MTU:当数据报经过路由器时,路由器会检查下一个链路的 MTU 大小。它会比较数据报的大小和链路 MTU。 如果数据报的大小小于或等于链路 MTU,那么数据报会继续传输,无需分片。 如果数据报的大小大于链路 MTU,那么路由器需要将数据报分片为多个较小的片段,以适应链路 MTU。 数据报分片:当数据报需要分片时,路由器会将数据报拆分成多个片段。每个片段都会包含原始数据报的一部分数据。 每个片段的头部将保留原始数据报的首部,但有一个特殊的标志(Fragment Offset)来指示它在原始数据报中的位置。 路由器将这些片段分别发送到下一个链路。 目标端重组:当片段到达目标主机时,目标主机将重新组装这些片段以恢复原始的数据报。 目标主机使用每个片段的标志和偏移量信息来确定如何正确地重组数据报。 分片例子:
MTU = 65335 MTU = 4000 MTU = 2500 Source Final destination Host Links Router MTU: Maximium Transmission Unit (Byte) Legend ID Offset More fragment flag Payload (byte) 578 0 0 10000 578 0 1 3976 578 497 1 3976 578 994 0 2048 578 0 1 2480 578 310 1 1496 578 1 2480 578 807 1 1496 578 994 0 2048 First fragmentation R1:(4000) First fragmentation R2:(2500) Part of IPv4 header (20 byte) The original packet R1 R2 497 以上图为例,假设我们有一个 IP 数据报,其总长度为 10000 字节,它需要通过两个链路,两个链路的 MTU 分别为 4000 和 2500 字节。当 IP 数据报经过第一个链路时,它需要被拆分为 3 个分片以通过链路:
数据报 首部长度 数据长度 总长度 偏移量 片偏移字段 MF 标志位 ID 字段 原始 IP 数据报 20 10000 10020 - 0 0 578 分片 1 20 3976 3996 0 0 1 578 分片 2 20 3976 3996 3976 497 1 578 分片 3 20 2048 2068 7952 994 0 578
分片后 IP 首部字段变化情况
所有分片中的 IP 数据报首部中的标识(ID,Identification)字段保持不变。
如果是最后一个分片,则 MF(More Fragment)标识位为 0,否则 MF 标识位为 1。
片偏移(offset)字段以 8 字节为单位,其值为 分片实际偏移量 / 8
分片后应该满足的条件
总长度 = 首部长度(20B) + 数据长度 ≤ MTU
数据长度必须为 8 的整数倍,因为 offset 字段以 8 字节为单位。
分片经过第二个链路时也会根据 MTU 进行拆分,以分片 1 为例进行说明:
数据报 首部长度 数据长度 总长度 实际偏移量 片偏移字段 MF 标志位 ID 字段 分片 1 20 3976 3996 0 0 1 578 分片 1.1 20 2480 2500 0 0 1 578 分片 1.2 20 1496 1516 2480 310 0 578
IP 组播 IP 组播(IP Multicast)是一种 IP 通信模式,允许一台发送器将数据报发送到多个接收器,而不是传统的单播(点对点通信)模式。组播是一种多对多的通信方式,非常适合用于广播、多媒体流传输和分布式应用中。
以下是 IP 组播的一些关键特点和概念:
组播组:IP 组播通信由一个或多个组播组组成,每个组都有一个唯一的组播组地址。组播组地址属于 IPv4 地址范围的特殊区域,通常以 224.0.0.0 到 239.255.255.255(D 类地址) 为范围。多个接收器可以订阅同一个组播组。 发送器:发送器是将数据报发送到组播组的设备。发送器只需发送一次数据报,然后由网络基础设施复制并传送给订阅了该组播组的接收器。 接收器:接收器是订阅了特定组播组的设备。它们希望接收组播组中的数据。接收器可以是单个主机、路由器或多个主机。 IGMP(Internet Group Management Protocol):IGMP 是用于管理 IP 组播成员的协议。它允许主机通知路由器它们希望加入或离开特定的组播组。路由器使用 IGMP 来了解哪些主机希望接收特定组播组的数据。 组播路由:组播路由器是网络中的设备,负责将组播数据报从发送器传送到接收器。组播路由器根据 IGMP 报文和组播组地址表,将数据报仅传送到订阅了该组播组的网络分支。 组播范围:IP 组播地址可以分为不同的范围,如永久组播地址、临时组播地址和本地链路组播地址,以满足不同的需求和使用情况。 Unicast Broadcast Multicast Class A,B,C Transport TCP and UDP
Class A,B,C... Hosts all 1's Transport UDP only
Hosts all 1's... Class D Transport UDP only
Class D... Text is not SVG - cannot display IPv6 IPv4 协议于 20 世纪 70 年代设计,经过互联网几十年的快速发展,至 2011 年 2 月,IPv4 地址已完全耗尽。为应对“IP 地址耗尽”问题,主要采取了以下三种措施:
采用无类别域间路由(CIDR):通过更灵活的地址分配方式,提高 IPv4 地址的使用效率。 使用网络地址转换(NAT):通过允许多个设备共享同一公网 IP 地址,有效节省全球 IP 地址资源。 推广新一代 IPv6 协议:IPv6 拥有更大的地址空间,从根本上解决 IP 地址短缺问题。 前两种方法仅能延缓 IPv4 地址耗尽的进程,而只有 IPv6 的广泛应用才能彻底解决这一问题。
特点 扩展的地址空间:IPv6 大幅扩展了 IP 地址空间,使用 128 位地址,相对于 IPv4 的 32 位地址,IPv6 提供了约 340 亿亿亿亿($3.4 \times 10^{38}$)个可能的地址,解决了 IPv4 地址枯竭的问题。 简化的报头:IPv6 报头相对于 IPv4 报头更简化,减少了路由器处理数据报的开销,提高了路由性能。 自动地址配置:IPv6 支持自动地址配置,其中设备可以通过 Router Advertisement 消息获取自己的 IPv6 地址,减少了手动配置的需要。 移动性支持:IPv6 内置了对移动 IP(Mobile IP)的支持,使移动设备能够无缝地切换网络而无需更改 IP 地址。 改进的安全性:IPv6 在设计上包括了对 IPsec(IP Security)的支持,这增加了网络通信的安全性和隐私保护。 多播和任播:IPv6 对多播和任播提供了更强大的支持,使网络更加高效。 简化的头部处理:IPv6 取消了 IPv4 中的首部校验和,减少了路由器在处理数据报时的负担。 更好的 QoS 支持:IPv6 提供了更多的选项和字段来支持服务质量(Quality of Service) 首部 Source Address%3CmxGraphModel%3E%3Croot%3E%3CmxCell%20id%3D%220%22%2F%3E%3CmxCell%20id%3D%221%22%20parent%3D%220%22%2F%3E%3CmxCell%20id%3D%222%22%20value%3D%22Version%22%20style%3D%22rounded%3D0%3BwhiteSpace%3Dwrap%3Bhtml%3D1%3BfillColor%3D%23E8EFDB%3BstrokeColor%3Ddefault%3BfontSize%3D16%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%22560%22%20y%3D%2280%22%20width%3D%22120%22%20height%3D%2250%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3C%2Froot%3E%3C%2FmxGraphModel%3E
IPv6 首部包含 8 个字段,总长度固定为 40 字节。字段如下:
版本(Version):表示协议版本,对于 IPv6,该字段值为 6。用于标识数据包的协议类型,确保接收端正确解析。 流量类别(Traffic Class):用于服务质量(QoS)管理,标记数据包的优先级或服务类型(如实时流量或低优先级流量)。 流标签(Flow Label):标识属于同一数据流的数据包,便于路由器进行特殊处理(如保持数据包顺序或优先级)。 有效载荷长度(Packet Length):表示 IPv6 数据包中除首部外的有效载荷长度(单位:字节),包括扩展首部和上层数据。 下一首部(Next Header):指明紧跟 IPv6 首部之后的首部类型(如 TCP、UDP 或扩展首部),类似于 IPv4 的“协议”字段。 跳数限制(Hop Limit):表示数据包在网络中可经过的最大跳数,每经过一个路由器减 1,若减至 0 则丢弃。 源地址(Source Address):标识数据包的发送方地址。 目标地址(Destination Address):标识数据包的目标接收方地址。 地址 IPv6 地址使用 128 位,通常以冒号分隔的 16 位十六进制数表示,例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334。
IPv6 地址在表示时支持 缩写规则 以简化书写,具体如下:
省略前导零 :对于每个 16 位域(4 个十六进制字符),可以省略开头的零,但每个域必须至少保留一个数字。例如,地址 4BF5:0000:0000:BA5F:039A:000A:2176 可简化为 4BF5:0:0:BA5F:39A:A:2176。压缩连续全零域 :当地址中存在连续的多个全零域(即 0000:0000:…),可用双冒号(::)代替这些域,进一步压缩地址。但双冒号在一个地址中只能使用一次,因为全零域的个数需根据地址的总域数(8 个域)推算。例如,上述地址可进一步缩写为 4BF5::BA5F:39A:A:2176。通过这些规则,IPv6 地址的表示更加简洁紧凑。
IPv6 数据报按照目的地址可以分为如下类型:
单播地址(Unicast Address):用于将数据报从一个源节点传输到一个目标节点。 多播地址(Multicast Address):用于将数据报传输到一组目标节点,而不是单个节点。 任播地址(Anycast Address):用于将数据报传输到一组目标节点中的最近者(最接近的一个)。 过渡方案 IPv4 到 IPv6 的过渡是一个复杂的过程,因为两种协议不直接兼容。以下是两种主要的过渡方法:
双栈技术 :网络设备同时实现 IPv4 和 IPv6 两个协议栈,分别配置一个 IPv4 地址和一个 IPv6 地址,这样这台设备既能和 IPv4 网络通信,也能和 IPv6 网络通信。双协议栈主机使用 DNS 来获取目标主机使用的 IP 地址,根据其类型使用 IPv4 或 IPv6 进行通信。 隧道技术 :是指在 IPv6 数据报要进入 IPv4 网络时,把整个 IPv6 数据报封装成 IPv4 数据报的数据部分,使原来的 IPv6 数据报就好像在 IPv4 网络的隧道中传输。当 IPv4 数据报离开 IPv4 网络时,再将其数据部分交给主机的 IPv6 协议。移动 IP 移动 IP(Mobile IP)是一种网络协议,用于实现移动设备在不同网络之间切换时,仍能够保持连接并无缝通信。移动 IP 的主要目标是支持移动性,允许移动设备在移动时保持与互联网或企业网络的连接。
通信过程 :
移动节点在家庭网络中连接,并分配了家庭网络的永久 IP 地址,建立了通信会话。 当移动节点决定移动到外部网络时,它会通知家庭网络的移动 IP 服务节点,告知其即将离开。 家庭网络的移动 IP 服务节点会分配一个临时 IP 地址,并记录移动节点的当前位置。 移动节点连接到外部网络,使用临时 IP 地址与外部网络中的其他设备通信。 当其他设备要与移动节点通信时,数据报被发送到移动节点的临时 IP 地址,然后到达外部网络。 外部网络的移动 IP 服务节点接收到数据报后,将数据报转发到移动节点的临时 IP 地址。 移动节点接收到数据报后,可以回复或继续与外部网络中的其他设备通信。 如果移动节点决定返回家庭网络,它可以通知外部网络的移动 IP 服务节点,并断开与外部网络的连接。 移动节点返回家庭网络后,通信会话继续,并且移动节点将继续使用家庭网络的永久 IP 地址。 2 - ICMP 掌握 ICMP 的功能和应用,并且了解一下 ICMP 的消息类型,可能在选择题中考察。
ICMP(Internet Control Message Protocol)是一个网络层协议,用于在 IP 主机和路由器之间发送控制消息。ICMP 是 Internet 协议套件的一个重要组成部分,它主要用于诊断和报告网络中的错误和某些特定条件。
首部 类型 (Type)
:8 位用于指定 ICMP 消息的类型。例如, Echo Request
的类型为 8
, Echo Reply
的类型为 0。 代码 (Code)
:8 位为更进一步细分某个特定类型的 ICMP 消息而设置。例如,对于“目的地不可达”( Destination Unreachable
)类型的消息,代码可以用来指定具体的不可达原因,如网络不可达、主机不可达等。 检验和 (Checksum)
:16 位用于验证 ICMP 消息在传输过程中没有被损坏。这个检验和涵盖了整个 ICMP 消息。 其它字段这些字段的内容取决于 ICMP 消息的类型和代码。例如,对于 Echo Request
和 Echo Reply
消息,接下来的字段包括一个标识符( Identifier
)和一个序列号( Sequence Number
)。 消息类型 这里不需要背,了解消息类型的含义即可,比方说给你一个消息类型源点抑制,你能知道它是干嘛的就行。
Echo Request
和 Echo Reply (ping)
Echo Request:
通常被称为 ping
请求。用于测试目的地是否可达。Echo Reply:
通常被称为 ping
回应。是对 Echo Request
的回应。Destination Unreachable
当数据不能被传送到目的地时,发送此消息。 下面是一些常见的“不可达”子类型:Network Unreachable:
无法到达目标网络。Host Unreachable:
无法到达目标主机。Protocol Unreachable:
目标网络不支持所请求的协议。Port Unreachable:
目标主机上的特定端口不可用。Fragmentation Needed and Don
’ t Fragment was Set:
数据包太大,需要分片,但数据包的“不分片”标志已设置。Source Route Failed:
源路由指定的路径失败。Network Unknown:
目标网络未知。Host Unknown:
目标主机未知。 Source Quench
(源点抑制)Redirect
Time Exceeded
当数据包在网络中传输的时间太长或超过了其 TTL
(生存时间)时发送。有两种主要的子类型: TTL Exceeded in Transit:
数据包在传输过程中 TTL
达到零。Fragment Reassembly Time Exceeded:
分片重新组装超时。Parameter Problem
当 IP
头包含错误或不可识别的信息时,发送此消息。 Timestamp Request and Timestamp Reply
Address Mask Request and Address Mask Reply
应用 这里需要了解基于 ICMP 协议的两个 linux 程序,一个是 ping,大家应该都比较熟悉。
另一个是 traceroute,用于寻找从起点到终点经过了哪些 IP 地址。
ping
ping
主要使用两种 ICMP 消息:Echo Request 和 Echo Reply。当您执行 ping
命令时,您的计算机发送一个 ICMP Echo Request 消息到指定的目标。 如果目标主机可达并运行,它会返回一个 ICMP Echo Reply 消息。 ping
工具记录这两个消息之间的时间差,即往返时间(RTT),并将其显示给用户。traceroute
traceroute
的目标是确定数据包从源计算机到目标计算机的路径中的所有中间跃点(通常是路由器)。它的工作原理基于 IP 数据包的 TTL(Time-to-Live) 字段。TTL 是每个 IP 数据包都有的字段,它在每次数据包经过一个路由器时减少 1,当 TTL 达到 0 时,该数据包就被丢弃,并向源发送一个 ICMP Time Exceeded 消息。 当开始执行 traceroute
时,第一个数据包的 TTL 被设置为 1。这意味着第一个路由器将丢弃它并发送一个 Time Exceeded 消息。这个消息告诉 traceroute
第一个路由器的位置。 接下来,traceroute
发送一个 TTL 为 2 的数据包。这次,第二个路由器会丢弃数据包并发送 Time Exceeded 消息。这个过程继续,直到数据包到达目标,目标返回一个 ICMP Echo Reply 消息。 通过逐步增加 TTL 值并监听 Time Exceeded 和 Echo Reply 消息,traceroute
能够映射出到目标的完整路径。 3 - DHCP 掌握 DHCP 的功能和流程,可能在选择题中考察。
动态主机配置协议(DHCP)是一个网络管理协议,用于自动分配 IP 地址和其他网络配置参数给网络设备,从而允许它们连接到 IP 网络。
当你连接到一个网络中时,不管是通过无线网,还是在电脑上连接了以太网线,你会发现无需任何配置,你自动获取了一个 IP 地址,并可以通过该 IP 地址进行网络通信。
DHCP DISCOVER (broadcast)
DHCP DISCOVER (broadcast) DHCP Offer DHCP REQUEST DHCP ACK Where is the DHCP server ?
Where is the DHC... Hello, I need... DHCP server is at 10.1.1.1
DHCP server is... Here is your... Text is not SVG - cannot display DHCP 的工作流程通常包括以下四个步骤,这个过程也被称作 DORA 过程,即 Discover, Offer, Request, 和 Acknowledgment。
Discover :客户端通过网络广播一个 DHCP 发现消息(DHCP DISCOVER),请求可用的网络配置信息。因为客户端还没有分配到 IP 地址,所以这个消息的源 IP 地址是 0.0.0.0 ,目的 IP 地址是 255.255.255.255 。 Offer:网络上的 DHCP 服务器接收到 DHCP 发现消息后,会向客户端发送一个 DHCP 提供消息(DHCP OFFER)。这个消息包含了一个提供给客户端的 IP 地址和其他配置信息,如子网掩码、DNS 服务器地址和 IP 地址租用期。 Request:客户端可能会从多个 DHCP 服务器收到多个 DHCP OFFER 消息。客户端选择其中一个提议,并通过广播一个 DHCP 请求消息(DHCP REQUEST)来响应这个提议,通知网络中的所有 DHCP 服务器它接受了哪个 DHCP 服务器的提议。 Acknowledgment:提供所选 IP 地址的 DHCP 服务器收到 DHCP 请求消息后,会发送一个 DHCP 确认消息(DHCP ACK)给客户端,确认 IP 地址和配置信息的租约。如果由于某种原因导致该 IP 地址不再可用或者有其他问题,DHCP 服务器可能会发送一个 DHCP 否认消息(DHCP NAK)。 4 - ARP 掌握 ARP 的概念和流程,可能在选择题中考察。
概念 ARP(Address Resolution Protocol,地址解析协议)是一种在 TCP/IP 网络中使用的协议,用于将 IP 地址转换为物理硬件地址(例如,MAC 地址)。ARP 的主要目的是确定要通过网络传输数据的目标设备的物理硬件地址,以便将数据帧正确地传送到目标设备。
10.1.1.2 Switch 10.1.1.5 10.1.1.4 10.1.1.3 Requesting the mac address for 10.1.1.1
Requesting the mac addr... Sending mac address 5a:71:22:65:55:31
Sending mac address... Text is not SVG - cannot display 流程 以上图为例,主机 10.1.1.2
用 ARP 协议查找主机 10.1.1.4
的 MAC 地址,其流程如下图所示
sequenceDiagram
participant 10.1.1.2;
participant Switch;
10.1.1.2 ->> Switch: 请求 IP 地址为 10.1.1.4 的设备的 MAC 地址;
Switch ->> 10.1.1.3: 广播 ARP 请求;
Switch ->> 10.1.1.4: 广播 ARP 请求;
Switch ->> 10.1.1.5: 广播 ARP 请求;
10.1.1.4 ->> Switch: 返回 ARP 响应;
Switch ->> 10.1.1.2: 交换器转发 ARP 响应; 具体而言,一次 ARP 请求可以被拆分为如下步骤:
ARP 请求 当一台设备(我们称它为主机 A)需要发送数据包到同一局域网内的另一台设备(主机 B),但它只知道目标设备的 IP 地址时,它会在本地网络上广播一个 ARP 请求。这个请求的语义大致是这样的:“我拥有 IP 地址 X.X.X.X 的设备,请告诉我你的物理 MAC 地址。”
ARP 请求的目的 MAC 地址为 ff-ff-ff-ff-ff-ff-ff-ff
,源 MAC 设置为自己的 MAC 地址。
网络上的广播 ARP 请求是一个广播帧,它发送到本地网络上的所有设备。每一台设备都会收到这个请求,但只有 IP 地址匹配请求中 IP 地址的设备会回应这个请求。
ARP 响应 当主机 B 收到这个 ARP 请求后,它会识别出请求中的 IP 地址与自己的 IP 地址相匹配,然后向主机 A 发送一个 ARP 响应。这个响应包含了主机 B 的 MAC 地址,并且这个响应是直接发送给主机 A 的,不是广播。
更新 ARP 缓存 主机 A 收到 ARP 响应后,它会在自己的 ARP 缓存表中更新这个信息,将主机 B 的 IP 地址与其 MAC 地址关联起来。ARP 缓存表中的这些条目通常会在一段时间后过期,所以可能需要定期更新。
数据传输 主机 A 现在知道了主机 B 的 MAC 地址,它可以构建一个以太网帧,将数据包含在其中,并使用 B 的 MAC 地址作为目的地址发送出去。
ARP 缓存 所有主机都会维护一个 ARP 缓存,该缓存存储了网络上其他设备的 IP 地址和 MAC 地址的映射。
这减少了广播 ARP 请求的需要,因为主机可以查看自己的缓存来找到之前解析过的地址。
以下是一个简化的 ARP 缓存表格示例,展示了 IP 地址与 MAC 地址的映射关系:
IP 地址 MAC 地址 状态 接口 192.168.1.1 00:1A:2B:3C:4D:5E 动态 eth0 192.168.1.2 00:1A:2B:3C:4D:5F 静态 eth0 192.168.1.3 00:1A:2B:3C:4D:60 动态 wlan0 192.168.1.4 00:1A:2B:3C:4D:61 动态 eth0
ARP 运行在哪一层
地址解析协议(ARP)实际上是一个介于数据链路层(第二层)和网络层(第三层)之间的协议。ARP 的功能是将网络层的地址(如 IPv4 地址)解析为数据链路层的地址(如以太网 MAC 地址)。虽然它处理的是网络层地址,但它运行在数据链路层,直接构建和发送数据链路层的帧。因此,它通常被认为是网络层的一个辅助协议,但技术上它操作在数据链路层。
5 - 路由算法 掌握 RIP 和 OSPF 的流程,可能在选择题中考察。
路由 这一节我们首先通过三个问题来认识什么是路由,接下来再在此基础上介绍路由协议。
什么是路由? 在一个 IP 网络中,数据包要从一个设备发送到另一个设备,中间通常需要经过多个路由器的转发。每个路由器就像是一个“交通指挥员”,决定数据包该往哪个方向走。
例如,PC-1(IP 地址为 192.168.1.5)通过如下图所示的网络向 PC-2(IP 地址为 10.1.1.5)发送数据包。当路由器 R1 接收到这些数据包时,它必须知道如何到达目标子网 10.1.1.0/24,否则将丢弃这些数据包。
路由器 R2 知道如何到达 PC-2,因为它有一个接口位于子网 10.1.1.0/24,并在路由表中包含了一条直接连接路由。然而,默认情况下,路由器 R1 和 R3 不知道如何到达 10.1.1.0/24。网络管理员需要配置一条静态路由,或者 R2 必须自动告知 R1 和 R3,它们可以将目的地为 10.1.1.0/24 的数据包发送到 R2,这种方式叫做动态路由。
路由器怎么知道往哪里转发? 路由器内部有一个叫 路由表 的数据结构,里面记录了各种目的 IP 地址该怎么走。这个表告诉路由器:当收到一个 IP Packet 时,应该把包发给哪个下一跳(下一个路由器)。
路由表如何建立? 路由表主要包含两种建立方式:
静态路由
(Static):人工手动配置,适合小型或稳定网络。动态路由
(Dynamic):通过路由协议自动学习和更新路由信息。两个路由表建立方式各自适用于不同的场景:
特点 静态路由 动态路由 配置方式 手动配置 自动学习和适应 适用性 适用于小型网络或需要特定路由策略的情况 适用于大型、复杂的网络 稳定性 较稳定 可能更灵活,但较复杂 自动故障恢复 不支持自动故障恢复 支持自动故障检测和恢复 网络变化响应速度 静态,不会自动适应网络变化 自动适应网络变化,响应速度较快 管理复杂性 相对简单 较复杂,需要更多计算和资源 适用情况 较小规模的网络,特定路由策略需求 大型、复杂网络,需要动态适应
路由协议 路由协议是一种 用于路由器之间交换网络路由信息的通信规则 。它的主要作用是让路由器能够自动学习和维护到达各个目的网络的路径,从而实现数据包的正确转发。
路由协议的主要作用有两个:
自动学习路由 :当网络结构发生变化(如新增路由器、链路断开),路由协议能自动更新路由表,省去了手动配置的麻烦。选择最佳路径 :如果到同一个目标有多条路径,路由协议能根据跳数、带宽、延迟等因素计算出最优路径,提高网络效率。路由协议分为不同种类,各自适用于不同场景,在介绍其分类前,首先要理解计算机网络中自治系统的概念。
自治系统 一个 自治系统(AS,Autonomous System)是由一个或多个网络组成的集合,这些网络 在统一的管理和策略控制下运行 ,并对外表现为一个单一的路由实体。
互联网是由无数个独立组织维护的网络组成的。每个组织内部的网络结构和路由策略不同,AS 的概念让每个组织可以作为一个独立的“区域”,既能自主控制路由,又能通过标准协议与外部沟通,保证整个互联网正常运作。
AS 通常由一个 ISP(互联网服务提供商)、大型企业、大学等拥有和运营。AS 之间通过外部路由协议互联,组成整个互联网。
分类 路由协议根据其使用范围的不同,可以分为两大类:内部网关协议(IGP,Interior Gateway Protocol)和外部网关协议(EGP,Exterior Gateway Protocol)。
内部网关协议:在单个组织或自治系统(AS)内部使用的路由协议,常见的 IGP 协议包括 RIP 和 OSPF。这些协议的主要作用是在一个组织的网络内部传播和更新路由信息,以实现高效的网络通信。 外部网关协议:用于在不同组织或不同自治系统之间交换路由信息。如今,唯一广泛使用的 EGP 协议是 BGP。BGP 的设计初衷是为了控制跨组织网络之间的路由信息传递,从而实现自治系统之间的互联和路径控制。 对比 重点掌握 RIP、OSPF、BGP 三个协议的区别,三者的对比如下表所示:
项目 RIP OSPF BGP 封装协议 UDP IP TCP 传播方式 逐跳 泛洪 TCP 会话间传递 更新内容 全表,周期性 链路状态,事件驱动 路径属性,事件驱动 拓扑视图 无全局视图 拥有全图 无全图,仅路径属性 计算算法 Bellman-Ford Dijkstra 策略驱动 收敛速度 慢 快 慢(但更稳定) 带宽占用 高(周期发全表) 中(仅更新变化) 低(TCP 控制精细) 扩展性 差 较好 极强 应用场景 小型网络 企业内部网络 运营商/跨 AS 互联
RIP RIP(Routing Information Protocol,路由信息协议)是一种基于距离向量的路由协议,主要用于小型和中型网络中的内部网关协议。
距离向量 一个典型的距离向量(Distance Vector)可以表示为一个列表,其中每个条目包含以下信息:
目的地(To):目标网络或子网的地址。 跳数/度量值(Metric):从当前路由器到达目标网络的代价,通常以跳数、延迟、带宽等度量标准表示。 下一跳(Next Hop):到达目标网络的下一跳路由器的地址。 可以观察到,距离向量其实是和,下表是一个距离向量示例:
目标网络 跳数 下一跳 192.168.1.0/24 0 A 192.168.2.0/24 1 B 192.168.3.0/24 1 C
RIP 规定 最大跳数为 15 ,超过 15 则认为目标网络不可达。
此外,路由器将自己的距离向量广播给其他路由器时,距离向量中的下一跳是可以省略的,因为接收者默认认为所有距离向量中的下一跳就是发送该向量的那个路由器本身。
距离向量算法 在距离向量算法中,
通过 周期性地 与相邻路由器 交换距离向量信息 ,每个路由器能够逐渐获得整个网络的拓扑信息,并更新其路由表 以选择最佳路径 。
具体而言,工作流程如下:
初始化 :每个路由器初始化其距离向量,只包含自己直接连接的网络,距离设为 0。周期性更新 :每个路由器周期性地(30s)将其距离向量广播给所有相邻的路由器。接收和更新 :每个路由器接收到相邻路由器的距离向量后,检查是否有新的或更短的路径。如果有,则更新自己的距离向量和路由表。收敛 :经过多次交换和更新后,所有路由器的距离向量和路由表最终会收敛到最优路径。最短路径计算方法 当路由器 $A$ 接收到来自相邻路由器 $B$ 发送的关于某个子网 $N$ 的距离向量 $V_{B}$ 时,它需要将 $V_{B}$ 中的跳数加一 然后与当前的到达子网 $N$ 的距离向量 $V_{A}$ 进行比较(需要加一的原因时从 $A$ 出发要经过 $B$,所以多了一跳),具体比较方式如下:
如果 $A$ 不存在到达子网 $N$ 的路由的话,直接添加 $V_{B}$ 进入路由表 如果 $V_{B}$ 的跳数小于 $V_{A}$ 的跳数的话,使用 $V_{B}$ 替换 $V_{A}$ 以上过程使用的算法名称叫做 Bellman-Ford 算法,是一种寻找单源最短路径的算法,单源最短路径的意思是从一个结点出发到达其他结点的最短路径。这个算法不会直接考察,了解这个算法的名称即可。
RIP 坏消息传得慢 假设一个路由器检测到它无法到达一个网络,这个信息可能需要比较长的时间才能被网络中的所有路由器感知到,这也是 RIP 的一个缺点。
举例说明:
假设有路由器 A、B、C 连接成一条线:A---B---C
。网络 X 连接到 C。
正常情况:A 知道通过 B 和 C 到达 X,跳数为 2。 C 和 X 之间的连接断开:C 检测到 X 不可达。 B 仍然会周期性地告诉 A,它可以通过 B 到达 X(因为 B 还不知道 C 和 X 之间的连接断开)。 A 收到 B 的更新后,会更新自己的路由表,认为通过 B 到达 X 的距离变大(可能是通过其他路径,或者仍然通过 B,但距离变为无穷大之前的某个值)。 这个过程会重复多次,直到 A 最终确定 X 不可达。 OSPF OSPF(Open Shortest Path First)是一种基于链路状态的内部网关协议(IGP),广泛应用于中大型网络中。
链路状态 路由器通过链路状态通告(LSA,Link State Advertisement)来了解其与邻居之间的链路状态。
在 RIP 路由算法中,路由器会定期将自己的距离向量发送给相邻的路由器。在 OSPF 中,也有类似的概念,不过这里传送的不是距离向量,而是链路状态通告。
路由器将其自身的状态和与邻居的链路状态信息打包成 链路状态包 (LSP,Link State Packet),并在网络中 洪泛传播 (flooding)。
每个 LSA 专注于描述一种类型的链路状态或网络信息。一个 LSA 包含的信息通常是:
路由器与某一特定链路的连接状态(如 Router LSA)。 某个网络的状态和与其相连的路由器信息(如 Network LSA)。 区域间或外部路由信息(如 Summary LSA 和 AS External LSA)。 链路状态数据库 链路状态数据库(LSDB,Link State Database)是 OSPF 协议中的一个关键组件,它存储了网络中所有链路状态通告(LSA)。通过 LSDB,每个路由器可以构建整个网络的拓扑图,并使用 Dijkstra 算法计算最短路径树。
这里举个例子方便大家理解 LSDB 的概念。
假设我们有一个简单的网络拓扑,包含 4 个路由器(R1, R2, R3, R4)和几个网络网段(NetA, NetB, NetC)。
在链路状态算法收敛之后,某个路由器的 LSDB 可能是如下这种形式:
LSA 类型 LSA ID 路由器 ID 链路 ID 链路类型 路径成本 连接的路由器或网络 Router 1 R1 NetA 广播链路 10 R2 Router 1 R1 NetC 广播链路 5 Router 2 R2 NetA 广播链路 10 R1 Router 2 R2 NetB 广播链路 15 R4 Router 2 R2 R3 点对点链路 20 R3 Router 3 R3 R2 点对点链路 20 R2 Router 3 R3 R4 点对点链路 10 R4 Router 4 R4 NetB 广播链路 15 R2 Router 4 R4 R3 点对点链路 10 R3
链路状态路由算法 距离向量算法(如 RIP)中,每个路由器只维护到各个目的网络的距离(如跳数)和下一跳信息,周期性将整个路由表发送给直接相邻的路由器,依赖邻居的更新来调整自己的路由表,缺乏全局视角,容易形成路由环路,收敛速度较慢,并且存在坏消息传得慢的问题。
而链路状态算法(如 OSPF)则由每个路由器通过链路状态广播(LSA)将本地链路信息 泛洪 给全网,所有路由器据此构建一致的网络拓扑图,然后独立运行 Dijkstra 最短路径算法计算路由,具备 全局视角 ,收敛速度快,稳定性好,适合大型复杂网络。
下图通过一个实例对比了 距离向量 和 链路状态 算法的区别:
R1 到 1.1.1.1 的 metric 为 5
更新我到 1.1.1.1 的 metric 为 10
R2 到 1.1.1.1 的 metric 为 10
更新我到 1.1.1.1 的 metric 为 15
(2) Flood R1's update unchanged
R1 到 1.1.1.1 的 metric 为 5
(3) Process R1's update in the background
R1 到 1.1.1.1 的 metric 为 5
R1 通过 metric 为 5 的链路连接到 R2
更新我到 1.1.1.1 的 metric 为 15
BGP BGP(Border Gateway Protocol,边界网关协议)是互联网的核心路由协议,用于在不同 自治系统 之间交换路由信息,属于路径向量(Path Vector)协议,目前广泛使用的版本是 BGP-4。
在 BGP 中,自治系统(AS)是互联网的基本单位,每个 AS 是一个由单个组织控制的网络集合(如一个运营商或大型企业)。AS 与 AS 之间的路由交换就是通过 BGP 完成的,AS 之内的路由交换通过内部网关协议完成。
BGP 原理 (1) 选择 AS 发言人
每个 AS 内部可以有多个 BGP 路由器,但对外通常由一个或多个 “BGP 发言人” 代表整个 AS 与其他 AS 进行路由信息的交换。 (2) 路径向量信息的交换
BGP 发言人之间通过 TCP 连接建立 BGP 会话,并交换路由前缀及其路径属性。 每个 AS 在接收到路径信息后,可以根据自身策略决定:是否接受该路由 是否将其传播给其他邻居 是否作为本地的最佳路径使用 (3) 路由更新与维护机制
BGP 是 事件驱动协议 ,不像 RIP 周期性更新,而是在以下事件发生时才发送 UPDATE 消息:新的可达前缀出现 现有前缀的属性发生变化 某个前缀不再可达(发送 Withdraw 消息) 6 - SDN 了解 SDN 控制平面、数据平面、接口以及流表基本概念,可能在选择题中考察一题。
软件定义网络 (SDN) 是一种新颖的网络架构,它将网络的控制功能从传统的网络硬件中解耦出来,并允许通过软件应用程序来进行集中式管理。SDN 提供了更高的网络灵活性,使得网络配置、优化、管理和调试都变得更加简单。
控制平面和数据平面 在 SDN 中,主要有两个关键的组件:数据平面 (Data Plane) 和控制平面 (Control Plane)。
数据平面 (Data Plane):这是网络中负责处理数据包的部分,通常是在交换机、路由器等设备上。 它基于控制平面提供的策略和规则,进行数据包的转发、丢弃或修改。 数据平面通常需要高效地执行操作,因为它直接影响网络的性能。 控制平面 (Control Plane):控制平面负责整个网络的决策和策略,确定如何处理在网络中流动的数据包。 在传统的网络设备中,控制平面直接嵌入在设备上。但在 SDN 中,这个控制平面被抽象为一个集中的软件控制器。 控制器与网络设备之间的交互是通过某些标准化的接口进行的,这样可以确保多厂商设备的互操作性。 接口 SDN 架构中的接口主要分为南向接口和北向接口。
南向接口 (Southbound Interface):这是 SDN 控制器与网络设备之间的接口。 它允许控制器下发流表到数据平面设备,并从设备获取信息。 OpenFlow 是最常用的南向接口协议,但还有其他协议也被使用。 北向接口 (Northbound Interface):这是 SDN 控制器与网络应用或上层服务之间的接口。 通过这个接口,应用程序可以请求网络服务或查询网络状态,并指导控制器进行相应的网络配置。 这个接口通常没有严格的标准,但通常提供 RESTful API 供开发者使用。 除此之外,还有东向接口 (East/West Interface),它用于 SDN 控制器之间的通信,特别是在多控制器的环境中。
流表 流表基本上是一个数据库或查找表,用于决定如何处理经过交换机的数据包。
在 OpenFlow 交换机中,可能有多个流表,并且数据包可能按照顺序经过这些流表。每个流表可能基于不同的规则或策略来处理数据包,这为网络设计提供了高度的灵活性。
流表的内容通常由 SDN 控制器动态管理和更新,这是通过南向接口(如 OpenFlow 协议)实现的。当网络的状态或策略发生变化时,控制器可以修改流表条目以适应新的需求。
流表中主要包含如下部分:
匹配字段 (Match Fields):这些字段描述了特定的数据包特征。例如,它可以匹配数据包的源地址、目的地址、端口号、VLAN 标签等。 当一个数据包到达交换机时,它的头部字段会与流表中的匹配字段进行比较,以决定哪个条目适用于该数据包。 优先级 (Priority):当多个流表条目都能匹配到一个数据包时,优先级最高的条目会被选中。 优先级使得网络管理员可以设计更为精确和特定的流规则。 计数器 (Counters):这些是用于收集统计信息的,如匹配到某个流条目的数据包数量。 计数器有助于网络监控和分析。 指令和动作 (Instructions & Actions):当一个数据包与流表条目匹配时,会执行相应的指令和动作。 常见的动作包括:转发数据包到特定的端口、丢弃数据包、修改数据包头部信息、发送数据包到控制器等。 7 - 网络层设备 掌握路由器的组成和功能,以及掌握路由表的画法,会在选择题和大题中考察。
路由器 路由器(Router)是一种实现网络互连的设备,在 OSI 网络模型中的第三层,提供 路由 与 转发 的两种重要机制;可以决定数据包从来源端到目的端所经过的路由路径,这个过程称为路由;将路由器输入端的数据包移至适当路由器输出端,称为转发。
组成 简单来说,路由器主要由以下软硬件组成:
硬件:CPU:运行操作系统,处理路由协议。 交换结构:高速传输数据包,连接输入输出端口。 网络接口:以太网、光纤等,收发数据包。 软件:操作系统:运行专用的嵌入式操作系统,提供路由协议支持、配置管理等功能。 路由表 路由表是路由器内部的数据结构,其中包含了有关网络之间如何进行路由的信息。路由表是根据路由协议(如 RIP、OSPF、BGP 等)和手动配置动态生成和维护的。
路由表包含如下信息:
目标网络(Network Destination):表示数据包要传递到的目标网络或主机。 子网掩码(Network Mask):确定了目标网络的范围,路由器使用它来匹配数据包的目标地址。 网关(Gateway):数据报转接口的 IP 地址。 接口(Interface):指明了路由器上哪个物理或逻辑接口将被用来转发数据包。 跳数/度量值(Metric):跳数或度量值是路由选择的一个度量标准,用来表示到达目标地址的成本。如果存在多条路由到同一个目的地,路由器通常会选择跃点数最低的路由。 功能 路由表的核心功能就是路由决策和分组转发,接收数据包,查询路由表,然后从某个端口转发出去。
分组转发 分组转发是指路由器根据数据包的目的 IP 地址和其内部的路由表,决定将数据包发送到下一个网络节点(下一跳)或目标设备的过程。其详细工作流程如下:
接收和解析数据包 查询路由表:路由器将目的 IP 地址与路由表中的条目进行匹配,使用最长前缀匹配(Longest Prefix Match, LPM)算法选择最佳路由。 处理 TTL 和其他字段:路由器减少数据包的 TTL(Time To Live)值,防止循环转发。 如果需要,执行其他处理,如分片、重组或 NAT。 转发数据包根据路由表查找结果,将数据包发送到指定的下一跳地址或直接连接的设备。 路由表在分组转发的时候,需要修改 IP 数据包中的哪些字段?
TTL:TTL 减 1。 checksum:因为 IP 首部有字段被修改,所以校验和需要重新计算。 如果是 NAT 路由器的话,需要修改 源 IP 或者 目的 IP 地址。 如果 IP 数据包长度超过输出链路的 MTU,则总长度字段、标志字段、片偏移字段都需要修改。 最长前缀匹配 当路由器收到一个数据包时,它会提取数据包的目的 IP 地址,并与路由表中的条目进行比较。最长前缀匹配的核心是选择与目的 IP 地址前缀匹配最长的路由表项,因为更长的前缀表示更具体的路由,优先级更高。
举个实际例子,假设有如下路由表:
网络前缀 子网掩码 下一跳 192.168.1.0/24 255.255.255.0 接口 A 192.168.0.0/16 255.255.0.0 接口 B 0.0.0.0/0 0.0.0.0 接口 C
对于目的 IP 地址 192.168.1.100
:
1.
与 192.168.1.0/24
匹配:前 24 位完全匹配。
2.
与 192.168.0.0/16
匹配:前 16 位匹配。
3.
与 0.0.0.0/0
匹配:默认路由,总是匹配。
由于 /24
是最长的前缀,路由器选择接口 A 作为下一跳。
NAT NAT(Network Address Translation,网络地址转换)用于将一个 IP 地址空间映射到另一个 IP 地址空间,通常用于解决 IPv4 地址不足的问题并提供一定的网络安全功能。NAT 的主要功能是将私有 IP 地址(例如局域网中的 192.168.x.x)转换为公网 IP 地址(或反之),以实现局域网设备与外部网络(如互联网)的通信。
Default Gateway 192.168.1.1
145.12.131.7 (Public IP Address)
NAT 表 上图中路由器的 NAT 表 的示例如下:
私有 IP 地址 私有端口 公有 IP 地址 公有端口 协议 连接状态 192.168.100.3 12345 145.12.131.7 54321 TCP ESTABLISHED 192.168.100.4 8888 145.12.131.7 54322 UDP NEW 192.168.100.5 15839 145.12.131.7 54323 TCP SYN_SENT 192.168.100.3 7890 145.12.131.7 54324 TCP ESTABLISHED
表中条目 包含如下内容:
内部私有 IP 地址:局域网中设备的私有 IP 地址。 内部端口号:发送数据包的私有网络设备所使用的端口号。 外部公有 IP 地址:路由器在广域网(WAN)侧使用的 IP 地址,通常是单个 IP 地址,但也可能有多个。 外部端口号:与内部端口号对应的,由 NAT 分配用于标识特定会话的公有端口号。 协议类型:数据包使用的协议(如 TCP、UDP 等)。 NAT 表的条目通常是动态创建的。当内部设备发起到外部网络的连接时,路由器会在 NAT 表中创建一个条目。通过 NAT 表,路由器可以将从外部网络收到的数据包转发到正确的内部设备。当 NAT 表中的条目因为超时或者 NAT 表容量限制而被删除时,新的数据包会触发创建新的 NAT 条目。
地址转化过程 NAT 的地址转化过程如下所示,分为数据包进入公网 或者 进入内网:
当内网 IP 数据包经过 NAT 路由器向外部发送时,其源 IP 地址和端口会被修改成公有 IP 地址和公有端口。 当 IP 数据包经过 NAT 路由器被发送往内网的某个机器时,其目的 IP 地址和端口会被修改位私有 IP 地址和私有端口。 私有 IP 地址 内网地址(私有 IP 地址)包含以下三个范围:
10.0.0.0/8
:从 10.0.0.0
到 10.255.255.255
,用于大型网络和企业网172.16.0.0/12
:172.16.0.0
到 172.31.255.255
,用于中型网络192.168.0.0/16
:192.168.0.0
到 192.168.255.255
,用于小型网NAT 的 优势 主要在于如下几点:
安全性增强:通过隐藏内部网络的真实结构,NAT 提供了一定程度的安全性,可以有效减少攻击者直接访问内部网络的机会。 地址空间节省:NAT 允许多个设备使用单一的公共 IP 地址,这有助于缓解 IPv4 地址枯竭的问题,尤其是在大规模部署中。 IPv4 地址重用:NAT 允许内部网络使用私有 IP 地址,因此可以重复使用相同的私有 IP 地址范围,而不会与其他网络冲突。 路由器 IP 地址 路由器的接口 IP 地址配置根据连接类型有所不同,以下是两种常见场景的说明:
当两个路由器通过直接链路相连时,通常使用小型子网进行 IP 地址分配,例如 IPv4 的 /30 子网。此子网提供两个可用的主机 IP 地址,分别分配给两个路由器的接口。这种配置高效利用 IP 地址资源,适用于点对点链路。
当路由器的接口连接到一个局域网(LAN)或子网时,该接口会被分配该子网内的一个 IP 地址。通常,路由器接口会配置为子网的第一个或最后一个可用 IP 地址,并作为该子网内设备的 默认网关 。例如,在一个 192.168.1.0/24 子网中,路由器接口可能被配置为 192.168.1.1 或 192.168.1.254。
通过合理配置 IP 地址,路由器能够有效实现网络互联和数据转发。