RIP中的路由失效

RIP中路由失效后,一般过一段时间才会标记为16跳不可达,还有一段hold down的时间,才过一段时间才会删除。以前对RIP的路由失效的初步认识是这样的,但是一直没有做实验验证过,刚刚终于用Packet Tracert验证了一次。

首先,当192.168.1.0失效后。R1要等到Invalid计时器结束才会把该路由标记为16跳不可达,查看Invalid计时器的方法是“show ip protocols”。默认情况下Invalid计时器是180秒,然后路由更新的时间是30秒,那么也就意味着允许6次更新的丢失。实际上,RIP是使用UDP作为传输层协议的,所以有可能会丢失路由更新信息。

过了180秒之后,就到了Hold down的状态,我们称这个时间点为A。Hold down指的是不接受该路由的信息,Hold down状态持续的时间由holddown计时器决定,默认也是180秒。但是我在做实验的时候,虽然路由器处在Hold down状态,却还是接受该路由的信息,不知道是Packet Tracert的问题还是确实是这样,以后有机会再用真实机器试试看。

从时间点A过一定时间就会删除该路由,有flush计时器决定。flush计时器一般会比holddown计时器长,否则就会删除路由时还没结束Hold down状态,计时器默认是240秒。

如果不想等这么长时间,可以设置RIP采用触发更新,默认情况下没有开启。开启的方法是

Router(config-if)# ip rip triggered

但是Packet Tracert没有该命令,也要在真实机器试试。

Advertisements

不丑陋的中国人

柏杨先生有一本著名的书《丑陋的中国人》,指出了中国人一些鲜明的缺点,包括脏、乱,说话大声等,最著名的一条是不团结。我还年轻,我的阅历,也就是见到的人还不够多,很难下一个全面的结论赞成还是不赞成。但是就我自己受到的教育以及周围的人的情况,确实有不少是被作者说中了。

但是我在看这本书的时候,汶川大地震发生了。我虽然离灾区很远,但是电视的画面使我了解到底是怎样的一回事,了解了很多人和故事。罕见地,大家都很团结地祈祷灾区人民的平安。我是没有做什么帮助,除了一点点的捐款和留意新闻,所以更加钦佩那些行动起来的人。

然后我觉得以往跟柏杨先生一致的观念,“中国人不团结”在这次事件中被改变过来,似乎并不全是那样的。柏杨出书的时候是80年代,而现在看到书和看到地震发现社会的文明确实是在进步了,我们也不只强调儒家思想,也强调依法治国,也强调老子的退一步,这些从高考作文题目就能看出来,可以看得出,会思考的脑袋是越来越多的。

希望社会越来越进步。

答辩后的日子

答辩后的日子实际上就是没有电脑用的日子。

答辩那天,因为被安排在倒数第二个,所以只得早上和下午都过去那边。整天战战兢兢,最后真的轮到我的时候,基本按照我的意思讲演出来了,用的时间也比较合适,但是答问题的时候还是被challenge,但是比起其他一些人,算是好过了。最后结果还不坏,还是原来的优,也就是虚惊一场。

然后,不幸的事情发生了。前一天刚刚修好的电脑又启动不了,结果又是搬去合泰。合泰里面,高个子的服务态度很差,矮个子的服务态度很不错,真是鲜明的对比。结果在承诺的两天里修不好,等到第五天,也就是昨天,才修好。

没有自己的电脑就没有Linux用,比较麻烦。所以UNP的学习也放下了。每天看一部电影。还有一件重要的事情就是买一件Polo衫准备百度的面试。

终于在昨天,My Computer returned,and今日面试。

Ubuntu 8.04之旅上

对于我来说,绝对不是一次愉快的经历。首先,本来我是想升级Ubuntu 7.10到8.04的。但是我后来才知道这样的话应该去下载alternative的CD-ROM,而不是Desktop的CD-ROM,否则就只能通过网上升级了。我最后还是嫌麻烦,没有下载alternative,而是网上升级,而噩梦就从这里开始。

等了5个小时,下载了1000多个软件包后,正在安装,突然屏幕黑了,只剩下鼠标。进入tty1也无济于事。等了一段时间,还是这样,最后重启,却没有办法进入以前的Ubuntu。

然后就想,反正就进不了,而里面也没有重要的文件,就用Desktop的CD重装吧。结果复制文件到一半的时候,说光盘有错。重启之后运行光盘的自检,也说发现一个错误,停在中间。后来再试了几次,还是这样。更惨的是,因为Grub被刷了,连Windows都进入不了。无奈之下,刻了DVD-ROM一张,终于解决了问题。

那天晚上,还装了文字,输入法等好多东西,搞到很晚。

符合正态分布的序列

昨天帮同学解决一个问题,就是如何用C语言去生成符合正态分布的序列。后来在wikipedia找到了答案,本文大部分内容引用wikipedia。

