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

简介: 本节书摘来自华章社区《计算机网络课程设计(第2版)》一书中的第3章,第3.4节课程设计分析,作者:吴功宜 吴 英 ,更多章节内容可以访问云栖社区“华章社区”公众号查看

3.4 课程设计分析

  1. 填充帧头部字段
    要完成一次帧封装的过程,首先要完成的就是帧头部的装入,这一过程非常简单,只要将前导码、定界符、目的地址、源地址、长度字段的相应数值按顺序写入就可以了。其中,长度字段的值即为要发送的数据的实际长度。我们可以通过以下两种方式来获得长度字段的值。
  • 方法一
while(!in.eof())                       //读数据至缓冲区buf
{
    in.get(a);
    buf[j]=a;                          //通过j来记录输入数据的长度
    j++;
}
  • 方法二
infile.open(argv[1],ios::binary);      //打开指定输入文件
infile.seekg(0,ios::end);              //将文件读指针移到末尾
short length=(short)infile.tellg();    //获得位置偏移量,即为输入文件长度
file.put(char(length/256));            //将该长度写入数据长度字段(2 B)
file.put(char(length%256));

注意,上面程序的最后两行是把读到的数据长度值按逆序填入长度字段。这就涉及网络字节序的问题。
计算机数据存储有两种字节优先顺序,即高位字节优先和低位字节优先。

  • 低位字节优先:低序字节存储在起始地址。
  • 高位字节优先:高序字节存储在起始地址。
    Internet上的数据以高位字节优先顺序在网络上传输,所以对于在机器内部以低位字节优先方式存储的数据来说,在Internet上传输数据时就需要进行转换,否则就会出现数据不一致。

下面是几个字节顺序转换函数:

  • htonl():把32位值从主机字节序转换成网络字节序。
  • htons():把16位值从主机字节序转换成网络字节序。
  • ntohl():把32位值从网络字节序转换成主机字节序。
  • ntohs():把16位值从网络字节序转换成主机字节序。
  1. 填充数据字段
    在填充数据字段的过程中要注意的主要问题是数据字段的长度。802.3标准中规定了帧数据字段的最小长度为46 B,最大长度为1500 B。如果数据不足46 B,则需要通过填充0来补足;若数据长度超过1500 B,则将超过部分封装入下一个帧进行发送。

由于帧头部分应该包括6 B目的地址、6 B源地址字段、2 B长度字段以及4 B帧校验字段,因此帧头部分长度为18 B。前导码与帧前定界符不计入帧头长度中。那么,Ethernet帧的最小长度为64 B,最大长度为1518 B。
填充数据字段的代码如下:

if( len == 1500 )              //读满1500 B 后, 封装成一个帧并输出
{
    ...                        //封装成一个帧并输出
    len = 0;                   //长度计数重置0
}
//如果数据的长度小于46则补0
if( len < 46 ) 
{
    for(  i = len; i < 46; i ++ )
    
        fr.data[i] = 0x00;     //在数据字段中填充0
    
}
data_len=len;                  //获得数据的实际长度放入data_len
  1. CRC校验
    帧封装的最后一步就是对数据进行校验,并将校验结果记入帧校验字段。下面举例说明在本程序中是如何实现CRC-8校验算法的。设数据为10010010,CRC-8的生成多项式为X 8 + X 2 + X 1 + 1,即10000111。先看一下在代数学中计算CRC校验的一般算法。如果用竖式除法,计算过程如下:
10010001
100000111     (后面补8个0)
                    100000111
                          100011000
                          100000111
                                  111110000
                                  100000111
                                    11110111

从上式可以看出,CRC编码实际上是一个循环移位的模2运算。对于CRC-8,假设有一个9位的寄存器,通过反复移位和进行CRC除法,最终该寄存器中的值去掉最高一位就应该是我们所需要的余数。
上述步骤可以用下面的流程描述:

//crc是一个9位的寄存器
把crc中的值置为0
在原始数据input后添加8个0
while(数据未处理完)
begin
      if(crc首位是1)
          crc=crc X0R 100000111
      把crc中的值左移一位, 从input中读一位新的数据并置于crc的0位
end

