您的当前位置:首页正文

黑龙江大学计算机网络实验

2021-11-13 来源:意榕旅游网
黑龙江大学计算机学院软件学院——计算机网络实验报告

黑龙江大学 实 验 报 告

课程名称 实验项目名称 计算机网络(Computer Network) RIP协议的模拟实现 实验时间 (5 月6日-5月20 日)第 10- 12 周, 7 -8 节 (日期及节次) 专业 年级 姓名 计算机科学与技术 2010 张宁 学生所在学院 学号 指导教师 计算机 科学技术学院 20100990 姜誉 教授 实验地点 实验成绩 教师签字

4#413 出勤、预习情况 操作技术及结果 实验报告 附加:综合实验 创新能力 综合成绩

黑龙江大学教务处

- 1 -

实验名称

RIP协议的模拟实现

实验目的

开设本实验可以使学生能够将课堂知识与实践相结合,让学生进一步理解计算机网络的基本原理和具体的通信机制,熟悉基本的计算机网络的组网技术,掌握初步的网络应用编程技术,为学生进一步深入学习网络应用、网络设计、网络应用开发打下一个坚实的基础,同时也能使学生在实践中体会、深化了解课堂中学习的知识。

实验类型

设计型

实验环境

编程环境:Visual C++ 6.0 运行环境:Windows XP

实验要求

以Socket通信程序为基础,在给定互联网络拓扑的前提下,模拟实现多个路由器利用RIP协议更新其路由表的工作过程。

实验内容与步骤

1、实验中主要使用的技术和算法

