回顾TCP/IP参考模型,明确链路层和物理层在整个模型中的地位,简要提出链路层要解决的问题是单段链路的数据传输,物理层解决的是数字信号与电气信号之间的相互转换。
链路层概述
节点:主机和路由器(包括网桥和交换机)
链路:沿着通信路径连接相邻节点的通信信道
有线链路
无线链路
局域网
帧:链路层协议交换的数据单元。封装网络层数据报
数据链路层的职责:将分组通过一个链路,从一个节点传输到临近的另一个节点。
分组传输可以经过不同的链路使用不同的链路层协议实现:
例如,以太网,帧中继,最802.11无线LAN
每个链路协议提供不同的服务---选择不同的链路就有不同的服务
例如,可以在链路上提供或不提供可靠的传输
传输类比
从成都到九寨沟的旅途
打的:成都某地到成都机场
飞机:成都机场到黄龙机场
大巴:黄龙机场到风景区
旅客 = 数据包
运输段 = 通信链路
运输模式 = 链路层协议
旅行社 = 路由算法
链路层服务:
成帧(Framing):
把网络层数据报加头和尾(唯一一个加尾部的层),封装成帧
帧头中包括指明目的和源的“物理地址”(不同于IP地址)
链路接入(Link access):
媒体访问控制(Medium Access Control,MAC)协议
共享媒体的多路访问
可靠交付(Reliable delivery)
在出错率很低的链路上很少用 (光纤,部分双绞线)--链路层不一定要具有全部的这些功能服务。
无线链路:高出错率
流量控制(Flow control):
节点具有有限容量的帧缓冲能力
在邻接的发送节点和接收节点间的同步调节
差错检测(Error detection):
差错由信号衰减和噪声引起
接收者检测错误:如果发现差错,发送者重传帧或丢帧
纠错(Error correction):
接收者检测和纠正错误,不需发送者重传
半双工和全双工(Half-duplex and Full-duplex)
半双工,一个节点不能同时传输和接收
全双工,节点可以同时传输和接收
差错检测和纠错技术
奇偶校验
奇校验:用户数据和校验信息中1的个数为奇数个时,奇偶位为1
偶校验:用户数据和校验信息中1的个数为偶数个时,奇偶位为1
加单个奇偶位
二维奇偶校验:
检测和纠正单个位错误,检测两个位错误
差错检测-循环冗余编码CRC
多项式编码,该编码将比特串看作是0和1的一个多项式
101001 => x5+x3+1(幂次是后面的位数,x0=1)
r+1位模式G,称为生成多项式
CRC原理:在K位信息码(目标发送数据)后再拼接R位校验码,使整个编码长度为N位,因此这种编码也叫(N,K)码。
通俗的说,就是在需要发送的信息后面附加一个数(即校验码),生成一个新的发送数据发送给接收端。这个数据要求能够使生成的新数据被一个特定的数整除。这里的整除需要引入模 2除法的概念。
那么,CRC校验的具体做法就是
(1)选定一个标准除数(K位二进制数据串)
(2)在要发送的数据(m位)后面加上K-1位0,然后将这个新数(M+K-1位)以模2除法的方式除以上面这个标准除数,所得到的余数也就是该数据的CRC校验码(注:余数必须比除数少且只少一位,不够就补0,补前面)
(3)将这个校验码附在原m位数据后面,构成新的M+K-1位数据,发送给接收端。
(4)接收端将接收到的数据除以标准除数,如果余数为0则认为数据正确。
注意:CRC校验中有两个关键点:
一是要预先确定一个发送端和接收端都用来作为除数的二进制比特串(或多项式)标准数;
二是把原始帧与上面选定的除进行二进制除法运算,计算出FCS校验码。
前者可以随机选择,也可按国际上通行的标准选择,但最高位和最低位必须均为“1”
模2运算的加法运算与减法运算是相同的,等价于按位异或(XOR),比如
1011 XOR 0101 = 1110
1001 XOR 1101 = 0100
1011 - 0101 = 1110
1001 - 1101 = 0100
G=1001,所以知道r+1=4,r=3,所以D后面+了三个0,除出来R=011
接收方则用R加在D后面,看能不能整除。
假设:
通信双方协商的生成多项式为:
G=X4+X2+X+1
发送放要发送的数据为:
D=11001100
问题:
CRC校验信息需要多少位?
发送方最终发送的数据是多少位?
发送方最终发送的数据内容是什么?
如果传输过程中出现1位错误能否检测?出现6位错误能否检测?