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校验码
}