模拟路由表示意图
核心:
新的直接进表
下一跳不一样要短的
下一跳一样要新的
(应用层的不是网络层的)
算法实现:
#include#include#include#include#include#include#include#includeusing namespace std;
const int maxR=6;//最大路由器数量
//时间间隔辅助函数
typedef long long ll;
ll getNowTime(){//返回秒数
struct timeval tv;
struct timezone tz;
gettimeofday(&tv,&tz);
return tv.tv_sec;//零头的微秒忽略
}
//路由表项
struct RIP{
char name;//本路由器名称
int N;//到目的网络N
int d;//距离d
char X;//下一跳路由器
ll time;//上次更新时间
bool is_valid;//是否有效
RIP(){is_valid=true;}
};
//发送的报文打包
vectorSend(vectorr,char c){
for(int i=0;irip[maxR];//路由表
char idToRname[]="ABCDEF";//int编号改为字母标号 0-A 1-B 2-C 3-D 4-E 5-F
vectorve[maxR];//一个vector包含多条记录是一个路由表 ve则可表示路由器分布图邻接表
//打印路由表
void printR(){
vectorr;
for(int i=0;i>N;
for(int i=0;i>name;//因为按顺序的所以不处理了
rp.name=name;//处理下也行 不过一次处理一次就够了 冗余但安全性高了
while(infile>>rp.N>>rp.d>>rp.X&&rp.N){
rp.time=getNowTime();
rip[i].push_back(rp);
}
}
infile.close();
}
//用领接表初始化网络结构图
void initve(char* file){
fstream infile(file);
if(!infile.is_open()) cout<>v){//第一个是当前结点 后面的都是当前结点的所有邻居 0表示结束
while(infile>>v1&&v1!='0'){
ve[v-'A'].push_back(v1);
}
}
infile.close();
}
//打印图
void printG(){
cout< send;
vectorrip1[maxR];
for(int i=0;i180) rip[i][j].is_valid=false;//180s无更新 标记无效
else if(!rip[i][j].is_valid&&(t1-rip[i][j].time)>120) rip[i].erase(rip[i].begin()+j);//无效后120s无更新 删除
}
}
}
int main(){
// freopen("运行结果.txt","w",stdout);
init("routes.txt");//用文件routes.txt初始化
printR();
initve("netGraphic.txt");//初始化网络拓扑图
printG();
int T=0,n=0;
while(true){
sleep(1);//每隔3秒更新路由表 为了演示运行结果方便不设置为30s秒了
cout<
文件:
netGraphic.txt 网络拓扑图 0代表一行结束
A B D E 0
B A C 0
C B F 0
D A E F 0
E A D F 0
F C D E 0
routes.txt 各个路由表初始状态
6
A
1 1 -
2 1 -
3 1 -
0 0 0
B
3 1 -
4 1 -
0 0 0
C
4 1 -
6 1 -
0 0 0
D
2 1 -
5 1 -
0 0 0
E
1 1 -
5 1 -
0 0 0
F
5 1 -
6 1 -
0 0 0
#第一个数字N表示路由器个数
#N组,每组表示一个路由器表项 每个路由器表项中目的网络为0表示此路由器结束
3个文件要放在同一个文件夹下执行
运行结果:
***********************路由表A************************
到目的网络N距离d下一跳路由器X
11-
21-
31-
***********************路由表B************************
到目的网络N距离d下一跳路由器X
31-
41-
***********************路由表C************************
到目的网络N距离d下一跳路由器X
41-
61-
***********************路由表D************************
到目的网络N距离d下一跳路由器X
21-
51-
***********************路由表E************************
到目的网络N距离d下一跳路由器X
11-
51-
***********************路由表F************************
到目的网络N距离d下一跳路由器X
51-
61-
**********************网络拓扑结构********************
A B D E
B A C
C B F
D A E F
E A D F
F C D E
------------------------第1次更新------------------------
***********************路由表A************************
到目的网络N距离d下一跳路由器X
11-
21-
31-
42B
52D
***********************路由表B************************
到目的网络N距离d下一跳路由器X
12A
22A
31-
41-
62C
***********************路由表C************************
到目的网络N距离d下一跳路由器X
32B
41-
52F
61-
***********************路由表D************************
到目的网络N距离d下一跳路由器X
12A
21-
32A
51-
62F
***********************路由表E************************
到目的网络N距离d下一跳路由器X
11-
22A
32A
51-
62F
***********************路由表F************************
到目的网络N距离d下一跳路由器X
12E
22D
42C
51-
61-
------------------------第2次更新------------------------
***********************路由表A************************
到目的网络N距离d下一跳路由器X
11-
21-
31-
42B
52D
63B
***********************路由表B************************
到目的网络N距离d下一跳路由器X
12A
22A
31-
41-
53A
62C
***********************路由表C************************
到目的网络N距离d下一跳路由器X
13B
23B
32B
41-
52F
61-
***********************路由表D************************
到目的网络N距离d下一跳路由器X
12A
21-
32A
43A
51-
62F
***********************路由表E************************
到目的网络N距离d下一跳路由器X
11-
22A
32A
43A
51-
62F
***********************路由表F************************
到目的网络N距离d下一跳路由器X
12E
22D
33C
42C
51-
61-
------------------------第3次更新------------------------
本次没有任何有价值的修改!说明前面2次修改后,每一个路由器都得到了全局路由信息!
------------------------第4次更新------------------------
本次没有任何有价值的修改!说明前面2次修改后,每一个路由器都得到了全局路由信息!
------------------------第5次更新------------------------
本次没有任何有价值的修改!说明前面2次修改后,每一个路由器都得到了全局路由信息!
------------------------第6次更新------------------------
本次没有任何有价值的修改!说明前面2次修改后,每一个路由器都得到了全局路由信息!
------------------------第7次更新------------------------
本次没有任何有价值的修改!说明前面2次修改后,每一个路由器都得到了全局路由信息!
------------------------第8次更新------------------------
本次没有任何有价值的修改!说明前面2次修改后,每一个路由器都得到了全局路由信息!
------------------------第9次更新------------------------
本次没有任何有价值的修改!说明前面2次修改后,每一个路由器都得到了全局路由信息!
------------------------第10次更新------------------------
本次没有任何有价值的修改!说明前面2次修改后,每一个路由器都得到了全局路由信息!