前言
正在学习计算机网络这门课程,顺便做个笔记,记录一下知识点。
参考资料:
中科大郑烇老师全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程:https://www.bilibili.com/video/BV1JV411t7ow?p=1
《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》
第六章:链路层
网络层解决了分组如何从一个网络到达另一个网络的路由问题(以子网为单位),但是分组如何在子网内部的相邻节点之间传输,链路层解决了这个问题。
网络节点的连接方式:
-
点到点连接
一般用于广域网(距离远)。举例:海底电缆将中国与其他国家的路由节点连接在一起。
点到点链路的链路层服务实现非常简单,封装和解封装
-
多点连接
一般用于局域网(距离近)。举例:在局域网中通过交换机将不同的多个节点连接起来。
那么这就会产生一个问题,如果多方同时发送分组,就会产生碰撞(存在多点接入的问题)。后续我们会详细讨论。
导论
在开始前先规范一些术语:
术语 | 解释 |
---|---|
nodes(节点) | 主机、路由器、网桥和交换机都是节点 |
links(链路) | 沿着通信路径,连接相邻节点通信信道的是链路(包括:有线链路、无线链路、局域网(共享性链路)) |
frame(帧) | 链路层的数据单元(PDU) |
链路层负责从一个节点通过链路将(帧中的)数据报发送到相邻的物理节点。
下面我们举一个比较贴切的例子来分析分组在链路层的传输过程:
假设博主要从普林斯顿到洛桑,其中具体的路程规划如下:
- 先坐轿车到肯尼迪国际机场
- 再乘坐飞机飞往日内瓦
- 最后乘火车到洛桑
其中:
- 博主本人 = 数据报/分组
- 交通段 = 通信链路(communication link)
- 交通模式 = 链路层协议(protocol)
- 票务代理 = 路由算法(routing algorithm)
- 数据报/分组在不同的链路上以不同的链路协议传送
- 不同的链路协议提供不同的服务
链路层提供的服务
-
成帧,链路接入:
- 将数据报封装在帧中,加上帧头、帧尾部
- 如果采用的是共享性介质,信道接入获得信道访问权
- 在帧头部使用“MAC”(物理)地址来标示源和目的(注意:不同于IP地址)
-
在相邻两个节点(一个网络内)完成可靠数据传递
-
在低出错率的链路上(光纤和双绞线电缆)很少使用
-
在无线链路经常使用:出错率高
注意:链路层也可以实现一定的可靠性
在无线链路的网络上,出错率高,如果在链路层不做差错控制工作,漏出去的错误比较高;到了上层如果需要可靠控制的数据传输代价会很大
- 一般化的链路层服务,不是所有的链路层都提供这些服务
- 一个特定的链路层只是提供其中一部分的服务
-
-
流量控制
使得相邻的发送和接收方节点的速度匹配
-
错误检测
- 差错由信号衰减和噪声引起
- 当接收方检测出错误时,通知发送端进行重传或丢弃帧
-
差错纠正
接收端检查和纠正bit错误,不通过重传来纠正错误
-
半双工和全双工
- 半双工:链路可以双向传输,但一次只有一个方向
- 全双工:两个方向可以同时收发
链路层的实现位置
-
在每一个主机上
- 包括路由器
- 交换机的每个端口
-
链路层功能在“适配器”上实现(aka network interface card NIC))或者在一个芯片组上
-
以太网卡,802.11 网卡; 以太网芯片组
-
实现链路层和相应的物理层功能
适配器通信
- 发送方
- 在帧中封装数据报
- 借助于物理层,把每个bit发送出去
- 加上差错控制编码,实现rdt(也可能不实现)和流量控制功能等
- 接收方
- 把物理信号还原为数字信号,还原帧头、帧尾
- 检查有无出错,执行rdt和流量控制功能等
- 解封装数据报,将至交给上层
- 发送方
-
-
接到主机的系统总线上
-
硬件、软件和固件的综合体
差错检测和纠正
错误检测
说明:
- EDC:差错检测和纠正位(冗余位)
- D:数据由差错检测保护,可以包含头部字段
在数据传输的过程中数据有可能发生错误,这时接收方会检查EDC’以及D’是否符合约定的差错控制编码关系,如果不符合关系,那么数据一定出错。
此外,还存在一种情况,即EDC’以及D’都出错,且恰好又通过校验,这种情况被称为
残存错误
。
- 错误检测不是100%可靠的
- 编码越长,残存错误越低。(更长的EDC字段可以得到更好的检测和纠正效果)
奇偶校验
-
单bit奇偶校验
- 检测单个bit级错误(容易理解)
-
二维奇偶校验
- 检测和纠正单个bit错误
- 不仅可以检测出错误,还可以检测出错误的位置
- 无法检测出对偶错误
Checksum(校验和)
目标: 检测在传输报文段时的错误(如位翻转),(仅仅用在传输层)
具体可以看传输层章节,这里不再赘述
CRC(循环冗余校验)
-
强大的差错检测码
-
(直接放一个过程,具体怎么操作自行搜索)
D:数据bit
G:生成多项式:双方协商r+1位模式(r次方)
目标:求R
-
CRC性能分析
- 能够检查出所有的1bit错误
- 能够检查出所有的双bit错误
- 能够检查出所有长度小于等于r位的错误
- 出现长度为 r+1的突发错误,检查不出的概率是1/2r-1
- 出现长度大于r+1的突发错误,检查不出的概率是1/2r