【数据链路层】循环冗余码CRC、后退N帧协议GBN、选择重传协议SR、CSMA/CA

简介: 【数据链路层】循环冗余码CRC、后退N帧协议GBN、选择重传协议SR、CSMA/CA

循环冗余码CRC

/**
     * 计算CRC16校验码
     *
     * @param bytes
     * @return
     * [1,3,4,1,205,1,18,235,173]
     */
    public static String CRC16(byte[] bytes) {
        int CRC = 0x0000ffff;
        int POLYNOMIAL = 0x0000a001;
        int i, j;
        for (i = 0; i < bytes.length; i++) {
            CRC ^= ((int) bytes[i] & 0x000000ff);
            for (j = 0; j < 8; j++) {
                if ((CRC & 0x00000001) != 0) {
                    CRC >>= 1;
                    CRC ^= POLYNOMIAL;
                } else {
                    CRC >>= 1;
                }
            }
        }
        return Integer.toHexString(CRC);
    }
     public static void main(String[] args) {
        byte[] s ={1,3,4,1,(byte) 205,1,18,(byte)235,(byte)173};
         System.out.printf("1111%s\r\n",CRC16(s));
        if (CRC16(s)!="00"){
            System.out.printf("2222%s\n",CRC16(s));
        }
    }

多帧滑动窗口

连续ARQ协议

发送窗口的大小<=窗口总数-1

例如:由3比特来编号,窗口总数为8,编号0到7

如果把7号也用了,那么当全部发送0-7号的所有帧的时候,发送方看自己设置的超时的记录表,如果显示超时了,那我们重新发0-7号。接收方无法辨别第一次和第二次的帧

第二种情况,发送方认为自己发送成功,那么继续发送但是编号还是0-7,接收方还是无法区分

因此留下一个不用来打乱发送顺序,让第一次第二次发的序号有区别,这样就顺序有的变了。重传的还是没变-----------------------------------------------0【我的理解

后退N帧协议GBN

后退N帧式ARQ中,发送方不必等到收到上一帧的ACK后才开始发送下一帧。

而是可以发送连续帧。

当接收方检测到失序的信息帧后,要求发送方重发最后一个正确接收的信息帧之后的所有未被确认的帧

或者,在发送方发送了N帧后,发现N个帧的前一个帧在计时器超时后仍未返回其确认信息,则该帧被判定为出错或者丢失。

此时发送方不得不重传该出错帧以及随后的N个帧。

换句话说,接收方只能按顺序接受帧!

这个协议GBN还可以连续收到很多帧以后再传确认信息

表示此帧之前所有帧都已经收到!

必须按顺序接受!

如果收到后面的帧,就会重复返回刚才正式接受的帧的ack—重复返回

直到收到正确的

发送窗口最大值是 2^n-1 ,接收窗口1


选择重传协议SR

CSMA/CA—针对无线局域网

最小帧长=总线传播时延x数据传输速率x2

避免碰撞

802.11标准定义了无线网的CSMA/CA协议。对CSMA/CD进行了修改。

局域网不使用碰撞检测,一旦开始发送就会完整发送,但是碰撞存在的时候,仍然发送整个数据帧,会严重降低网络的效率,因此要采用碰撞避免技术降低碰撞的可能性。00000000000000000000000000000

无线信道通信质量不如有线信道。

802.11使用链路层确认/重传(ARQ)方案。

站点每通过无线网络发送完一帧,就要等待确认帧后再发下一帧。

发送之前,完成侦听要有一个时间间隔,IFS帧间间隔。

InterFrame Space

任何站要发送数据帧,都要经过一个间隔。而且要进入争用窗口。只有第一个帧发送的时候不使用退避算法,其他情况都会使用

处理隐蔽站问题RTS,CTS

假设站A和站B都在AP的覆盖范围内,但是A和B相距较远,彼此都听不到对方的广播,那么在A和B都检测到信道空闲的时候,都向AP发送信息,从而导致碰撞。为了解决该问题,802.11允许发送站对信道进行预约。源站在发送数据帧之前要广播一个很短的请求发送控制帧(RTS)该帧包含有本次通信所需维持的时间,能够被其范围内包括AP在内的站点听到。如果信道空闲,则AP广播一个允许发送CTS帧,它包括这次通信所需的持续时间(从RTS中复制的),该帧也能够被AP范围内包括A和B在内的站点听到。B和其他站带你听到CTS后,会在CTS指明的时间能一直发送。也就是说,CTS有两个作用:1.给请求源明确的发送许可2.告诉其他站在你在预约期内不要发送。

