用MFC实现的路由分组转发模拟系统

本文介绍了一个使用MFC构建的模拟路由分组转发系统,系统包括三个主机和三个路由,每个路由拥有预设的路由表。文章详细讲解了分组转发原理,IP数据包结构,并阐述了socket编程实现过程,包括创建套接字、绑定IP地址和端口等步骤。此外,还展示了系统运行效果和源码下载链接。
摘要由CSDN通过智能技术生成

系统设计

网络拓扑

这里写图片描述
三个主机,三个路由(两两相通)
每个主机有一个IP地址和一个端口号。
每个路由维护一个路由表,表中存有到达特定网络终端(目标主机)的路径(下一(设备(路由))跳(的地址)),如下图所示。
这里写图片描述
此系统每个路由的路由表皆为事先设定,上图为路由1的路由表,规定到达目标主机Host3和Host2需要经过路由2,自身与Host1直接相连。

系统原理

分组转发原理

IP数据包也叫IP报文分组,传输在ISO网络7层结构中的网络层,它由IP报文头和IP报文用户数据组成,IP报文头的长度一般在20到60个字节之间,而一个IP分组的最大长度则不能超过65535个字节。 下图为IP分组的报文头格式,报文头的前20个字节是固定的,后面的可变。
这里写图片描述
可以看到报文头中包含一个32位源IP地址与一个32位目的IP地址,路由器通过取得报文头中的目的IP地址与路由表中存有的目的主机地址进行匹配找出对应的路径(下一跳),然后将数据包转发至找到的下一跳。匹配不成功则将数据报丢弃。
比如主机1(Host1)发出一个分组,与主机1直接相连的路由1收到这个分组,取得分组中的目的主机为Host3,通过路由表知道下一跳为路由2,所以路由1将把分组转发给路由2。同理,路由2收到路由1发来的分组,提取目的主机,再由路由表获得下一跳为路由3,于是将分组转发为路由3,路由3收到分组后直接发给与自身直接相连的主机3。

socket编程

步骤

1.#include <winsock2.h> //socket通信,系统头文件
2.加载套接字库

WSADATA wsaData; //存储被WSAStartup函数调用后返回的Windows sockets数据
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
        MessageBox("WSAStartup ERROR!");
}

3.创建套接字

//创建套接字UDP连接,AF_INET表示使用IPV4协议,SOCK_DGRAM是无连接报文类型,默认UDP协议
if ((m_sock = socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET)
{
        Me
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值