IP Routing(IP路由)
1、简介
1)定义
- 在 直连(point-to-point link)或 共享网络中(on a shared network):IP报文直接发送给 目的主机
- 在 非直连或共享网络:报文发送给默认路由器,由路由器进行转发
2)主机和路由器的区别
IP层可被配置为主机或路由器,两者区别如下:
- 主机:不可以转发报文
- 路由器:可以转发报文
3)特点
- 基于IP层
- 可以发送来自TCP、UDP、ICMP或IGMP的报文
- 或者是接收来自网络接口的报文
2、路由表
1)linux路由表
1、目的IP:可以是完整的 主机地址 或 网络地址,由标志位进行指定
- 主机地址:非0的 主机ID(host ID),表示特定的主机
- 网络地址:全0的 主机ID(host ID),表示网络号中的所有主机
2、下一跳路由(网关)或直连网络:非目的地址,而是可以发送或转发报文的地址
3、标志位:
- 定义目的IP为 网络地址 或 主机地址
- 定义下一跳为 网关 或 直连接口
FLAGS:
- U:路由是活动的
- G:路由指向网关
- H:路由指向主机
- D:路由通过重定向创建
- M:路由通过重定向修改
2)win 路由表
名称 | 说明 |
---|---|
网络目标(目的地址) | 主机地址 或 网络地址 |
网络掩码 | 子网掩码 |
网关 | 下一跳的地址。 在链路上(On-Link):表示网关和接口IP一致,就会显示在链路上 |
接口 | 主机用于发送数据包的接口(必须和网关在同一子网) |
跃点数(跳数/Metric) | 到达目的地址经过的跳跃次数。跳数越低,优先级越高 |
目的地址 | 说明 | 解释 |
---|---|---|
0.0.0.0/0 | 缺省路由 | 当系统收到不在路由表中的目的地址时,将通过10.9.144.14接口发送到网关 10.9.144.51 |
10.9.144.0/22 | 直连网段路由 | 当收到发往目的地址的数据包时,将通过10.9.144.14发送出去 |
10.9.144.14/32 | 本机网卡IP | 当收到发往本机的数据报时,系统将把该报文收下 |
10.9.147.255/32 | 本地广播路由 | 当系统收到发送给直连网段的本地广播数据包时,将通过10.9.144.14发送出去 |
127.0.0.0/8 | 本地换回地址 | 当收到发往目标地址的数据包时,系统将接收该网段的所有数据包 |
224.0.0.0/4 | 组播路由 | 当系统收到组播数据包时,将通过10.9.144.14接口发送组播报文 |
255.255.255.255/32 | 广播路由 | 当系统接收到广播路由信息时,将通过10.9.144.14接口发送出去 |
从路由表可以看出:
- IP路由是逐跳完成的,路由表中不会纪录所有目的地址
- IP路由通过下一跳,将报文发送出去,下一跳被认为离目的地址更近
- 指定到网络的路由,而不必指定到每个主机的路由,让路由表条目更少
3、路由流程
举例1:bsdi发送报文给主机sun
- IP层收到来自高层的报文,检查路由表
- bsdi 发现目的地址(140.252.13.33)是直连的网络(在Ethernet 140.252.130.0上),找到该路由进行匹配
- 报文被发送到以太网驱动,通过以太网发送给主机 sun,目的IP地址为sun的IP(140.252.13.33),以太网头部为 sun 的以太网mac地址(48位,通过ARP协议获得)
举例2:bsdi发送报文给主机 ftp.uu.net(192.48.96.9)
- bsdi 查找路由表,发现未匹配到精细路由和网段路由,使用默认路由,将IP报文发送给下一跳网关(路由器sun)
- 目的IP为192.48.96.9
- 链路层mac地址为sun的以太网接口地址
- 当sun收到报文后,发现目的IP不是自己,则匹配默认路由,将IP报文进行转发给路由器netb(140.252.1.183)
- 报文通过直连的SLIP(串行线路)链路,将报文进行封装
- SLIP封装无链路层头部(mac地址)
- 当netb收到报文后
- 检查目的IP不是自己,充当路由器,匹配默认路由,将报文转发给gateway(140.252.1.4)
- 以太网140.252.1通过发送ARP报文,获取gateway的mac地址
- gateway执行和前两个路由器相同的步骤,匹配默认路由,将报文发送给下一跳网关140.252.104.2
4、总结
1)发送报文流程
- 首先,匹配路由表中的精细路由(network ID 和 host ID)
- 如果存在,则发送给指定的下一跳网关或直连的接口
- 当匹配路由表中的114.114.114.114/32目的IP时,直接通过eth0接口发送给172.16.112.1网关
- 然后,匹配路由表的网络号
- 如果存在,则发送给指定的下一跳网关或直连的接口(同一个网络号中的所有主机,都可以通过这条路由去匹配)
- 当匹配路由表中的直连172.16.30.0/24路由时,通过swtun1接口发送给10.0.0.170网关
- 最后,匹配路由表中的默认路由
- 当匹配不上路由表中的精细路由或网络号时,匹配默认路由0.0.0.0/0,通过eth0接口,发送给172.16.112.1网关
- 如果全部匹配不上,则会产生 “host unreachable 主机不可达”或者是“network unreachable 网络不可达”错误
2)接收报文流程
- 接收到报文后,查询路由表,检测是否为自己的IP,或者是广播地址
- 如果是,则指定IP头部的协议字段,发送给协议栈
- 如果不是
- 假设IP层被配置为路由器,则直接进行转发
- 如果不是,则默默丢弃该报文
3)总结
- 在大多数情况下,主机和路由器都通过匹配默认路由,将报文发送给下一跳,如例子所示
- 目的IP不会发送变化
- 每一跳的链路层头部都不同,均为下一跳的mac地址,通过ARP协议获得
参考资料
1、书籍《TCP/IP Illustrated, Volume 1: The Protocols, W. Richard Stevens.》
2、Windows路由表详解
3、Windows route 命令