数据链路层讨论分组怎样从一台主机传送到另一台主机,不经过路由器转发(多个网络互连)
数据链路层主要使用两种类型的信道:
1)点对点信道:一对一
2)广播信道:一对多
点对点信道
链路:从一个结点到相邻结点的一段物理线路
数据链路:实现数据传输协议的软硬件,其中协议数据单元称为帧
数据链路协议主要解决以下3个问题
- 封装成帧
数据链路层将网络层的IP数据报作为数据部分,前后加上首尾部构成一帧
图1. 帧
帧首部和尾部主要是用来确定帧的界限,接收端可以用于判断是否接收到一个完整的帧 - 透明传输
帧首尾是用特定的控制字符表示帧界限的,但帧的数据部分也可能包含这种控制字符。
为了完整传输数据部分的内容,同时不被接收端误认为控制信息,在数据部分的控制字符前面插入转义字符,接收端收到后删去转义字符即可 - 差错检测
数据帧在传输过程中可能会发生差错,称为传输差错
发生在帧内比特位的错误称为比特差错
发生在帧间的错误则包括帧丢失、帧重复、帧失序
循环冗余检验CRC是数据链路层中应对比特差错广泛使用的检错技术:
1)发送和接收方首先约定一个n+1位的除数P
2)发送方根据待发送的数据M和P计算CRC校验码R,将R拼接在M后面构成发送的最终数据
3)接收方拿到数据使用除数P对其做模2除法,如果余数为0则可认为数据没有发生比特差错。
在实际应用中一般用硬件实现CRC检验,耗时几乎可以忽略不计
关于CRC具体计算方式可以参考这里
PPP协议
- PPP协议是用户计算机和ISP通信时所使用的数据链路层协议
- PPP协议不保证可靠传输(由运输层的TCP协议负责可靠传输),协议简单,应用最广泛
- PPP协议只支持点对点的链路通信,只支持全双工链路
可靠传输:数据链路层发送端发送什么,接收端就收到什么。也就是说可靠传输要通过一系列手段纠正传输差错
PPP协议由3部分组成:
- 一个将IP数据报封装到串行链路的方法
- 一个用来建立、配置和测试数据链路连接的链路控制协议LCP
- 一套网络控制协议NCP
图2. PPP协议状态图
当用户接入ISP后就建立了一条物理链接;
接下来建立LCP连接,协商PPP参数;
最后通过NCP协商网络层的协议(IP、OSI网络层等)。
广播信道
以太网是一种计算机局域网组网技术
图3. 局域网的3种拓扑结构
计算机与外界局域网是通过适配器(网卡)连接的。
其中适配器与局域网的通信是通过电缆或双绞线以串行方式进行;适配器与计算机则是通过I/O总线以并行方式进行
由于以上两种方式效率不同,适配器需要对数据做缓存
适配器会被分配一个48位的唯一标识符,称为MAC地址
一对多的广播涉及到信道共享的问题,从技术上可以分为以下2种:
- 静态划分信道
划分固定信道给用户
如频分复用、时分复用、波分复用、码分复用等
但这种方式代价较高 - 动态媒体接入控制(多点接入)
信道并非在用户通信时固定分配给用户
1)随机接入:所有用户随机发送信息。如果恰巧有多个用户同时发送信息就会产生碰撞(冲突),因此需要有解决碰撞的协议。目前该方式被广泛使用。
2)受控接入:用户服从一定控制发送信息,如轮询。
以太网中使用CSMA/CD协议解决信道共享的问题:
- 载波监听
不管在发送前还是发送中,发送方都不停检测信道 - 碰撞检测
发送时如果检测到其他站也在发送数据,则停止发送,等待一段时间后重新发送
使用交换机扩展以太网
总线以太网(图3c)以半双工方式工作,使用CSMA/CD协议解决碰撞问题
以交换机为核心的星形以太网(图3a)没有碰撞问题,可以以全双工方式工作,是目前的首选
- 以太网交换机的每个接口直接与一个主机或另一个以太网交换机相连
- 以太网交换机的每个接口有存储器,能在输出端口繁忙时对帧做缓存
- 以太网交换机内部会维护一个地址表,可以提高转发效率
图4. 交换机内维护的地址表
如图4所示,一开始地址表是空的。
假设此时A发送一帧数据给B,交换机首先记录A的MAC地址和接口1;
然后向234端口广播该帧,由于帧的地址为B,因此24端口会拒绝该帧,只有3端口接受。于是交换机会添加记录(B,3);
此外交换表会对每条记录设置有效时间,过期后会删除以保证其符合最新的网络情况。