精华内容
下载资源
问答
  • 阐述了基于覆盖网络的内容路由技术的网络模型和系统框架,将基于覆盖网络的内容路由技术和传统的CDN路由技术在响应延迟、可扩展性和可部署性方面进行分析比较,表明基于覆盖网络的内容路由技术充分利用现有的网络...
  • 静态路由 ISP路由 策略路由 OSPF路由

    千次阅读 2018-11-15 14:43:53
    静态路由(英语:Static routing),一种路由的方式,路由项(routing entry)由手动配置,而非动态决定。与动态路由不同,静态路由是固定的,不会改变,即使网络状况已经改变或是重新被组态。一般来说,静态路由是...

    静态路由(英语:Static routing),一种路由的方式,路由项(routing entry)由手动配置,而非动态决定。与动态路由不同,静态路由是固定的,不会改变,即使网络状况已经改变或是重新被组态。一般来说,静态路由是由网络管理员逐项加入路由表。使用静态路由的另一个好处是网络安全保密性高。大型和复杂的网络环境通常不宜采用静态路由。

    CIDR(无类别域间路由,Classless Inter-Domain Routing)是一个在Internet上创建附加地址的方法,这些地址提供给服务提供商(ISP),再由ISP分配给客户。

    ISP(Internet Service Provider),互联网服务提供商,即向广大用户综合提供互联网接入业务、信息业务、和增值业务的电信运营商。

    策略路由,是一种比基于目标网络进行路由更加灵活的数据包路由转发机制。大体上分为两种:一种是根据路由的目的地址来进行的策略称为:目的地址路由;另一种是根据路由源地址来进行策略实施的称为:源地址路由!随着策略路由的发展现在有了第三种路由方式:智能均衡的策略方式。

    策略路由在中国最大的应用莫过于用于电信网通的互联互通的问题了,电信网通分家之后出现了中国特色的网络环境,就是南电信,北网通,电信的访问网通的线路较慢,网通访问电信的也较慢!人们就想到了接入电信网通双线路,这种情况下双线路的普及就使得策略路由就有了大的用武之地了!通过在路由设备上添加策略路由包的方式,成功的实现了电信数据走电信,网通数据走网通,这种应用一般都属于目的地址路由!

    由于光纤的费用在今天的中国并不便宜,于是很多地方都采用了光纤加ADSL的方式,然而这样的使用就出现了两条线不如一根线快的现象,通过使用策略路由让一部分优先级较高的用户机走光纤,另一部分级别低的用户机走ADSL,这种应用就是属于源地址路由!

    而现在出现的第三种策略方式:智能均衡策略,就是两条线不管是网通还是电信,光纤还是ADSL,都能自动的识别,并且自动的采取相应的策略方式,是策略路由的发展趋势!

    策略路由是转发层面的行为,操作的对象是数据包,匹配的是数据流,具体是指数据包中的各个字段,常用五元组:源IP、目标IP、协议、源端口、目标端口。

     OSPF协议---开放式最短路径优先,是无类别链路状态路由协议(自治系统路由协议),基于IP协议进行数据封装,其协议号是89,管理距离是110(华为路由器的AD为150),支持大型网络。

    一、工作方式

        1、更新机制--触发更新,存在周期更新30min、

        2、更新方式--组播更新

                 1) 224.0.0.5 (串行链路中)

                 2) 224.0.0.6    DR/BDR(以太网环境中)

                注:为减小多路访问网络中OSPF流量,OSPF会选择一个 指定路由器(DR)和一个备份指定路由器(BDR)。当多路访问网络发生变化时,DR负责更新其他所有OSPF 路由器。BDR会监控DR 的状态,并在当前DR发生故障时接替其角色。 

        3、 更新内容--LSA——链路状态通告。存在于链路状态数据库(LSDB)中

                支持等开销负载均衡,默认4条LSA,最大6条(1 2 3 4 5 7),ios版本12.4以后16条

    二、OSPF的数据包

        1. hello包 发现、维持和创建邻居关系  10s  40s

        2. dbd 包 数据库摘要

        3. lsr     链路状态请求

        4. lsu     链路状态更新 回应 lsr 承载lsa

        5. lsack   链路状态确认包


       Router-id 标识路由器,默认使用最大环回地址,默认使用最大物理接口ip地址,建议手工修改。

    三、修改带宽


                Cost=参考带宽/实际带宽    默认参考带宽=100M

        修改带宽配置:

    Router(config)#interface f0/0
    Router(config-if)#bandwidth ?
      <1-10000000>  Bandwidth in kilobits
    Router(config-if)#bandwidth   自行设置
    四、OSPF的建邻过程

        Down(关闭状态)开始发送hello但是没有收到邻居发来的hello 当收到对方发来hello 进入下一状态

        Init(初始化状态)当收到对方发来的hello中有自己的Router-ID 进入下一状态

        Two-way 邻居关系建立完成--进行选举--选举结束--进入下一状态--DR-other之间的稳定状态Exstart--

                选举主从关系--master先发DBD (Router-ID大的优先)

        Exstart 预启动状态

        Exchange 交换DBD

        Loading 交换LSA 通过LSR去要LSA 对方通过LSU更新LSA

        Full 邻接关系建立 启动SPF算法 计算路径

                在以太网环境中所有路由器只和DR和BDR形成邻接关系,DROTHER和DROTHER 之间形成邻居关系!

    五、OSPF区域标识和具体配置

      区域划分优势:限制LSA数量、限制LSA的传播范围

      区域标识:

        骨干区域:area 0--传输区域

        非骨干区域:非area 0--普通区域

      区域的表示:十进制、类似与IP地址方式

      区域设计原则:

       1、OSPF网络中必须存在并唯一存在的骨干区域(若该ospf网络仅仅包含一个域,可以是非骨干)

       2、若存在非骨干区域,则非骨干区域必须与骨干区域直接连接

       3、非骨干不能直接与非骨干连接(必须遵循星型拓扑和存在ABR路由器)

      ospf网络中路由器的角色:骨干路由器   非骨干路由器

       ABR:area bounder router 区域边界路由器,能产生3类的LSA路由

       ABSR:自治系统边界路由器 能够产生5类或7类的路由

     配置:

       1、第一种宣告方式

        R1(config)#router ospf 100
        R1(config-router)#router-id 1.1.1.1 手工指定router-id
        R1(config-router)#network 1.1.1.1 0.0.0.0 area 0(区域号)
             2、第二种宣告方式
        R1(config)#interface lo 0
        R1(config-if)#ip ospf 100 area 0  进接口宣告
    六、OSPF的三张表

        1、邻居表

    R1#show ip ospf neighbor   查看邻居的一些信息
     
    Neighbor ID     Pri   State           Dead Time   Address         Interface
    2.2.2.2           1   FULL/BDR        00:00:35    12.1.1.2        FastEthernet1/0
        2、路由表
    R1#show ip route ospf 
         34.0.0.0/24 is subnetted, 1 subnets
    O IA    34.1.1.0 [110/3] via 12.1.1.2, 00:05:17, FastEthernet1/0
         2.0.0.0/32 is subnetted, 1 subnets
    O       2.2.2.2 [110/2] via 12.1.1.2, 00:06:10, FastEthernet1/0
         3.0.0.0/32 is subnetted, 1 subnets
    O IA    3.3.3.3 [110/3] via 12.1.1.2, 00:05:17, FastEthernet1/0
         4.0.0.0/32 is subnetted, 1 subnets
    O IA    4.4.4.4 [110/4] via 12.1.1.2, 00:05:00, FastEthernet1/0
         23.0.0.0/24 is subnetted, 1 subnets
    O IA    23.1.1.0 [110/2] via 12.1.1.2, 00:06:10, FastEthernet1/0
         Ospf宣告的所有路由表:
    R1#show ip ospf route
     
                OSPF Router with ID (1.1.1.1) (Process ID 100)
     
        Area 1
     
        Intra-area Route List
    *   12.1.1.0/24, Intra, cost 1, area 1, Connected
          via 12.1.1.1, FastEthernet1/0
    *   1.1.1.1/32, Intra, cost 1, area 1, Connected
          via 1.1.1.1, Loopback0
    *>  2.2.2.2/32, Intra, cost 2, area 1
          via 12.1.1.2, FastEthernet1/0
     
        Intra-area Router Path List
    i 2.2.2.2 [1] via 12.1.1.2, FastEthernet1/0, ABR, Area 1, SPF 4
     
        Inter-area Route List
    *>  4.4.4.4/32, Inter, cost 4, area 1
          via 12.1.1.2, FastEthernet1/0
    *>  34.1.1.0/24, Inter, cost 3, area 1
          via 12.1.1.2, FastEthernet1/0
    *>  3.3.3.3/32, Inter, cost 3, area 1
          via 12.1.1.2, FastEthernet1/0
    *>  23.1.1.0/24, Inter, cost 2, area 1
          via 12.1.1.2, FastEthernet1/0
      ospf的数据库表:
    R2#show ip ospf database 
     
                OSPF Router with ID (2.2.2.2) (Process ID 100)
     
                    Router Link States (Area 0)
     
    Link ID         ADV Router      Age         Seq#       Checksum Link count
    2.2.2.2         2.2.2.2         562         0x80000002 0x0040AB 1
    3.3.3.3         3.3.3.3         563         0x80000002 0x0002E0 1

                 通告者         内容

    1类LSA  router                          路由器本身         链路状态

    2类LSA  network                               DR                                     描述MA网络

    3类LSA  sumary                                 ABR                                     路由条目


    七、DR/DBR的选举规则和扩展配置

        1、选举规则

            ①比较优先级  优先级大的为DR

            ②比较Router-id   大的为DR

            ③非抢占性  

        2、修改优先级 

        R1(config)#interface f0/0
        R1(config-if)#ip ospf priority 2
              重启进程
        R1#clear ip ospf process 
        Reset ALL OSPF processes? [no]: yes
        3、明文认证
        R2(config)#interface f1/0
        R2(config-if)#ip ospf authentication
        R2(config-if)#ip ospf authentication-key 1 cisco
             密文认证
        R2(config)#router ospf 100
        R2(config-router)#area 1 authentication
             区域密文认证
        R3(config)#router ospf 100
        R3(config-router)#area 2 authentication  message-digest
        4、被动接口
        R4(config)#router ospf 100
        R4(config-router)#passive-interface loopback 0
        

     

    展开全文
  • angular 路由

    2018-09-27 16:30:01
    angular 路由基础知识_在路由时传递数据_重定向路由_子路由_辅助路由_路由守卫
  • Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。包含的功能有: 嵌套的路由/视图表 模块化的、基于组件的路由配置 路由参数、查询、通配符 基于 Vue.js 过渡...

    Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。包含的功能有:

    • 嵌套的路由/视图表
    • 模块化的、基于组件的路由配置
    • 路由参数、查询、通配符
    • 基于 Vue.js 过渡系统的视图过渡效果
    • 细粒度的导航控制
    • 带有自动激活的 CSS class 的链接
    • HTML5 历史模式或 hash 模式,在 IE9 中自动降级
    • 自定义的滚动条行为

    1.基本使用

    (1)安装

    ①初始化项目时选择安装vue-router

    ②手动安装

    npm i vue-router --save
    

    (2)基本使用

    第一步:创建几个页面组件

    第二步:在/src/main.js中引入vue-router插件,并引入页面组件、定义路由规则

    import VueRouter from 'vue-router'
    Vue.use(VueRouter)//在vue中使用插件【重要】
    //引入页面组件
    import Home from './components/Home'
    import Movie from './components/Movie'
    import Music from './components/Music'
    var router = new VueRouter({
        //路由规则地址与页面组件的配置映射关系表
        routes:[
            { path:'/home',component:Home },
            { path:'/movie',component:Movie },
            { path:'/music',component:Music },
        ]
    })
    

    path属性表示浏览器地址关键词,要以斜杠开头

    component属性表示路由地址关键词对应的页面组件

    第三步:在/src/App.vue中添加路由出口组件

    <div id="app">
        <!-- 
            路由出口 
            根据当前浏览器中的地址与路由规则映射表进行匹配,匹配到之后,就把对应的组件模板内容展示在路由出口的位置上。
        -->
        <router-view></router-view>
    </div>
    

    2.路由导航

    (1)内置组件

    router-link 会在页面上生成一个超链接。

    属性:

    ①to

    需要设置一个to属性,它的值是设置路由映射规则时的path属性值。

    to属性的值,必须以斜杠开头,不然会出现地址异常的现象。

    ②active-class

    active-class 非必填项,模糊匹配的类名,可以用来设置激活的导航类名

    写在router-view上方或者下方的router-link会一直在页面中显示。

    ③exact-active-class

    精确匹配的类名,只有访问的路由规则地址和to属性中一模一样时才会设置上对应的类名

    (2)编程式导航

    vue-router类的实例中给提供了一些方法,可以实现页面跳转

    push 此方法会把当前访问的页面作历史记录,然后跳转到指定的路由规则上

    replace 此方法会用即将跳转的路由规则地址替换当前访问的页面路由规则地址

    go 此方法可以进行页面路由地址的回退,一般写-1,表示回退到上一个访问的页面

    <button @click="$router.push('/movie')">前往电影页面</button>
    
    <button @click="toMusic">前往音乐页面</button>
    
    <script>
    export default {
        methods:{
            toMusic(){
                this.$router.replace('/music')
            }
        }
    }
    </script>
    
    <button @click="$router.go(-1)">返回</button>
    

    3.路由重定向

    如果需要展示默认的一个页面或者当用户输入不存在的路由规则时,扔让用户看到一个默认的页面时,可以使用路由重定向(路由地址跳转)。

    routes:[
    	....,
    	{ path:'*',redirect:'/home' }
    ]
    
    

    *表示所有的路由规则都没有匹配到

    redirect表示要重定向到的路由规则path属性值

    4.路由嵌套

    第一步:再创建几个页面组件

    第二步:在一级路由规则中添加一个children属性,它的值和routes数据类型相同,都是一个数组。

    routes:[
        { path:'/home',component:Home },
        { 
            path:'/movie',
            component:Movie,
            children:[
                { path : 'guonei' , component:Guonei},
                { path : 'guowai' , component:Guowai}
            ]
        },
        { path:'/music',component:Music },
        { path:'*',redirect:'/home' }
        // {path:'*',component:Home}
    ]
    

    子级路由规则的path属性不需要添加斜杠

    第三步:在子级路由的父级路由规则对应的页面组件中添加router-view组件,用来展示子级路由规则对应的页面组件内容。

    <template>
        <div class="movie">
            <h1>movie页面</h1>
            <router-link to="/movie/guonei">国内</router-link>
            <router-link to="/movie/guowai">国外</router-link>
            <router-view class="content"></router-view>
        </div>
    </template>
    

    5.路由传参

    (1)动态路由

    动态路由规则定义:

    { path:'/关键词/:参数名' }
    

    冒号后面是一个参数名,能够在进行路由规则匹配时,能够匹配到任意的字符或者数字。

    第一步:创建一个详情页面

    第二步:在路由配置文件中定义一个动态的路由规则

    {
    	path:'/movieinfo/:mid',component:MovieInfo
    }
    

    第三步:在电影列表页面通过编程式导航进行页面跳转

     methods:{
         toInfo(id){
         	this.$router.push('/movieinfo/'+id)
         }
     }
    

    第四步:在电影详情页面获取路由地址中的参数

    <p>编号:{{ $route.params.mid }}</p>
    

    (2)query查询参数

    如果路由地址中的参数数量不固定时,使用动态路由就不合适了。

    第一步:定义一个固定的路由规则

    {
        // path:'/movieinfo/:mid',component:MovieInfo
        path:'/movieinfo',component:MovieInfo
    }
    

    第二步:在电影列表页面通过编程式导航进行页面跳转

    methods:{
        // toInfo(id){//动态路由
        //     // this.$router.push('/movieinfo/'+id)
        // }
        toInfo(obj){//查询参数
            // this.$router.push('/movieinfo/'+id)
            this.$router.push({
                path:'/movieinfo',
                query:{
                    movieid:obj.id,
                    title:obj.title
                }
            })
        }
    }
    

    第三步:在电影详情页面获取路由地址中的参数

    mounted(){
        console.log(this)
        // this.info = this.movies.find(item=>{
        //     return item.id == this.$route.params.mid
        // })
        this.info = this.movies.find(item=>{
        	return item.id == this.$route.query.movieid
        })
    }
    

    1.路由模式

    /src/router/index.js,和routes平级的一个属性

    默认模式是hash,在浏览器地址中会有一个#,#号后面的内容会被解析成路由规则,并进行匹配,如果匹配到指定的路由规则,则展示其对应的组件内容(页面不会刷新,只是局部内容发生了变化)。

    history模式,最直观的是在浏览器地址中没有了#,它更多的使用html5中的history.pushState API来完成 URL 跳转而无须重新加载页面。项目打包后部署到服务器上需要配合后端(Nginx、Apache、Tomcat)进行重写规则的设置(不然会出现404)。

    2.路由命名

    每一个路由规则都可以设置一个name属性,在进行路由跳转并传递参数时,使用命名的路由会比较方便。

    路由规则添加name属性:

    { 
        name:'xiangqing',
        path:'student/:id',
        component:StudentInfo 
    }
    

    在跳转页面时,使用name属性进行路由跳转及参数的传递

    methods:{
        toInfo(id){
            // this.$router.push('/index/student/'+id)
            this.$router.push({
                name:'xiangqing',//通过路由name进行跳转
                params:{id:id}
            })
        }
    }
    

    3.路由别名

    通过alias属性,可以给每一个路由规则设置一个别名,别名和path属性的路由都可以访问。

    { 
        path:'/login',
        component:Login,
        alias:'/denglu'
    }
    

    4.路由懒加载

    import Index from '@/components/pages/Index'
    import Login from '../components/pages/Login'
    import Student from '../components/pages/Student'
    import StudentInfo from '../components/pages/StudentInfo'
    import Setting from '../components/pages/Setting'
    

    这种方式会在vue加载vue-router配置文件时把对应的页面组件都加载一次,会造成资源消耗比较大。可以在路由规则中引入组件,实现匹配到指定的路由规则时才会加载对应的页面组件

    {
    	path:'/index',
    	component:()=>import('../components/pages/Index')
    }
    

    5.路由守卫

    路由守卫可以在路由规则执行之前或者之后执行一定的操作,从而实现对用户身份的验证。

    (1)路由独享守卫

    在定义路由规则时,可以给某一个路由规则设置守卫。

    beforeEnter钩子函数会在某一个路由规则匹配到时,自动的触发,从而实现一定的验证效果

    { 
        path:'/关键词',
        component:()=>import('页面组件'),
        beforeEnter:(to,from,next)=>{
            ...
        }
    }
    

    在beforeEnter钩子函数中可以接收3个参数

    ①to 目标路由规则

    ②from 来源路由规则

    ③next 函数,用来执行默认的路由规则或者指定的路由规则

    next();//执行默认路由规则
    next(false)//终止路由规则的执行
     next('/index')//执行指定的路由规则
    

    (2)组件守卫

    ①beforeRouteEnter

    当路由规则匹配的组件被访问前,会自动的触发此钩子函数

    示例代码:

    在首页组件中来验证用户有没有登录,如果没有登录则只能访问到登录页面

    <script>
    export default {
        beforeRouteEnter(to,from,next){
            //如果本地存储中没有用户信息,则认为用户没有登录
            //用户没有登录的情况下,只能访问到登录页面
            var userinfo = localStorage.getItem('users');
            if(!userinfo){
                next('/login')
            }else{
                next();
            }
        }
    };
    </script>
    

    ②beforeRouteUpdate

    在动态路由规则地址参数发生变化时,会自动的触发此钩子函数

    示例代码:

    beforeRouteUpdate(to, from, next) {
         console.log(to);
         console.log(from);
         console.log(next);
    }
    

    注意:路由模式是history时,不会触发此钩子函数

    ③beforeRouteLeave

    当要离开某一个路由规则之前,会触发此钩子函数

    示例代码:

    <script>
        export default {
         	beforeRouteLeave(to, from, next) {
                if( window.confirm("确定要从此页面离开吗?")){
                    next();
                }else{
                    next(false)
                }
            }   
        }
    </script>
    

    (3)全局守卫

    全局守卫会应用到项目中所有的路由规则

    /src/router/index.js

    ①全局前置守卫

    router.beforeEach((to,from,next)=>{…})

    项目中所有的路由规则访问前会自动的触发此钩子函数

    ②全局后置守卫

    router.afterEach((to,from)=>{…})

    项目中所有的路由规则访问后会自动的触发此钩子函数

    示例代码:

    var router = new Router({...})
    //全局前置守卫
    router.beforeEach((to,from,next)=>{
        console.log('前置守卫...')
        //如果用户访问的不是登录页面,才去验证用户有没有登录
        //如果本地存储中没有用户信息,则认为用户没有登录
        //用户没有登录的情况下,只能访问到登录页面
        if(to.fullPath!='/login'){
            var userinfo = localStorage.getItem('users');
            if(!userinfo){
                next('/login')
            }else{
                next();
            }
        }else{
            next();
        }
    })
    //全局后置守卫
    router.afterEach((to,from)=>{
        console.log('后置守卫...')
        console.log(to)
        console.log(from)
    })
    export default router;
    
    展开全文
  • flutter 路由与页面跳转

    万次阅读 2018-09-07 00:12:17
    先记录一下相关代码,后续完善内容 路由 Route 静态路由 在Flutter中有着两种路由跳转的方式,一种是静态路由,在创建时就已经明确知道了要跳转的页面和值。另一种是动态路由,跳转传入的目标地址和要传入的值都...

    先记录一下相关代码,后续完善内容

    路由 Route

    静态路由

    在Flutter中有着两种路由跳转的方式,一种是静态路由,在创建时就已经明确知道了要跳转的页面和值。另一种是动态路由,跳转传入的目标地址和要传入的值都可以是动态的。

    OK,还是先来介绍下静态路由

    从我们开始学习Flutter到现在,相信大家看到最多的肯定是下面的代码

    void main(){
      runApp(new MaterialApp());
    }

    在runApp方法中需要传入一个MaterialApp的Widget,但是我们基本用到的都是home属性,但是其实MaterialApp方法里面有着很多的参数,其中routes参数就是定义路由的参数。

    routes: {}

    routes需要传入类型的Map,第一个参数是目标路由的名称,第二个参数就是你要跳转的页面。
    嗯,还是来个例子看看怎么用
    main.dart

    import 'package:flutter/material.dart';
    import 'package:flutteraa/MyHomePage.dart';
    import 'package:flutteraa/PlatformPage.dart';
    import 'package:test1/route/Page2.dart';
    import 'package:test1/route/Page1.dart';
    
    void main() => runApp(new MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return new MaterialApp(
          title: 'Welcome to Flutter',
          theme: ThemeData(primaryColor: Colors.blue),
          home: Page1(),
          routes: <String, WidgetBuilder>{'page2': (_) => Page2()},
        );
      }
    }
    
    

    第一个页面:

    import 'package:flutter/material.dart';
    import 'package:test1/route/Page2.dart';
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          appBar: new AppBar(
            title: new Text("Page1"),
          ),
          body: new Center(
            child: new RaisedButton(
              onPressed: () {
                Navigator.of(context).pushNamed("page2");
              },
              child: new Text("点我跳转"),
              color: Colors.blue,
              highlightColor: Colors.lightBlue,
            ),
          ),
        );
      }
    }

    在第一个页面在Main方法中我们定义了我们需要跳转的页面名称为“Page2”,要跳转的页面是Page2,每当我们点击屏幕正中央的button都会触发调用

    Navigator.of(context).pushNamed(“/page2”);

    Navigator就是在在Flutter中负责页面导航的,相信了解Android的童鞋都知道这个玩意。
    使用pushNamed方法传入一个在routes定义的名字即可。

    第二个页面:

    import 'package:flutter/material.dart';
    class Page2 extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          appBar: new AppBar(
            title: new Text("Page2"),
          ),
          body: new Center(
            child: new Text(
              "Page2",
              style: new TextStyle(fontSize: 25.0),
            ),
          ),
        );
      }
    }

    这里写图片描述

    好吧,那么尝试下往下个页面传递数据,其实也很简单,我们给第二个页面加一个构造函数,并且把从第一个页面传递过来的值赋给Text

    import 'package:flutter/material.dart';
    
    class Page2 extends StatelessWidget {
      final title;
    
      Page2(this.title);
    
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          appBar: new AppBar(
            title: new Text("Page2"),
          ),
          body: new Center(
            child: new Text(
              title,
              style: new TextStyle(fontSize: 25.0),
            ),
          ),
        );
      }
    }

    在第一个页面定义路由时就需要把你需要传递的参数定义出来。

    routes: <String, WidgetBuilder>{
    'page2': (BuildContext context) => new Page2("I am from Page1"),
    },

    这里写图片描述

    这种定义路由并使用的方式非常的简单,但是大家肯定会发现一个问题,就是如果我需要传递给第二个页面的数据不是已知的话我就无法使用这种方式,因为我们无法动态改变上面定义的值。

    所以,我们就需要了解下Flutter中的动态路由了。


    动态路由

    在Navigator中还有一个方法是push()方法,需要传入一个Route对象,在Flutter中我们可以使用PageRouteBuilder来构建这个Route对象。

    所以,我们可以在Button的点击事件中做下面代码的操作:

    Navigator.of(context).push(new PageRouteBuilder(
    pageBuilder: (BuildContext context,
        Animation<double> animation,
    Animation<double> secondaryAnimation) {
    return new Page2("some attrs you like ");
    
    }))

    这样的话,我们就可以把用户操作与交互的数据传递给下个页面。

    全局代码:

    页面1:

    import 'dart:async';
    
    import 'package:flutter/material.dart';
    import 'package:flutteraa/PlatformPage.dart';
    
    class MyHomePage extends StatefulWidget {
      @override
      createState() => new MyHomePageState();
    }
    
    class MyHomePageState extends State<MyHomePage> {
    
    
      @override
      Widget build(BuildContext context) {
        return   Scaffold(
          appBar: AppBar(
            title: Text(
              'Tab',
              style: TextStyle(fontSize: 18.0),
            ),
            backgroundColor: Colors.blue,
          ),
          body: Column(
            children: <Widget>[
              RaisedButton(
                onPressed: _btnPress,
                child: Text('跳转'),
              ),
            ],
          ),
        );
    
      }
    
      Future _btnPress() {
      //静态路由,需要配置route
        //Navigator.pushNamed(context, 'Platform');
        //动态路由,跳转并传递参数
        Future future = Navigator.push(context, PageRouteBuilder(pageBuilder:
            (BuildContext context, Animation<double> animation,
            Animation<double> secondaryAnimation) {
          return PlatformPage(":获取电量");
        }));
        future.then((value) {
          showDialog(
              context: context,
              builder: (context) => AlertDialog(
                title: Text('前面返回的数据是:$value'),
              ));
        });
      }
    }

    页面2:

    /*
     * Created by 李卓原 on 2018/9/6.
     * email: zhuoyuan93@gmail.com
     *
     */
    
    import 'dart:async';
    
    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    
    class PlatformPage extends StatefulWidget {
      final title;
    
      PlatformPage(this.title);
    
      @override
      State<StatefulWidget> createState() => PlatformPageState(title);
    }
    
    class PlatformPageState extends State<PlatformPage> {
      static const platform = const MethodChannel('flutteraa/battery');
      String _batteryLevel = 'Unknown battery level.';
      final title;
    
      PlatformPageState(this.title);
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('平台代码$title'),
          ),
          body: Column(
            children: <Widget>[ 
              RaisedButton(
                onPressed: _goback,
                child: Text('返回'),
              )
            ],
          ),
        );
      }
    
      void _goback() {
      //返回上一页面并传递参数
        Navigator.pop(context,'aiyo');
      }
    }
    

    main.dart

    import 'package:flutter/material.dart';
    import 'package:flutteraa/MyHomePage.dart';
    import 'package:flutteraa/PlatformPage.dart';
    
    void main() => runApp(new MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return new MaterialApp(
            title: 'Welcome to Flutter',
            theme: ThemeData(primaryColor: Colors.blue),
            home: MyHomePage(),
            routes: <String,WidgetBuilder>{
              'Platform':(_)=>PlatformPage('a')
            }, 
        );
      }
    }
    展开全文
  • 静态路由及默认路由——基本配置

    万次阅读 多人点赞 2019-05-11 11:51:22
    静态路由:是指用户或网络管理员手工配置的路由信息。当网络拓扑结构或链路状态发生改变时,需要网络管理员手工配置静态路由信息。 相比较动态路由协议,静态路由无需频繁的交换各自的路由表,配置简单,比较适合...

    原理简述:

    1。静态路由:是指用户或网络管理员手工配置的路由信息。当网络拓扑结构或链路状态发生改变时,需要网络管理员手工配置静态路由信息。

    相比较动态路由协议,静态路由无需频繁的交换各自的路由表,配置简单,比较适合小型、简单的网络环境。不适合大型和复杂的网络环境的原因是:当网络拓扑结构和链路状态发生改变时,网络管理员需要做大量的调整,工作量繁重,而且无法感知错误发生,不易排错。

    2。默认路由:是一种特殊的静态路由,当路由表中与数据包目的地址没有匹配的表项时,数据包将根据默认路由条目进行转发。默认路由在某些时候是非常有效的,例如在末梢网络中,默认路由可以大大简化路由器的配置,减轻网络管理员的工作负担。

    实验目的:

    (1)掌握静态路由(指定接口)的配置方法;

    (2)掌握静态路由(指定下一跳IP地址)的配置方法;

    (3)掌握静态路由连通性的测试方法;

    (4)掌握默认路由的配置方法;

    (5)掌握默认路由的测试方法;

    (6)掌握在简单网络中部署静态路由时的故障排除方法;

    (7)掌握简单的网络优化方法;

    实验内容:

    在三台路由器所组成的简单网络中,R1和R3各自连接着一个主机,现在要求通过配置基本的静态路由和默认路由来实现主机PC-1与PC-2之间的正常通信。

    实验拓扑:

    实验实现步骤:

    1。基础配置

    根据实验的要求进行相应的配置,使用ping命令检测各直连链路的连通性。

    在各直连链路间的IP连通性测试完之后,可以尝试在主机1上直接ping主机2。

    ???问题:为什么两个主机之间无法正常通信,是什么原因导致的?

    若假设主机1和主机2之间可以正常的通信,即可以正常的连通,则主机1将发送数据给其网关设备R1;而R1在收到其数据之后,根据数据包中的目的地址查看自己的路由表,找到相应的目的网络的所在的路由条目,并根据该条目中的下一跳和出接口信息将该数据转发给下一个路由器R2;同时R2采用相同的方式将数据转发给R3,最后R3页同样的将数据转发给与自己直接相连的主机2;主机2在收到数据后,与主机1发送数据到主机2的过程一样,再发送相应的回应信息给主机1。

    现在查看主机1与其网关设备R1间的连通性的状态:

    可以看出主机与网关之间的连通性正常,接下来检查网关设备与R1上的路由表:使用 display ip routing-table 命令。

    通过路由表上显示的信息,可以看到路由表上没有关于主机2所在网段的信息,同样可以使用相同的方法查看路由器R2和R3上的路由表信息。

    经过查看,可以看到:在路由器R2上没有关于主机1和主机2所在网段的信息,R3上没有关于主机1所在网段的信息。

    所以,以上的步骤验证了:在初始情况下各路由器的路由表上仅包含了与自己本身直接相连的网络的路由信息。

    因为现在的主机1和主机2之间跨越了若干个不同的网段,若要实现两者之间的通信,通过简单的IP地址等基础配置是不能实现的,需要在3台路由器上添加相应的路由信息,可以通过配置静态路由的方法来实现。

    2。实现主机1和主机2之间的通信:

    现在,在R1上配置目的网段为主机2所在网段的静态路由,即目的IP地址为192.168.20.0,掩码为255.255.255.0。相对应R1来讲,倘若要发送数据到主机2,则必须先发送给R2,所以R1的下一跳路由器是R2,R2与R1所在的直连链路上的物理端口S1/0/1接口 的IP地址即为下一跳IP地址,即10.0.12.2。

    [R1]ip route-static 192.168.20.0 255.255.255.0 10.0.12.2

    配置之后,查看R1的路由表:

    可以看出在路由器R1上已存在主机2所在网段的路由信息。

    接下来,采取同样的方式在R2上配置目的网段为主机2所在网段的静态路由,配置过后,查看其路由表。

    [R2]ip route-static 192.168.20.0 255.255.255.0 10.0.23.3
    
    [R2]dis ip routing-table 
    Route Flags: R - relay, D - download to fib
    ------------------------------------------------------------------------------
    Routing Tables: Public
             Destinations : 13       Routes : 13       
    
    Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface
    
          10.0.12.0/24  Direct  0    0           D   10.0.12.2       Serial1/0/1
          10.0.12.1/32  Direct  0    0           D   10.0.12.1       Serial1/0/1
          10.0.12.2/32  Direct  0    0           D   127.0.0.1       Serial1/0/1
        10.0.12.255/32  Direct  0    0           D   127.0.0.1       Serial1/0/1
          10.0.23.0/24  Direct  0    0           D   10.0.23.2       Serial1/0/0
          10.0.23.2/32  Direct  0    0           D   127.0.0.1       Serial1/0/0
          10.0.23.3/32  Direct  0    0           D   10.0.23.3       Serial1/0/0
        10.0.23.255/32  Direct  0    0           D   127.0.0.1       Serial1/0/0
          127.0.0.0/8   Direct  0    0           D   127.0.0.1       InLoopBack0
          127.0.0.1/32  Direct  0    0           D   127.0.0.1       InLoopBack0
    127.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0
       192.168.20.0/24  Static  60   0          RD   10.0.23.3       Serial1/0/0  //已存在
    255.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0
    

    此时,用主机1ping主机2,观察现象:

    发现,两台主机之间仍然无法正常互通。在主机1上的E0/0/1接口上进行数据抓包,观察现象:

    可以看到:此时主机1只发送了ICMP请求消息,而且也并没有得到任何的回应消息。

    原因:现在仅是实现主机1能够通过路由器将数据正常的转发给主机2,而主机2并没有实现,仍然是无法发送数据给主机1的。

    现在需要在R2和R3上的路由表中添加主机1所在网段的信息:

    在R3上配置目的网段为主机1所在网段的静态路由,目的IP地址为192.168.10.0,目的地址的掩码除了采用点分十进制的格式表示之外,还可以采用直接使用掩码长度的方式表示,即用24来表示相对应R3来讲,要发送数据到主机1上,首先发送给路由器R2,所以R3和R2所在直连链路上的物理接口S1/0/0即为数据转发口,也称为出接口,在配置中指定该接口即可。

    [R3]ip route-static 192.168.10.0 24 s1/0/1  //配置目的网段为主机1所在网段的静态路由
    
    [R2]ip route-static 192.168.10.0 24 s1/0/1  
    
    

    配置过后,查看各路由器的路由表信息:

    经过路由表的查看,你会看到每台路由器上都拥有了主机1和主机2所在网段的路由信息。再次在主机1上ping主机2,观察现象。

    3。实现全网全通来增强网络的可靠性

    按照上面的操作,现在已实现主机1和主机2之间的互通。若假设现在的网络出现了故障,主机1一侧的网络管理员发现无法正常的与主机2通信,于是先测试与网关设备R1和R3的连通性。

    可以看到:主机1无法与主机2的网关设备R3正常通信,所以此时网络管理员无法通过主机1登录到R3上进一步排查故障。

    现在的解决方法是:在R1的路由表中添加R2与R3间直连网段的路由信息,同样也在R3的路由表上添加R1与R2之间的直连链路的路由信息,已至实现全网的互通。

    配置之后,查看各路由器的路由表信息,查看内容;再由主机1ping主机2的网关设备R3。

    测试成功,主机1可以与R3正常通信,同样的主机2此时也可以与R1正常通信。

    4。使用默认路由实现简单的网络优化

    通过适当减少设备上的配置工作量,能够帮助网络管理员在进行故障排除时更轻松的排除故障,且相对较少的配置量也能减少在配置时出错的可能,另一方面,也能够相对减少对设备本身硬件的负担。

    现在,在R1上配置一条默认路由,即目的网段和掩码都是0,表示任何网络,下一跳为10.0.12.2,并删除先前配置的两条静态路由。

    [R1]ip route-static 0.0.0.0 0 10.0.12.2  //配置默认路由
    [R1]undo ip route-static 10.0.23.3 24 10.0.12.2   //删除静态路由
    [R1]undo ip route-static 192.168.20.0 24 10.0.12.2
    
    

    再次测试主机1与主机2之间的通信。

    该通信是正常的,证明了使用默认路由不但能够实现与静态路由同样的效果,还能减少配置量。同时在R3上也做相应的配置。

    [R3]ip route-static 0.0.0.0 0 s1/0/1  //配置默认路由
    [R3]undo ip route-static 10.0.12.0 24 s1/0/1
    [R3]undo ip route-static 192.168.10.0 24 10.0.23.2
    

    再次测试主机1与主机2之间的通信。

    可以看到主机1与主机2之间的通信正常。

    强调:在配置过程中,顺序是先配置默认路由,再删除原有的静态路由配置,这样的操作可以避免网络出现通信中断,即要在配置过程中注意操作的规范性和合理性。

    ???思考:在静态路由配置当中,可以采取指定下一跳IP地址的方式,也可以采取指定出接口的方式,这两种方式存在着什么区别?

    答:(1)在路由查找上:指定下一跳,会多进行一次路由的递归查找,拿下一跳去进行递归,得出出接口。

    (2)二层地址解析:指定下一跳使用最后一次递归的下一跳IP地址去解析下一跳二层地址。如果指定出接口的路由,数据包匹配到后直接用目的地址去解析下一跳地址。

     

     

    展开全文
  • 路由策略 & 策略路由

    万次阅读 2019-08-29 11:45:43
    策略路由PBR(Policy-Based Routing)是一种依据用户制定的策略进行路由选择的机制,分为本地策略路由、接口策略路由和智能策略路由SPR(Smart Policy Routing)。 策略路由具有如下优点: 可以根据用户实际需求...
  • 路由表内容路由分组转发过程

    千次阅读 2019-08-16 14:58:44
    文章目录一、路由表内容二、路由分组转发过程 一、路由表内容 Network Destination:目标网段 Netmask:子网掩码,IP地址与子网掩码按位与,可以得出该IP地址的网络号,IP地址与子网掩码取反后按位与,可以得出该IP...
  • Vue路由

    千次阅读 多人点赞 2020-12-09 21:19:13
    Vue路由Vue路由基础嵌套路由路由重定向路由传参params形式传参query形式传参params方式与query方式的区别编程式路由利用JS实现路由跳转通过watch实现路由监听导航守卫 Vue路由基础 Vue属于单页应用(SPA),即整个...
  • 本篇文章主要介绍了vue使用watch 观察路由变化,重新获取内容 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
  • AngularJS 路由

    千次阅读 2016-07-26 18:33:17
     AngularJS 路由允许我们通过不同的 URL 访问不同的内容。通过 AngularJS 可以实现多视图的单页Web应用(single page web application,SPA)。通常我们的URL形式为 http://xxxxx.com/first/page,但在单页Web应用...
  • react路由嵌套路由路由传参

    千次阅读 2020-12-16 16:30:28
    因为react的嵌套路由跟vue比就像屎一样 不好写 所以在使用的时候建议使用react-router-config来配置路由 会相对轻松 第一步 先安装路由依赖 yarn add react-router-dom --save yarn add react-router-config --save...
  • 为提高软件定义的内容中心网络(SD-CCN)分域多控制器架构中的路由传输效率,减轻控制器的负载压力,设计了软件定义的内容中心网络的多域分段路由机制(MDSR)。将基于内容名称的路由查找在控制平面执行,数据平面...
  • 配置静态路由,动态路由,默认路由

    万次阅读 多人点赞 2019-07-30 16:06:09
    一、什么是路由 路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程[1]。路由工作在OSI参考模型第三层——网络层的数据包转发设备。路由器通过转发数据包来实现网络互连。虽然路由器可以支持...
  • angularJS监听路由变化改变页面内容

    千次阅读 2017-11-22 14:31:41
    angularJS监听路由变化
  • 路由嵌套(子路由

    千次阅读 2019-05-15 01:54:07
    另一部分不定的内容,就可以用到路由嵌套来完成,也可以用引入组件的方式完成, 把左边做成一个单独的组件,在其他组件中分别引入“左组件”,以此完成。 eg: 步骤如下: 找到/router/index.js文件,找到左边...
  • 今天小编就为大家分享一篇Vue 路由切换时页面内容没有重新加载的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 华为 等价路由

    万次阅读 多人点赞 2020-05-14 23:16:57
    切忌自我感动,觉得自己有多努力多可怜,事实上,比你努力的人多的是,比你矫情的没几个。 文章目录 ...等价路由(ECMP)即为到达同一个目的 IP 或者目的网段存在多条 Cost 值相等的不同路由路径。
  • Vue 路由切换时页面内容没有重新加载
  • 图中菜单区域为header公用组件,点击相应的菜单选项跳转到对应的路由,在菜单下区域加载相应组件的内容。 以下两图分别为点击“我的电站”、“个人中心”的效果 demo结构介绍: 登录成功后,跳转到index页面,并默认...
  • 路由策略和策略路由

    千次阅读 2020-03-14 16:43:59
    1.路由策略:路由策略是为了改变网络流量所经过的途径而修改路由信息的技术,主要通过改变路由属性(包括可达性)来实现。 操作对象:路由条目 2.策略路由:策略路由是一种比基于目标网络进行路由更加灵活的数据包...
  • 前端路由与后端路由

    千次阅读 2016-10-01 19:46:03
    网速慢的话说不定屏幕全白再有新内容。 前端路由就不会有这样的问题了。随意控制,逻辑也可以都放在前端。前端慢慢复杂化,自己的路由这种东西是必不可少的啦。 从性能和用户体验的层面来比较的话,后端路由每次...
  • 自治系统内部的路由器通过域内路由协议彼此交换路由信息,一般域内路由协议分为距离向量协议和链路状态协议,前者以RIP代表,后者常用的有OSPF、IS-IS协议;自治系统边界路由器通过域间路由协议交换路由信息,目前...
  • 一、单播路由 报文的目标地址为 A、B、C 类地址的路由表项为单播路由。 目标 IP 地址是告诉报文 目的主机地址在哪里,而路由是告诉报文如何到达目的地址 网络上的每个路由器独立进行 决策,将报文转发到离目的...
  • 前端路由和后端路由

    千次阅读 2017-11-23 12:58:42
    参考文章: https://segmentfault.com/q/1010000005336260 ...前端路由: ...1,什么是前端路由?...路由是根据不同的 url 地址展示不同的内容或页面 ...前端路由就是把不同路由对应不同的内容或页面的任务交给前端
  • 路由策略仅仅影响路由信息的发布、接收或选择,从而改变路由表的内容,间接的影响报文的转发。 策略路由是作用于报文转发的时候,它可以通过设置的规则直接影响数据报文的转发。 路由策略与策略路由的工作层面以及...
  • 静态路由和动态路由

    万次阅读 多人点赞 2018-12-23 16:50:31
    (2)掌握静态路由的配置; (3)掌握动态路由的配置。   实验要求: (1)写出静态路由的配置过程; (2)写出动态路由的配置过程。   一、路由器的...
  • 1. 掌握静态路由协议的作用和使用范围 2. 掌握配置静态路由协议的过程实验内容及原理 3. 掌握静态路由协议的作用和使用范围 4. 掌握配置静态路由协议的过程

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 334,663
精华内容 133,865
关键字:

内容路由