单一共享广播信道,如果两个或者两个以上结点同时传输,会互相干扰(interference)
冲突(collision):结点同时接收到两个或者多个信号→接收失败!
MAC协议采用分布式算法决定结点如何共享信道,即决策结点何时可以传输数据。
其必须基于信道本身,通信信道共享协调信息。无带外信道用于协调。
  • 信道划分(channel partitioning)MAC协议
TDMA: time division multiple access
TDM 将时间划分为时间帧(timeframe),并进一步划分每个时间帧为N个时隙(slot)
每个站点在每个时间帧,占用固定长度的时隙(长度=分组传输时间);未用时隙空闲(idle)
如图:6站点LAN,134传输分组,256空闲
FDMA: frequency division multiple access
信道频谱划分为若干频带(frequency bands)
每个站点分配一个固定的频带,不会冲突但信道利用率可能不高;无传输频带空闲
如图:6站点LAN, 134频带传输数据,256频带空闲。
CDMA: code division multiple access
每个用户分配一个唯一的m bit码片序列(chipping sequence),其中“0”用“-1”表示、“1”用“+1”表示。
各用户码片序列相互正交(orthogonal)
各用户使用相同频率载波,利用各自码片序列编码数据,编码信号= (原始数据) × (码片序列)
如发送比特 1(+1),则发送自己的m bit 码片序列
如发送比特 0(-1),则发送该码片序列的m bit 码片序列的反码
接收端收到的是各用户的叠加向量,用发送端的码片序列与收到的编码信号求内积则可解码
  • 随机访问(random access)MAC协议
当结点要发送分组时,利用信道全部数据速率R发送分组,没有事先的结点间协调
两个或多个结点同时传输时会发生冲突,因此需要定义:如何检测冲突、如何从冲突中恢复 (如通过延迟重传)
时隙ALOHA协议
所有帧大小相同
时间被划分为等长的时隙(每个时隙可以传输1个帧),结点间时钟同步
结点只能在时隙开始时刻发送帧,当结点有新的帧时在下一个时隙(slot)发送
如果2个或2个以上结点在同一时隙发送帧,结点即检测到冲突
如果无冲突:该结点可以在下一个时隙继续发送新的帧
如果冲突:该结点在下一个时隙以概率p重传该帧,直至成功
优点:
(1)单个结点活动时,可以连续以信道全部速率传输数据
(2)高度分散化:只需同步时隙
(3)简单
缺点:
(2)冲突时会浪费时隙
(2)存在空闲时隙
(3)结点也许能以远小于分组传输时间检测到冲突,不过检测到冲突也没有意义,因为时隙ALOHA协议只允许在时隙开始时发送数据帧
(4)需要时钟同步
假设: N个结点有很多帧待传输,每个结点在每个时隙均以概率p发送数据
对于给定的一个结点,在一个时隙将帧发送成功的概率= p(1-p)N-1
对于任意结点成功发送帧的概率= Np(1-p)N-1
最大效率: 求得使Np(1-p)N-1最大的p*
对于很多结点,求Np*(1-p*)N-1当N趋近无穷时的极限,可得最大效率=1/e≈0.37
非时隙ALOHA协议
无需时钟同步,更加简单
当有新的帧产生时,立刻发送
冲突可能性增大:在t0时刻发送帧,会与在[t0-1, t0+1]期间其他结点发送的帧冲突
易损时间区为[t0-1, t0+1],是时隙ALOHA协议的两倍
P(给定结点成功发送帧) = P(该结点发送)*P(无其他结点在[t0-1, t0]期间发送帧)*P(无其他结点在[t0, t0+1]期间发送帧)
= p·(1-p)N-1·(1-p)N-1
= p·(1-p)2(N-1)
选取最优的p,当N趋近无穷时的极限=1/(2e)≈0.18,比时隙ALOHA更差
载波侦听多路访问协议 CSMA(carrier sense multiple access)协议
载波侦听:发送帧之前,监听信道(载波):
    信道空闲:发送完整帧
    信道忙:推迟发送
        1-坚持CSMA:以概率p=1一直坚持监听信道
        非坚持CSMA:不坚持监听信号,等待一段时间再监听
        P-坚持CSMA
