1.路由表

路由信息最终要存储在用于路由器的主机或者专业路由器上,存放这些信息的地方称为路由表。其中包含三元素:目标地址,掩码,下一跳。

1.1.查询路由表的开销

有人认为查询路由表是一件和交换机查询MAC地址一样的事,那就大错特错了,查询MAC地址/端口对是一种固定的数据查找,MAC地址都是固定的48字节,而IP地址呢,自从CIDR出现以后,地址成了“无类”的了,因此任意位的掩码都能成为正确的掩码,另外,聪明的管理员想出了路由汇聚,这些家伙将负担转嫁给了系统的实现者,从而系统实现者必须实现“最长掩码”匹配,既然掩码是不固定的,因此查询就是不固定的,这是很麻烦的事。

2.转发表

数据包到达路由器的时候,要根据“指示”前往特定的端口,类似交换机的地址信息表,路由器上存放这个“指示”的地方叫做转发表

3.两个表的关系

3.1.联系

转发表直接作用于数据包,而路由表是转发表生成的依据,转发表通过路由表生成。一个特定的进程可以通过使用路由表中的信息,加上自身的主机方面的信息-比如网卡等信息-加以综合,得到一张转发表。路由信息和主机是没有任何关系的,它只描述网络链路状态和方向。

3.2.区别

两表存储的信息是不同的,路由表只存储三元素-目标,掩码,下一跳;而转发表存储更详细的信息,比如输出端口信息,比如标记信息等。转发表描述了主机方面的信息,在主机内部将一个数据包从一个端口导向另一端口,而路由表描述网络信息,将数据包从一个机器导向另一机器。

4.误区

当前很多人都懂一个系统的实现,这些人不外乎3类,第一类精通linux内核,第二类精通Cisco设备的配置,第三类精通Windows网络编程以及NDIS。三类人一般的交集很少,因此大部分熟悉Linux内核的人都不会去区分路由表和转发表,因为Linux内核本身就不区分这两个表,每到一个数据包都会查路由表(当然前面还有一个缓存...但这不是转发表);因此熟悉Cisco的家伙会认为两个表是一定要区分的,否则MPLS怎么实现?熟悉Windows核心的人呢?可能并不关心这些,因为Windows几乎不用于路由器。

5.区分二表的好处之实例

MPLS是区分路由表和转发表的一个明显的例子,首先声明,MPLS是一个网络,而不是运行特定协议的一个节点。在MPLS中,完全通过标签进行数据包转发,在MPLS网络可用于数据业务之前(中间也可以通过标签分发协议动态调整),MPLS转发表就建好了,它的表项包含三元素:来源数据自带标签/转发到的端口/转发出去携带的标签。这个表项是通过路由表建立的,我们将之视为转发表。实现MPLS需要在入口路由器上为数据包单独打上一个标签,这样直到出去MPLS网络,数据包就可以快速被转发了,省去了直接查询路由表的开销。

6.Linux中通过NAT原理配置转发表

如果管理员能事先“打通一条路”,那么就可以在每一个路由器的入口上配置DNAT,然后在其出口处配置SNAT,从而实现一个标准的点对点的IP链路,每一个节点都以为数据要发往“下一跳”,而不是越过下一跳的“远端机器”。由于NAT基于连接,它为无方向的IP网络增加了方向性,因此配置SNAT后就无需再配置反向路由了。

     鉴于上述的方式,如果我们能在DNAT信息中识别标签信息然后直接确定输出端口,同时在输出端口的SNAT中封装上新的出口标签,无需在进入路由模块,这就是一个MPLS实现。然而目前的标准Linux内核的Netfilter中并没有如此实现。

7.优势

除了可以实现MPLS等特定的专用线路网络之外,转发表和路由表分开的最大好处在于其可以使用硬件实现转发表,从而实现高速链路层转发,而路由表很难用硬件实现,原因就是它不是精确匹配的,而是“最长前缀”匹配的,这里面充满了变数。

