数据链路层的作用
两台主机(端到端)之间的通信是依靠相邻的主机/路由器之间的逐步数据传送来实现
数据链路层实现相邻主机/路由器间的可靠的数据传输
网络层:主机-主机通信
数据链路层:点到点通信
数据链路层的主要功能
u 链路管理
Ø 数据链路的建立、维护和释放,以提供面向连接的服务
u 封装成帧
Ø 将网络层的数据(如IP包)加上首部和尾部,组成帧
u 差错控制
Ø 检查物理层的传输差错,并纠正错误
u 流量控制
Ø 防止发送方发送太快而淹没接收方
u 透明传输
Ø 允许网络层的数据包含任何比特串
u 链路寻址:给网卡编址(物理地址/硬件地址)
数据链路层的服务
u 无确认的无连接服务
Ø 只发送不确认
Ø 适合于低误码率的信道,如LAN
u 有确认的无连接服务
Ø 接收方收到数据后要回送确认
Ø 适合于误码率相对较高的不可靠信道,如WLAN
u 面向连接的服务
Ø 在发送数据之前首先要建立连接,确保数据传输的可靠性
Ø WAN采用
链路和数据链路
u 链路 (link):是一条无源的点到点的物理线路段,中间没有任何其他的交换结点
Ø 链路是一条路径的组成部分
u 数据链路(data link):链路+数据链路层协议
Ø 不同的链路可能采用不同的协议
u 数据链路层像个数字管道在这条数字管道上传输的数据单位是帧
u 在上层数据的前后分别添加首部和尾部,就构成了一个帧
u 首部和尾部的一个重要作用就是进行帧定界(帧同步),即标记帧的开始和结束
成帧方法:字符计数法
u 在帧中增加一个长度字段,表示帧的总字节数
u 早期的DDCMP协议使用
成帧方法:字符填充法
采用固定的字符作为帧首部和尾部
u 示例:IBM的BISYNC协议
Ø 帧首字符:SOH(0x01)
Ø 帧尾字符
透明传输:帧的数据中可以 包含任何字符,即可以出现与帧首、帧尾相同的字符 (不能限制上层的数据!)
u 字符填充:一旦数据中出现和帧首/尾字符相同的字符,则填充转义字符,以进行区别
u 转义字符:DLE(0x10)
成帧方法:零比特填充法
u 帧的长度为任意比特数
u 不依赖于字符集
u 帧首尾标志:0111 1110
u 透明传输:零比特填充
Ø 当帧中的数据出现连续5个1时,在其后插入一个0
成帧方法:物理层编码违例法
u 物理层编码有冗余
Ø 曼彻斯特编码:码元中间的跳变表示0和1
Ø 中间无跳变的码元即是冗余码元,可以表示帧的开始和结束
Ø 无需填充!
差错控制
u 由于噪声的影响,数据在传输过程中可能会产生比特差错:1->0, 0->1,增加、删除1个比特
u 误码率 BER (Bit Error Rate):在一段时间内,传输错误的比特占所传输比特总数的比率
差错纠正方法
u 重传(ARQ协议)
Ø 发送方发送完一帧数据后,启动一个定时器
Ø 接收方发现错误后,丢弃收到的数据帧
Ø 发送方定时器超时,重发数据帧
u 纠错码
Ø 校验码足够长,不但能够检测出差错,而且能够发现差错的位置,直接恢复原始数据
Ø 示例:汉明码(Hamming code,海明码),能纠正一比特错误