冲突可能仍然发生:信号传播延迟,或者同时发送了数据帧
广播信道的端到端信道传播时延越长,载波侦听结点不能侦听到网络中另一个结点巳经开始传输的机会就越大
如图:B已经开始传输,但由于信号传输延迟,D不能侦听到,因此也开始了传输。但即使出现冲突也必须将数据帧发送完,会浪费信道资源。
具有碰撞检测的载波侦听多路访问协议 CSMA/CD (CSMA with CollisionDetection)协议
应用于以太网
碰撞检测:当一个传输结点在传输时一直在侦听此信道。如果它检测到另一个结点正在传输干扰帧,它就停止传输
有线局域网易于实现:测量信号强度,比较发射信号与接收信号
无线局域网很难实现:接收信号强度淹没在本地发射信号强度下
如图:短时间内可以检测到冲突(检测到叠加信号),冲突后传输中止,减少信道浪费
网络带宽:R bps
数据帧最小长度:Lmin(bits)
信号传播速度:V(m/s)
数据帧发送完成前,A必须收到B处传来的冲突L / R ≥ 2dmax/ V
Lmin/ R = 2dmax/ V
可能还有一些延迟时间,RTT > d / V ,得Lmin/ R= RTTmax
Tprop= LAN中2个结点间的最大传播延迟
ttrans= 最长帧传输延迟,对于10Mbps,传输最大长度的以太网帧的时间近似为1.2ms
Tprop趋近于0或者ttrans趋近于∞时,效率趋近于1
远优于ALOHA,并且简单、分散!
避免冲突的载波侦听多路访问协议  CSMA/CA(CSMAwith Collision Avoidance)协议
802.11无线局域网中,不能像CSMA/CD那样,边发送、边检测冲突,原因为:
(1)检测碰撞的能力要求站点具有同时发送(站点自己的信号)和接收(检测其他站点是否也在发送)的能力。因为在802. 11适配器上,接收信号的强度通常远远小于发送信号的强度,制造具有检测碰撞能力的硬件代价较大。
(2)无法侦听到所有可能的冲突:隐藏站、信号衰落
802.11发送端:
(1)如果监听到信道空闲了分布式帧间间隔DIFS后,则在发送整个帧(发送的同时不检测冲突)
发送端首先利用CSMA向BS发送一个很短的请求发送(request-to-send,RTS)控制帧预约信道,而不是随机发送数据帧,利用小预约帧避免长数据帧的冲突。RTS帧仍然可能彼此冲突(但RTS帧很短)
AP广播一个很短的允许发送(clear-to-send,CTS)控制帧作为对RTS的响应,CTS帧可以被所有结点接收,以消除隐藏站影响
发送端可以发送数据帧,其他结点推迟发送
(2)如果监听到信道忙,则选取随机回退值
            当信道空闲时,计时器倒计时
            当计时器超时时,发送帧
(3)如果没有收到ACK,则增加随机退避间隔时间,重复(2)
802.11接收端:
如果正确接收帧,则在延迟短帧间间隔SIFS后,向发送端发送ACK(由于存在隐藏站问题)
  • 轮流访问MAC协议
轮询协议
主结点以循环的方式轮询每个结点(向结点发送一个报文,告诉它能够传输的桢的最多数掀)
从属结点发送数据(被邀请且有数据才会发送数据)
缺点:
(1)轮询数据帧存在轮询开销
(2)主结点必须依次轮询每一个非活跃结点,活跃结点等待轮询存在等待延迟
(2)单点故障问题
令牌传递协议
控制令牌(小的特殊帧)依次从一个结点传递到下一个结点。
当一个结点收到令牌且它有一些帧要发送时,它持有令牌并发送最大数目的帧数;否则,它立即向下一个结点转发该令牌。
缺点:
(1)令牌开销
(2)令牌丢失,则必须调用某些恢复步骤使令牌返回到循环中来
(3)令牌依次传递,结点必须等待令牌存在等待延迟
(4)单点故障问题

