第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

最长匹配优先。


其他原则

其他选路原则:

  1. 管理距离

    • 不同路由来源优先级不同
    • 直连 > 静态 > OSPF > RIP
    • 优先级高的优先
  2. 度量值

    • 同一种路由协议
    • 度量值小的优先
    • 比如跳数、开销等

还有其他优先级原则。


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

用命令配置静态路由。


静态路由的优缺点

优点:

  1. 简单

    • 配置简单
    • 容易理解
  2. 稳定

    • 不会随便变
    • 可控
  3. 不占带宽

    • 不用交换路由信息
    • 节省带宽
  4. 安全

    • 不用发路由更新
    • 不容易被攻击

缺点:

  1. 不灵活

    • 拓扑变了要手动改
    • 不能自动适应
  2. 工作量大

    • 大网络配置麻烦
    • 容易出错
  3. 不能容错

    • 一条路断了不会自动换
    • 要手动改

静态路由简单但不灵活。


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重定向给主机
  • 主机收到后更新路由表

条件:

  1. 出接口和入接口是同一个
  2. 源IP和下一跳在同一个网络
  3. 源地址不是多播等

满足条件就发重定向。


重定向的类型

重定向的类型(代码):

代码含义
0对网络重定向
1对主机重定向
2对服务类型和网络重定向
3对服务类型和主机重定向

有四种重定向。


重定向的例子

例子:

主机A ---- 路由器R1 ---- 路由器R2 ---- 网络N
         |
         同一个网络

过程:

  1. 主机A要发数据到网络N
  2. 主机A的默认网关是R1
  3. 发给R1
  4. R1查路由表,下一跳是R2
  5. R1发现R2和主机A在同一个网络
  6. R1转发数据给R2
  7. R1给主机A发ICMP重定向
  8. 主机A收到,更新路由表
  9. 以后去网络N直接发给R2

重定向让主机知道更好的路由。


9.7 主机和路由器的选路

主机的选路

主机的选路:

  • 主机也有路由表
  • 但通常比较简单
  • 直连网络 + 默认路由

主机的转发:

  • 目的是直连网络 → 直接发
  • 其他 → 发给默认网关
  • 一般不转发其他主机的包

主机的路由表比较简单。


路由器的选路

路由器的选路:

  • 路由表更复杂
  • 很多路由条目
  • 运行路由协议
  • 负责转发

路由器的功能:

  • 接收数据报
  • 查路由表
  • 转发出去
  • 可能运行路由协议

路由器的路由表复杂得多。


主机能不能转发

主机能不能转发:

  • 默认不转发
  • 可以开启IP转发
  • 开启后就像路由器一样

开启转发:

sysctl net.ipv4.ip_forward=1

为什么默认关闭:

  • 主机一般不需要
  • 安全考虑
  • 防止误配置

主机默认不转发,可以开启。


9.8 小结

选路概述

  1. 什么是选路

    • 决定走哪条路
    • 查路由表
  2. 选路 vs 转发

    • 选路:决策,建立路由表
    • 转发:执行,查路由表发

选路表

  1. 条目内容

    • 目的网络
    • 子网掩码
    • 下一跳
    • 出接口
    • 度量值
    • 标志
  2. 查看命令

    • netstat -rn
    • route -n
    • ip route show

选路原则

  1. 最长匹配

    • 最具体的路由优先
    • 掩码最长的优先
  2. 管理距离

    • 不同来源优先级不同
  3. 度量值

    • 同来源度量值小的优先

静态选路

  1. 什么是静态选路

    • 手动配置
    • 不会自动变
  2. 优缺点

    • 优点:简单、稳定、安全
    • 缺点:不灵活、工作量大、不容错

默认路由

  1. 什么是默认路由

    • 0.0.0.0/0
    • 最后选择
  2. 作用

    • 简化配置
    • 不用配置所有路由
  3. 默认网关

    • 默认路由的下一跳

ICMP重定向

  1. 什么是重定向

    • 告诉主机更好的路由
    • ICMP类型5
  2. 什么时候发

    • 出接口=入接口
    • 源和下一跳同网络
  3. 类型

    • 网络/主机
    • 服务类型

主机和路由器

  1. 主机选路

    • 简单
    • 直连+默认
    • 不转发
  2. 路由器选路

    • 复杂
    • 很多路由
    • 负责转发
  3. IP转发

    • 主机默认关闭
    • 可以开启

关键概念

  1. 路由表

    • 保存路由信息
    • 查路由转发
  2. 最长匹配

    • 最具体的优先
    • 掩码最长优先
  3. 静态路由

    • 手动配置
    • 简单不灵活
  4. 默认路由

    • 最后选择
    • 简化配置
  5. ICMP重定向

    • 更好的路由
    • 更新路由表

IP选路