正态分布(Normal Distribution),也叫做高斯分布(Gaussian Distribution),特点是其概率密度函数中间面积大,两边很小。在现实世界的很多问题都遵循正态分布,因此,当使用编程去模拟一些实际问题的时候,也需要用到符合正态分布的序列。

可是,在C语言中,只有一个伪随机函数rand(),它是均匀分布的。如果不是C语言的话,在Java中,Random类有产生符合正态分布序列的方法。C++的Boost库据说也有。可是纯粹的C语言中,怎么办呢?

第一种最容易想到的方法,就是求出正态分布的累积分布函数(Cumulative distribution function),然后求反函数。问题是正态分布的累积分布函数(也就是概率密度函数求积分)无法用简单的表达式表达(回忆一下,我们以前高中学的时候是查表的)。当然,我学过一门数值计算方法的课程,知道可以用复合梯形公式或者复合抛物型公式求积分的值。反函数的话然后只需要二分的方法,把自变量x夹出来即可。

应该说上面的方法也不算难,但是,会有一些误差。维基百科里写着一种很好的方法。首先,要产生a和b两个在(0, 1]范围均匀分布的变量,然后使用下面的公式

那么对于c和d,两个都是符合正态分布的序列,如果只需要一组正态分布,那么只取一个c就可以了。

昨天还验证了,既用rand()产生a,然后再调用rand()产生b,这样轮着用会不会对c产生不良影响。测试的结果表明,c确实符合正态分布,需要注意的是rand()产生的结果要排除0,因为ln0使到程序崩溃。

微软雅黑

上两周,微软官方在XP放出了Vista的默认字体微软雅黑字体,以及支持Visual Studio 2005和2008的Consolas字体。

其实早在Vista刚出来的时候,就已经有美化爱好者把微软雅黑字体移植到XP上使用。但是由于各种问题,我在试用感觉到爱好者的字体很难在XP上很好地用,比如窗口的标题,窗口的菜单,或者一些字体特小的地方都会变得难看。

其实主要原因是官方的微软雅黑针对粗体和斜体都专门设计了一套字体,甚是漂亮。不过我的这两周试用,仅限于在FireFox浏览器中去使用,下面是我的截图。

微软雅黑是一款ClearType字体。从图中可以看到,微软雅黑和宋体相比,字体较宽,清晰地突出了行距,但有些人可能没那么快适应。微软雅黑最大的亮点在于分辨率的大幅提高,有人做过测试,普通宋体在12点阵是极限,微软雅黑可以去到9还能看到一半的字符。

在发布那一周的较早时间,微软发布了一款类似的等宽字体,但是只提供对Visual Studio的支持,我试用后感觉还不错,不过还是Courier New比较顺眼,可能因为看得比较多。

官方微软雅黑for XP的地址在这里

Consolas字体for Visual Studio 2005 and 2008的地址在这里

gcc使用小结

本文绝大部分内容引用《开源》杂志第4期里的《GCC精彩之旅(上)》。在这篇文章里,我看到gcc一些用过和没用过的参数,然后总结在这里供以后参考。

1. 如果不带任何参数,比如“gcc hello.c”,那么编译出来的可执行文件就是a.out;

2. 可以用-o参数指定输出的文件名,比如“gcc ./hello.c -o ./hello.out”。gcc就会按照指定的文件名输出文件,这里就是hello.out。

3. -E参数表示只作预处理。我使用过的预处理就是define替换和include把头文件的内容嵌入。如“gcc -E ./hello.c -o ./hello.i”。文章说,i后缀名的文件就是表示已经预处理过的源文件,不过我还没有试过,又学到东西了。

接下来就是警告和错误部分,这部分最感兴趣,很多是以前听过但是只有半桶水。

4. -pedantic参数表示的如果不符合ANSI C风格的话,会给出警告。比如main入口按照标准是返回int,但是如果返回void就会报警。

5. -Wall,这个很经典。表示输出尽可能多的警告,里面有句话“作为一个好的程序员,是不应该忽略警告的”,其实我觉得也是有一定道理的。

6. -Werror,这个也是经常在别人讨论的时候看得到。该参数的意思是把所有的警告当成错误处理。

接下来是添加额外路径部分

7. -I,表示添加额外的include路径,使用第三方的库的时候而又没有把头文件加到系统include路径时用到。

8. -L,和上面类似,添加额外的lib路径。

优化部分

9. -O表示使用编译器优化,这个好玩,有机会一定要试试。一般有三个级别,-O1,-O2,-O3。数字越高,优化的程度越高,但编译时间也长。文章描述,-O2是比较折衷俄方案。同时还要避免在调试时使用优化。

调试部分

10. 编译的时候加上-g参数就可以使用gdb进行调试了,不过在我看来,gdb似乎是强大但是很难使用的东西,以后有机会试试。