路由器配置中两种不同的出口方式

  对于路由器而言,我们可以根据不同的情况来采用不同的出口方式,尤其是在一些高端路由组成的网络环境中,更是需要设置好方面,这样才能保障一个网络的稳定运行,在配置静态路由时,可以使用下一跳地址,也可以使用出站接口。

  使用下一跳IP地址和使用出站接口会影响路由器的处理方式。

  一、使用出站接口时,那么路由将被作为直连网络输入路由表在串口上使用出站接口和使用下一跳IP没有什么区别,仅仅少了一次寻找出站接口的递归查询,若在以太口上使用出站接口,则可能导致广播网络上出现过多的流量,而且还有可能耗尽路由器的内存。

  二、使用下一跳IP地址,在串口和以太口上使用下一跳IP地址时,路由器的处理方式相同,通过查询相应的路由条目找到下一跳地址,然后根据下一跳 IP地址递归查询到出站接口,若是在串口上,无需查询下一跳IP的相应的二层地址,因为在串口上就一个邻居,直接发送即可,单播以及组播二层地址为 0x0f,广播二层地址为0x8f,若是在以太口上,则发送ARP查询,来获得下一跳IP的MAC地址,然后发送数据包。

  三、假设路由A上有一个网段1:192.168.1.0/24,路由B上有一个网段2:192.168.2.0/24。

  路由A上的路由:ip route 192.168.2.0 255.255.255.0 e0/0若网段1上的主机想要访问网段2上的主机192.168.2.1,因为路由A认为自己和192.168.2.0网段直连,所以路由器会发ARP报 文去查询192.168.2.1的ARP地址,路由B收到ARP查后,查询自己的路由表发现自己可以到达该网段,于是路由B会发送一个包含自己E0/0的 MAC地址的ARP给路由A,于是路由A就得到了192.168.2.1的MAC地址。

  四、实际上是路由B欺骗了路由A,这就是proxy-arp,默认开启,并缓存该条目,若网段1上的主机要访问192.168.2.2,则会重复以 上步骤并缓存该主机的MAC地址,而192.168.2.1和192.168.2.2的MAC地址都是路由B的 E0/0的MAC地址,若网段2上有大量的主机,则路由A上可能会存在大量的ARP缓存条目,会耗尽路由器的内存。

  而使用下一跳时,只会存在一条和下一跳IP对应的ARP缓存,另外在IPv6中,静态路由的出站接口不能是以太口,因为IPv6不存在proxy-arp,取而代之的是NDP。

时间: 2024-10-15 02:18:17

路由器配置中两种不同的出口方式的相关文章

jsp页面中两种方法显示当前时间的简单实例_JSP编程

在jsp页面实现显示当前的日期时间,我们可以用一下两种方式实现: 1. 通过在jsp页面添加Java代码实现,主要代码如下所示 java.text.SimpleDateFormat simpleDateFormat = new java.text.SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); java.util.Date currentTime = new java.util.Date(); String time = simpleDateForm

windows-有谁知道这两种exe软件启动方式的区别是什么吗?

问题描述 有谁知道这两种exe软件启动方式的区别是什么吗? windows下开机自启动一个软件,一个是放在启动项里启动,一个是写入注册表中启动,这两者原理的区别是什么? 解决方案 这个是历史问题造成的. 在Windows 3.1中 来个图吧.你看到,有一个叫Startup的组,这是Windows 3.1的启动程序的方式.那时候还没有注册表.注册表是Windows 95引入的. 但是出于兼容性的需要,微软以后又不得不保留这个"启动",这就造成了开机启动有多个方式.除了你说的这两种之外,其

c++下面两种构造函数的实现方式有什么区别?为什么?( 请说详细点 谢谢)

问题描述 c++下面两种构造函数的实现方式有什么区别?为什么?( 请说详细点 谢谢) c++下面两种构造函数的实现方式有什么区别?为什么?( 请说详细点 谢谢) 一:Savingaccount::Savingaccount(int date,int id,double rate):id(id),balance(0),rate(rate),lastdate(date),accumulation(0) { //构造函数的第一种实现方式 cout<<date<<"t#"

c++-跳转表用两种不同的实现方式,为什么效率差别大?

问题描述 跳转表用两种不同的实现方式,为什么效率差别大? 题目更新得更详细了,请留意: 在书上看到的跳转表,实现的方式是每层都用一个特殊的List,它的节点连接上下左右: template <typename T> struct QuadlistNode { T data; QuadlistNode<T>* pred; QuadlistNode<T>* succ; //前驱.后继 QuadlistNode<T>* above; QuadlistNode<

python中两种判断和抓取网页编码的方法

在web开发的时候我们经常会遇到网页抓取和分析,各种语言都可以完成这个功能.我喜欢用python实现,因为python提供了很多成熟的模块,可以很方便的实现网页抓取. 但是在抓取过程中会遇到编码的问题,那今天我们来看一下如何判断网页的编码: 网上很多网页的编码格式都不一样,大体上是GBK,GB2312,UTF-8等. 我们在获取网页的的数据后,先要对网页的编码进行判断,才能把抓取的内容的编码统一转换为我们能够处理的编码,避免乱码问题的出现. 下面介绍两种判断网页编码的方法: 方法一:使用urll

javascript原型继承中两种方法的简介和对比

在实际的项目中,我们通常都是用构造函数来创建一个对象,再将一些常用的方法添加到其原型对象上.最后要么直接实例化该对象,要么将它作为父类,再申明一个对象,继承该父类. 而在继承的时候有两种常用方式,今天我们就来稍作探讨 //父类 function Person(name){ this.name = name; }; // 子类 function Student(sex){ Person.apply(this,arguments); //继承父类的构造函数 this.sex=sex; }; 1,继承

Java Swing中两种设置背景图(容器图片)

在java swing中需要为容器添加图片,或者背景图片. 提供两种简单的解决方案,一种利用JPanel,另一种利用JLabel 1.JPanel(源代码) [java] view plaincopy package oo;      import java.awt.Graphics;   import java.awt.Image;   import java.io.File;      import javax.swing.ImageIcon;   import javax.swing.JF

mockito中两种部分mock的实现,spy、callRealMethod

  什么是类的部分mock(partial mock)?A:部分mock是说一个类的方法有些是实际调用,有些是使用mockito的stubbing(桩实现).   为什么需要部分mock? A:当需要测试一个组合方法(一个方法需要其它多个方法协作)的时候,某个叶子方法(只供别人调用,自己不依赖其它反复)已经被测试过,我们其实不需要再次测试这个叶子方法,so,让叶子打桩实现返回结果,上层方法实际调用并测试. mockito实现部分mock的两种方式:spy和callRealMethod() spy

解析php中两种缩放图片的函数,为图片添加水印_php技巧

有两种改变图像大小的方法.(1):ImageCopyResized() 函数在所有GD版本中有效,但其缩放图像的算法比较粗糙.(2):ImageCopyResampled(),其像素插值算法得到的图像边缘比较平滑.质量较好(但该函数的速度比 ImageCopyResized() 慢).两个函数的参数是一样的.如下:ImageCopyResampled(dest,src,dx,dy,sx,sy,dw,dh,sw,sh);ImageCopyResized(dest,src,dx,dy,sx,sy,d