摘要: 1.阶乘 使用循环实现: def factorial(n): result = n for i in range(1, n): result *= i return result 使用函数递归实现: def factorial(n): if n == 1: return 1 else: return 阅读全文
posted @ 2020-08-10 17:48 swefii 阅读(637) 评论(0) 推荐(0) 编辑
摘要: python有一个名为vars的内置函数,它返回变量关联的不可见的字典: >>> x = 1 >>> scope = vars() >>> scope['x'] 1 >>> scope['x'] += 1 >>> x 2 一般而言,不应修改vars返回的字典,因为根据Python官方文档的说法,这样 阅读全文
posted @ 2020-06-22 21:33 swefii 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 与收集参数相反,这里用*和**分配参数 def add(x, y): return x + y 使用*分配元组 params = (1, 2) >>> add(*params) 3 使用**分配字典中的值分配给关键字参数 def hello_3(greeting='Hello', name='wor 阅读全文
posted @ 2020-06-22 21:32 swefii 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 初始化: typedef struct DNode { int data; struct DNode *prior,*next; }DNode, *DLinkList; //初始化双链表 bool InitDLinkList(DLinklist &L) { L = (DNode *)malloc(s 阅读全文
posted @ 2020-06-18 17:26 swefii 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 单链表的建立 Step1:初始化一个单链表 Step2:每次取一个数据元素,插入到表尾/表头 尾插法建立单链表: LinkList List_TailInsert(LinkList &L) { //正向建立单链表 int x; L = (LinkList)malloc(sizeof(LNode)); 阅读全文
posted @ 2020-06-17 12:58 swefii 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 按位查找: 依次循环找到第i-1个结点在上一篇按位插入元素的部分已经写过了,这里也是一样的,只不过把i-1改成了i //按位查找,返回第i个元素(带头结点) LNode * GetElem(LinkList L, int i) { if (i < 0) return NULL; LNode *p; 阅读全文
posted @ 2020-06-16 21:24 swefii 阅读(246) 评论(0) 推荐(0) 编辑
摘要: typedef struct LNode { int data; struct LNode *next; }LNode, *LinkList; 带头结点的按位序插入: //在第i个位置插入元素e bool ListInsert(LinkList &L, int i, char e) { if (i 阅读全文
posted @ 2020-06-15 18:20 swefii 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 不带头结点: typedef struct LNode { int data; struct LNode *next; }LNode,*LinkList; //初始化一个空的单链表 bool InitList(LinkList &L) { L = NULL; return true; } void 阅读全文
posted @ 2020-06-14 19:52 swefii 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 插入与删除: #include <stdio.h> #define MaxSize 10 typedef struct { int data[MaxSize]; int length; }SqList; bool ListInsert(SqList &L, int i, int e) { if (i 阅读全文
posted @ 2020-06-14 09:22 swefii 阅读(268) 评论(0) 推荐(1) 编辑
摘要: 所谓顺序表即以顺序存储的方式实现线性表 以下为静态分配实现 #include <stdio.h> #define MaxSize 10 //最大长度 typedef struct{ int data[MaxSize]; int length; //当前长度 }SqList; //顺序表静态定义 vo 阅读全文
posted @ 2020-06-13 13:23 swefii 阅读(429) 评论(0) 推荐(0) 编辑
摘要: 与大多数内部路由协议不同的是, EIGRP能够将流量负载分到多条非等价路径上,而不仅仅使用去往目的地最近距离的那一条路径。提供这项功能的特性称为非等价负载分担。 非等价负载分担的核心概念是可行后继。尽管可行后继并不是去往目的地最短的那条路径,但路由器也可以确保它们是去往目的地无环的路径。 EIGRP 阅读全文
posted @ 2019-06-26 20:39 swefii 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 与很多协议一样, EIGRP也使用了路由器ID (RID)的概念,用一个4字节的编号来标识某个路由器实例。每个地址家族实例拥有自已独立的RID。工程师可以在一台路由器上,为多个EIGRP进程和地址家族实例使用相同的RID。最初, EIGRP的RID是用来在应用了重分布的EIGRP环境中预防路由环路的 阅读全文
posted @ 2019-06-26 10:03 swefii 阅读(415) 评论(0) 推荐(0) 编辑
摘要: 从IOS 15.0(1)M版本开始,工程师可以在路由器上使用命名模式(Named Mode)配置EIGRP进程。按照IPv4和IPv6,通过AS号来配置EIGRP进程的做法称为经典模式(ClassicMode) ,有时也称为AS模式。在IOS开始支持命名模式的配置方式后, 建议工程师优先使用命名模式 阅读全文
posted @ 2019-06-26 10:01 swefii 阅读(1011) 评论(0) 推荐(0) 编辑
摘要: 如果一台路由器参与到了针对某个目的地的弥散计算中(即将相应路由置为活动状态,并发送查询包),它必须首先等待所有邻居都返回响应包,之后它才能执行自已的弥散计算,接着选出新的最优路径,最后开始发送自已的响应包。因此,如果路由器发送处查询包,并且这个查询包导致它的多个邻居都将路由置为了活动状态,那么这台路 阅读全文
posted @ 2019-06-22 10:17 swefii 阅读(276) 评论(0) 推荐(0) 编辑
摘要: FD (可行距离)、后继和可行后继、本地计算和弥散计算(随着查询包的发出而扩散,随着响应包的接收而收敛)一到目前为止介绍的这些机制能够使路由器有效地计算出去往某目地的新路径,只要在整个弥散计算中不再出现其他拓扑变化;但这是一个很严苛的前提。因此在所有这些机制之上, EIGRP使用一个名为弥散更新算法 阅读全文
posted @ 2019-06-21 21:13 swefii 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 至此,我们已经了解了诸多概念: RD (报告距离)、 CD (计算距离)、 FD (可行距离)和FC (可行性条件) ,在此基础上继续了解EIGRP对于拓扑变化的应对方法想必是轻松愉快的。能够导致拓扑发生变化的因素有很多,比如去往某个网络的距离发生了变化,或者有个新邻居上线了并通告了某个网络。相对应 阅读全文
posted @ 2019-06-21 21:08 swefii 阅读(533) 评论(0) 推荐(0) 编辑
摘要: 对于某个目的网络,EIGRP持续关注它的各种距离参数。EIGRP使用复合度量参数,不过为了简化,这里使用一个没有单位的数值。同样出于简化,这里的EIGRP路由器都不使用水平分割。 本例中,我们主要关注R1与目的网络2001:DB8:CC1E::/64之间的行为。R4上的重分布配置已经被移除了。 下为 阅读全文
posted @ 2019-06-19 19:15 swefii 阅读(886) 评论(0) 推荐(0) 编辑
摘要: 弥散更新算法(DUAL)是一个收敛算法.它代替了其他距离矢量协议使用的Bellman-Ford 算法。路由环路.甚至是在协议完全收敛前出现的瞬时环路.都会对网络性能造成不良影响。为了防止环路的形成.DUAL使用弥散计算的概念.执行分布的最短路径计算.并在执行这些计算的过程中.维护一个无环的环境。DU 阅读全文
posted @ 2019-06-19 18:06 swefii 阅读(862) 评论(0) 推荐(0) 编辑
摘要: EIGRP路由器之间会建立并维护邻接关系。EIGRP在默认情况下会动态发现邻居路由器.也可以通过工程师手动配置(静态)发现邻居。 通过向目的组播组地址224.0.0.10或FF02: : A发送EIGRP Hello包.EIGRP就能够动态发现邻居。工程师一旦在接口上启用了EIGRP.EIGRP会马 阅读全文
posted @ 2019-06-19 18:05 swefii 阅读(621) 评论(0) 推荐(0) 编辑
摘要: 可靠传输协议(RTP,Reliable Transport Protocol)负责管理ElGRP数据包的发送和接收。可靠传输意味着传输是有保障的,并且数据包会被按顺序发送。这种传输效果是依靠Cisco发明的名为可靠组播的算法实现的。使用可靠传输的数据包类型包括更新包、 查询包、响应包、SIA查询包和 阅读全文
posted @ 2019-06-16 11:22 swefii 阅读(417) 评论(0) 推荐(0) 编辑
摘要: EIGRP在与邻居路由器进行通信时,使用以下7种不同类型的数据包: Hello包 确认包 更新包 查询包 响应包 SIA查询包 SIA响应包 更新包,查询包,响应包,SIA查询包和SIA响应包也称为可靠数据包,因为EIGRP会确保它们传输成功且顺序正确。 1.有用的EIGRP数据包 可以使用show 阅读全文
posted @ 2019-06-15 21:01 swefii 阅读(714) 评论(0) 推荐(0) 编辑
摘要: EIGRP数据包直接承戟在IP数据包中.协议号为88。EIGRP数据包的最大长度取决于具体接口上的最大IP MTU设置——通常完整IP数据包为1500字节.其中1480字节可以用于 EIGRP数据包。 下图和下表描述了EIGRP数据包的通用格式。每个EIGRP数据包携带20字节的头部.头部之后的字节 阅读全文
posted @ 2019-06-15 20:58 swefii 阅读(616) 评论(0) 推荐(0) 编辑
摘要: 从EIGRP度量参数的讨论中可以看出.能够手动配置的EIGRP度量参数只有带宽和延迟。 通过使用bandwidth命令强迫EGIRP使用或不使用某条特定路径.看起来是一个很有吸引力的做法.不过这个问题的回答却是坚决果断的两个宁:不对。 下面引用公共 EIGRP互联网草案文档draft中的描述.要对这 阅读全文
posted @ 2019-06-15 14:32 swefii 阅读(476) 评论(0) 推荐(0) 编辑
摘要: 带宽度量参数本身无法区分10Gbit/s及更高速率的接口。对1Gbit/s接口,默认延迟度量参数已设置为最低值1(10微妙)。而且EIGRP承载的是经过换算的参数,每台路由器需要将其换算回再计算新开销,然后再换算计算复合度量,再通告。由于cisco路由器执行的是整数计算,反复的换算会产生误差,最终降 阅读全文
posted @ 2019-06-15 14:28 swefii 阅读(653) 评论(0) 推荐(0) 编辑
摘要: EIGRP使用多种类型的度量值来描述一条路由的不同技术属性,称为组合度量或度量组合。这些组合度量参数包括带宽、延迟、可靠性、负载、MTU和跳数。这6个参数中的前4个通过一个著名的公式组合在一起,计算出一个数值,我们可以称其为复合度量值,或者为了简单明了,也直接称其为度量值、距离或开销。EIGRP会使 阅读全文
posted @ 2019-06-13 20:42 swefii 阅读(699) 评论(0) 推荐(0) 编辑