crc中后8位就是经过CRC-8校验的余数。这样,我们只需要看后8位即可,因此上面流程可以简化。构造一个8位的寄存器crc,初始值为0,数据依次移入crc的0位,同时crc的7位移出。当移出的数据为1时,crc才和00000111进行XOR运算;移出的数据为0时,不做运算。每次crc中数据左移后就需要从输入数据中读入一位新的数据。由于左移时crc 0位补0,因此当读入的数据最高位为1时还需要对crc 0位进行处理(将crc与00000001异或使0位置1)。
下面给出伪代码:

//crc是一个8位的寄存器
把crc中的值置为0
在原始数据input后添加8个0
while(数据未处理完)
begin
    if(crc首位是1)
       crc左移1位
       crc=crc X0R 00000111
    else
       crc左移1位
    if(从input中读入的新的数据为1)
       将crc 0位置1
end
相关文章
|
1月前
|
人工智能 边缘计算 物联网
蜂窝网络未来发展趋势的分析
蜂窝网络未来发展趋势的分析
67 2
|
1月前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
2月前
|
机器学习/深度学习 数据采集 存储
时间序列预测新突破:深入解析循环神经网络(RNN)在金融数据分析中的应用
【10月更文挑战第7天】时间序列预测是数据科学领域的一个重要课题,特别是在金融行业中。准确的时间序列预测能够帮助投资者做出更明智的决策,比如股票价格预测、汇率变动预测等。近年来,随着深度学习技术的发展,尤其是循环神经网络(Recurrent Neural Networks, RNNs)及其变体如长短期记忆网络(LSTM)和门控循环单元(GRU),在处理时间序列数据方面展现出了巨大的潜力。本文将探讨RNN的基本概念,并通过具体的代码示例展示如何使用这些模型来进行金融数据分析。
382 2
|
4天前
|
安全 网络协议 网络安全
网络不稳定导致HTTP代理频繁掉线的分析
随着数字化时代的加速发展,网络安全、隐私保护及内容访问自由成为用户核心需求。HTTP代理服务器因其独特技术优势受到青睐,但其掉线问题频发。本文分析了HTTP代理服务器不稳定导致掉线的主要原因,包括网络问题、服务器质量、用户配置错误及IP资源问题等方面。
20 0
|
29天前
|
安全 网络协议 网络安全
【Azure 环境】从网络包中分析出TLS加密套件信息
An TLS 1.2 connection request was received from a remote client application, but non of the cipher suites supported by the client application are supported by the server. The connection request has failed. 从远程客户端应用程序收到 TLS 1.2 连接请求,但服务器不支持客户端应用程序支持的任何密码套件。连接请求失败。
|
1月前
|
存储 安全 网络安全
网络安全法律框架:全球视角下的合规性分析
网络安全法律框架:全球视角下的合规性分析
46 1
|
1月前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
|
2月前
|
存储 安全 网络安全
云端盾牌:云计算时代的网络安全守护在数字化浪潮中,云计算以其高效、灵活的特性成为企业转型的加速器。然而,伴随其迅猛发展,网络安全问题亦如影随形,成为悬在每个组织头顶的达摩克利斯之剑。本文旨在探讨云计算服务中的网络安全挑战,分析信息安全的重要性,并提出相应对策,以期为企业构建一道坚实的云端防护网。
在当今这个数据驱动的时代,云计算已成为推动创新与效率的关键力量。它允许用户随时随地访问强大的计算资源,降低了企业的运营成本,加速了产品上市时间。但随之而来的网络威胁也日益猖獗,尤其是对于依赖云服务的企业而言,数据泄露、身份盗用等安全事件频发,不仅造成经济损失,更严重损害品牌信誉。本文深入剖析云计算环境中的安全风险,强调建立健全的信息安全管理机制的重要性,并分享一系列有效策略,旨在帮助企业和个人用户在享受云服务带来的便利的同时,也能构筑起强有力的网络防线。
|
1月前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9-2):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
|
2月前
|
安全 网络安全 云计算
云计算与网络安全:技术融合与挑战分析
【9月更文挑战第31天】本文将深入探讨云计算和网络安全之间的关系,包括云服务、网络安全、信息安全等技术领域。我们将从云计算的基本概念和特性出发,分析其在网络安全方面的优势和挑战,并探讨如何通过技术和策略来提高云计算的安全性。同时,我们也将讨论网络安全在云计算环境下的重要性,以及如何通过有效的安全措施来保护云服务的安全。最后,我们将通过代码示例来展示如何在云计算环境中实现网络安全。
70 3