Internet路由-主机路由表和转发表的更多相关文章

  1. 配置主机路由表(route)(两)

    我们谈到了路由在互联网为基础的时间问题,必须有一个路径之间的两个主机可通信 TCP/IP 合约,否则就不能是有线啊! 一般来说.只要有一个网络接口,的接口将产生的路由.例如,在哥斯达黎加的内部主机鸟有 ...

  2. TCP/IP 主机路由表获取

    介绍在IP协议中主机的路由表获取方法: 主机初始化路由表: 直接相连路由:接口初始化时,自动获取直连主机和网络的路由信息 间接相连路由:通过执行route命令,手动初始化路由表 ICMP路由请求和通告 ...

  3. Linux 内核协议栈 学习资料

    终极资料 1.<Understanding Linux Network Internals> 2.<TCP/IP Architecture, Design and Implement ...

  4. Docker容器跨主机通信之:直接路由方式

    一.Docker网络基本原理 直观上看,要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)与外界相通,并可以收发数据包:此外,如果不同子网之间要进行通信,需要额外的路由机制. Docker ...

  5. Internet/Custom路由配置——网络测试仪实操

    一.测试说明以及功能原理 本文主要介绍Internet/Custom路由配置方法以及实验: ◆作用:可以通过此功能模拟注入不同百分比掩码的路由 ◆特点:只针对路由协议(目前RIP协议不支持,因为RIP ...

  6. ip route rule 路由策略 高级路由 捆绑 网桥

    http://lwfs.net/2005/11/28/10/ #!/bin/bash IP0= IP1= GW0= GW1= NET0= NET1= DEV0=eth0 DEV1=eth1 # com ...

  7. 第五章 Internet协议

    写在开头: 埋头学习也差不多半个月了,达到了这半个月每天都会去图书馆的目标.确实挺忙的,不管在学习上,部门社团上,党建上.有时候为了多学一些总是会挤掉了其他事情的一些时间.但是自己时刻提醒着自己不要太 ...

  8. linux 路由表设置 之 route 指令详解

    使用下面的 route 命令可以查看 Linux 内核路由表. # route Destination     Gateway         Genmask Flags Metric Ref     ...

  9. linux路由表

    Linux 内核的路由表通过 route 命令查看 Linux 内核的路由表: [root@VM_139_74_centos ~]# routeKernel IP routing tableDesti ...

随机推荐

  1. MongoDB 3.4 高可用集群搭建(二)replica set 副本集

    转自:http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html 在上一篇文章<MongoDB 3.4 高可用集群搭建(一):主从模式&g ...

  2. 偏好设置(Preference)

    一.Preference简介 (1)偏好设置是专门用来保存应用程序的配置信息的, 一般情况不要在偏好设置中保存其他数据.如果利用系统的偏好设置来存储数据, 默认就是存储在Library/Prefere ...

  3. 部署和调优 1.5 vsftp部署和优化-1

    系统自带的ftp服务软件.vsftpd 安装vsftpd yum install -y vsftpd 启动vsftpd /etc/init.d/vsftpd start 如果启动失败,可能是端口被占用 ...

  4. Win 2008 R2安装SQL Server 2008“性能计数器注册表配置单元一致性”失败的解决办法

    Win 2008 R2安装SQL Server 2008“性能计数器注册表配置单元一致性”失败的解决办法(2011-02-23 19:37:32) 转载▼   今天在惠普服务器上安装数据库2008时, ...

  5. 给Activity切换过程添加动画效果

    首先,在资源文件中定义一些动画效果 例如: <scale android:duration="@android:integer/config_mediumAnimTime" ...

  6. 推荐两款富文本编辑器:NicEdit和Kindeditor

    做过Web开发的朋友相信都使用过富文本编辑器,比较出名的CuteEditor和CKEditor很多人应该已经使用过,在功能强大的同时需要加载的东西也变得很多.下面要推荐的两款富文本编辑器都是使用JS编 ...

  7. 389. Find the Difference 找出两个字符串中多余的一个字符

    [抄题]: Given two strings s and t which consist of only lowercase letters. String t is generated by ra ...

  8. java中的全局变量与静态变量的区别与联系?有时候为什么专门定义静态变量。(标题党~~)

    static代表“每个类一个”而不是“每个对象一个”.即静态变量是类的所有对象共有的. 1 static JFrame f; static MyDrawPanel ml; 整个应用程序如下: 定义在p ...

  9. Java Calendar 类的时间操作.RP

    JavaCalendar 类时间操作,这也许是创建和管理日历最简单的一个方案,示范代码很简单. 演示了获取时间,日期时间的累加和累减,以及比较. 原文地址:blog.csdn.NET/joyous/a ...

  10. Java接口基础

    接口(interface) 1.接口体中包含常量的声明(没有变量)和抽象方法两部分.接口体中只有抽象方法,没有普通的方法,而且接口体中所有的常量访问权限一定是public,而且是static常量(允许 ...