《计算机网络课程设计(第2版)》——2.3节相关知识

2.3 相关知识

  1. 校验和的概念
    网络上的数据最终都是通过物理传输线路进行传输的,如果高层没有采用差错控制,那么物理层传输的数据可能有差错。为了保证传输数据的正确性,在物理层的基础上设计了数据链路层。设计数据链路层的主要目的就是在原始的、有差错的物理传输线路的基础上,采用差错检测、差错控制与流量控制等方法,将有差错的物理线路改进成逻辑上无差错的数据链路,以向网络层提供高质量的服务。

目前,进行差错检测和控制的主要方法是:发送方在需要发送的数据后面增加一定的冗余信息,这些冗余信息通常是通过对发送的数据进行某种算法计算而得到的。接收方对接收数据进行同样的计算,然后与数据后面附加的冗余信息进行比较,如果比较结果不同就说明在传输中出现了差错,并要求发送方重新传送该数据,以此达到确保数据准确性的目的。
在普遍使用的网络协议(例如IP、ICMP、IGMP、UDP与TCP等)中,通常都设置了校验和字段以保存这些冗余信息。计算这些校验和的算法称为网络校验和算法,就是将被校验的数据按16位进行累加,然后取反码,如果数据字节长度为奇数,则数据尾部补一个字节的0以凑成偶数。关于计算校验和算法的详细信息请参考RFC 1071。

  1. 计算校验和
    有很多数学方法可以用来提高校验和的计算速度,下面我们将就此展开讨论。

(1) 交换性与结合性
因为校验和主要考虑被校验数据中所包含字节的数量是奇数还是偶数,所以校验和的计算可以以任意顺序进行,甚至可以把数据进行分组后再计算。
例如,用A,B,C,D,…,Y,Z分别表示一系列八位组,用[a,b]这样形式的字节组来表示a×256 + b的整数,那么16位校验和就可以通过以下形式给出:

[A, B] +誟C, D] +铡??[Y,Z]    [1]
[A, B] +誟C, D] +铡?+?[Z,0]    [2]
在这里,+沾?补数加法,即将前面的16位校验和按位取反。
[1]可以以
( [A, B] +?[C, D] +铡?+誟J,0] ) +? [0,K] +铡?+誟Y,Z] )     [3]
的形式进行计算。
(2) 字节顺序的自主性
打破被校验数据中的字节顺序仍可以计算出正确的16位校验和。
例如,我们交换字节组中两字节的顺序,得到
[B,A] +?[D,C] +铡?+?[Z,Y]    [4]

所得到的结果与[1]式是相同的(当然结果也是要进行一次反转的)。为什么会是这样呢?我们发现两种顺序获得的进位是相同的,都是从第15位到第0位进位以及从第7位到第8位进位。这也就是说,交换字节位置只是改变高低位字节的排列顺序,但并没有改变它们的内在联系。
因此,无论底层的硬件设置中对字节的接收顺序如何,校验和都可以被准确地校验出来。例如,假设校验和是以主机序(高位字节在前低位字节在后)计算的数据帧,但以网络序(低位字节在前高位字节在后)存放在内存中。每一个16位的字中的字节在传送过程中都交换了顺序,在计算校验和之后仍会先交换位置再存入内存,这样就与接收到的原本以网络序存储的数据帧中的校验和项保持一致了。
(3) 并行计算
某些机器的字处理长度是16位的倍数,这样可以提高它的计算速度。由于加法所具有的结合性,我们没有必要按照顺序对每个字节进行累加。相反,我们可以利用这一特点对它们进行并行累加。
并行地计算校验和只是增加了每次累加的信息长度。例如,在一个32位的机器上,我们可以一次增加4字节,即[A, B, C, D]+铡<扑憬崾笤侔牙奂雍汀罢鄣逼鹄矗岩桓?2位的数值变为16位,这样产生的新的进位也要循环累加起来。
此外,在此仍不需考虑字节顺序的问题,我们可以用訹D, C, B, A]+铡騕B, A, D, C] +铡庋乃承蚶醇扑阈Q楹停钪赵偻ü换?6位校验和中的字节序来得到正确的值。这些改变顺序的方法都是为了让所有的偶数字节进入一个校验和字节,所有的奇数字节进入一个校验和字节。

  1. 示例
    下面将通过一个简单的例子来演示通过上述的几种方法所得到的校验和的情况。

  1. 一些编码技术可以提高校验和的计算速度
    (1) 延迟进位法

这种方法在主要的累加循环结束之后再把进位值累加进和值。其实现方式就是用32位的累加器获得16位校验和,这样溢出就产生在高16位上。这种方法避免了累加器中进位传感器机构的设置,但是它要求的容量是原来的累加器容量的两倍,因此它更多地依赖于硬件条件。
(2) 反向循环法
这种方法可以减少由循环而产生的负荷,有效地展开内部的累加循环,把循环过程中的一系列加法命令复制下来。这种技术通常可以节省大量的时间,但是程序的逻辑设计会比较复杂。
(3) 合并数据拷贝法
计算校验和以及读入数据都需要将数据从内存的一个位置转移到另一个位置,这样会占用内存总线的带宽,而内存总线的传输效率是提高校验和计算速度的瓶颈,尤其是对于某些机器(如一些简单的慢速的微型机)来说,这个问题尤为严重。
为了解决这个问题,可以把数据读入的过程与校验的过程合二为一,也就是在读入数据的同时计算校验和,这样就可以省去一次数据移动的过程,从而提高校验和的计算速度。

