第9章 IP选路
所属:TCP/IP详解 卷1:协议 来源:TCP/IP详解 卷1:协议
本章介绍IP选路,包括选路表、选路原则、静态选路、默认路由和ICMP重定向等。
9.1 引言
什么是IP选路
IP选路(IP Routing):
- 决定IP数据报走哪条路
- 根据目的地址查路由表
- 找到下一跳
- 转发出去
选路决定数据报的路径。
选路和转发的区别
选路 vs 转发:
| 对比项 | 选路(Routing) | 转发(Forwarding) |
|---|---|---|
| 含义 | 决定走哪条路 | 把包发出去 |
| 做什么 | 建立路由表 | 查路由表转发 |
| 谁做 | 路由协议、管理员 | 每个路由器/主机 |
| 频率 | 相对慢 | 每个包都要 |
选路是决策,转发是执行。
本章讨论的内容
本章讨论的内容:
- 选路表
- 选路原则
- 静态选路
- 默认路由
- ICMP重定向
- 主机和路由器的选路
本章介绍IP选路的基本概念。
9.2 选路表
什么是选路表
选路表(Routing Table):
- 也叫路由表
- 保存路由信息
- 告诉数据报往哪发
- 每个主机和路由器都有
路由表保存路由信息。
选路表的条目
选路表的条目包含:
| 字段 | 说明 |
|---|---|
| 目的网络 | 目标网络地址 |
| 子网掩码 | 目标网络的掩码 |
| 下一跳 | 下一跳的IP地址 |
| 出接口 | 从哪个接口发出去 |
| 度量值 | 路由的优先级/开销 |
| 标志 | 各种标志 |
路由表有很多字段。
查看路由表
查看路由表的命令:
netstat -rn
route -n
ip route show输出例子:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
标志说明:
- U:路由可用(Up)
- G:网关路由(Gateway),下一跳是路由器
- H:主机路由(Host),目的是主机不是网络
- D:重定向创建的(Dynamically)
- M:被重定向修改的(Modified)
可以用命令查看路由表。
9.3 选路原则
最长匹配原则
最长匹配原则(Longest Match):
- 多个路由都匹配时
- 选掩码最长的那个
- 最具体的路由优先
为什么:
- 越具体越精确
- 主机路由比网络路由具体
- 优先用最具体的
最长匹配优先。
例子
例子:
路由表:
192.168.1.0/24 → 网关A
192.168.1.10/32 → 网关B
0.0.0.0/0 → 网关C
目的地址192.168.1.10:
- 匹配192.168.1.0/24(24位匹配)
- 匹配192.168.1.10/32(32位匹配)
- 匹配0.0.0.0/0(0位匹配)
- 最长匹配是32位
- 选网关B
目的地址192.168.1.20:
- 匹配192.168.1.0/24(24位匹配)
- 匹配0.0.0.0/0(0位匹配)
- 最长匹配是24位
- 选网关A
目的地址8.8.8.8:
- 只匹配0.0.0.0/0
- 选网关C
最长匹配优先。
其他原则
其他选路原则:
-
管理距离
- 不同路由来源优先级不同
- 直连 > 静态 > OSPF > RIP
- 优先级高的优先
-
度量值
- 同一种路由协议
- 度量值小的优先
- 比如跳数、开销等
还有其他优先级原则。
9.4 静态选路
什么是静态选路
静态选路(Static Routing):
- 管理员手动配置路由
- 不会自动变化
- 简单,适合小网络
静态路由是手动配置的。
静态路由的配置
配置静态路由:
route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1
ip route add 192.168.2.0/24 via 192.168.1.1删除静态路由:
route delete -net 192.168.2.0
ip route del 192.168.2.0/24用命令配置静态路由。
静态路由的优缺点
优点:
-
简单
- 配置简单
- 容易理解
-
稳定
- 不会随便变
- 可控
-
不占带宽
- 不用交换路由信息
- 节省带宽
-
安全
- 不用发路由更新
- 不容易被攻击
缺点:
-
不灵活
- 拓扑变了要手动改
- 不能自动适应
-
工作量大
- 大网络配置麻烦
- 容易出错
-
不能容错
- 一条路断了不会自动换
- 要手动改
静态路由简单但不灵活。
9.5 默认路由
什么是默认路由
默认路由(Default Route):
- 0.0.0.0/0
- 所有地址都匹配
- 但掩码最短
- 其他都不匹配时用
默认路由是最后的选择。
默认路由的作用
默认路由的作用:
- 不用配置所有路由
- 不知道的都发给默认网关
- 简化配置
例子:
- 主机只有一个出口
- 所有外网都发给默认网关
- 不用配置很多路由
默认路由简化配置。
默认网关
默认网关(Default Gateway):
- 默认路由的下一跳
- 主机的默认路由器
- 不知道往哪发就发给它
默认网关就是默认路由的下一跳。
9.6 ICMP重定向
什么是ICMP重定向
ICMP重定向(ICMP Redirect):
- ICMP差错报文的一种
- 类型5
- 告诉主机有更好的路由
- 主机更新路由表
重定向告诉主机更好的路由。
什么时候发重定向
什么时候发重定向:
场景:
- 主机发数据给路由器R1
- R1查路由表,发现下一跳是R2
- R2和主机在同一个网络
- 说明主机应该直接发给R2
- R1转发数据,同时发ICMP重定向给主机
- 主机收到后更新路由表
条件:
- 出接口和入接口是同一个
- 源IP和下一跳在同一个网络
- 源地址不是多播等
满足条件就发重定向。
重定向的类型
重定向的类型(代码):
| 代码 | 含义 |
|---|---|
| 0 | 对网络重定向 |
| 1 | 对主机重定向 |
| 2 | 对服务类型和网络重定向 |
| 3 | 对服务类型和主机重定向 |
有四种重定向。
重定向的例子
例子:
主机A ---- 路由器R1 ---- 路由器R2 ---- 网络N
|
同一个网络
过程:
- 主机A要发数据到网络N
- 主机A的默认网关是R1
- 发给R1
- R1查路由表,下一跳是R2
- R1发现R2和主机A在同一个网络
- R1转发数据给R2
- R1给主机A发ICMP重定向
- 主机A收到,更新路由表
- 以后去网络N直接发给R2
重定向让主机知道更好的路由。
9.7 主机和路由器的选路
主机的选路
主机的选路:
- 主机也有路由表
- 但通常比较简单
- 直连网络 + 默认路由
主机的转发:
- 目的是直连网络 → 直接发
- 其他 → 发给默认网关
- 一般不转发其他主机的包
主机的路由表比较简单。
路由器的选路
路由器的选路:
- 路由表更复杂
- 很多路由条目
- 运行路由协议
- 负责转发
路由器的功能:
- 接收数据报
- 查路由表
- 转发出去
- 可能运行路由协议
路由器的路由表复杂得多。
主机能不能转发
主机能不能转发:
- 默认不转发
- 可以开启IP转发
- 开启后就像路由器一样
开启转发:
sysctl net.ipv4.ip_forward=1为什么默认关闭:
- 主机一般不需要
- 安全考虑
- 防止误配置
主机默认不转发,可以开启。
9.8 小结
选路概述
-
什么是选路
- 决定走哪条路
- 查路由表
-
选路 vs 转发
- 选路:决策,建立路由表
- 转发:执行,查路由表发
选路表
-
条目内容
- 目的网络
- 子网掩码
- 下一跳
- 出接口
- 度量值
- 标志
-
查看命令
- netstat -rn
- route -n
- ip route show
选路原则
-
最长匹配
- 最具体的路由优先
- 掩码最长的优先
-
管理距离
- 不同来源优先级不同
-
度量值
- 同来源度量值小的优先
静态选路
-
什么是静态选路
- 手动配置
- 不会自动变
-
优缺点
- 优点:简单、稳定、安全
- 缺点:不灵活、工作量大、不容错
默认路由
-
什么是默认路由
- 0.0.0.0/0
- 最后选择
-
作用
- 简化配置
- 不用配置所有路由
-
默认网关
- 默认路由的下一跳
ICMP重定向
-
什么是重定向
- 告诉主机更好的路由
- ICMP类型5
-
什么时候发
- 出接口=入接口
- 源和下一跳同网络
-
类型
- 网络/主机
- 服务类型
主机和路由器
-
主机选路
- 简单
- 直连+默认
- 不转发
-
路由器选路
- 复杂
- 很多路由
- 负责转发
-
IP转发
- 主机默认关闭
- 可以开启
关键概念
-
路由表
- 保存路由信息
- 查路由转发
-
最长匹配
- 最具体的优先
- 掩码最长优先
-
静态路由
- 手动配置
- 简单不灵活
-
默认路由
- 最后选择
- 简化配置
-
ICMP重定向
- 更好的路由
- 更新路由表