常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket (SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。这次实验中 用到的是数据报式Socket(SOCK_DGRAM)。数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠、无差错。类似于邮政系统服务。每个分组都携带完整的目的地址,各分组独立传送。

Socket 是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的Socket 系统调用。客户随机申请一个Socket,系统为之分配一个Socket号;服务器拥有全局公认的 Socket ,任何客户都可以向它发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。Socket利用客户/服务器模式巧妙地解决了进程之间建立通信连接的问题。

- 2 -

本地试验中,最核心的部分是RIP协议使用的距离向量算法,该算法对每一个相邻的路由器发送来的RIP报文,进行以下步骤:

(1)对地址为X 的相邻路由器发送过来的RIP报文,先修改此报文中的所有项目:把 “下一跳”字段中的地址都改为X,并把所有的“距离”字段的值加1,每一个项目都 有三个关键数据,即:到目的网络N,距离是d,下一跳路由器是X;.

(2)对修改后的RIP报文中的每一个项目,进行下述步骤。若原来的路由表中没有目的

网络N,则把该项目添加到路由表中,否则查看下一跳路由器地址,若下一跳路由器地 址是X,则把收到的项目替换原路由表中的项目,否则若收到的项目中的距离d小于路 由表中的距离,则进行更新,否则,什么也不做。

(3)若三分钟没有收到相邻的路由器的更新路由表,则把相邻路由器记为不可达路由器, 即把距离置为16(距离为16表示不可达)。 (4)返回。

2、设计思想 服务器端:

(1)创建套接字socket();

(2)绑定套接字到一个IP地址和一个端口上(bind()),端口号为520; (3)接受客户端发送的路由信息recvfrom();

(3)根据RIP协议的距离向量算法更改发送来的路由信息,并更新自身的路由信息; (4)向客户端发送更新后的路由信息send();

(5)互相发送路由信息send(),recvfrom(),直到某一方的路由信息不再发生更改, 结束通信,关闭套接字。 客户端:

(1)创建套接字socket();

(2)向服务器发自身的路由信息send();

(3)接受服务器端的路由信息recvfrom(),然后根据RIP协议的距离向量算法更改发 送来的路由信息,并更新自身的路由信息;

(4)互相发送路由信息send(),recvfrom(),直到某一方的路由信息不再发生更改, 结束通信,关闭套接字。 程序中模块控制流程图如下所示:

- 3 -

服务器 客户端 socket()创建套接字 获得端口号520和IP地址,与服 务器建立连接 socket()创建套接字 bind()绑定套接字 获得端口号,等待客户端连接 recvfrom()接收客户端发送的 路由信息,更新自身路由信息 sendto()向客户端发送自身的路由信息

closesocket()关闭套接字 发送路由信息 发送路由信息 建立连接 sendto()向服务器端 发送自身的路由信息 recvfrom ()接收服务器端发送的路由信息,更新自身路由信息 closesocket()关闭套接字 3、编码 服务器端: for(i=0;iflag=0;

for(ii=0;ii<=j1;ii++) {

{

if(strcmp(r_t2[i].net,r_t1[ii].net)==0)

- 4 -

}

}

if(strcmp(r_t1[ii].next_routing,\"r4\")==0) { } else {

if(r_t1[ii].len>r_t2[i].len) {

strcpy(r_t1[ii].net,r_t2[i].net); break;

r_t1[ii].len=r_t2[i].len;

r_t1[ii].len=r_t2[i].len;

strcpy(r_t1[ii].next_routing,r_t2[i].next_routing); }

} else

break; break;

else { }

if(flag==j1+1) { }

j1++;

strcpy(r_t1[j1].net,r_t2[i].net);

strcpy(r_t1[j1].next_routing,r_t2[i].next_routing); flag++;

}

r_t1[j1].len=r_t2[i].len;

客户端:

for(i=0;i- 5 -

{

flag=0;

for(ii=0;ii<=j1;ii++)//i1的 {

{ } else { }

if(flag==j1+1) {

j1++;

strcpy(r_t1[j1].net,r_t2[i].net); flag++;

if(strcmp(r_t1[ii].next_routing,\"r4\")==0) { } else {

if(r_t1[ii].len>r_t2[i].len) {

strcpy(r_t1[ii].net,r_t2[i].net); break;

if(strcmp(r_t2[i].net,r_t1[ii].net)==0)

r_t1[ii].len=r_t2[i].len;

r_t1[ii].len=r_t2[i].len;

strcpy(r_t1[ii].next_routing,r_t2[i].next_routing); }

} else

break; break;

}

- 6 -

r_t1[j1].len=r_t2[i].len; }

4、调试

(1)首先运行服务器端,等待客户端发送信息。

(2)然后运行客户端,输入的IP地址及端口号(端口号为520),输入自身的路由 信息。

(3)在客户端发送信息后,看服务器算端情况,服务器端端显示了本路由器的原始 信息,发送来的信息,发送来的信息更改后的信息及更新后的路由表。根据 RIP协议更新路由表的工作过程观察这些信息是否正确,若正确,则把更新后 的路由表信息发送给客户端。

(4)服务器端接收到客户端发来的信息后,同样观察服务器端显示的信息是否符合 RIP协议工作过程,若符合,则把自身更新后的路由表发送回客户端。 (5)按照上述说明反复发送信息,并观察路由表更新信息是否正确,直到某一方在 接收到路由信息并更新自己的路由信息后,发现没有变化时,则程序自行结束。 后者是正常关闭后结束程序。 5、测试 客户端 服务器端 6、实验过程(演示说明) 服务器端:

端口号 520 520 IP地址 127.0.0.1 127.0.0.1 发送数据 自身路由信息 自身路由信息 接受数据 服务器端路由信息 客户端路由信息

}

strcpy(r_t1[j1].next_routing,r_t2[i].next_routing);

- 7 -

客户端:

- 8 -

实验总结

在开始编写该实验前,首先我对上一次的实验进行了一下复习,然后,我又对在课堂上已经学习过的对本实验最核心的部分RIP协议的距离向量算法进行进一步的细致的学习。由于有了上一次的Socket通信编程实验的基础和对该实验核心算法的了解,因此在编写该实验时,我感到较为轻松。

通过这次的实验,使我能够将课堂知识与实践相结合,让我进一步理解计算机网络的基本原理和RIP协议的距离向量算法,同时掌握初步的网络应用编程技术,最重要的

- 9 -

是,我深刻的体会到温故而知新这句话的含义。因此,在以后的学习及实验中,我都会吸取这次实验的经验,先要对重点知识进行巩固和扎实,使自己做到编写实验时条理清晰,明确地知道下一步该做什么。只有这样,才能事半功倍。不仅节约时间,而且,提高了效率。

- 10 -

因篇幅问题不能全部显示,请点此查看更多更全内容