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. Git命令之创建版本

    安装 安装好Git后,将会在桌面生成 这样一个图标 运行后将会是类似控制台程序的黑色窗口,其中mingw64(参考百度百科).这样的话就可以在输入命令 例如 :git 见到下图有详细的用法表示成功否则 ...

  2. ManualResetEvent 用法

    第一.简单介绍 ManualResetEvent 允许线程通过发信号互相通信.通常,此通信涉及一个线程在其他线程进行之前必须完成的任务.当一个线程开始一个活动(此活动必须完成后,其他线程才能开始)时, ...

  3. PHP类(三)-类的封装

    设置私有成员 使用private关键字来设置私有成员,完成对成员的封装,封装后的成员在对象的外部不能被访问,如果访问会出现错误,在对象的内部能访问被封装的成员属性和方法. <?php class ...

  4. 第五章 JVM调优(待续)

    Java虚拟机内存模型 JVM内存分配参数 垃圾收集基础 常用调优案列和方法 实用JVM参数 实战JVM调优

  5. Unencapsulate SVM root mirror (ZT)

    http://www.seedsofgenius.net/solaris/quick-reference-unencapsulate-svm-root-mirror Often times admin ...

  6. JVM中存储类信息的三个表格

    摘自:<Java Performance>第三章 Internal Class Loading Data The HotSpot VM maintains three hash table ...

  7. jackson 进行json与java对象转换 之四

    jackson简单使用,对象转json,json转对象,json转list   POJO序列化为json字符串: 准备一个POJO: @JsonIgnoreProperties(ignoreUnkno ...

  8. oracle——pl/sql 查询中文乱码

    1.查看服务器端编码select userenv('language') from dual;我实际查到的结果为:AMERICAN_AMERICA.AL32UTF82.执行语句 select * fr ...

  9. C# 连接Mysql 字符串

    Database=XXX;Data Source=XXX;User Id=XXX;Password=XXX;pooling=false;CharSet=utf8;port=3306

  10. Mysql Hive 通用的行列转换

    就是简单的一个字符串拼接,意义和所用场景自己体会下 insert into table agent_library1 select concat_ws(':',collect_set(name)) a ...