计算机网络-链路层(2)多路访问控制协议(multiple access control protocol)的更多相关文章

  1. 介质访问控制子层-Medium Access Control Sublayer:多路访问协议、以太网、无线局域网

    第四章 介质访问控制子层-Medium Access Control Sub-layer 4.1介质访问控制子层概述 MAC子层不属于之前提到的OSI或TCP/IP架构的任何一层,这也是为什么这一层被 ...

  2. Azure ARM (16) 基于角色的访问控制 (Role Based Access Control, RBAC) - 使用默认的Role

    <Windows Azure Platform 系列文章目录> 今天上午刚刚和客户沟通过,趁热打铁写一篇Blog. 熟悉Microsoft Azure平台的读者都知道,在老的Classic ...

  3. Linux访问控制列表(Access Control List,简称ACL)

    Linux访问控制列表(Access Control List,简称ACL) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ACL概述 ACL:Access Control L ...

  4. 计算机网络——链路层协议

    一. 链路层的功能 可靠交付:在高差错的链路,如无线链路,可以进行可靠交付:对于其它的有线,可以是多余的: 流量控制:防止接收方的缓存区溢出,帧丢失: 差错检测与差错纠正:在硬件上实现了: 二.多路访 ...

  5. 计算机网络-链路层(4)WiFi:802. 11无线LAN

    有几套有关无线LAN 的802. 11标准,包括802.11b.802.11a和802.11g. 802.11g是至今为止最为流行的技术.一些双模式(802.11a/g)和三模式(802.11a/b/ ...

  6. windows访问控制列表 --ACL(Access Control List)

    1.定义 ACL是一个windows中的表示用户(组)权限的列表. Access Control List(ACL) Access Control Entry(ACE) ... 2.分类 ACL分为两 ...

  7. Azure ARM (17) 基于角色的访问控制 (Role Based Access Control, RBAC) - 自定义Role

    <Windows Azure Platform 系列文章目录> 在上面一篇博客中,笔者介绍了如何在RBAC里面,设置默认的Role. 这里笔者将介绍如何使用自定的Role. 主要内容有: ...

  8. java基础 UDP通信 user datagram protocol 用户数据豆协议 TCP transmission control protocol 传输控制协议 多线程TCP

    无连接通信 UDP 客户端 package com.swift.test; import java.io.IOException; import java.net.DatagramPacket; im ...

  9. 计算机网络七层协议模型 “开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)

    计算机网络七层协议模型 作者:Ryan    时间:2013年10月7日 一.物理层(Physical Layer) OSI模型的最低层或第一层,规定了激活.维持.关闭通信端点之间的机械特性.电气特性 ...

随机推荐

  1. Spring Boot AOP的使用

    简单来说讲,动态地将代码切入到类的指定方法.指定位置上的编程思想就是面向切面的编程. 目录 AOP几个术语 AOP Demo 引入Maven依赖 一个简单的Controller 定义切面类 调用服务 ...

  2. 12天,这本《重学Java设计模式》PDF书籍下载量9k,新增粉丝1400人,Github上全球推荐榜!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言

  3. Python元组索引、截取

    Python元组索引.截取: 索引下标: tuple_1 = ('a','b','c','d','e','f','g','h') print(tuple_1[0]) # a print(tuple_1 ...

  4. Python os.lstat() 方法

    概述 os.lstat() 方法用于类似 stat() 返回文件的信息,但是没有符号链接.在某些平台上,这是fstat的别名,例如 Windows.高佣联盟 www.cgewang.com 语法 ls ...

  5. PHP pos() 函数

    实例 输出数组中的当前元素的值: <?php$people = array("Peter", "Joe", "Glenn", &quo ...

  6. php getimagesize 函数 - 获取图像信息

    getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息. 语法格式:高佣联盟 www.cgewang.co ...

  7. PHP str_split() 函数

    实例 把字符串 "Hello" 分割到数组中: <?php print_r(str_split("Hello")); ?>高佣联盟 www.cgew ...

  8. Linux搭建Gitlab(Docker版)

    1.拉取gitlab的docker镜像 #这里使用gitlab的社区版 docker pull gitlab/gitlab-ce 2.启动gitlab容器实例 docker run -d  -p 44 ...

  9. .net core下获取自身服务器地址

    网上的例子千篇一律都是Request.HttpContext.Connect.Connection.XX这种 或者依赖于IHttpContextAccessor的 而我的场景是在非控制器流程获取自身服 ...

  10. Android 自定义组件,自定义LinearLayout,ListView等样式的组件

    今天讲的其实以前自己用过,就是在网上拿下来的把图片裁剪成圆形的方法,之前的随笔也介绍过的, 用法就是,在布局里写控件或者组件的时候得把从com开始到你写的那个类的所有路径写下来. 至于我们该怎么创建呢 ...