博文
静态路由使用下一跳和出接口的区别(2009-12-03 23:03:00)
摘要:
在配置静态路由时,下一跳可以使用下一路由器的IP地址,也可以使用本路由器的出站接口。在点对点的网络中,两者可能没有什么差别,但在以太网中,两者有很大差别。
在以太网中,两个相邻接口之间的通信是依靠MAC地址。相邻接口通信时,需要知道对方的MAC地址,根据MAC地址,将通信数据转换成数据帧后交付给网络,进而到对方。而对方MAC地址的获得,是通过第二层数据帧广播,由ARP协议完成的。
当静态路由中使用出站接口做为下一跳时,路由器会认为目标网络和接口处在“直连网络”中。看下图的拓扑:
在路由器R1中的静态路由为 ip route 192.168.2.0 255.255.255.0 fastethernet0/1 时,R1就认为192.168.2.0/24网络和自己直连。可以在R1中使用 show ip route 命令看出,如下图示
在以太网中,直连网络中主机间的通信是通过ARP协议广播来获取到要交付的目标主机的MAC地址的。也就是说,当R1左侧网络中的PC1要和R2右侧网络的PC2和PC3通信时,数据传递到R1时,R1看到目标网络是自己的直连网络(由于静态路由中指定下一跳为自身接口所致),于是R1就要在F0/1所处网络发出ARP请求广播,来寻找192.168.2.11/12对应的MAC地址。
这时,如果R2启用了ARP代理,那么R2将代替PC2和PC3应答此ARP请求,也就是说返回给R1:192.168.2.11和12对应的MAC地址是R2的F0/1接口MAC。这样,R1中将产生两条ARP缓存记录,分别为:
192.168.2.11 R2的F0/1的MAC
192.168.2.12 R2的F0/1的MAC
在PC1上分别PING 192.168.11和12,然后在R1上使用show arp命令查看到的结果如下图示:
c803.0f8c.0001正是R2的F0/1接口的MAC。
c 宏技巧总结(2009-04-08 16:07:00)
摘要:C语言宏定义技巧(zt)1,防止一个头文件被重复包含
#ifndef COMDEF_H
#define COMDEF_H
//头文件内容
#endif
2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。
typedef unsigned char boolean; /* Boolean value type. */
typedef unsigned long int uint32; /* Unsigned 32 bit value */
typedef unsigned short uint16; /* Unsigned 16 bit value */
typedef unsigned char uint8; /* Unsigned 8 bit value */
typedef signed long int int32; /* Signed 32 bit value */
typedef signed short int16; /* Signed 16 bit value */
typedef signed char int8; /* Signed 8 bit value */
//下面的不建议使用
typedef unsigned char byte; /* Unsigned 8 bit value type. */
typedef unsigned short word; /* Unsinged 16 bit value type. */
typedef unsigned long dword; /* Unsigned 32 bit value type. */
typedef unsigned char uint1; /* Unsigned 8 bit value type. */
typedef unsigned short uint2; /* Unsigned 16 bit value type. */
typedef unsigned long uint4; /* Unsigned 32 bit value type. */
typedef signed c......
linux下如何安装vmware tools(2009-01-08 19:58:00)
摘要:如何安装vmware tools:
1安装vmtools for linux:
启动VM中的linux,
选择vmware workstation程序菜单中VM > install VMware tools...
执行:
mkdir /mnt/cdrom
mount -o ro /dev/cdrom /mnt/cdrom (vmtools的安装文件放在vmware虚拟的cdrom中,首先要mount上这个光驱才能找到安装文件)
cd /mnt/cdrom
tar -zxvf VMwareTools-5.0.0-12124.i386.tar.gz -C /tmp (把安装文件解压到/tmp)
cd /tmp/vmware-tools-distrib
./vmware-install.pl (执行vwware的安装脚本,这个脚本是用perl编写的)
在这里,安装程序会询问安装文件存放位置和设置分辨率等一系列问题,在大多数情况下,安装默认配置vmware tools就可以正常工作,因此,这里对每一个问题按回车键选择默认配置
安装完以后,vmware会添加一个vmhgfs的模块到内核中,可以使用lsmod查看......
ls 只显示目录(2009-01-08 19:34:00)
摘要:I have wrote a post stated that there are no direct ways to list just directories, and wrote a bash scripts using find to list the directories. I had made a WRONG statement. We can list just directories with ls -d, thanks to Ntropia who leaves me a comment.
Before that I had tried hard to use ls -d to list just directories but failed, therefore I wrote a bash script uses find to do that. It seems Ntropia provided a better solution and it is straight to the point, so let just treat the previous post as examples of find command.
The simplest way of list just directories
ls -d */
You can list the directories start with letter b
ls -d b*/
Further more list the subdirectories of the directories start with letter b
ls -d b*/*/
The outcome will be look like this
backup/10-5-2007/ backup/lunatic/ bin/gdc/
backup/ccbe/ backup/wplbe/ bt/çŽ‹åŠ›å® - 改å˜è......
gotoxy(2008-11-30 17:36:00)
摘要:vc下的conio.h中没有相应的gotoxy();这只在tc,bc中才有
但可以自己构造一个
如:
#include<windows.h>
#include<iostream>
using namespace std;
void gotoxy(int x, int y) {
COORD c;
c.X = x - 1;
c.Y = y - 1;
SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
int main()
{ gotoxy(20,12);
std::cout<<"Hello world!"<<endl;
return 0;
}
其中的COORD和SetConsoleCursorPosition定义在wincon.h上
SetConsoleCursorPosition用于在相应的设备设置光标的位置,两个参数分别是设备句柄和光标位置结构
GetStdHandle定义在winbase.h上用于获得标准输入、输出、错误输出句柄
当参数标识为STD_OUTPUT_HANDLE时获得标准输出句柄......
eclipse Doc(2008-11-06 17:07:00)
摘要:http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.cdt.doc.user/concepts/cdt_c_makefile.htm......
组合--非递归实现(2008-04-01 23:31:00)
摘要:组合算法 (来源与互联网)
本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标代表的数被选中,为0则没选中。
首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。
然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为“01”组合,同时将其左边的所有“1”全部移动到数组的最左端。
当第一个“1”移动到数组的m-n的位置,即n个“1”全部移动到最右端时,就得到了最后一个组合。
例如求5中选3的组合:
1 1 1 0 0 //1,2,3
1 1 0 1 0 //1,2,4
1 0 1 1 0 //1,3,4
0 1 1 1 0 //2,3,4
1 1 0 0 1 //1,2,5
1 0 1 0 1 //1,3,5
0 1 1 0 1 //2,3,5
1 0 0 1 1 //1,4,5
0 1 0 1 1 //2,4,5
0 0 1 1 1 //3,4,5
以下是实现:
#include<stdio.h>
#def......
统计单词数小程序--C(2008-04-01 21:54:00)
摘要:#include<stdio.h>
int main(){
char ch;
int word = 0;
int count = 0;
while((ch=getchar())!='\n'){
if(ch == ' ')
word = 0;
else if(0 == word){
count++;
word = 1;
}
}
printf("the numbers of words is: %d", count);
return 0;
}......
c/c++内存划分(2008-04-01 21:20:00)
摘要:一、一个经过编译的C/C++的程序占用的内存分成以下几个部分:
1、栈区(stack):由编译器自动分配和释放 ,存放函数的参数值、局部变量的值等,甚至函数的调用过程都是用栈来完成。其操作方式类似于数据结构中的栈。
2、堆区(heap) :一般由程序员手动申请以及释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式类似于链表。
3、全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放空间。
4、文字常量区:常量字符串就是放在这里的。 程序结束后由系统释放空间。
5、程序代码区:存放函数体的二进制代码。
下面的例子可以完全展示不同的变量所占的内存区域:
//main.cpp
int a = 0; 全局初始化区
char *p1; 全局未初始化区
main()
{
int b; //栈中
char s[] = "abc"; //栈中
char *p2; //栈中
char *p3 = "123456"; //123456\0在常量区,p3在栈上
static int c =0; //全局(静态)初始化区
//以下分配得到的10和20字节的区域就在堆区
p1 = (char *)malloc(10);
p2 = new char[20];//(char *)malloc(20);
strcpy(p1, "123456"); //123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。
}
二、栈(stack)和堆(heap)具体的区别。
1、在申请方式上
栈(stack): 现在很多人都称之为堆栈,这个时候实际上还是指的栈。它由编译器自动管理,无需我们手工控制。 例如,声明函数中的一个局部变量 int b 系统自动在栈中为b开辟空间;在调用一个函数时,系统自动的给函数的形参变量在栈中开辟空间。
堆(heap): 申请和释放由程序员控制,并指明大小。容易产生memo......
论递归方法的实质和普遍意义(李志昌)(2008-02-01 23:40:00)
摘要:作者:李志昌 主题类号:B3/逻辑
【 文献号 】1-87
【原文出处】楚雄师专学报
【原刊期号】200001
【原刊页号】119~123
【分 类 号】B3
【分 类 名】逻辑
【复印期号】200005
【 标 题 】论递归方法的实质和普遍意义
【 作 者 】李志昌
【作者简介】李志昌,副教授,云南省楚雄州委党校文史科技教研室主任。楚雄州党校,云南楚雄 675000
【内容提要】从方法论意义上说,递归方法是一种从简单到复杂、从低级到高级的可连续操作的解决问题的方法。它的每一步骤都是能行可操作的,各步骤之间是连续转换的。递归定义是用简单的、自明的要素描述、构造、说明复杂的整体。递归方法是通过解决简单的问题来解决复杂的问题。在人们的思维过程中,普遍存在着递归机制。递归方法是一种处理问题的精致技巧、解决问题的有效方法。从哲学方法论角度研究递归方法,具有重要的意义。
【关 键 词】递归/递归操作/递归定义/递归证法/递归的实质
【 正 文 】
中图分类号:B812.3 文章标识码:A 文章编号:1008-5068(2000)01-0119-05
递归定义和递归方法是逻辑学、数学、计算机科学(程序设计)中经常运用的定义和方法,它们具有精确的含义,特别在解决某些困难问题时很有效,它仿佛是一种有趣而精巧的加工器,能使问题得到完满解决。在人的思维活动中,也普遍存在递归现象和递归机制。对于某些问题,只能用递归方法来处理;对于某些问题,用递归方法处理比其他方法更有效。在计算机程序中,递归可以构成一种自动推理机制。人工智能的主要问题之一,就是让计算机具有自动推理的功能。建立了一种“递归机制”后,一旦输入初始值(前提)计算机就可以进行自动推理而得到结果(结论)。递归方法是一种处理问题的精致技巧、解决问题的有效方法。
一、“递归”概念
所谓递归(来自拉丁文recurso,原意指往回跑、召回等)是指借助于“回归”而把未知的归结为已知的。所谓递归函数是一种数论函数,就是说这种函数的定义域和值域都是自然数,并且对未知数值的计算往往是要回归到已知数值才能求出。递归是一种循环结构,它把“较复杂”情形的计算,递次地归结为“较简单”情形的计算,一直归结到“最简单”情形的计......