计算机网络-实验五:网络程序设计

本文档详细介绍了如何通过编程模拟网桥功能,包括在Windows环境下使用Visual Studio实现帧转发,以及计算文件的16位效验和。实验中,程序交替从两个文件读取数据模拟网桥接收帧,根据转发表决定是否转发。同时,介绍了效验和计算的原理,强调了数据长度为偶数和处理进位的重要性。实验还涵盖了源代码及结果分析,讨论了帧地址设置对转发表构建的影响。
摘要由CSDN通过智能技术生成

一、实验目的
复习网桥的工作原理;复习校验和算法。
二、实验原理
Window10,visual studio 2019
三、实验内容
1、写一个程序来模拟网桥功能。
模拟实现网桥的转发功能,以从文件中读取帧模拟网桥从网络中收到一帧,即从两个文件中读入一系列帧,从第一个文件中读入一帧然后从第二个文件中再读入一帧,如此下去。对每一帧,显示网桥是否会转发。
要求:Windows或Linux环境下运行,程序应在单机上运行。
分析:用程序模拟网桥功能,可以假定用两个文件分别代表两个网段上的网络帧数据。而两个文件中的数据应具有帧的特征,即有目的地址,源地址和帧内数据。程序交替读入帧的数据,就相当于网桥从网段中得到帧数据,当然如果模拟的数据量比较少,也可以用两个数组代替两个文件存放帧数据,同样达到代表两个网段上的帧数据的效果。
对于网桥来说,能否转发帧在于把接收到的帧与网桥中的转发表相比较。判断目的地址后才决定是否转发。由此可见转发的关键在于构造转发表。这里转发表可通过动态生成。

2、编写一个计算机程序用来计算一个文件的16位效验和。最快速的方法是用一个32位的整数来存放这个和。记住要处理进位(例如,超过16位的那些位),把它们加到效验和中。
要求:1)以命令行形式运行:check_sum infile
其中check_sum为程序名,infile为输入数据文件名。
2)输出:数据文件的效验和
附:效验和(checksum)
参见RFC1071 - Computing the Internet checksum
 原理:把要发送的数据看成16比特的二进制整数序列,并计算他们的和。若数据字节长度为奇数,则在数据尾部补一个字节的0以凑成偶数。
 例子:16位效验和计算,下图表明一个小的字符串的16位效验和的计算。
为了计算效验和,发送计算机把每对字符当成16位整数处理并计算效验和。如果效验和大于16位,那么把进位一起加到最后的效验和中。

在这里插入图片描述
四、源代码
1、

#include <iostream>
#include <fstream>
using namespace std;
#define TABLEMAX 255 //转发表最大行数
int Count = 0;//转发表的行数
struct dataframe     //定义帧
{
   
	char source;		//源地址	
	char destination;	//目的地址	
	int data;			//数据
};
struct Forwardingtable    //定义转发表
{
   
	int interface;	//接口
	char destination;//目的地址
}table[TABLEMAX] = {
    0 };
int searchtable(dataframe dataframe)	//查找转发表,返回flag的值
{
   
	int temp1 = 0, temp2 = 0;//设置两个临时变量存储接口值
	int low = 0, high = Count - 1, mid;
	if (Count < 8)
	{
   
		for (int i = 0; i < Count; i++)
		{
   
			if (dataframe.source == table[i].destination) //地址是否在转发表中
			{
   
				temp1 = table[i].interface;                 //temp1等于源地址对应接口
			}
			if (dataframe.destination == table[i].destination) //地址是否在转发表中
			{
   
				temp2 = table[i].interface;                 //temp2等于源地址对应接口
			}
		}
	}
	while (Count >= 8 && low <= high)
	{
   
		mid = (low + high) / 2;
		if (dataframe.source == table[mid].destination)
		{
   
			temp1 = table[mid]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值