网络层设备
路由器
路由器(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 地址空间,常见的情形是把局域网内部的 私有 IP 地址 转换为 公网 IP 地址(或将公网地址转换回私有地址),从而实现内部设备与外部网络(如 Internet)的互联。NAT 主要有以下功能:
- 解决 IPv4 地址匮乏:在 IPv4 中,公网地址资源有限。通过 NAT,整个局域网可以共享同一个或少量的公网 IP,极大地节约了地址分配。
- 提供安全屏障:外部主机只能看到 NAT 设备的公网地址,内部的真实 IP 地址被隐藏,形成了一个简单的防护层,降低了直接攻击的风险。
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(网络地址转换)中,数据包的地址会根据其流向进行相应的改写,主要可以分为两种情况:
从内网发送到公网
- 当内网主机向外部(Internet)发起通信时,数据包首先经过 NAT 路由器。
- 在此过程中,NAT 会把数据包的 源 IP 地址和源端口 替换为 路由器的公网 IP 地址和分配的公网端口(即进行源地址/端口转换,SNAT)。
- 这样,外部主机只能看到公网 IP+端口,而看不到内部私有地址,确保内网结构对外部保持透明。
从公网返回到内网
- 当外部主机向 NAT 路由器的公网 IP+端口发送响应报文时,报文同样会先到达 NAT 路由器。
- NAT 根据之前记录的映射表,将报文的 目的 IP 地址和目的端口 改写回对应的 私有 IP 地址和私有端口(即进行目的地址/端口转换,DNAT),随后将报文转发给内网的目标主机。
简要概括
- 出站(内网 → 公网):修改 源 地址/端口为公网地址。
- 入站(公网 → 内网):修改 目的 地址/端口为对应的私有地址。
通过上述两步映射,NAT 实现了内网主机对外通信的隐藏与地址复用,同时保证了返回流量能够正确回到发起请求的内部主机。
私有 IP 地址
在局域网(内部网络)中常用的 私有 IP 地址 共有三个连续的地址段。它们分别对应不同规模的网络,使用时只需在相应范围内任选一个未被占用的地址即可。
地址段(CIDR 表示) | 起始地址 | 结束地址 | 适用场景 |
---|---|---|---|
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 | 小型网络、家庭或小型办公网 |
路由器 IP 地址
路由器接口的 IP 地址 配置方式取决于其连接的网络类型。常见有以下两种场景:
点对点连接:当两个路由器通过专用链路直接相连时,通常为该链路划分一个小型子网,例如 IPv4 的
/30
。/30
子网提供 2 个可用主机地址,正好分配给两端路由器接口。- 这种方式能够高效利用地址空间,特别适合点对点链路。
连接到局域网或子网:当路由器接口接入一个局域网(LAN)或更大的子网时,需要分配该子网中的一个 IP 地址。
- 通常选择子网的第一个或最后一个可用地址,作为网络中设备的 默认网关。
- 例如,在
192.168.1.0/24
子网中,路由器接口常被配置为192.168.1.1
或192.168.1.254
。