MAC子层定义一种与介质无关的设施,建立在由物理层提供的介质设施的基础上,并与介质访问层无关的LLC子层下面o MAC和LLC子层都要提供类似0sI模型的数据链路层的功能。这里要求MAC子层执行七层主要与数据链路控制进程相关联功能的部分功能。它们是:
——数据组装(传输和接收)。
——建帧(帧边界界定,同步确认,子帧效和划分,填充的追加和删除)。
——寻址(源地址和目的地址的处理)。
——检错和纠错(检测和纠正物理介质的传输差错)。
——介质访问管理。
——逻辑链路访问管理。
——转发送往其他地址的接收帧。
4,3.1 功能模型
本条用体系结构功能模型的术语对帧的传输和接收作一个概述。此功能模型仅处理长MAC帧(特征是帧指示器域的值等于O)。
物理层提供对MAC子层的接口,使比特流在物理介质上传输。
帧传输操作与帧接收操作彼此独立。寻址源发站的传输帧,也会被收到然后传给LLC子层实体。
4.3.2 传输描述当LLC子层请求传输一个帧时,就要求MAC子层的数据传输组装部件根据LLC提供的数据(M—slu)建立一个MAC帧。
当接收到凇一Data. request原语,MAC子层首先检查Service Class参数是否等于00若不是,马上给LLC子层返回一个包含LM-NI错误的MA-Data.confirm原语。
然后MAC子层检查提交的M_ sdu的长度是否超过242个字节。若超过,MAC子层马上返回一个
包含LM-SE错误的凇一Data.∞nfrim原语。否则,数据组装部件就开始建立一个长MAC帧。
MAC子层使用LU:子层提供的M_ sdu的长度信息,首先计算组成帧的子帧数(NS)、填充长度(PL)和填充(PAD)o填充是必需的,以保证最后一个MAC子帧达到要求的长度(38字节)。然后.MAC子层建立一个长MAC帧,在M_ sdu前附加帧头:
一组帧要求的子帧数(NS)。
一初始可信值.当前可信值和差值可信值域(IC和DC的值由SAME提供)。
一源地址(MAC管理变量:见4.3.7.6)。
一目的地址(MA一Data.request的自变量)。
一填充长度。
在M_ sdu的尾部,加上填充(PAD)和帧校验序列域(FCS)。
组装的长MAc帧交给传输介质访问管理实体来发送。这个长帧被分割为多个36字节的数据包。帧指示器域(等于0)附加在每个数据包的前头,建立38字节的MAC子帧。每个子帧对应于一个P—sdu2 M_ pdu,交给物理层进行传输。
对于每一个P- sdu,物理层会发出一个本地的确认信息表示P- sdu已经传输了。如果失败,物理层则提供一个错误标识。
所有的子帧发出后或者一旦发生错误,立刻向LLC实体发出一个MA—Data. confirm原语,表明这次传输的成功或失败。
4.3.3 接收描述
见4.3.6.1和4.3.7。
4.3.4MAC管理描述
见4.3.6.1和4.3.7。
4.3.5 功能描述
下面是对MAC子层功能的总结。
关于帧发送:
——接收LLC子层的数据,建立长MAC帧。
——根据长MAC帧建立MAC子帧(M_ pdu)(通过把长MAC帧分成36字节的段,然后在每段前加上2个字节的Fl域)。
——提交物理层一个P- sdu=M_ pdu,用于在介质上传输。
关于帧接收:
——从物理层接收一个P - sdu。
——由MAC子帧序列建立起一个长MAC帧(通过丢弃每一子帧的Fl域,然后把剩下的每个36个字节的数据包连接起来);
——交给LLC子层,校核长MAC帧,这个长MAC帧可能是广播帧或直接本地站的帧。
——丢弃全部无效MAC帧,把发生的差错状况报告给管理应用程序。
关于转发:
——检查当前可信值,若大于0则减1。
——检查系统是否为转发器(是否系统是服务器)。
——若系统是转发器则初始化转发程序。
关于内部子程序:
——附力口合适的FCS值给待发的帧及检查全部字节边界对位。
附加NS,lC,CC.DC,SA,DA.PL,PAD和FCS域到待发的M—sdu上,建立一个长MAC帧-把长MAC帧分成36字节的段,在每一个段前添加Fl域构成MAC子帧,提交给物理层。
——从接收到的子帧中删除Fl域。
——从MAC长帧中删除NS,lC,CC,DC,SA,DA,PL,PAD和FCS域。
——维护定时器(time-out-frame-not_OK,time-out- not.addressed).计算最小的差值可信值和计算收到的无效帧数。
——发送P - Sync.request原语给物理层,取得同步。.
4.3.6 介质访问状态表
简要说明MAC子层实体所使用的处理过程。状态转换表描述了使用的状态、函数和事件以及随后的动作。
表7、表8描述MAC子层在DCP(数据通信协议)中的状态。
初始状态 |
事 件 |
操 作 |
最终状态 |
空闲
|
P - Sync.indication(SYNCHRO FOUND)
|
MA—Sync.indication(SYNCHRO_ FIDUND) Ini一CounterSS(synchronisation-
confirmation- time-out) scw= TRUE |
空闲
|
空闲
|
P - Data.indication(P—sdu)
|
RSF=O
|
检查收到 帧约FI域 |
空闲
|
MA_ Data.request(DA,M_ sdu,sc=O) and Check()=OK
|
Extract _ Lyigths( M _ sdu) PL, NS, PAD. Build _ NfacFrame( NS= NS, IC=lniCred(DA), CC= lC, DC= DeltaCred(DA) , [FBI] SA = mac-address, DA= DA, PL= PL, Data = M _ sdu, PAD= PAD, FCS= CRC()) TSF= 0 |
发送 MAC帧
|
空闲
|
MA_Data.request( DA,M _ sdu,SC = 0) and Check() < >OK |
MA一Data.oonfirm(M—Tstat= Cbeck()) |
空闲 |
空闲
|
MA Data.request( DA,M-sdu,SC<> O) |
MA Data,ccrrIirm(M Tstat= LM-NI) |
空闲 |
初始状态 |
事 件 |
操 作 |
最终状态 |
空闲 |
Count_out(synchronization_ confirmation_time_out |
P_Sync request(Rejected) MA_Sync indication(SYNCHRO_LOSS Synchronization-confirm_ation_time-out) SCW=FALSE |
空闲 |
空闲 |
Count_out(Time out not addressd) |
Set-value(mac_address=NEW Set_value(initator_mac_address=NOBODY) Reset_mac_group_address() Stop_counter_MN(time-out-not-addressed) P_Sync request(Rejected) MA_Sync indication( SYNCHOR_LOSS Time_out_not_addressed) SCW=FALSE |
空闲 |
空闲 |
Count_out(Time out frame_not OK) |
P_Sync request(Rejected) MA_Sync indication( SYNCHOR_LOSS Time_out_ frame_not OK) SCW=FALSE
|
空闲 |
空闲 |
Write_Request() And Check-write()<>OK |
Write_cof(M_Tstat=Check_Write()) |
空闲 |
空闲 |
Write_Request(new-synchronisation=TURE) And Check-write()<>OK |
MA_Sync indication( Write_Request) P_Sync request(Rejected) SYNCHOR_LOSS SCW=FALSE
|
空闲 |
空闲 |
Write_Request(initiator_mac-address<>NO_BODY And Check-write()<>OK |
Set_value(initiator_mac-addrress) Init_counter_MN(time_out_not_addressed) Write_Conf(M_Tstat=OK) |
空闲 |
空闲 |
Write_Request(mac_address<>NOT-NEW) And Check-write()<>OK |
Set_value(mac-addrress) Init_counter_MN(time_out_not_addressed) Write_Conf(M_Tstat=OK) |
空闲 |
空闲 |
mac_address=NEW) Write_Request(initiator_mac-address<>NO_BODY And Check-write()<>OK |
Set_value(initiator_mac-addrress=NO_BODY) Init_counter_MN(time_out_not_addressed) Write_Conf(M_Tstat=OK) |
空闲 |
DL/T 790.l;1 -2002
初始状态 |
事 件 |
操 作 |
最终状态 |
空闲
|
mac-address( ) < > NEW and Write_Request(initiator_mac_acUress= NO-BODY) and Check Write() = OK |
Set_Value initiaror-mac-address = NO-BODY) Init_counter_IVIN( time-out-not-addressed) Write _ Conf(M _ Tstat = OK) |
空闲
|
空闲
|
mac-address() < > NEW and initiator-mac-ac{cfress( ) = NO-BODYand Write _ Request ( mac-address =NEW) and Check _ Write() = OK
|
Set _ Vajue(rrnc-address= NEW) Reset _ MAGgroup-addresses() P - Sync.request( Rqected) Stop_counter_ MN(time-out_not_addnlssed) Write _ Conf( M _ T8rat = OK) MA _ Sync. indication( SYNCHR() _ LOSS, write _ request) sCW = FALSE |
空闲
|
空闲
|
mac-address() < >NEW and initiator-mac-address ( ) < > NO BODY
and Write _ Request (mac-addrerss = 'NEW)
and Check _ Write() = OK
|
Set _ Value(mac-8ddress = NEW) Reset _ MAC-group-addresses() P - Sync. request(Rejected) Init _ counter _ htIN( time-out-not-addressed)
Write _ Conf( M _ Tstat = OK) MA _ Sync.indication( SYNCHRO _ LOSS,
write _ request) SCW= FALSE |
空闲
|
空闲
|
mac-address() = NEW and initiator-mac-address() = NaBODY and Write _ Request ( timeaut-not- addressed) and Check Write() = OK |
Set _ Value( time-out-not-addressecl) Write _ Conf( M _ Tstat = OK)
|
空闲
|
空闲
|
mac-address() < >NEW and initiatar-mac-address ( ) < > NO-BODY and Write _ Request ( tim~out-not- addressed) and Check-Wrire() = OK |
Set_Value( time-out-not-adciresscxl) Init_counter_MN( time-out-not-addreslsed) Wnte _ Conf (M _ Tstat = OK)
|
空闲
|
空闲
|
Write _ Request( time-out-frame-not_OK) and Check _ Write() = OK
|
Set_Value( time-aut-frame-not-OK)Init _ counter _ SS( time-our-frame-not-OK) Write Conf(M _ Tstat =0K) |
空闲
|
空闲
|
Write_Requesr(synchronisatian_confirm_ation- time- out) and Check _ Write() = OK |
Set _ Value( synchmnisaticn-canfirmatkm_time. Out) Write Conf(M _ Tstat = QK) |
空闲
|
初始状态 |
事 件 |
操 作 |
最终状态
|
空闲
|
Write_request(mac_group_address) And check_write()=OK |
Set_value(mac_group_address) And check_write()=OK |
空闲
|
空闲
|
Write_request(repeater) And check_write()=OK |
Set_value (repeater) And check_write()=OK |
空闲
|
空闲
|
Write_request (min_delta_credit) And check_write()=OK |
Set_value (min_delta_credit) And check_write()=OK |
空闲
|
空闲
|
Read_Request (Server-MAGManage ment-Variable) and Check Read() = OK |
Read_conf(Server-MAGManage ment-Variable) |
空闲
|
空闲
|
Read_Request and Check Read() = OK |
Read_conf and Check Read() = OK |
空闲
|
发送MAC帧 |
TSF< NS |
Build_Mpdu(Macframe,TSF+1) P_date request(P_sdu) TSF=TSF+1 |
等待本地确认 |
发送MAC帧 |
TSF= NS |
MA_date corfirm(M_Tstat=OK) |
检查 MAC帧是 否需转发
|
等待本地确认 |
P_date confirm(p-state=OK) |
无操作 |
发送 MAC帧
|
等待本地确认 |
P_date confirm(p-state<>OK) |
MA_date corfirm(M_Tstat=P_tstat) |
空闲 |
检查收到 帧的Fl域
|
Check_ FI()=OK and Fl=O and RSF=0 |
无操作 |
检查收到 帧CRC码
|
检查收到 帧的Fl域 |
Check_ FI()=OK and Fl=O and O<RSF<NS-1 |
Append_incoming_P_stu() RSF=RSF+1 |
接收其他子帧
|
检查收到 帧的Fl域
|
Check_ FI()=OK and Fl=O and O<RSF<NS-1 |
Append_incoming_P_stu() |
检查收到 帧CRC码
|
检查收到 帧的Fl域
|
Check_ Fl() =OK and Fl=O and RSF= NS-1
|
无操作 |
空闲 |
检查收到 帧的NS域
|
Check_F1()=OK and F1<>0 and Check_F1()<>OK |
Append_incoming_P_stu() |
检查收到 帧CRC码
|
检查收到 帧的NS域
|
Check一NS()=OK and NS>1
|
Append_incoming_P_stu() |
接收其他子帧
|
检查收到 帧的NS域
|
Check一NS< >OK |
无操作 |
空闲 |
接收其他子帧
|
P Data.indication(P sdu) |
无操作 |
检查收到侦的FI域 |
初始状态 |
事 件 |
操 作 |
最终状态
|
接收其他子帧 |
P Data.indication() |
无操作 |
空闲 |
检查收到 帧的CRC码 |
Check_FSC()=OK |
无操作 |
检查是否锁定状态 |
检查收到 帧的CRC码 |
Check_FSC()<>OK |
无操作 |
空闲 |
检查是否锁定状态 |
Initator_mac-address()=NO_BODY And check_initator()=NOK |
P_Sync request(Rejected) MA_Sync indication(SYNCHRO_LOSS Wrong_initator. SA SCW=FALSE |
空闲 |
检查是否锁定状态 |
Initator_mac-address()=NO_BODY And check_initator()=OK |
Init_counter_SS(time_out_frame_not_OK) Stop_counter_ss(synchronissation_ Confirmation_time_out) |
检查客户是否为源 |
检查是否锁定状态 |
Initator_mac-address()=NO_BODY |
Init_counter_SS(time_out_frame_not_OK) Stop_counter_ss(synchronissation_ Confirmation_time_out) |
检查客户是否为源 |
检查客户是否为源 |
A_client_issource()=TURE |
Update_min-delta-cted(IC,OC) |
检查帧的目的地址 |
检查客户是否为源 |
A_client_issource()=FALSE |
无操作 |
检查帧的目的地址 |
检查帧的目的地址 |
individualAddressa()=OK and mac_address<>NEW |
Init_counter_MN(time_out_not_addressed) MA_Data indication( SA=SA DA=DA M-sdu=M_sdu) Update_credits(SA,IC,CC,DC) SCW=FULSE Wait_end reciptition() |
等待 |
检查帧的目的地址 |
individualAddressa()=OK and mac_address=NEW |
MA_date indication( SA=SA DA=DA M_sdu=M_sdu) SCW=FULSE Pudate credits (SA,IC,CC,DC) |
检查MAC帧是否需转发 |
初始状态 |
事件 |
操作 |
最终状态 |
检查帧的目的地址 |
individualAddress()=NOK and globleAddress()=OK |
MA_date indication( SA=SA DA=DA M_sdu=M_sdu) SCW=FULSE
|
检查MAC帧是否需转发 |
检查帧的目的地址 |
individualAddress()=NOK and globleAddress()=ALL_CONF mac-address=NEW andSCW=FALSE |
无操作 |
检查MAC帧是否需转发 |
检查帧的目的地址 |
individualAddress()=NOK and globleAddress()=ALL_CONF mac-address=NEW andSCW=TURE |
MA_date indication( SA=SA DA=DA M_sdu=M_sdu) SCW=FULSE
|
检查MAC帧是否需转发 |
检查帧的目的地址 |
individualAddress()=NOK and globleAddress()=ALL_CONF mac-address<>NEW
|
MA_date indication( SA=SA DA=DA M_sdu=M_sdu) SCW=FULSE
|
检查MAC帧是否需转发 |
检查帧的目的地址 |
individualAddress()=NOK and globleAddress()=NOK and SCW=FULSE
|
无操作 |
检查MAC帧是否需转发 |
检查帧的目的地址 |
individualAddress()=NOK and globleAddress()=NOK and SCW=TURE
|
MA_date indication( SA=SA DA=DA M_sdu=M_sdu) SCW=FULSE
|
检查MAC帧是否需转发 |
检查MAC帧是否需转发 |
CC>0 And check_repeater()=TURE |
CC=CC-1 Build_macframe NS=NS IC=IC OC=oC DC=DC SA=SA DA=DA PL=PL Ddte+M_sdu PAD=PAD FCS=CRC()) TSF=0 |
发送需转发的子帧 |
初始状态 |
事 件 |
操 作 |
最终状态 |
检查MAC帧 是否需转发 |
CC>O and Check _ repearer() = FALSE |
Wait__End—Re阐;tion() |
等待 |
检查MAC帧 是否需转发 |
cc=o |
无操作 |
空闲 |
发送需转发 的子帧
|
TSF< NS
|
Build _ Mpdu( MacFrarne,R辩 P P Data. request(P _ sdu) TSF= TSF+1 |
等待本她 确认 |
发送需转发 的子帧
|
TSF- NS
|
无操作
|
检查MAC 坎是否需转 发 |
等待本地确 认
|
P - Data. canfum(P—Tstat= OK)
|
无摄作
|
发送需转发 的子帧 |
等待本地确 认 |
P - Data.confirm(P _ Tstat< >OK) |
Wait.End一Repetition()[TvdV4] |
等待 |
等待 |
P - Data.indieation(P一sdu) |
无操作 |
空闲 |
等待 |
End Repetition() |
无操作 |
空闲 |
表8 MAC客户状态转换表 | |||
初始状态 |
事 件 |
操 作 |
最终状态 |
空闲
|
P - Sync.indication(SYNCHRO FOUND) |
MA_ Sync.indication(SYNCHRO一FOUND) |
空闲 |
空闲
|
P - Dara,indication(P一sdu)
|
RSF=O
|
检查收到 帧的FI域 |
空闲
|
MA _ Data. request(DA,M _ sdu, SC= 0) and Check() = OK
|
Extract _ Lerrgths( M _ sdu) PL, NS, PAD. Build _ MacFrame( NS= NS, IC= IrvCred(DA). CC- IC, DC= DeltaCred(DA),[PB5J SA= mac-address, DA= DA, PL= PL. .Data= M_ sdu, PAD= PAD, FCS= CRC()) TSF= O |
发送 MAC帧
|
表8续
初始状态 |
事件 |
操作 |
最终状态 |
空闲 |
MA_Data.request(DA,M _ sdu, SC= 0) and Check() = OK
|
MA_Data confirm(M_Tstat=check()) |
空闲 |
空闲 |
MA_Data.request(DA,M _ sdu, SC=<>0)
|
MA_Data confirm(M_Tstat=LM_NI) |
空闲 |
空闲 |
Write_request(client_MAC_management _Variable) And check write()=OK |
Setvalue(client_MAC_management _Variable) Write_conf()=OK |
空闲 |
空闲 |
Write_request(new_synchronisation=TURE And check write()=OK |
Write_conf()=OK P_Sync request (rejected) MA_Sync indication(SYNCHRO_LOSS Write request) |
空闲 |
空闲 |
Write_request() And check write()<>OK |
Write_conf()=check_Write())
|
空闲 |
空闲 |
read_request(client_MAC_management _Variable) And check read()=OK |
read_conf(client_MAC_management _Variable)
|
空闲 |
空闲 |
read_request() And check read()<>OK
|
Read_conf(M_Tstat=check_read()) |
空闲 |
发送MAC帧 |
TSF<NS |
Build_Mpdu(MacFrame,TSF+1 P-data request(P_sdu) TSF=TSF+1 |
等待本地确 认 |
发送MAC帧 |
TSF=NS |
MA_data confirm(M_TStat=OK) |
检查NAC帧是否需转发 |
等待本地确 认 |
P data confirm(P TStat=OK) |
无操作 |
发送MAC帧 |
等待本地确 认 |
P data confirm(P TStat<>OK) |
MA_data confirm(M_TStat=P_TStat) |
空闲 |
检查收到帧的FI域 |
Check_F1()=OK and F1=0 And RSF=0 |
无操作 |
检查收到帧的NS域 |
检查收到帧的FI域 |
Check_F1()=OK and F1=0 And 0<RSF<NS-1 |
Append_Incoming_P_sdu() RSF=RSF+1 |
接受其他子帧 |
初始状态 |
事件 |
操作 |
最终状态 |
检查收到帧的FI域 |
Check_F1()=OK and F1=0 And 0<RSF<NS-1 |
Append_Incoming_P_sdu()
|
检查收到帧的CRC码 |
检查收到帧的FI域 |
Check_F1()=OK and F1<>0 And check F1<>OK |
无操作 |
空闲 |
检查收到帧的NS域 |
Check_NS()=OK and NS=1 |
Append_Incoming_P_sdy() PDF=1
|
检查收到帧的CRC码 |
检查收到帧的NS域 |
Check_NS()=OK and NS>1 |
Append_Incoming_P_sdu()
|
接受其他子帧 |
检查收到帧的NS域 |
Check_NS()<>OK |
Updata_invalid_frame_counter() |
空闲 |
接受其他子帧 |
P_Data indication (P_sdu) |
无操作 |
检查收到帧的FI域 |
接受其他子帧 |
NO_P_Data indication() |
无操作 |
空闲 |
检查收到帧的CRC码 |
Check_FCS()<>OK |
MA_date indication( SA=SA DA=DA M_sdu=M_sdu) SCW=FULSE Pudate credits (SA,IC,CC,DC) |
等待 |
检查收到帧的CRC码 |
Check_FCS()<>OK |
Updata_invalid_frame_counter() |
空闲 |
检查NAC帧是否需转发 |
CC>0 |
CC=CC-1 Build_macframe NS=NS IC=IC OC=oC DC=DC SA=SA DA=DA PL=PL Ddte+M_sdu PAD=PAD FCS=CRC()) TSF=0 |
发送需转发的子帧 |
表8(完)
初始状态 |
事 件 |
操 作 |
最终状态 |
检查NAC校是 否需转发 |
0C=0 |
无操作 |
空闲 |
发送需转发 的子帧
|
TSF'< NS
|
Build—Mpdu( MacFrarne,TSF) P - Data·request(P一sdu)
TSF= TSF+I |
等待本地 确认
|
发送需转发 的子帧
|
TSF= NS
|
无操作
|
检查NAC 蚨是否需转 发 |
等待本地确 认
|
P - Data. confirm(P _ TStat = OK)
|
无操作
|
发送需转 发的子帧 |
等待本地确 认 |
P - Data.confirm(P _ TStat< >OK) |
Wait—End一Repetition() |
等待 |
等待 |
P - Data.indicatin(P _ sclu) |
无操作 |
等待 |
等待 |
End一Repetition() |
无操作 |
空闲 |
4.3.7.1 MAC服务器状态描述
MAC服务器定义了14个状态:
-IDLE空闲。
-SMF:发送MAC帧进程,SMF.S表示发送,SMF.W表示等待本地的确认;这两个状态都与MAC子层实体的发送阶段有关。
-FIC:检查收到MAC子帧的FI域。
--NS.C:检查收到MAC子帧的NS域。
-ROS:接收其他子帧。
——FCS.C:计算和检查收到帧的CRC码。
-LOCK.C:检查服务器是否处于锁定状态。
-CLI.C:作为源的客户标识。
-DA.C:检查目的地址域的内容。
-REP:初始化转发进程,REP.C检查MAC帧是否应转发,REP.S表示发送需转发的子帧,REPW表示等待本地的确认。
--WAIT:在恢复IDLE空闲状态前等待一个End—Repetition事件。
IDLE是当MAC子层已准备好,在同一时间为下列对象执行服务的唯一状态:
-LLC子层(用MA—Data.request原语接收M—sdu)。
——物理层(用P_Data. indication原语接收P - sdu)。
——系统管理应用实体(接收Write—Request()和Read.Request()原语).
当收到MA_Data. request原语时,MAC子层实体检验可否处理它。如果可以,MAC子层实体利用LLC子层提供的M_ sdu建立一个长MAC帧。
在SMF.S状态,MAC子层实体建立不同的M—pdus帧(通过拆分长MAC帧和加上Fl域),并把这些帧传给物理子层。
在SMF.W状态,MAC子层实体等待一个由物理层提供的本地确认信号。
在FI.c状态,MAC子层检查收到的P- sdu=M—pdu的F1域的内容,并进行解码。该域对应于收到的P- sdu的头两个字节。最后MAC子层删除P- sdu的Fl域并按顺序保存剩余部分,以组成一个长MAC帧。
在NS.C状态.MAC子层实体检查收到的P - sdu的NS域的内容,并对之解码。该域对应于P-sdu的第三和第四个字节。如果它是有效的,就确定这个P- sdu为接收的长MAC帧的第一个子帧。
在ROS状态.MAC子层实体准备好接收其他要到来的P - sdu。当收到一个P - Data -indication原语时,MAC子层实体就进入FI.C状态。
在FCS.C状态,MAC子层实体计算收到MAC帧的CRC值,并与FCS域的内容比较。
在LOCK.C状态,MAC子层实体检查运行模式是在LOCKED(锁定)状态还是UNLOCKED(非锁定)状态o UOCKED模式与initiator-mac-address MAC管理变量是否等于NO-BODY条件有关。
在CLI.C状态,MAC子层实体检查收到的MAC帧是发给或发自一个客户系统。若它是从客户系统来的,MAC子层实体更新min-delta-credit MAC管理变量。
在DA.C状态,MAC子层实体检验收到的有效帧,是通过它的专有地址还是它的组地址中的一个发给服务器的。根据测试,执行不同的操作。
在REP.C状态.MAC子层检查当前的MAC帧的当前可信值,是否需要转发。若CC值大于零,而且服务器又是转发器,则开始转发这些子帧。
在REP.S状态,转发进程有效,几个不同的MAC子帧被转发。
在REP.W状态,MAC子层实体等待物理层提供的本地确认信号。
在WAIT状态,MAC子层实体等待一个End—Repetion事件。WAlT是一个过渡期状态,这个时间对应系统转发MAC帧直到可信值减为零的时间。
4.3.7.2 MAC客户状态描述
MAC客户定义了11个状态:
-IDLE空闲状态:
-SMF:发送MAC帧进程,SMF.S表示发送,SMF.W表示等待一个本地的确认信号;这两个状态涉及MAC子层实体的发送阶段。
——FI.C:检查收到子帧的Fl域。
-NS.C:检查收到子帧的NS域。
-ROS:接收其他子侦;
-FCS.C:计算,检查收到帧的CRC值,发送M一sdu给LLC子层,等待在网络上转发的结束。
-REP:启动转发进程,REP.C检查MAC帧是否应转发,REP.S发送需转发的子帧,REP.w等待本地确认信号。
-WAIT:在恢复到fDLE状态前等待一个End一Repeticion事件。
IDLE、SMF.S、SMF.W、FI.C、NS.C、ROS、REP.C、REP.S、REP.W和WAIT状态的特性与MAC服务器的相同。唯一有区别的是FCS.C状态。
在FCS.C状态,客户MAC子层实体计算收到MAC帧的CRC值并和FCS域的内容比较。如果比较结果成功,就发给LLC子层一个MA一Daia.indicat;on原语,不用测试任何地址域的内容口如果不成功,更新invalid-frame-counter MAC管理变量。
4.3.7.3 状态表中使用的符号
4.3.7.3.1 介质访问原语使用的符号
本条定义状态表中用于介质访问原语与LLC用户或系统管理应用实体之间传递的缩写符号。
-SA: MA原语的源地址。
-DA: MA原语的目的地址。
--M一TStat:MA赡,Write一Request(),Read_ Request()厉晤的传输状态。
-M—sdu:在MA原语中传递给LLC用户的MAC服务数据单元。
-SC:在MA原语中由LLC子层传递的服务等级o SC应等于0。
4.3.7.3.2 介质访问协议数据单元使用的符号
本条定义状态表中用于传递给物理层的介质访问协议数据单元的缩写符号。
-FI:M—pdu的帧指示器。
-NS:长MAC帧的子侦数。
-IC.CC,DC:长MAC帧的初始可信值,当前可信值和差值可信值。
-SA:正在处理的长MAC帧的源地址。
-DA:正在处理的长MAC帧的目的地址。
-PL:长MAC帧的填充长度。
-PAD:长MAC帧的填充域。
-Data:长MAC帧的效据域。
-FCS:长MAC帧的帧校验序列。
4.3.7.3,3 物理原语使用的符号
本条定义状态表中用于物理原语与MAC子层实体传递中的缩写符号。
-P_Stat:在P - Data.confum原语中的传输状态。
-P - sdu:用P - Data原语传递给MAC用户的M_ pdu数据。
4.3,7,4 本地状态变量
4.3.7.4.1 TSF
TSF变量(tansimitted SubFrame所传输的子帧)是一个本地变量,计算当前处理的MAC帧已被传送的子帧数。该变量只在本地有意义,在转发过程中使用。
4.3.7.4.2 RSF
RSF变量(Received SubFrame收到的子帧)是一个本地变量,计算当前处理的MAC坝已经收到的子帧数。该变量只在本地有意义,在接收进程中使用。
4.3.7.4.3 SCW
SCW变量(SynchronisationConfinn丑tion Waiting:同步确认等待)是一个本地变量,允许MAC子层实体在找到同步基准之后产生一个伺步确认信息。若它的值是FALSE,则不产生确认信息。
4,3,7.5本地MAC变量
这些变量是由MAC子层使用的预定义值。
4.3.7.5.1 NO-BODY
NO-BODY地址是一个由MAC子层预定义的MAC组地址,其值为十六进制000。
4-3.7.5.2ALL-configured-address
ALL-oonfigured-address是一个由MAC子层预定义的MAC组地址,其值为十六进制FFC。未配置的系统不能识别这个MAC组地址。
4.3.7. 5.3 ALL-physical-address
ALL-pbysical-addref晦是一个由MAC子层预定义的MAC组地址,其值为十六进制FFF。
4.3.7.6 MAC管理变量
MAC管理变量是MAC子层实体在处理进程中进行读或者写时所使用的变量集。
表9列出在SFSK协议子集中使用的服务器和客户MAC管理变量。这些变量用于系统管理。在D中,服务器的MAC管理变量链接剜管理信息库(MIB)的DLMS对象(参见IEC 61334-4-512)。 、
DL/ T 79051-2002
MAC管理变量 |
所属系统 |
MAC子层实体所用 |
系统管理应用实体可用以 |
Initiator_mac_address |
服务器 |
读/写 |
写 |
invalid-trame-counter |
客户 |
读/写 |
读/写; |
mac-address |
服务器/客户 |
读/写 |
写 |
mac-group-address |
服务器 |
读/写 |
写 |
min-delta-credit |
服务器 |
读/写 |
读/写 |
new-synchronisation |
服务器/客户 |
读 |
写 |
repeuter |
服务器 |
读 |
写 |
synchronisation- confirmation- time- out |
服务器 |
读 |
写 |
time-out-frame-nat-OK |
服务器 |
读 |
写 |
time-out-not-addressed |
服务器 |
读 |
写 |
通过Write_ Request()和Read—Request()管理原语,DCP的系统管理应用实体可以在本地访问这些变量。
详细信息参见IEC 61334-4-511。
4.3.7.6.1 有关MAC子层的本地系统管理变量
SMAE(系统管理应用实体)使用这些变量进行本地管理。它们不链接到DLMS客户访问的DLMS对象。
-reception-credits-array (Write):通过巨函数Update—Credits()在每次收到MAC帧时更静r该变量。提供一个表对应(SA、lC、CC、DC),这些值与已收到MAC帧的发送系统有关。
-sending-credits-array (Read):该变量由本地SMAE更新。这个数组提供一个表对应(DA、IC、CC),MAC子层在发送进程通过函数Inicred (DA)=IC和函数DeltaCred (DA):DC考虑它。Sending- credits的更新算法根据系统是服务器还是客户而有所区别。
注:在服务器系统中,有可能改变Sending- credirs-*uny变量的事件有:
——通过Update—Credits()函数更新receptian-ctedits-mny(MAC子层所产生的事件,参见4.3.7.8.16)。
——收到一个Discover Request(发现请求)(CIASE产生的事件)。
在客户系统已描述的特定算法由reception-credits-array变量来建立sending-credits-array变量。
4.3.7.7 状态函数
4.3,7.7.1 A_ client_is - source()
A—client—is - source()函数返回两个值之一:
--TRUE:收到MAC坎的源地址域(SA)是在参考模型规定的数值范围内(值从000到DFF)。
-FALSE:收到MAC帧的源地址域(SA)在COO-DFF的数值范围之外。
4.3.7.7.2 Check()
Check()函数的返回值表示对参数域的处理的结果成功与否,以及所需的资源是否可用。
可能的返回值如下:
-OK:参数域处理成功和资源可用。
-LM-NI:本地MAC子层所请求的服务没有完成。
-LM-TU:本地资源暂时不可用。
-LM-SE:提交的原语有句法错误(M_ sdu的长度大于242字节)。
-LM-HF:硬件故障。
4.3.7.7.3 Check—FCS()
Check—FCS()函数的返回值表示MAC帧处理的结果成功与否。该函数比较本地计算的CRC值和含在FCS域中的数值(MAC帧的最后3个字节)o
可能的返回值如下:
-OK:在组装的MAC帧中没有发现CRC差错。
-CRC Error:在MAC帧中发现CRC差错。
4.3.7.7.4 Check Fl()
Check FI()函数对Fl域解码,如果Fl域具有相关值(00、01、10、1l这4个可能的值之一),则返回OK。
4.3.7,7.5 Check Initiator()
Check—Initiator()函数在下列情况下返回OK:
收到MAC帧的一个地址域(目的地址或源地址)对应启动方MAC地址(从COO到DFF).并且等于包含在initiator-mac-address管理变量的地址。
一收到MAC帧的一个地址域(目的地址或源地址)没有对应启动方的地址。
Check Initiator()在下列情况下返回NOK:
—一收到MAC帧的一个地址域(目的地址或源地址)对应启动方地址(从000到DFF),却不等于包含在initiator-mac-address管理变量中的地址。
4.3.7.7.6 Check NS()
Check NS()函数对NS域解码,如果NS域的内容有相关的值,返回OK。
两个可能的返回值如下:
-OK:解码后的NS域包含一个相关的值。
--NS Error:解码后的NS域的值不一致。
4.3,7.7.7 Check Read()
Check—Read()函数的返回值表示Read Request()管理原语处理的结果成功与否。
可能的返回值如下:
-OK:参数域被成功处理和资源可用。
-LM-NI:本地1\4:AC子层所请求的服务没有完成。
--LM-TU:本地资源暂时不可用。
-LM-SE:提交的原语有句法错误。
-LM-HF:硬件故障。
4.3.7.8 Check—repeater()
Check一repeater()函数返回两个可能的值:
--TRUE:如果repeater MAC管理变量的值设置为’rRUE。
--FALSE:如果repeater MAC管理变量的值设置为FALSEo
4.3.7.7.9 Check Wrire()
Check Write()函数返回值表示Write Request()管理原语处理的成功或者失败。
可能的返回值如下:
-OK:参数域被成功处理和资源可用。
--LM-NI:本地MAC予屡所请求的服务没有完成;
——LM-TU:本地资源暂时不可用。
——LM-SE:提交的原语有句法错误。
-LM-HF:硬件故障。
由MAC子层实体实现的其他控制不在本标准范围之内。但是,推荐下列控制:
——在收到一个包含启动方MAC地址的Write—Request()原语时,MAC子层实体应该检查提交的值是否包含在单独的客户系统地址范围内。
——在收到一个包含服务器MAC地址的Write—Request()原语时,MAC子层实体应该检查提交的值是否包含在单独的服务器系统地址范围内。
4.3.7.7.10 Count—Out (amount of time)
Count一Out()事件在计数器到给定数值时发生。计数器由Init一Counter—SS()或Init—Counter—MN()进程设置。当MAC子层不在空闪状态时,可产生Courtt Out事件。但是,它仅在空闲状态时被撤消。如果Counter—Out()事件没有被撤消,和计数器相关的Stop一counter—SS()或Stop—Ccunter.MN()事件出现,那(Count—Out)事件就简单地完全被删除了。
4.3.7.7.11 End—Repetition()
由Wait—End—Repetition()函数启动的时间片计数器溢出时,产生End—Repetition()事件。
4.3.7,7.12 GlobaIAddress()
GlobaIAddnx沿()函数检查收到的MAC帧的目的地址域是否等于某一个预定义的MAC组地址(NO-BODY,ALI_configured和ALL-physical地址)或者等于mac-group-addresses管理变量中的组地址。该函数返回3个可能的值:
OK:收到的MAC帧的目的地址域等于ALL-physicl预定义的值或等于mac-group-addresses管理变量中所定义的MAC组地址中的一个地址;
. ALLCONF:收到的MAC帧的目的地址或等于ALLconfigured预定义的值;
NOK:收到的MAC帧的目的地址域等于NO-BODY地址,或不等于ALL-physical地址.ALL-configured地址和mac-group-addresses管理变量中的组地址之一。
4.3.7.7.13 IndividuaIAddress()
individuaIAddress()函数比较系统的专有地址(mac-address管理变量)和收到的MAC帧的目的地址。该函数返回两个值:
OK:两个地址(单个地址和目标地址)相等(可能等于预定义的NEW地址);
NOK:两个地址不同。
4.3.7.7.14 initiator-mac-address()
initiator-mac-address()函数返回initiator-mac-address MAC管理变量的值。
4.3.7.7.15mac-address()
mac-address()函数返回mac-address MAC管理变量的值。
4.3.7.7.16 Na一P—Data.indication()
No_P一Data.indication()事件产生于接收其他子帧状态,在等待时间片期间,如果没有从物理层收到P - Data.indication原语时产生。
4.3.7.7.17 Read_ Request()
该事件由系统管理应用实体产生(SMAE:参见IEC 61334-4-512).用于提交对服务器或客户MAC管理变量的读请求(参见4.3.7.6)。
server-MAC一management-variable自变量意指Read一Request请求可以在任何服务器MAC管理变量执行。
client-MAGmanagement-variable自变量意指Read—Request请求可以在任何客户MAC管理变量执行。
4.3.7.7*18 Write—Request()
该事件由系统管理应用实体产生(SMAE:参见IEC 61334-4-512),用于提交对服务器或客户MAC一management变量的写请求(参见4.3.7.6)。一个正确的Write—Request()事件会产生一个Set—Value()动作。该函数的自变量有几个特殊的值需强调说明:
示例:
Write—Request (initiator-mac-address= NO-BODY)事件意指对initiator-mac-addressMAC管理变量进行管理写操作及提交的值是NO-BODY。
Write—Request(initiator-mac-address)事件意指对initiator-mac-address MAC管理变量进行管理写操作,没有指定特殊的值。
注:在DCP中,服务器MAC管理变量链接到DCP管理信息库的DLMS变量(详见IEC 61334-4-512)。这样,每当列链接到MAC子层管理的MIB对象之一发生写操作时,就由系统管理应用实体产生Write—Request (MAC—Management—Variable)事件。
4.3,7.8 操作描述
4.3.7.8.1Append—Incoming—P- sdu()
Append—Incoming—P- sdu()函数把所有到来的P- sdu (MAC子帧)附加到一个MAC帧。
4.3.8.2 Build_MacFrame (NS, lC, CC, DC, SA, DA, PL, Data, PAD, FCS)
该函数建立一个MAC帧o该函数不同域的内容被依次连接起来。将这些元素依次连接起来就构成了一个MAC帧,rllff的长度是36字节的整数倍。参数的顺序如上所示。
4.3.8.3 Build_ Mpdu (MacFrame, N)
Build_ Mpdu()函数由长MAC坎建立第N个MAC子帧。由MAC子帧形成一个M—pdu。
注一个MAC子帧是从长MAC杖中分解出来的36字节的数据和已加在其前的Fl域(2个字节)组成。
4.3.7.8.4 CRC()
该函数利用提交数据包的Ic、CC、DC、SA、DA、PL和Data域的值计算FCS域的值,这些域是Build—MacFrame函数的自变量。数据包中不包括NS域。数据包可能是帧头和长帧的数据域或者是帧头和短帧中某一块的数据域。
CRC由24次(八进制)的生成多项式g(z)来定义。
g(z):127266713
4.3.7.8.SDeltaCred(destination address)
该函数返固差值可信值,该值与提交的目的地址有关。是由SMAE管理所维护的sending-credits-array (DA、IniCred (DA) =lC、DeltaCred (DA) =DC)本地管理变量中分解出来的。
4.3.7.8.6 Extraa Lengths (M—sdu)
该函数返回NS、PL和PAD域的值,这些值涉及提交的M—sdu的长度。应计算这些值用以建立一个长MAC帧。选择PAD的长度使得该长MAC帧的长度是36个字节的整数倍(一个MAC子帧由36个字节加2个字节的Fl域组成)。表10是可能的值:
M_ sdu的长度L(字节) |
子帧数目 |
NS域内容(十六进制) |
PL城内容(十进镧) |
L≤26 |
l |
6C6C |
26-L |
27≤L≤62 |
2 |
3A3A |
62-L |
63≤L≤98 |
3 |
5656 |
98-L |
99≤L≤ 34 |
4 |
7171 |
134-L |
135≤L≤170 |
5 |
1DID |
170-L |
171≤L≤206 |
6 |
484B |
206-L |
207≤L≤242 |
7 |
2727 |
242-L |
4.3.7.8,7 IniCred (destination address)
该函数返回初始转发的可信值和提交的相关目的地址。该值由SMAE维护的sending-credits- array(DA,IniCred (DA),DeltaCred (DA)本地管理变量中取得。
4.3-7.8.8 Init.Counter一MN()
Init_Counter()进程启动具有所提交值的计数器。计数器以分钟计数。当其溢出时,计数器产生一个Counter _ Out事件。
Init一Counter_ SS()进程启动具有所提交值的计数器。计数器以秒计数。当其溢出时,计数器产生一个Counter—Out事件。
4.3.7.8.10 Init—Counter一TS()
Init—Counter—TS()进程启动具有所提交值的计数器。计数器以时间片计数。当其溢出时,计数器产生一个Counter一Out事件。
4.3,7.8.11Read—Conf()
Read—Conf()函数产生一个发给系统管理应用实体的原语。该原语包含着上一次收到的Read—Request()原语的处理结果。
4.3.7.8.12 Reset—MAGgroup-addresses()
Reset MAGgroup-addresses()函数删去MAGgroup-addresses MAC管理变量的内容。
4.3.7,8.13 SetValue (MAC Management Variable)
SetValue函数采用Write—Request()事件提交MAC—Management—Variable的值。若该函数不是在Write—Request()事件之后,则值是在函数自变量中明确说明。
4,3.7.8.14 Stop一counter—MN (time-out-not-addressed)
该函数停止链接到time-out-not-addressed定时器的计数过程。执行该操作后,除非产生了Init一counter_ MN (time-out-not-addressed)操作,否则不会产生Count一Out()事件。
4.3.7,8.1S Stop一counter—SS (timer)
该函数停止链接到synchronisation- confinnation- time-out和time-out-framenot-OK定时器的计数过程,它们是以秒计数。执行该操作后,除非产生了Init一counter—MN(time-out-not-addressed)操作,否则不会产生Count—Out()事件。
4.3.7.8.16 Update—Credits (SA、lC、CC、DC)
Update—Credits()函数更新收到的由源地址域(SA)标明的系统发出的MAC帧的可信值。由SMAE使用该信息去更新它的reception-credits-array本地管理变量(SA、lC、CC、DC)由SMAE使用此数组的参数来更新sending-credits-array (DA、lC、DC),决定为下一次传输所要使用的可信值。
注:服务器SMAE并不真正需要reoeption-credits-array管理变量。当一个服务器SMAE被告知发生Update—Credits(SA、IC、cc、DC)事件时,可以直接更新它的scnding-credits anay管理变量,以便为下一次传输形成新的对应关系:
(DA= SAR,Inicred (DA) =ICR,Deltacred (DA) =ICR-CCR)。SAR.ICR.CCR分别是收到帧的SA,lC和CC域的内容。
服务器SMAE不使用收到的MAC帧的DC值。实际上,服务器系统不需要知道到达客户系统所需的初始可信值。服务器SAME对于可信值管理没有智能机构:一个已接收了具有确定的IC值的MAC帧的系统应用同样的lC值响应(除非它是Discover帧:详见IEC 61334-4-511)。
4.3.7.8.17 Update—invalid-frame-counter()
Update—invalid-frame-counter函数增加invalid-frame-counter本地MAC管理变量的值。
4.3,7.8,18 Update_ min-delta-credit (IC, CC)
Update一min-delta-credit函数计算(IC-OC)差值,更新它的最小值。该值记录在min-delta-credit MAC管理变量里。
4.3.7.8,19 Wait—End—Repetition()
Wait—End一Repetition()函数启动一个等待周期,该周期与系统实际上完成转发过程所需要时间的总量对应。该函数计算NS和CC域的值并产生一个等于CCNS时间片的等待周期。
4.3,7.8.20 Write—Conf()
Write—Conf()函数产生一个发给系统管理应用实体的原语。该原语包含上一次收到的Write。Request()原语的处理结果。
附录A(标准的附录)
差错位描述
下面规定的差错值是为了保证系统内协调工作。它们是用在物理层和MAC层。
差错值用来表明差错发生时的差错类型,OK表示没有差错。
Al差错位格式
一个差错值包含3个主要属性。
-local- remote(本地远方)属性指定差错从处理它的系统来说是本地的还是远方的;
——第二个属性标识产生差错层实体:管理实体,启动方,应用实体,LLC层,MAC层或物理层;
——最后一个属性给出发生差错的更多细节。
ASN.1-个差错值的描述如下:
ErrorValue:: =CHOICE l
ok [0] Null,
error [l]SEQUENCEl
lacal-remote-identifier Boolean{
local (True),
remnote (False)
layer Enumerated{
management-a (0),
initiator-ae (2),
application-laye (1),
llc-entity (2),
mac-entity (3),
physical-entity (4)
}
more -details CHOICE{
cammon-errorCommonError -参见A.2
reply-ernor ReplyError——参见A.3.1
synchro-errorSynchroError——.参见A.3.2
——待完成
}
}
}
在规范中,差错类型用四个字符描述。
——第一个字符说明差错对于处理它的系统来说是本地的(L)还是远方的(R);
——第二个字符说明产生差错的层:管理(G).启动方(I),应用(A).LLC (L).MAC (M)或物理层(P);
——后两个字符给出发生差错的详细信息。
A2一般差错细节
每一层都可能使用一般差错类型描述将差错通知它的上一层。
可能返回的值:
-OK:投发现任何差错;
-TU:资源暂时不可用;
-NI:资源未完成或未激活;
-HF:硬件故障;
-SE:句法错误。
使用ASN.1的差错类型如下:
CammonError:: =CHOICE{
temporarily-unavailable 暂不可用 [0],
non-implemented 未完成 [1]
hardware-failure 硬件故障 [2],
syntax-error 句法错 [3]
——保留[4]到[9],为将来定义使用
A3特定差错细节
一些服务或层要求特定的差错值。特定差错值与一些服务或一些层实体相关。仅当它们包括在系统内协调操作时,在本标准中才说明口
A3.1 DL—Reply服务
DL—Reply服务定义如下细节:
-RL-LE:允许的长度与L_ sdu的长度不匹配;
-RL-NS:用户没有提交L_ sdu响应。
在ASN.1里,
ReplyEnor:: =CHOICE l
not-enough-length长度不够 [10],
no-buffered-lsdu 无空间 [11]
}
A3.2 P - lData服务
物理层定义了一个特定差错。当物理层在LFS状态时,收到一个P - Data原语时遇到的差错。
-IP-NS:服务器物理层未同步。
在ASN.1里,SynchroError:: =CFIOICE{Not Syncbronised未同步[12]}。
参考文献
GB/T 15129-1994信息处理系统开放系统互联服务约定
GB/T 16162-1996信息处理系统开放系统互联抽象语法标记一(ASN.1)规范
GB/T 17176-1997信息处理系统开放系统互联应用层结构
IEC 61334-4-41: 1996采用配电线载波的配电自动化第4部分:数据通信协议第41篇:应用协议.配电线报文规范
IEC 61334-4-42: 1996采用配电线载波的配电自动化第4部分:数据通信协议第42篇:应用协议-应用层
2431