计算机网络重学之:数据链路层

86 阅读4分钟

1. 设计背景

一个最简单的例子:一根网线的两头分别连接着两块网卡,比特流通过网线从A网卡发送到B网卡,要想实现正常发送和接收,需要定义一些标准。

2. 遵循的标准

一次发送数据,最大不超过1518字节(首部14字节+数据1500字节+校验4字节),最小不小于64字节(首部14字节+数据46字节+校验4字节)(最小字节数的定义和碰撞检测有关)。

3. 具体实现:

网卡硬件部分和驱动程序共同实现了数据链路层的功能。 交换机硬件部分实现了数据链路层的功能。

4 具体功能

4.1 透明传输

  • 定义了帧的开始和结束定界符(0x7E),以及其他特殊字符。

  • 规定了当数据部分出现特殊字符时,如何把这些字符转变成普通字符。

  • 定义数据传输有两种方式可供选择:同步传输和异步传输

    • 同步传输(比特位传输):发送方发送1位,接收方接收1位。
    • 异步传输(字节传输):发送方发送1字节,接收方接收1字节。
  • 不同传输方式对于特殊字符的处理

    • 比特位方式传输对数据中有帧开始结束界定符转义的处理方式:如果数据中出现了连续的5个1,在后面加1个0
    • 字节传输对数据中有帧开始结束界定符转义的处理方式:如果数据中有0x7E,将其转义为0x7D 0x5E;如果数据中出现了0x7D,则需要将其转义为0x7D 0x5D

4.2 差错检测

  • 校验分纠错和检错,差错检测只检错不纠错
  • 差错检测能保证帧不产生比特差错,但不能保证帧丢失,也不能保证帧的顺序。
  • 差错检测几种常用方式:校验和、奇偶校验、CRC校验,CRC校验漏检概率低,被广泛使用。
    • CRC校验原理简例:[数据部分(1100 1110) + 3个0(多项式位数-1=0的个数)] 摸2除 多项式(X^3+x^1+x^0,二进制是1011) = 011,最终数据 = 数据部分 + 校验码 = 1100 1110 011。
  • 也有用于比特错误纠正的方法,比如海明码,但其开销较大,通常在内存中使用。

4.3 封装成帧

在数据前后加入帧首部和校验码,封装成一个数据帧进行传输。

5. 太网MAC-V2帧格式

{
	首部(14字节) {
		6字节:目MAC地址
		6字节:源MAC地址
		2字节:类型字段,上层协议类型 # 0x0800 表示IPv4,0x0806 表示ARP
	}
	数据部分(46~1500字节) # 数据不够时填充0,保证最小长度
	FCS校验(4字节) # FCS校验码
}

6. 其他

  • 物理层真正发送MAC帧的时候,硬件电路会先发送7字节1010...的前导码用于同步接收端的时钟,1字节的帧开始标志位0x7E,接着是MAC帧的内容。
  • 太网V2没有结束定界符,帧通过​​物理层信号终止​​、​​长度约束​​、​​FCS校验​​及​​帧间间隔​​共同实现帧结束的判定,无需显式的结束定界符。
  • 所以物理层每发送一个帧,实际字节数是72~1526字节。
  • MAC地址表(MAC和端口对应关系)是存储在交换机中的一张表,用于记录每个MAC地址对应的端口信息。交换机通过MAC地址表来转发数据帧,实现局域网内的通信。

6.1 虚拟局域网

  • 虚拟局域网(局域网组、逻辑局域网):通过添加vlan标识符,标识属于哪一个局域网组。
  • 虚拟局域网以太网帧在V2基础上,在头部添加了4个字节,变成18字节头部
{
	首部(18字节) {
		6字节:目MAC地址
		6字节:源MAC地址
		2字节:TPID,固定为0x8100
		2字节:TCI,包含优先级和VLAN ID # VLAN ID 用12位表示
		2字节:类型字段,上层协议类型 # 0x0800 表示IPv4,0x0806 表示ARP
	}
	数据部分(46~1500字节) # 数据不够时填充0,保证最小长度
	FCS校验(4字节) # FCS校验码
}