概述
逻辑链路控制(logical link control,LLC)层位于OSI网络模型的数据链路层,由IEEE802.2标准定义,用户的数据链路服务通过LLC子层为上层(IP层)提供统一的接口,提供给其他802协议(e.g. 802.3, 802.11,etc)使用。MAC可以在LLC层的支持下执行寻址方式和网络层协议识别功能,然后进行封装。
通过LLC层,可以实现不同类型网络的数据交互。比如以太网、无线网等的相互转换。
802.3/802.2 LLC:这是IEEE 正式的802.3标准,它由Ethernet II(ARPA)发展而来。它将Ethernet II帧头的(上层)协议类型字段替换为帧长度字段(取值为0000 05dc;十进制的1500);因此相比Ethernet II,缺少协议类型指示。故加入802.2 LLC头用以标志上层协议,LLC头中包含DSAP,SSAP以及Control字段,但是能表示的协议类型数量有限。
802.3/802.2 SNAP:这是IEEE为保证在802.2 LLC上支持更多的上层协议同时更好的支持IP协议而发布的标准,与802.3/802.2 LLC一样802.3/802.2 SNAP也带有LLC头,但是扩展了LLC属性,新添加了一个2Bytes的协议类型域(同时将SAP的值置为AA),从而使其可以标识更多的上层协议类型;另外添加了一个3Bytes的OUI字段用于代表不同的组织。
LLC封装方式
封装LLC 数据的方式有两种。
- RFC 1042(又称IETF封装)
- 802.1h(又称隧道式封装(tunnel encapsulation))
RFC 1042 与802.1h 均衍生自802.2 的SNAP(sub-network access protocol),SNAP作为逻辑链路控制标准的一部分,主要用来在 IEEE 802 网络上封装IP数据包、地址解析协议(ARP)的请求和答复。802.11h 与RFC 1042 之间的唯一差异,在于使用的OUI。
有些产品可以让使用者在两种封装标准间进行切换,虽然这种功能并不常见。以Microsoft操作系统而言,AppleTalk 与IPX 协议组预设使用802.1h,其他协议则使用RFC 1042。目前大部分基站均依循Microsoft 的做法,不再提供封装方式的切换选项。事实上,由于Microsoft所采用的封装方式得到广泛的支持,因此Wi-Fi 联盟的认证测试计划亦将它包含在内。
【备注】因此实现时可以在处理AppleTalk时采用802.1h,而其他时候采用RFC 1042。
帧格式
L3数据到达LLC层会添加LLC子字段和SNAP子字段。
LLC层封装成802.2头,其中:
- 802.2 header = LLC + SNAP
- LLC = DSAP + SSAP +CTRL
- SNAP = OUI + ETHER_TYPE
对于SNAP封装而言,DSAP和SSAP字段值通常均为0xAA;Control字段值通常为0x03;RFC1042封装的OUI通常为0x0000,而802.1h封装该字段则为0xF800;ETHER_TYPE则从以太网帧类型复制而来。
fileds | Bytes | description | ||||||||||||||||
DSAP | 1 | 指示目的服务访问点(Destination Service Access Point, DSAP)。 DSAP的格式(I/G|D|D|D|D|D|D|D),I/G位表示地址类型,I/G=0表示Individual地址,I/G=1表示是group地址。
对于SNAP封装而言,该字段通常为0xAA。 | ||||||||||||||||
SSAP | 1 | 指示源服务访问点(Source Service Access Point, SSAP)。 SSAP格式为(C/R|S|S|S|S|S|S|S),C/R=0表示Command,C/R=1表示response。 对于SNAP封装而言,该字段通常为0xAA。 | ||||||||||||||||
Control | 1or2 | 指示LLC帧类型。高2位指示帧类型。 LLC定义了三种帧:Information帧(I帧)、Supervisory帧(S帧)和Unnumbered帧(U帧)。不同帧类型其控制字段的长度不一样。
其中只有U帧被广泛使用。该字段通常为0x03。 | ||||||||||||||||
OUI | 3 | 指示标准组织代码(organizationally unique Identifier, OUI)。 IP 以RFC 1042 标准封装于LLC;RFC1042规定使用OUI 0x00-00-00。(有些厂商或许会使用特定的OUI 作为专属系统传输之用。) | ||||||||||||||||
Type | 2 | 指示后续数据的协议类型。通常对应Ethernet的类型代码。 例如0x0800用于封装IPv4或者0x86DD来支持IPv6。 |
注:DSAP和SSAP是逻辑地址,标识数据链路层的服务访问点,以指示LLC通讯信息所属的服务。
LLC通信操作类型
LLC 是在高级数据链路控制(High-Level Data-Link Control, HDLC)的基础上发展起来的,并使用了 HDLC 规范子集。LLC 定义了三种数据通信操作类型:
数据通信操作类型 | 说明 |
类型1 | 无连接。该方式对信息的发送通常无法保证接收。 |
类型2 | 面向连接。该方式提供了四种服务:连接的建立、确认和承认响应、差错恢复(通过请求重发接收到的错误数据实现)以及滑动窗口(系数:128)。通过改变滑动窗口可以提高数据传输速率。 |
类型3 | 无连接承认响应服务。 |
其中:
类型1的 LLC 无连接服务中规定了一种静态帧格式,并支持运行网络协议。有关传输层网络协议通常是使用服务类型1方式。
类型2的 LLC 面向连接服务支持可靠数据传输,运用于不需要调用网络层和传输层协议的局域网环境。
其他
对于802.11,LLC层利用MAC传送LLC PDU。MAC层则利用以下三种基础命令来提供服务。LLC三种基础命令如下:
命令 | 说明 |
MA-UNITDATA request | LLC利用MA-UNITDATA request来要求MAC将一个PDU传送给一个或多个指定的LLC。 |
MA-UNITDATA indication | 接收端的MAC收到一个PDU后,通过MA-UNITDATA indication来通知上层的LLC |
MA-UNITDATA-STATUS indication | 接收端的LLC的响应返回后,发送端的MAC利用MA-UNITDATA-STATUS indication来提供该请求的结果(成功/失败) |