《分布式系统:概念与设计》一3.5.2 IEEE 802.11无线LAN

本文涉及的产品
视频直播,500GB 1个月
简介: 本节书摘来华章计算机《分布式系统:概念与设计》一书中的第3章 ,第3.5节,(英) George Coulouris Jean DollimoreTim Kindberg Gordon Blair 著 金蓓弘 马应龙 等译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.5.2 IEEE 802.11无线LAN

本节将总结无线LAN技术中必须解决的无线网络的特殊特征,同时解释IEEE 802.11是如何处理这些特征的。IEEE 802.11(WiFi)标准扩展了以太网(IEEE 802.3)技术采用的载波侦听多路复用(CSMA)原理以适应无线通信的特征。802.11标准旨在支持距离在150m之内以最高54Mbps的速度进行的计算机间通信。
图3-24是包含无线LAN的企业内部网的一部分。几个移动无线设备通过基站和企业内部网的其他设备通信,这里基站是有线LAN的接入点。通过接入点与传统LAN连接的无线网络称为基于基础设施的无线网络。
image

无线网络的另一种配置方式称为自组织网络。自组织网络不包括接入点或基站。它们通过同一邻域的无线接口检测到彼此的存在,然后在运行中建立起网络。当同一房间内的两个或者多个笔记本电脑用户发起与任何可用站点的连接时,就会形成一个自组织网络。它们可以通过在某台机器上启动文件服务器进程来共享文件。
IEEE 802.11网络在物理层采用无线电频率信号(利用免牌照使用的2.4GHz和5GHz波段)或者红外线作为传输介质。标准中的无线电版本在商业上广受注意,下面我们将介绍它。IEEE 802.11b标准是第一个广泛使用的派生标准。它在2.4GHz波段运行,支持高达11Mbps的数据通信。它从1999年起在许多办公室、家庭和公共场所与基站一起被安装,使笔记本电脑和PDA能访问局域网设备或互联网。IEEE 802.11g是对802.11b最近的更新,它仍使用2.4GHz波段但使用不同的信号技术从而获得高达54Mbps的速度。最后,802.11a派生标准工作在5GHz波段,在更短范围内带宽可达54Mbps。所有的派生标准采用不同的频率选择或者跳频技术,以避免外部干扰以及独立的无线LAN之间的相互干扰(后者我们不准备详细讨论)。我们重点讨论对CSMA/CD机制做的修改,这些修改是802.11的所有版本的MAC层所需要的,并使得广播数据传输可以用到无线电传输中。
和以太网一样,802.11MAC协议为所有的站点提供相同的机会使用传输通道,站点之间可以直接传输。但MAC协议控制不同站点对通道的使用。对以太网而言,MAC层起到了数据链路层和网络层的作用,它负责将数据包发送到网络的主机上。
使用无线电波(而非电线)作为传输介质会产生一些问题。这些问题源于以太网使用的载波侦听和冲突检测机制仅在整个网络的信号强度大致相同时才有效这一事实。
我们回忆一下,载波侦听的目的是确定发送工作站和接收工作站间的所有结点上的介质是否空闲,冲突检测的目的为确定在接收者邻域内的介质是否空闲,以免在传输时受到干扰。由于无线LAN操作的空间内信号强度不均匀,所以载波侦听和冲突检测可能出现如下几种错误:
工作站隐藏:载波侦听没能检测到网络上另一个工作站正在传输。图3-24可以说明这一点,掌上电脑D正在向基站E传输,由于图中所示的无线电屏障,笔记本电脑A可能发现不了D的信号。于是A开始传输,若不采取手段防止A传输,将在E点造成冲突。
信号衰减:由于电磁波传输遵循反平方规则衰减,因此随着和传输者距离的增加,无线电信号强度迅速衰减。一个无线LAN内的某个工作站可能在其他工作站的范围之外。如图3-24所示,虽然笔记本电脑A或C可以成功地向B或E传输信号,但A却可能检测不到C的传输。信号衰减使得载波侦听和冲突检测都失效。
冲突屏蔽:遗憾的是,以太网中用来检测冲突的侦听技术在无线电网络中并不是十分有效。因为上面提到的平方衰减规律,本地产生的信号总是比其他地方产生的信号强很多,极大地覆盖了远程传输。因此,笔记本电脑A和C可能同时向E传送,它们都没有检测到冲突,但E却只收到了乱码。
尽管如此,IEEE 802.11网络中并没有废弃载波侦听,而是通过在MAC协议中加入时隙保留机制对载波侦听机制进行加强。这种方案称为具有冲突避免的载波侦听多路复用(CSMA/CA)。
在工作站准备发送消息时,它侦听介质。如果没有检测到载波信号,它假设以下条件之一为真:
1)介质可用。
2)范围之外的工作站正在请求获得一个时隙。
3)范围之外的工作站正在使用以前保留的时隙。
时隙保留协议包括在发送者和接收者之间交换一对短消息(帧)。首先是发送者给接收者发一个请求发送(RTS)帧,RTS消息指定了需要的时隙长度。接收者回复清除发送(CTS)帧,并重复时隙的长度。这种交换的效果如下:

  • 发送者范围内的工作站将获得RTS帧,并记录时隙长度。
  • 接收者范围内的工作站将获得CTS帧,并记录时隙长度。
    结果,发送者和接收者范围内的所有工作站在规定的时隙内都不传输,留出空闲通道给发送者,使之能传输一定长度的数据帧。最后,接收者对数据帧的成功传输发出确认信息,以帮助处理通道的外部干扰问题。MAC协议的时隙保留特征在以下几个方面有助于避免冲突:
  • CTS帧有助于避免工作站隐藏和信号衰减问题。
  • RTS和CTS帧很短,所以冲突的风险也很小。如果检测到冲突或者RTS没有得到CTS回复,则像以太网那样,使用一个随机后退周期。137
  • 如果正确地交换了RTS和CTS帧,那么随后的数据和确认帧应当没有冲突,除非间歇性的信号衰减导致第三方没有接收到RTS帧或者CTS帧。
    安全性 通信的私密性和完整性显然是无线网络中必须关注的问题。处于范围内且配有发送器/接收器的任何一个工作站都可能加入这个网络,如果失败,它也可能窃听其他工作站之间的传输。第一个试图为IEEE 802.11解决安全问题的是WEP(有线等价私密性)。遗憾的是,WEP并没有达到它名字所隐含的目标。它的安全设计在几个方面都有漏洞,使得它很容易被破坏。我们将在11.6.4节描述它的弱点,并总结当前的改进情况。
相关文章
《分布式系统:概念与设计》一3.5.3 IEEE 802.15.1蓝牙无线PAN
本节书摘来华章计算机《分布式系统:概念与设计》一书中的第3章 ,第3.5节,(英) George Coulouris Jean DollimoreTim Kindberg Gordon Blair 著 金蓓弘 马应龙 等译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1454 0
|
2月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
4月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
131 2
基于Redis的高可用分布式锁——RedLock
|
4月前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
|
22天前
|
存储 NoSQL Java
使用lock4j-redis-template-spring-boot-starter实现redis分布式锁
通过使用 `lock4j-redis-template-spring-boot-starter`,我们可以轻松实现 Redis 分布式锁,从而解决分布式系统中多个实例并发访问共享资源的问题。合理配置和使用分布式锁,可以有效提高系统的稳定性和数据的一致性。希望本文对你在实际项目中使用 Redis 分布式锁有所帮助。
65 5
|
26天前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
55 8
|
1月前
|
NoSQL Redis
Redis分布式锁如何实现 ?
Redis分布式锁通过SETNX指令实现,确保仅在键不存在时设置值。此机制用于控制多个线程对共享资源的访问,避免并发冲突。然而,实际应用中需解决死锁、锁超时、归一化、可重入及阻塞等问题,以确保系统的稳定性和可靠性。解决方案包括设置锁超时、引入Watch Dog机制、使用ThreadLocal绑定加解锁操作、实现计数器支持可重入锁以及采用自旋锁思想处理阻塞请求。
59 16
|
1月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
43 5
|
2月前
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
75 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
|
2月前
|
NoSQL Redis 数据库
计数器 分布式锁 redis实现
【10月更文挑战第5天】
52 1

热门文章

最新文章