在TSN的算法里面, 常用的是Qbv和Qbu。
Qbv是分时间片的调度,会对传输的总带宽造成影响,且终端网卡必须与网络保持时间同步。
Qbu用于实现帧抢占。设计思想是将数据帧分成低优先级帧和高优先级帧,当某个低优先级帧正在发送的时候,更高优先级的帧来了,低优先级的帧被中断发送,先发送高优先级的帧,之后再发送剩下的低优先级帧。
普通以太网中的帧是不支持中断的,一个帧必须完整的发送完成后才能发送另一个帧。接收端接收的帧不完整就会丢弃这个帧。
因此要支持帧被抢占,就必须设计不一样的帧格式。这个就是由IEEE802.3 br协议来进行规定。
TSN的802.1Qbu和IEEE 802.3工作组共同开发了IEEE 802.3br,即可抢占式MAC机制。基于抢占式MAC的传输机制如下图所示。将给定的出口分为2个MAC服务接口,分别称为可被抢占MAC(pAMC-Preemptable MAC)和快速MAC(eMAC-express MAC)。pMAC可以被eMAC抢占,pMAC等待eMAC数据传输完成后再进行数据传输。
Preemptable 这个词的意思是可抢占的, 看起来像是它可以抢占别人, 其实是它可以被别人抢占。就是低优先级。
由于要进行以太网帧的分片和重组,帧格式就必须有所变化,因为接收端需要将几个p帧拼装成完整的原始帧。
帧格式的详情可以参考这个文章:
下面简略说明一下以太网的帧格式:
普通的以太网帧 :前面会有前导的值,分成2个部分:Preamble 和SFD(或SMD-Sx等)
Preamble的占 7个字节,取值7个 0x55 (0x55 55 55 55 55 55 55, 下面的截图可以看出来)
SFD或的值占1个字节
Express帧跟普通的以太网帧是一样的,Preamble取值7个0x55,SFD为0xd5
Preemptable帧与普通的以太网帧会有所区别,
第一个P帧 Preamble取值7个0x55, 后面带1字节的SMD-Sx,
后续的P帧 Preamble取值6个0x55,在Preamble后面,带1字节的SMD-Cx和1字节的FragCount
如下图所示:
找一个具体的数据传输流程抓包看一下:
SMD-Sx, SMD-Cx的使用见后面的附图。
wireshark能够正确的解析这些值。
下面是一个完整的P帧传输过程。 E帧传输的数据 PRI是6.P帧数据由于优先级低,被分成4个片段,就是下图的15,21,25,29共4个Frame进行传输。
这个是E帧,SMD为d5
这个是P帧的起始帧,第一个分片,SMD-Sx为0xb3,可以认为是0号帧
这个也是P帧,SMD-Cx为0x2a,3个后续分片,4c是分片的编号,0x4c代表的是1,所以是1号帧
为什么这么麻烦,不直接写个1,2,3多简单。 据说这样可以带有纠错功能。
这个也是P帧, 7f是分片编号,代表2,此为 2号帧
这个也是P帧,b3是分片编号,代表3,此为3号帧
普通的网卡用TCPDUMP只能抓到以太网帧从目的MAC开始的内容,很难获取到以太网帧的前导数据, 这里的数据是用网络测试仪抓到的。
以下数据供大家参考。包含EMAC格式的帧和PMAC格式的帧传输的一个过程。
pcap格式的抓包数据下载链接:(用wireshark打开)
https://download.csdn.net/download/v6543210/87375396
参考:
帧格式:
帧编号
图片来源:
SMD的取值:
上图来源于: