分类:
2011-05-24 19:32:42
第二篇
MAC(媒介访问控制子层)
Mac对象模拟媒介访问协议,由于网络中的发送和接收机制大部分与Mac层紧密联系,所以Mac对象必须是双工的。在发送端,Mac对象把数据包加上Mac头后传送到物理层(Channel)。在接受端,Mac对象从物理层异步接收数据包,在Mac协议处理之后,它把数据包传递给链路层(LL)。Mac层的示意图如下:
当一个Mac对象通过recv方法接收到一个数据包后,它检查这个数据包是收到的还是要发送的,如果是收到的传给sendUp,如果是发送的传给sendDown。注意相应的Mac协议如802.11,TDMA,CDMA等,如果要实现,应该放在sendDown函数中实现。
Mac中,共用体MacState中存放了Mac层的状态,通过它可以知道Mac当前的状态;Channel指针指出了Mac连接着的Channel对象;Phy,Tap,LL指针分别指出了与Mac相关的物理层接口,tap,逻辑链路控制子层。
LL(逻辑链路控制子层)
LL对象负责模拟数据链路协议。许多协议都在这层得到了实现,比如数据包分组和重组,可靠的链路协议。LL的另一个重要功能是设置数据包MAC头部的Mac目的地址。这个任务可以分解为:找下一跳节点的IP地址(路由),把这个IP地址解析成正确的Mac地址(ARP)。
先来看看一个叫连接器的构件,它的示意图如下所示:
LL的示意图如下:
上图所示,macDA_目标节点的Mac地址,ARPTable是此LL连接的ARP对象,它实现了IP地址到Mac地址的转换。LL和Mac之间还有一个接口队列(上图中的Queue指向这个队列),接口队列是由优先级队列组成的,它通过将分组插入到队首位置以优先处理路由协议分组。它可以对所有队列中的分组进行过滤。
Mac、接口队列和LL就组成了我们通常说的数据链路层。