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

本文涉及的产品
视频直播,500GB 1个月
简介: 【数据链路层】循环冗余码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


相关文章
|
6月前
|
算法 SDN C++
以太网帧FCS校验:CRC32的三种实现
这篇文章讨论了CRC32校验码的三种实现方法,用于检测网络通信中的数据错误。首先介绍了基础的按位计算方法,虽然直观但效率低。接着,文章提出了使用非翻转查找表和翻转查找表的快速计算方法,后者在性能上更优。文中提供了C++代码示例,展示如何生成和使用这些查找表。最后,指出在实际应用中,应根据性能需求选择合适的方法。
|
6月前
|
缓存
计算机网络——数据链路层-可靠传输的实现机制:选择重传协议SR(介绍、工作原理、窗口尺寸、题目练习)
计算机网络——数据链路层-可靠传输的实现机制:选择重传协议SR(介绍、工作原理、窗口尺寸、题目练习)
230 1
|
6月前
|
缓存
计算机网络——数据链路层-可靠传输的实现机制:回退N帧协议GBN(无差错情况、累积确认、有差错情况、发送窗口尺寸)
计算机网络——数据链路层-可靠传输的实现机制:回退N帧协议GBN(无差错情况、累积确认、有差错情况、发送窗口尺寸)
190 0
计算机网络——数据链路层-可靠传输的实现机制:回退N帧协议GBN(无差错情况、累积确认、有差错情况、发送窗口尺寸)
|
6月前
|
算法
计算机网络——数据链路层-差错检测(奇偶校验、循环冗余校验CRC)
计算机网络——数据链路层-差错检测(奇偶校验、循环冗余校验CRC)
425 0
|
6月前
计算机网络——数据链路层-封装成帧(帧定界、透明传输-字节填充,比特填充、MTU)
计算机网络——数据链路层-封装成帧(帧定界、透明传输-字节填充,比特填充、MTU)
428 0
|
6月前
|
缓存 网络架构
计算机网络——数据链路层-可靠传输的实现机制:停止-等待协议SW(确认与否认、超时重传等,信道利用率及相关练习题)
计算机网络——数据链路层-可靠传输的实现机制:停止-等待协议SW(确认与否认、超时重传等,信道利用率及相关练习题)
137 0
|
自然语言处理 网络协议 算法
UDP协议和报文格式,校验和,CRC的含义
UDP协议和报文格式,校验和,CRC的含义
|
7月前
|
传感器 C++
计算机网络:数据链路层之差错控制、奇偶校验码、CRC循环冗余码、海明码
计算机网络:数据链路层之差错控制、奇偶校验码、CRC循环冗余码、海明码
186 0
CSMA/CD协议之计算最短帧长问题
CSMA/CD协议之计算最短帧长问题
255 0
|
传感器 人机交互
STM32:串口收发HEX数据包理论篇(内含:1.实验现象+2.文本数据包/HEX数据包+ 3.文本数据包接收/HEX数据包接收)
STM32:串口收发HEX数据包理论篇(内含:1.实验现象+2.文本数据包/HEX数据包+ 3.文本数据包接收/HEX数据包接收)
684 0
STM32:串口收发HEX数据包理论篇(内含:1.实验现象+2.文本数据包/HEX数据包+ 3.文本数据包接收/HEX数据包接收)