路由0--概念

路由器:简单来说,就是一个有多个网口(NIC)的网络设备,然后上面运行一套软件,把数据从一个网口转发到另一个网口。

路由表:如何决定数据转发到哪个网口?或是如何决定数据是提交到本机还是进行转发?这需要记录一些信息,这些信息就放在路由表中(又称为Forwarding Information Base 或FIB)。此表只是一组路由的集合。而一个路由是由几个参数构成,这些参数决定数据如何到达目的地,这些参数包含:

目的网络:是路由查找最重要的参数,指明通过此路由表可以达到的网络地址
发送设备:发送到目的网络用到的网口
网关:目的地址不在局域网内,要通过中间路由器到达,这个就是指向中间路由器的
大部分主机只有一个NIC,这些主机一般配置为:当要到达非本局域网的地址时,使用默认网关。

每一台主机都有一个路由表,在发送和接收数据时,都要访问到它。路由器与主机的差别主要是路由器上运行特殊的软件(如routing protocols)。

一些术语:

Internet Service Provider (ISP):可以访问互联网的公司或组织

Forwarding Information Base (FIB):路由表

Symmetric routes and asymmetric routes:从A到B的路由和从B到A的路由相同,称为对称路由,不相同,称为不对称路由

地址的分类

classFirst addressLast addressLeftmost bits of addressesSize of network address
component
Size of host address
component
Number of hosts (including
network and broadcast addresses)
A0.0.0.0127.255.255.2550----82416,777,216 (224)
B128.0.0.0192.255.255.25510---161665,535 (216)
C192.0.0.0223.255.255.255110--248256 (28)
D (Multicast)224.0.0.0239.255.255.2551110-   
E (Reserved)240.0.0.0255.255.255.25511111   
可路由和不可路由地址

下面的地址只能在局域网内使用,不能用于提供网络服务。其中127.0.0.0/8子网只能用于本机(环回接口)。

10.0.0.0/81 x Class A
172.16.0.0/16 to 172.31.0.0/1616 x Class B
192.168.0.0/16256 x Class C
127.0.0.0/8 (Loopback)1 x Class A
Scope

路由和IP都会被分配一个范围

Host : 只用在本机,如: 127.0.0.1

Link:只在局域网内部
Universe:随处使用(默认)
在linux中,IP地址是属于主机的,并不是属于某个网口的。

默认网关:经常为 0.0.0.0/0。linux不限制默认网关的数量。

Directed Broadcasts:指向远程子网的广播地址。这个可能会引起Denial of Service (DoS)攻击。

Primary and Secondary Addresses:当配置一个IP地址时,必须要有一个子网掩码。如果没有子网掩码,路由就不知道如何到达那个接口。一个地址如果被设置到一个子网里,这个子网己经有了一个IP地址,则新的地址被当作第2个IP地址。这也意味着两个地址在一个子网上。一个接口可以有多个Primary地址和Secondary地址。但一个相同的子网掩码只有一个Primary地址(可有多个Secondary地址).

当从本机产生数据要发送,选择源地址时,只能用Primary地址
删除一个Primary地址和,所有Secondary地址都被删除。也可以配置(/proc)删除一个Primary地址,让一个Secondary地址变成Primary地址
Primary addresses contribute to the entropy of the CPU that happens to run the code that applies the configuration.

linux默认支持两个路由表:

保存本机地址,所有目的地为此表中的地址的数据包都会提交给本机(如:所有的listen to 的地址)。

除本机地址的其它地址,由用户配置或路由协议动态插入。

根据路由表中不同的值可以有不同的行为:

  1. Black hole
    丢弃
  2. Unreachable
    丢弃并产生ICMP,向发送主机报主机末到达的错误
  3. Prohibit
    丢弃并产生ICMP,向发送主机报packet filtered的错误
  4. Throw
    用在policy routing上,放弃当前路由表,采用下一个

路由表有两个缓冲

  1. 协议相关的缓冲
  2. 协议无关的缓冲(DST)

随然可以有多个路由表,但只有一个缓冲。

缓冲里的项目直接用IP地址,而路由表中的项目是通过子网。

下面是数据传输和接收时的路由:


上图中有几点:

  1. ARP不需要路由,但要访问路由表做一些检测
  2. IP-over-IP协议,当IP IPhandler接收到一个IP-over-IP包时,会把它重新送到IP层,这时,要再一次访问路由表
  3. 路由一个包一般只要访问一次路由表就可以了。也有特殊的像IP-over-IP要访问多次

Policy Routing

支持255个路由表,主要是允许用户可以通过更多的参数配置路由而不是仅仅依靠目标地址。

Policy可以被设置一些类型,可以加快决定使用哪个路由表的速度。如:当一个Policy被设置为UNREACHABLE类型,内核直接返回一个ICMPHOST UNREACHABLE信息,而不用再去查找路由表了。

可通过下面的参数选择路由表:

  1. 目标地址和源地址(都要有子网掩码)
  2. 接收设备
  3. TOS,当数据的类型被定义时(bulk data, interactive)
  4. Fwmark,防火墙

Multipath路由

对于给定的目标地址可以有多条next hops。这样做原因之一是当一个出错,可以用另一个,另一原因是增加带宽

每一个条目都被分配一个weight,可根据它来选择,如果weight相同,选最先找到的。有多种算法用于选择当中的一条路由。

当接收和发送数据时,几个模块会涉及到:路由,防火墙,Traffic Control,如下图

Realm是一个数值,可以被赋给policies和路由。有两种类型,ingress realm和egress realm。

因为路由和policies都可以设置realm,当两者都设置时,使用时以路由的值为优先考虑。当realm没有被设置时,内核会计算一个,并且检查能否使用同一条路径上相反的realm。

路由表可能变化的三种情况:

  1. 用户设定(ip route, route)
  2. 路由协议动态设定
  3. 接收到ICMP重定向消息,内核进行了重新配置


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值