使用RTS和CTS会导致网络通信效率下降,但是这两种帧都很短,和帧冲突导致的重传相比,他们对网络通信效率的影响微乎其微。


🌸I could be bounded in a nutshell and count myself a king of infinite space.

特别鸣谢:木芯工作室 、Ivan from Russia


相关文章
N..
|
开发框架 前端开发 JavaScript
Bootstrap轮播图
Bootstrap轮播图
N..
311 1
|
机器学习/深度学习 Java TensorFlow
模型推理脚本
模型推理脚本可以使用各种编程语言编写,如Python、C++、Java等。在机器学习和深度学习领域中,Python是最常用的编程语言之一,因为它有许多流行的深度学习框架,如TensorFlow、PyTorch和Keras,这些框架都提供了简单易用的API来加载模型和进行模型推理。
383 5
|
机器学习/深度学习 算法
大模型开发:什么是过拟合和欠拟合?你如何防止它们?
机器学习中,过拟合和欠拟合影响模型泛化能力。过拟合是模型对训练数据过度学习,测试集表现差,可通过正则化、降低模型复杂度或增加训练数据来缓解。欠拟合则是模型未能捕捉数据趋势,解决方案包括增加模型复杂度、添加特征或调整参数。平衡两者需通过实验、交叉验证和超参数调优。
2260 0
|
开发框架 移动开发 JavaScript
uniapp优缺点
UniApp 是一个跨平台的应用开发框架,基于 Vue.js 和 Webpack,可以将代码编译成多个平台的应用,如小程序、H5、App 等。
|
人工智能 固态存储 安全
一文告诉你CXL是什么,有什么新的机会 (上)
> 1. 大数据AI/ML应用爆发驱动大内存需求,但内存增长受限,CXL互联方案应运而生 > 2. CXL分为1.0/2.0/3.0版本,分别提供直连、池化、Fabric能力,预计在2022年/203年/2025年之后市场可用,目前看来池化对于软件的影响最大 > 3. CXL更多是对于已有架构的性能优化,全新的机会不多,较大的机会在于系统软件、内存即服务,以及内存数据库和内存云结构 > 4. CXL大概率将成为跨计算引擎的内存结构标准,短期利好云厂商,长期会数据中心架构产生结构性的变革
3614 0
|
5月前
|
人工智能 运维 自然语言处理
首个智能体模型实测:产品、开发、运维“全包了”
2025年,AI进入“动手”时代。智谱发布新一代大模型GLM-4.5,全球排名第三、国产第一,专为智能体设计,融合推理、编码与智能体能力,实现自主规划与执行任务。通过8个Demo展示其强大能力,涵盖网页设计、课件制作、小游戏开发等,展现其“带手的脑”特性,推动AI从实验室走向真实场景。
319 0
|
数据可视化 数据挖掘 数据处理
实时计算Flink评测
本文介绍了Flink在实时计算领域的应用实践及核心功能评估,涵盖用户行为分析、电商羊毛党识别、实时销售数据分析三大场景,展示了Flink在处理实时数据流时的高效性、准确性和可靠性。同时,文章还深入探讨了Flink的统一数据处理、事件驱动处理、高容错性、高性能低延迟、灵活窗口操作及丰富API等核心功能,并指出了其优势与待改进之处,为用户提供全面的参考。
|
运维 监控 数据中心
100Base-FX以太网媒体标准详解
【10月更文挑战第16天】
1132 1
|
数据采集 机器学习/深度学习 人工智能
利用AI技术实现个性化新闻推荐系统
【8月更文挑战第31天】 本文将介绍如何利用AI技术实现一个个性化的新闻推荐系统。我们将使用Python语言和一些常用的机器学习库,如scikit-learn和pandas,来构建一个简单的推荐系统。这个系统可以根据用户的阅读历史和兴趣偏好,为他们推荐相关的新闻文章。我们将从数据预处理、特征提取、模型训练和结果评估等方面进行详细的讲解。
|
并行计算 PyTorch 算法框架/工具
NumPy 高级教程——GPU 加速
NumPy 高级教程——GPU 加速【1月更文挑战第4篇】
1336 1