时间: 2024-10-22 07:46:08

《计算机网络课程设计(第2版)》——2.3节相关知识的相关文章

《计算机网络课程设计(第2版)》——1.1节计算机网络课程的教学特点

第1章 计算机网络课程教学.实验与课程设计的关系 1.1 计算机网络课程的教学特点在进行计算机网络课程设计之前,我们需要对计算机网络课程的教学大纲.学习要求与教材体系做一个说明.因为不同的教材对学习内容的安排有所差异,但是本书综合考虑了不同教材的基本特点,总结计算机网络课程中必须掌握的基础知识与基本技能,在此基础上选择了14个课程设计的课题.根据计算机网络技术的特点,在计算机网络课程教学的组织中需要处理好以下三个方面的关系. 计算机技术知识与通信知识的关系从计算机科学与技术学科的角度来看,计算机

《计算机网络课程设计(第2版)》——1.3节计算机网络课程的知识点

1.3 计算机网络课程的知识点 1. 组织计算机网络课程的知识点 在组织计算机网络课程的知识点时,一般都是以Internet技术与高速网络技术为主线,加入网络发展的最新成果. 网络最重要的应用是Internet.Internet对科技进步和社会发展的影响是非常显著的,并且这种影响还在继续扩大,这也正体现出网络技术发展的生命力.因此,学习网络知识重要的是通过学习网络的基本知识,认识Internet的核心技术,理解Internet的实现方法.通过本课程的学习,学生能够初步掌握网络和Internet技

《计算机网络课程设计(第2版)》——导读

目 录 第一部分 课程设计目标第1章 计算机网络课程教学.实验与课程设计的关系 1.1 计算机网络课程的教学特点1.2 计算机网络课程的实验教学与课程设计的关系 1.3 计算机网络课程的知识点 1.4 课程设计要求及评分标准 第二部分 课程设计指导第2章 计算校验和 2.1 课程设计目的 2.2 课程设计要求 2.3 相关知识 2.4 课程设计分析 2.5 相关扩展 第3章 封装Ethernet帧 3.1 课程设计目的 3.2 课程设计要求 3.3 相关知识 3.4 课程设计分析 3.5 相关扩

《计算机网络课程设计(第2版)》——1.4节课程设计要求及评分标准

1.4 课程设计要求及评分标准 安排网络课程设计的目的有两个:一是引导学生将书本上抽象的概念与具体实现技术结合起来,使学习深化:二是消除学生对协议的神秘感,调动学生学习的积极性与主动性. 网络课程设计基本是按照上述的知识体系安排的.本书中的14个课程设计课题基本覆盖了上述4个学习单元的主要内容.每个题目都具有一定的代表性,希望学生通过完成课程设计课题,体会网络协议设计与实现过程,以及专业技术人员所使用的基本方法和技巧. 课程设计要求: 1) 正确理解题意. 2) 有良好的编程规范和适当的注释.

《计算机网络课程设计(第2版)》——3.1节课程设计目的

第 3 章 封装Ethernet帧 3.1 课程设计目的帧是在数据链路层中进行数据传输的基本单位.熟悉帧结构对于理解网络协议的概念.网络层次结构与协议执行过程具有重要意义.本课程设计的主要目的是通过封装Ethernet帧,了解Ethernet帧中各个字段的含义与用途.

《计算机网络课程设计(第2版)》——3.4节课程设计分析

3.4 课程设计分析 1. 填充帧头部字段 要完成一次帧封装的过程,首先要完成的就是帧头部的装入,这一过程非常简单,只要将前导码.定界符.目的地址.源地址.长度字段的相应数值按顺序写入就可以了.其中,长度字段的值即为要发送的数据的实际长度.我们可以通过以下两种方式来获得长度字段的值. 方法一 while(!in.eof()) //读数据至缓冲区buf { in.get(a); buf[j]=a; //通过j来记录输入数据的长度 j++; } 方法二 infile.open(argv[1],ios

《计算机网络课程设计(第2版)》——2.4节课程设计分析

2.4 课程设计分析 校验和的计算过程主要分为三个步骤:数据文件的输入.校验和的计算和校验结果的输出.其中,主要的是数据的输入和校验和的计算. 1. 数据的输入方式 输入数据可能是以字符形式存储的,而校验和的计算则要采用数据形式,所以在从文件读取数据时,都要进行字符到数据的相互转换. 1) 将读入的ASCII码转化为相应的整型变量. if(ch>='0'&&ch<='9') ch-='0'; else { if(ch>='a'&&ch<='f') c

《计算机网络课程设计(第2版)》——3.2节课程设计要求

3.2 课程设计要求 根据后面介绍的IEEE 802.3帧结构,编写程序将指定数据封装为Ethernet帧. 1)以命令行形式运行: EncapFrame input_file output_file 其中,EncapFrame为程序名,input_file为输入数据文件,output_file为输出数据文件. 2)输出内容:Ethernet帧的各字段内容.

《计算机网络课程设计(第2版)》——2.2节课程设计要求

2.2 课程设计要求根据后面介绍的校验和算法,编写程序为给定数据计算校验和.1) 以命令行形式运行: Checksum input_file 其中Checksum为程序名,input_file为输入数据文件名.2) 输出内容:数据文件的校验和.