# 简单的路由程序设计
# 一、实验环境
## 1.1 实验要求
本实验的目的是利用visual C++编写一个简单的路由程序,实现IP数据报的转发。本实验可以在一个局域网中进行,采用如下图所示的实验环境:
![](https://www.writebug.com/myres/static/uploads/2022/4/8/a03ec4ac2471d853fad7da76c7aa6681.writebug)
其中路由R1和R2是连接不同子网的通用计算机,通过R1和R2上运行编制的路由程序,绑定双IP,通过路由程序添加路由表,对接收的数据包进行分析和转发,实现处于不同网络中的主机I和II的相互通信。通信测试由 ping命令执行,可以通过tracer +IP地址来追踪数据包在网络中的转发路径。
## 1.2 路由软件应该处理的内容
编制一个较为完整的路由软件相当复杂包含如下工作:
- 为经过的IP 数据报选择路由:路由器基本功能,对接受的IP数据报提取目的IP地址,根据自己的路由表信息为该数据报选择最优的转发路径。
- 处理IP数据报的TTL域中的数值,抛弃TTL<=0的数据报,将转发的IP数据报TTL 减一。
- 分片处理。
- 处理IP数据报选项:处理IP数据报可能的选项(记录路由、源路由、时间戳等)。
- 重新计算IP数据报的头部校验和:由于路由软件需要进行TTL处理、分片处理、选项处理等工作,因此,需要送出的IP数据报报头需要重新计算校验和。
- 生成和处理ICMP报头
- 实现路由协议,维护静态路由。
- 实现ARP协议,形成数据帧:在将一个IP数据报送往下一跳步之前,路由处理软件需要获取下一站的物理地址,然后形成数据帧从选择的网络接口发送出去。
其中,简单的路由软件可以忽略分片处理、选项处理、动态路由等功能的实现,将精力重点放在路由的选择与IP数据报的转发。
## 1.3 路由选择的基本原理
### 1.3.1 IP互联网采用表驱动的路由选择算法
- 需要路由选择的设备保存一张IP路由表
- 路由表存储有关目的地址及怎样到达目的地址的信息
- 通过查询路由表决定把数据报发往何处
### 1.3.2 IP路由选择利用IP地址隐藏主机的信息
连接到同一网络的所有主机共享同一网络号一个标准的路由选择算法示意图如下:
![](https://www.writebug.com/myres/static/uploads/2022/4/8/8db838671c1fb803c15b65a035241a40.writebug)
一个子网选路的示意图如下:
![](https://www.writebug.com/myres/static/uploads/2022/4/8/19b877ed7e20b393adb4278421e286fe.writebug)
## 1.4 相关的ICMP报文
#### 目的不可达报文
当路由器不能为数据包找到路由器或主机交付数据包时,就丢弃该数据包,然后向源主机发出ICMP目的不可达报文。
#### 超时报文
- 路由器在转发数据包时,如果生存周期TTL值减1后为0,就丢弃这个数据包。当丢弃这个数据包时,路由器向源主机发出ICMP超时报文。
- 当计时器的时限到,而目的主机还没有接收到一个数据包的所有分片时,它就会将数据包的所有分片丢弃并向源主机发出ICMP超时报文。
## 1.5 实验编译运行环境
本程序编译环境是:Visual Studio 2012;系统环境是:Windows 8(64位);
# 二、“简单的路由器”程序的编写
## 2.1 程序界面
![](https://www.writebug.com/myres/static/uploads/2022/4/8/8b45dff6a98ac7c0f31f6bdbd702f67d.writebug)
程序在转发数据包测试界面如下:
![](https://www.writebug.com/myres/static/uploads/2022/4/8/00fdc708a83a2459a4f5f482a2df414e.writebug)
## 2.2 程序实现的功能
基本要求:
- 静态路由表的维护:静态路由的添加、修改和删除等维护功能;自动获得与本机直接相连的路由信息
- IP 数据报的处理:IP 数据报的接收、选路、发送(包括ARP 解析)等工作;忽略分片处理、选项处理、动态路由等功能。
- 日志:显示本机的网络接口、IP 数据报的接收情况、IP 数据报的选路情况、IP 数据报的发送情况。
扩展实现:
- 实现了处理IP数据报的TTL值
- 重新计算IP数据报的头部校验和
- 生成和处理ICMP报文
## 2.3 路由程序的设计
路由器的结构图如下:
![](https://www.writebug.com/myres/static/uploads/2022/4/8/57cf23939b50f50cf810128798a659ee.writebug)
本程序着重处理IP数据报的接收、匹配路由、重设数据报中的一些数据、转发数据报的工作。路由表的操作如下图所示:
![](https://www.writebug.com/myres/static/uploads/2022/4/8/65a636b6b170fefe8ce2d9c1cf8aee03.writebug)
程序设计流程如下图所示:
![](https://www.writebug.com/myres/static/uploads/2022/4/8/a6c86830e45e6f059474afe3ed7fb090.writebug)
其中,处理IP数据报的过程如下图所示:
![](https://www.writebug.com/myres/static/uploads/2022/4/8/891bf5b50caaf7c7a00031aee3cae764.writebug)
按照模块划分可以分成三部分:
- 路由器初始化模块
- 静态路由表维护模块
- 数据包捕获与处理模块
下面分别介绍各部分的实现:
#### 路由器初始化模块
初始化模块负责初始化设备,添加与路由器直接相连网络的路由表项,并启动相应的数据包捕获与处理模块;
定义路由表数据结构
![](https://www.writebug.com/myres/static/uploads/2022/4/8/53d91be7774b0e54b82de8363e6b2af9.writebug)
定义全局变量
![](https://www.writebug.com/myres/static/uploads/2022/4/8/275adf5fc0f93f56d0edb94f6e42c9be.writebug)
路由器的初始化
路由器的初始化过程图如下:
![](https://www.writebug.com/myres/static/uploads/2022/4/8/0bb85936946ce7059c216532ab0d584b.writebug)
初始化-获得本机的设备列表
![](https://www.writebug.com/myres/static/uploads/2022/4/8/b111e0f124e7ee72988d40a6089c75b9.writebug)
初始化-获得接口信息和IP地址信息
![](https://www.writebug.com/myres/static/uploads/2022/4/8/fafae5b38e67b360d968e98c2e96ad64.writebug)
初始化-打开设备接口
![](https://www.writebug.com/myres/static/uploads/2022/4/8/15082f28d2dba71f1832286c00c4303d.writebug)
初始化-获得各接口MAC地址
![](https://www.writebug.com/myres/static/uploads/2022/4/8/e19a1fca866fcece692a00f05c25ec20.writebug)
初始化-初始化路由表
![](https://www.writebug.com/myres/static/uploads/2022/4/8/6abf202a7b01c5536fa09510c159b610.writebug)
初始化-设置过滤规则开始捕获
![](https://www.writebug.com/myres/static/uploads/2022/4/8/96f5662babea6363d3bcba45406bc799.writebug)
### 2.3.1 静态路由表维护模块
静态路由表维护模块完成路由表的添加、删除以及显示;
添加路由表项
![](https://www.writebug.com/myres/static/uploads/2022/4/8/edb94800ba2049240d4fd8e14a2a6641.writebug)
删除路由表项
### 2.3.2 数据包捕获与处理模块
数据包捕获与处理模块用于捕获流经本路由器的数据包并按照路由协议进行处理;
数据包的捕获
![](https://www.writebug.com/myres/static/uploads/2022/4/8/35f888a9e0029eb1d9c0059ba27c6d6c.writebug)
IP数据包的处理
IP数据包处理流程图如下:
![](https://www.writebug.com/myres/static/uploads/2022/4/8/4ba8c00c733fdf70f1b305a27ee2cb35.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/4/8/6b33716be279b0b29d5c6641264f7ab1.writebug)
ARP数据包的处理
arp数据包的处理流程图如下:
![](https://www.writebug.com/myres/static/uploads/2022/4/8/0941e1d53b3b71d4286e2742353b0c5e.writebug)
发送IP数据包
![](https://www.writebug.com/myres/static/uploads/2022/4/8/526331268e0d7cd3b063a22056e78ff2.writebug)
# 三、实验结果
## 3.1 程序检测环境的构建
首先在一台计算机(路由器)上配置双IP分别是192.168.1.1和
如下:
![](https://www.writebug.com/myres/static/uploads/2022/4/8/d9236dae2c
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++(QT)实现简单的路由程序【100012041】
共165个文件
tlog:135个
h:5个
cpp:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 162 浏览量
2023-04-25
09:34:29
上传
评论
收藏 15.39MB ZIP 举报
温馨提示
本实验的目的是利用visual C++编写一个简单的路由程序,实现IP数据报的转发。本实验可以在一个局域网中进行:其中路由R1和R2是连接不同子网的通用计算机,通过R1和R2上运行编制的路由程序,绑定双IP,通过路由程序添加路由表,对接收的数据包进行分析和转发,实现处于不同网络中的主机I和II的相互通信。通信测试由 ping命令执行,可以通过tracer +IP地址来追踪数据包在网络中的转发路径。
资源推荐
资源详情
资源评论
收起资源包目录
基于C++(QT)实现简单的路由程序【100012041】 (165个子文件)
SimperRouterDlg.cpp 30KB
SimperRouter.cpp 2KB
stdafx.cpp 137B
SimperRouter.vcxproj.filters 2KB
resource.h 2KB
stdafx.h 2KB
SimperRouterDlg.h 1KB
SimperRouter.h 423B
targetver.h 226B
SimperRouter.ico 66KB
vc110.idb 2.64MB
SimperRouter.lastbuildstate 112B
LICENSE 1KB
SimperRouter.log 1KB
README.md 11KB
stdafx.obj 797KB
SimperRouter.pch 35.56MB
vc110.pdb 6.35MB
简单的路由程序设计实验报告.pdf 1.62MB
pic3.png 32KB
pic2.png 18KB
pic1.png 8KB
SimperRouter.rc 12KB
SimperRouter.rc2 680B
SimperRouter.res 1.37MB
SimperRouter.sln 883B
SimperRouter.v11.suo 27KB
CL.read.1.tlog 154KB
rc.read.1.tlog 134KB
cl.command.1.tlog 8KB
link.read.1.tlog 6KB
link.command.1.tlog 4KB
CL.write.1.tlog 3KB
rc.command.1.tlog 1KB
link.write.1.tlog 1006B
rc.write.1.tlog 302B
link.23892-mt.write.1.tlog 2B
link.16200.read.1.tlog 2B
link.12464-mt.write.1.tlog 2B
link.12464.read.1.tlog 2B
link.32412.read.1.tlog 2B
link.12160-rc.read.1.tlog 2B
link.20520-rc.write.1.tlog 2B
link.28520-mt.write.1.tlog 2B
link-rc.read.1.tlog 2B
link.23892.write.1.tlog 2B
link.12044-cvtres.read.1.tlog 2B
link.20520-cvtres.write.1.tlog 2B
link.24836.read.1.tlog 2B
link.24836-rc.read.1.tlog 2B
link.23892-rc.read.1.tlog 2B
link.32412-rc.write.1.tlog 2B
link.23492-cvtres.read.1.tlog 2B
link.20520-rc.read.1.tlog 2B
link.10184.write.1.tlog 2B
link.24836.write.1.tlog 2B
link.18464-cvtres.read.1.tlog 2B
link.24836-mt.write.1.tlog 2B
link.5108-rc.read.1.tlog 2B
link.28520-rc.read.1.tlog 2B
link.12464-cvtres.read.1.tlog 2B
link.28520-cvtres.read.1.tlog 2B
link.23492.write.1.tlog 2B
link.12160.write.1.tlog 2B
link.28520.read.1.tlog 2B
link.12464-mt.read.1.tlog 2B
link.10184-mt.write.1.tlog 2B
link.18464-rc.read.1.tlog 2B
link.13412.write.1.tlog 2B
link.24836-mt.read.1.tlog 2B
link.18464-mt.read.1.tlog 2B
link.16200-cvtres.write.1.tlog 2B
link.24836-cvtres.write.1.tlog 2B
link.13412-cvtres.read.1.tlog 2B
link.28520-cvtres.write.1.tlog 2B
link.12464-rc.read.1.tlog 2B
link.5108-mt.read.1.tlog 2B
link.23492-rc.write.1.tlog 2B
link.12044-mt.read.1.tlog 2B
link.12160.read.1.tlog 2B
link.12160-mt.write.1.tlog 2B
link.32412.write.1.tlog 2B
link.13412-mt.read.1.tlog 2B
link.16200-mt.write.1.tlog 2B
link.12044-cvtres.write.1.tlog 2B
link.20520-mt.write.1.tlog 2B
link.20520.write.1.tlog 2B
link.32412-mt.read.1.tlog 2B
link.5108.read.1.tlog 2B
link.32412-cvtres.write.1.tlog 2B
link.13412-rc.write.1.tlog 2B
link.32412-rc.read.1.tlog 2B
link.23892.read.1.tlog 2B
link.25732.write.1.tlog 2B
link.5108-cvtres.read.1.tlog 2B
link.12464-rc.write.1.tlog 2B
link.23492-mt.write.1.tlog 2B
link.5108-rc.write.1.tlog 2B
link.16200.write.1.tlog 2B
link.24836-rc.write.1.tlog 2B
共 165 条
- 1
- 2
资源评论
神仙别闹
- 粉丝: 2674
- 资源: 7640
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功