计算机网络求校验码,计算机网络课程设计校验码的计算

重庆师范大学

计算机网络课程设计 课程名:计算校验和 院系:计算机科学与技术

专业:计算机科学与技术(师范) 姓名:罗鹏 学号:20090512145 指导教师:余磊

完成时间:2011年12月18日

课程设计名称:计算校验和

一.程设计目的: ........................................................................................................................... 2 二.设计要求 ................................................................................................................................... 3 三.设计分析(流程图、模块功能) ........................................................................................... 3

1.数据的输入方式 .................................................................................................................... 3

2.校验和的计算及代码 ............................................................................................................ 3

四.结果(截图): ......................................................................................................................... 8 五.设计总结 ................................................................................................................................... 8

一.程设计目的:

网络上的信号最终都是通过物理传输线路进行传输的,如果高层没有采用差错控制,那么物理层传输的数据信号是可能有差错的。为了保证数据的正确性,在物理层的基础上设计了数据链路层。设计数据链路层的主要作用就是在原始的、有差错的物理传输线路的基础上,采用差错检测、差错控制与流量控制等方法,将有差错的物理线路改进成逻辑上无差错的数据链路,以向网络层提供高质量的服务。本课程设计主要通过一个简单例子使学生了解网络协议中校验和的计算过程,以及设置校验和的作用。

目前,进行差错检测和差错控制的主要方法是:在需要传输ude数据分组后面加上一定的冗余信息,这样的冗余信息通常都是通过对所发送的数据应用某种算法进行计算而得到的。数据的接收方在接收到数据后进行同样的计算再与收到的冗余信息进行比较,如果结果不同就说明出现了差错,此时可以要求发送方重传该组数据,以此达到保证数据准确性的目的。

在普遍使用的网络协议中都设置了校验和项以保存这些冗余信息,例如Ipv4、ICMPv4、IGMPV4、UDP和TCP等等

二.设计要求

根据前面介绍的算法,编制程序为给定数据计算校验和。 (1)建立合法的ip数据文件。 (2)输出:数据文件的校验和。

三.设计分析(流程图、模块功能)

校验和的计算主要分三个步骤:数据文件的输入,校验和的计算和校验结果的输出,主要的是数据的输入和校验和的计算过程。 1.数据的输入方式:数据源是以文档的的形式提供,文档中是一些十进制的数字。使用C++编程时直接打开输入文件。

ifstream in(\打开外部的aaa.txt文档(ip数据报文) 文档如:

2.校验和的计算及代码

校验和的算法是本程序的核心算法,这里我采用的是一种最为简单的算法,算法的主要思想如下:(1).将所得的十进制文件转换为二进制编码 (2).将所得的二进制编码重新按照所求从低到高的顺序排列

(3).对二进制编码分为十组,再转换为十进制并求和。 (4)对所求的和再转换为二进制并求反码。 具体的代码及解释如下: #include\#include\#include\#include#include#include//#include%using namespace std;

void xiaoyanmahe(int b[10]) //效验码函数 {

int x=0,c[1000],g[1000]; for(int i=0;i<16;i++) {

c[x++]=b[10]%2; b[10]/=2; } --x;

cout<=0)

cout=0) cout

int b[10],j=0; b[10]=0;

for(int k=0;k<10;k++)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值