CSMA/CA协议详解【计算机网络】

2023-11-11

【读书笔记】2018年9月5日17:13:26  《计算机网络》第六版 谢希仁

虽然CSMA/CD协议已成功地应用于使用有线连接的局域网,但无线局域网能不能也使用CSMA/CD协议呢?

显然,这个协议的前一部分CSMA能够使用。在无线局域网中,在发送数据之前先对媒体进行载波监听。如发现有其他站在发送数据,就推迟发送以免发生碰撞。这样做是合理的。但问题是“碰撞检测”(CD)在无线环境下却不能使用。理由如下:

 (1)碰撞检测”要求一个站点在发送本站数据的同时,还必须不间断地检测信道。一旦检测到碰撞,就立即停止发送。但由于无线信道的传输条件特殊,其信号强度的动态范围非常大,因此在802.11适配器上接收到的信号强度往往会远远小于发送信号的强度(信号强度可能相差百万倍)。如要在无线局域网的适配器上实现检测到碰撞,在硬件上需要的花费就会过大。

(2)更重要的是,即使我们能够在硬件上实现无线局域网的碰撞检测功能,我们仍然无法避免碰撞的发生。这就表明,无线局域网不需要进行碰撞检测。

     “无线局域网不需要进行碰撞检测”是由无线信道本身的特点决定的。我们知道,无线电波能够向所有的方向传播,且其传播距离受限。当电磁波在传播过程中遇到障碍物时,其传播距离就会受到限制。如图9-4所示的例子表示了无线局域网的特殊问题。图中给出两个无线移动站A和B,以及接入点AP。我们假定无线电信号传播的范围是以发送站为圆心的一个圆形面积。

图9-4(a)表示站点A和C都想和B通信。但A和C相距较远,彼此都听不见对方。当A和C检测到信道空闲时,就都向B发送数据,结果发生了碰撞。这种未能检测出信道上其他站点信号的问题叫做隐蔽站I}}题(hidden station problem) o    当移动站之间有障碍物时也有可能出现上述问题。例如,三个站点A, B和C彼此距离都差不多,相当于在一个等边三角形的三个顶点。但A和C之间有一个座山,因此A和C彼此都听不见对方。若A和C同时向B发送数据就会发生碰撞,使B无法正常接收。

图9-4(b)给出了另一种情况。站点B向A发送数据。而C又想和D通信。但C检测到信道忙,于是就不敢向D发送数据,其实B向A发送数据并不影响C向D发送数据(如果这时不是B向A发送数据而是A向B发送数据,则当C向D发送数据时就会干扰B接收A发来的数据)。这就是暴露站问题((exposed station problem)。在无线局域网中,在不发生干扰的情况下,可允许同时多个移动站进行通信。这点与有线局域网有很大的差别。

由此可见,无线局域网可能出现检测错误的情况:检测到信道空闲,其实并不空闲;而检测到信道忙,其实并不忙。

我们知道,CSMA/CD有两个要点,一是发送前先检测信道,信道空闲就立即发送,信道忙就随机推迟发送;二是边发送边检测信道,一发现碰撞就立即停止发送。因此,偶尔发生的碰撞并不会使局域网的运行效率降低很多。但无线局域网不能使用碰撞检测,只要开始发送数据,就一定把整个帧发送完毕。由此可见,如果在无线局域网的发送过程中,一旦发生了碰撞,那么整个信道资源在这段时间就白白浪费了。因此,无线局域网应当尽量减少碰撞的发生。

    为此,802.11局域网就使用CSMA/CA协议。CA表示Collision Avoidance,是碰撞避免的意思,或者说,协议的设计是要尽量减少碰撞发生的概率。

   802.1 I局域网在使用CSMA/CA的同时,还使用停止等待协议。这是因为无线信道的通信质量远不如有线信道的,因此无线站点每通过无线局域网发送完一帧后,要等到收到对方的确认帧后才能继续发送下一帧。这叫做链路层确认。

   我们在进一步讨论CSMA/CA协议之前,先要介绍802.11的MAC层。    802.11标准设i十了独特的MAC层(图9-5 )。它通过协调功能(Coordination Function)来确定在基本服务集BSS中的移动站,在什么时间能发送数据或接收数据。802.1 I的MAC层在物理层的上面,它包括两个子层。

(1)分布协调功能DCF (Distributed Coordination Function). DCF不采用任何中心控制,而是在每一个结点使用CSMA机制的分布式接入算法,让各个站通过争用信道来获取发送权。因此DCF向上提供争用服务。802. I 1协议规定,所有的实现都必须有DCF功能。    

(2)点协调功能PCF (Point Coordination Function)。PCF是选项,是用接入点AP集中控制整个 BSS内的活动,因此自组网络就没有PCF子层。PCF使用集中控制的接入算法,用类似于探询的方法把发送数据权轮流交给各个站,从而避免了碰撞的产生。对于时间敏感的业务,如分组话音,就应使用提供无争用服务的点协调功能PCF。

为了尽量避免碰撞,802. 11规定,所有的站在完成发送后,必须再等待一段很短的时间(继续监听)才能发送下一帧。这段时间通称为帧间间隔IFS (InterFrame Space)。帧间间隔的长短取决于该站要发送的帧的类型。高优先级帧需要等待的时间较短,因此可优先获得发送权,但低优先级帧就必须等待较长的时间。若低优先级帧还没来得及发送而其他站的高优先级帧已发送到媒体,则媒体变为忙态,那么低优先级帧就只能再推迟发送了,这样就减少了发生碰撞的机会。至于各种帧间间隔的具体长度,则取决于所使用的物理层特性。    下面解释最常用的两种帧间间隔的作用(参考图9-6 ):

(1) SIFS,即短(Short)帧间间隔,长度为28 us。 SIFS是最短的帧间间隔,用来分隔开属于一次对话的各帧。在这段时间内,一个站应当能够从发送方式切换到接收方式。使用SIFS的帧类型有:ACK帧、CTS帧(在后面“对信道进行预约”中介绍)、由过长的MAC帧分片后的数据帧气以及所有回答AP探询的帧和在PCF方式中接入点AP发送出的任何帧。

     (2) DIFS,即分布协调功能帧间间隔,它比SIFS的帧间间隔要长得多,长度为128 }s。在DCF方式中,DIFS用来发送数据帧和管理帧。  

 CSMA/CA协议的工作原理可用图9-6来说明。  

 要发送数据的站先检测信道。在802.11标准中,规定了在物理层的空中接口进行物理层的载波监听。通过收到的相对信号强度是否超过一定的门限数值,就可判断是否有其他的移动站在信道上发送数据。当源站发送它的第一个MAC帧时,若检测到信道空闲,则在等待一段时间DIFS后就可发送。    

为什么信道空闲还要再等待一段时间DIFS呢?就是考虑到可能有其他的站有一高优先级的帧要发送。如有,就要让高优先级帧先发送。    

现在假定没有高优先级帧要发送,因而源站发送了自己的数据帧。目的站若正确收到此帧,则经过时间间隔SIFS后,向源站发送确认帧ACK。若源站在规定时间内没有收到确认帧ACK(由重传计时器控制这段时间),就必须重传此帧,直到收到确认为止,或者经过若千次的重传失败后放弃发送。    

由此可见,802.11无线局域网采用的停止等待协议,是一种可靠传输协议。发送力一必须等待对力一的确认帧。但802.3有线局域网的传输是不可靠的,发送方把数据发送出去就不管了(当然若检测到碰撞是必须重传的),如果需要可靠传输则由高层负责。    802.11标准还采用了一种叫做虚拟载波监听(Virtual Carrier Sense)的机制,这就是让源站把它要占用信道的时间(包括目的站发回确认帧所需的时间)及时通知给所有其他站,以便使其他所有站在这一段时间都停止发送数据,这样就大大减少了碰撞的机会。“虚拟载波监听”是表示其他站并没有监听信道,而是由于其他站收到了“源站的通知”才不发送数据。这种效果好像是其他站都监听了信道。所谓“源站的通知”就是源站在其MAC帧首部中的第二个字段“持续时间”中,填入了在本帧结束后还将要占用信道多少时间(以微秒为单位),包括目的站发送确认帧所需的时间。  

 当一个站检测到正在信道中传送的MAC帧首部的“持续时间”字段时,就调整自己的网络分配向量NAV(Network Allocation Vector)。 NAV指出了必须经过多少时间才能完成数据帧的这次传输,才能使信道转入到空闲状态。因此,某个站认为信道处于忙态就有两种可能,一种可能是由于其物理层的载波监听检测到信道忙,另一种可能就是由于MAC层的虚拟载波监听机制指出了信道忙。    

图9-6指出,当信道从忙态变为空闲时,任何一个站要发送数据帧时一,只要不是要发送的第一个帧,不仅都必须等待一个DIFS的间隔,而且还要进入争用窗口,并计算随机退避时间,以便再次重新试图接入到信道。请读者注意,在以太网的CSMA/CD协议中,要发送数据的站,在监听到信道变为空闲就立即发送数据,同时进行碰撞检测。如果发生了碰撞,就执行退避算法。但在802.11标准的CSMA/CA协议中,因为没有像以太网那样的碰撞检测机制,所以,在信道从忙态转为空闲时,各站就要执行退避算法。这样做就减少了发生碰撞的概率。802.11标准也是使用二进制指数退避算法,但具体做法稍有不同。这就是:第i次退避就在2^2+i个时隙中随机地选择一个。这就是说,第1次退避是在8个时隙(而不是2个)中随机选择一个,而第2次退避是在16个时隙(而不是4个)中随机选择一个。    

当某个要发送数据的站,使用退避算法选择了争用窗口中的某个时隙后,就根据该时隙的位置设置一个退避计时器(backoff timer)当退避计时器的时间减小到零时,就开始发送数据。也可能当退避计时器的时间还未减小到零时而信道又转变为忙态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过时间DIFS后,继续启动退避计时器(从剩下的时间开始)。这种规定有利于继续启动退避计时器的站更早地接入到信道中。    

为了更好地了解802. I 1的退避机制,下面用个例子来说明(图9-7 ) 。

     图9-7表示当A正在发送数据时,B, C和D都有数据要发送(用向上的箭头表示)。由于这三个站都检测到信道忙,因此都要执行退避算法,各自随机退避一段时间再发送数据。802. I 1标准规定,退避时间必须是整数倍的时隙时间。    前面己经讲过,第i次退避是在时隙{0, 1, ..., 2 ^2+i}中随机地选择一个。这样做是为了使不同站点选择相同退避时间的概率减少。因此,第1次退避(i=1)要推迟发送的时间是在时隙{0, 1,…,7}中(共8个时隙)随机选择一个,而第2次退避是在时隙{0, 1,…,15}中(共16个时隙)随机选择一个。当时隙编号达到255时(这对应于第6次退避)就不再增加了。这半决定退避时间的变量,称为退避变量。    

退避时间选定后,就相当于设置了一个退避计时器(backoff timer)。站点每经历一个时隙的时间就检测一次信道。这可能发生两种情况:若检测到信道空闲,退避计时一器就继续倒计时;若检测到信道忙,就冻结退避计时器的剩余时间,重新等待信道变为空闲并再经过时间DIFS后,从剩余时间开始继续倒计时。如果退避计时器的时间减小到零时,就开始发送整个数据帧。  

 从图9-7可以看出,C的退避计时器最先减到零,于是C立即把整个数据帧发送出去。请注意,A发送完数据后信道就变为空闲。C的退避计时器一直在倒计时。当C在发送数据的过程中,B和D检测到信道忙,就冻结各自的退避计时器的数值,重新期待信道变为空闲。正在这时E也想发送数据。由于E检测到信道忙,因此E就执行退避算法和设置退避计时器。    

当C发送完数据并经过了时间DIFS后,B和D的退避计时器又从各自的剩余时间开始倒计时。现在争用信道的除B和D外,还有Eo D的退避计时器最先减到零,于是D得到了发送权。在D发送数据时,B和E都冻结其退避计时器。

 以后E的退避计时器比B先减少到零。当E发送数据时,B再次冻结其退避计时器。等到E发送完数据并经过时间DIFS后,B的退避计时器才继续工作,一直到把最后剩余的时间用完,然后就发送数据。

 冻结退避计时器剩余时间的做法是为了使协议对所有站点更加公平。    

根据以上讨论的情况,可把CSMA/CA算法归纳如下:    

(1)若站点最初有数据要发送(而不是发送不成功再进行重传),且检测到信道空闲,在等待时间DIFS后,就发送整个数据帧。    

(2)否则,站点执行CSMA/CA协议的退避算法。一旦检测到信道忙,就冻结退避计时器。只要信道空闲,退避计时器就进行倒计时。    

(3)当退避计时器时间减少到零时(这时信道只可能是空闲的),站点就发送整个的帧并等待确认。  

 (4)发送站若收到确认,就知道已发送的帧被目的站正确收到了。这时如果要发送第二帧,就要从上面的步骤(2)开始,执行CSMA/CA协议的退避算法,随机选定一段退避时间。    

若源站在规定时间内没有收到确认帧ACK(由重传计时器控制这段时间),就必须重传此帧(再次使用CSMA/CA协议争用接入信道),直到收到确认为止,或者经过若干次的重传失败后放弃发送。    

应当指出,当一个站要发送数据帧时,仅在下面的情况下才不使用退避算法:检测到信道是空闲的,并且这个数据帧是它想发送的第一个数据帧。  

 除此以外的所有情况,都必须使用退避算法。具体来说,以下几种情况都必须使用退避算法:  

(1)在发送第一个帧之前检测到信道处于忙态。    

(2)每一次的重传。    

(3)每一次的成功发送后再要发送下一帧。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSMA/CA协议详解【计算机网络】 的相关文章

  • Linux网络编程(7)本地套接字通信

    TCP本地套接字通信 为了实现没有血缘关系的进程之间通信 通常会采用本地套接字进行通信 在两个进程分别绑定好了套接字文件 sock 运行程序后将产生两个套接字文件 这两个文件共享同一片内核缓冲区 内核将完成两个进程之间的数据传输 在不同通信
  • 【问题】BurpSuite,捕捉不到Chrome浏览器上DVWA的请求

    问题 搭建DVWA后 http 127 0 0 1 DVWA setup php 配置后Burp Suite捕捉不到DVWA请求 解决 获取本机IP 用本机IP请求 http 192 168 126 1 DVWA setup php 然后就
  • Python基础第二话:列表+元组+字典+集合,学基础还得是这....

    Python基础知识第二话 Python基础知识第一话 这一章的知识紧接上一章 零基础的小伙伴可以从上 一章学起来 当然 你也可以收藏起来慢慢学习 学习是不可操之过急的啦 列表 Python学习交流Q群 906715085 print 创建
  • 祖传Python代码,初学者必用,含泪发出

    今天分享几段工作生活中常用的代码 都是最为基础的功能和操作 而且大多还都是出现频率比较高的 很多都是可以拿来直接 使用或者简单修改就可以放到自己的项目当中 日期生成 很多时候我们需要批量生成日期 方法有很多 这里分享两段代码 Python学
  • 一文搞懂状态模式

    原理 状态机有三个组成部分 状态 事件 动作 遇到不同的事件会触发状态的转移和动作的执行 不过动作不是必须的 可能只有状态的转移 没有动作的执行 状态模式的目的就是实现状态机 案例带入 比如 超级马里奥 在游戏中 马里奥可以变身为多种形态
  • LLVM 环境搭建

    LLVM相关 环境搭建 PC VMware Workstation 下载 https www vmware com go getworkstation win KEY ZC3WK AFXEK 488JP A7MQX XL8YF 可自行网上查
  • [Office] 公务员WPS Excel常用的一些技巧方法

    这篇文章主要是我最近工作使用WPS Excel的一些常用技巧和方法 仅仅是一篇在线笔记 当然实际操作中 你遇到问题百度经验或相关网站会提供对应的解决方法 而且它们写得更好 这篇文章更多的是结合自己使用学到的技巧 作为程序员 写了这么多年的代
  • 输入一段字符串,把其全部转换成大写字母

    include
  • 真的!千万不要忽略这些python常见报错信息

    在使用Python时 作为萌新的我总是会粗心的掉这掉那 运行时就会出现各式各样的错误 因此写这么一篇博客 来总结下编写代码的一些常见错误以及解决办法 有什么python相关报错解答自己不会的 或者源码资料 模块安装 女装大佬精通技巧 都可以
  • Prism 框架项目应用篇 - 导航

    Prism 框架项目应用篇 导航 在Prism中 使用Navigation来进行页面之间的跳转通常需要一下几步 创建新页面 并且实现INavigationAware接口 使用IRegionManager注册页面 使用NavigationPa
  • 三分钟看懂Python分支循环规范:if elif for while

    人生苦短 我用python 分支与循环 条件是分支与循环中最为核心的点 解决的问题场景是不同的问题有不同的处理逻辑 当满足单个或者多个条件或者不满足条件进入分支和循环 这里也就说明这个对相同问题处理执行逻辑依据具体参数动态变化 由此产生多种
  • 请求转发和重定向区别

    一 转发和重定向区别详解 作为一名程序员 特别是java web开发的程序员 在使用servlet jsp的时候 我们必须要知道实现页面跳转的两种方式的区别和联系 即转发和重定向的区别 RequestDispatcher forward方法
  • 汇编语言基础知识

    文章目录 80386常用寄存器 一 常用寄存器 1 1 通用寄存器 1 2 段寄存器 1 3 程序状态与控制寄存器 二 常用基本指令 2 1 数据传送指令 2 2 算术运算指令 2 2 1 加法指令 2 2 2 减法指令 2 2 3 乘法指
  • 关于2的补码

    from http www ruanyifeng com blog 2009 08 twos complement html 问一个基本的问题 负数在计算机中如何表示 举例来说 8在计算机中表示为二进制的1000 那么 8怎么表示呢 很容易
  • Java基础知识之笔记总结分享(超详细)

    给大家分享一篇我之前在学习java过程中的关于java基础部分的笔记 比较详细 内容也比较多 如有问题请指出以便修改 谢谢 篇幅较长建议收藏浏览 1 环境变量配置 JAVA HOME jdk路径 Path 要把jdk的bin目录路径 添加到
  • C#值参数和引用参数

    C 值参数和引用参数 一 值参数 未用ref或out修饰符声明的参数为值参数 使用值参数 通过将实参的值复制到形参的方式 把数据传递到方法 方法被调用时 系统做如下操作 在栈中为形参分配空间 复制实参到形参 值参数的实参不一定是变量 它可以
  • Python 源代码缩进格式化工具

    前言 昨天在跟小伙伴聊天 当他谈起自己正在做的项目时 一脸愁容 他吐槽道 该项目的 Python 代码库由多个人共同维护 由于每个人使用的编辑器不同 每个人的编码风格也不同 最终导致了 代码的缩进千奇百怪 有缩进 2 个空格的 有缩进 4
  • js基础之闭包

    作为前端开发 闭包是时时刻刻都在使用的 理解闭包是十分重要的 下面从闭包的定义 使用场景 及优缺点进行总结 帮助大家更好的理解闭包 什么是闭包 引用自 MDN关于闭包的描述 闭包 closure 是一个函数以及其捆绑的周边环境状态 lexi
  • git 建立分支仓库

    Git 命令版本 查看本地分支及追踪 找一个文件夹目录 clone 仓库 Git branch vv 查看所有分支 Git branch a 查看本地分支 git branch 查看远程分支 git branch r 创建本地分支dev g
  • 测试基础知识

    常见测试分类 按测试阶段划分 单元测试 针对程序源码进行测试 国内是开发自测 集成测试 又称接口测试 针对模块间的访问地址进行测试 系统测试 对整个系统进行测试 包括功能 兼容性 文档等 验收测试 分为内测和公测 按代码可见度划分 黑盒测试

随机推荐

  • RESTful API接口

    RESTful规范 Restful API是目前比较成熟的一套互联网应用程序的API设计理念 Rest是一组架构约束条件和原则 如何Rest约束条件和原则的架构 我们就称为Restful架构 Restful架构具有结构清晰 符合标准 易于理
  • JAVA报错:Variable 'vv' is accessed from within inner class, needs to be declared final

    内部类中使用但未声明的任何局部变量必须在内部类的正文之前明确分配
  • struts2中validator配置文件验证不起作用的问题解决办法、根源

    在采用struts的xml配置方式校验数据时 发现怎么也不起作用 无法按照正常流程 走到input指向的页面 一 问题的解决 很多博客说明了自己查找的方式 最后都指明了是因为配置文件格式不正确的原因 出现这种问题的时候 应该从下面4个部分考
  • SpringCloud Alibaba 教程

    SpringCloud Alibaba GitHub官方地址 https github com alibaba spring cloud alibaba blob master README zh md SpringCloud Alibab
  • 大学生团体天梯赛(第九届)

    题目地址 天梯赛 include
  • 憨批的语义分割重制版4——TF2 搭建自己的PSPNet语义分割平台

    憨批的语义分割重制版4 TF2 搭建自己的PSPNet语义分割平台 学习前言 什么是PSPNet模型 代码下载 PSPNet实现思路 一 预测部分 1 主干网络介绍 2 加强特征提取结构 3 利用特征获得预测结果 二 训练部分 1 训练文件
  • Vue3 之 readonly

    Vue3 之 readonly readonly 取得一个对象 反应性或普通 或ref并返回一个只读代理 访问的任何嵌套属性也将是只读的 传入普通对象等返回只读代理 传入普通数值或字符串不能变成只读 例如 readonly abc cons
  • 约束下的最优求解:拉格朗日乘数法和KKT条件

    机器学习面对各种各样的求解极值或者最值问题 现在对常见的求解极值或者最值问题思路做一下理论上的梳理 最值问题 简单了解最值问题 求最值是非常常见的问题 比如如何选择交通路线 最快地到达某地 如何用手头的钱买到分量最重的水果等等 我们可以把需
  • 解决An attempt was made to call a method that does not exit问题

    解决An attempt was made to call a method that does not exist The attempt was made from the following location 最近在学习springc
  • KPCA代码

    KPCA算法在TE过程故障诊断的应用 KPCA算法介绍 KPCA代码 数据预处理 计算核矩阵 中心化核矩阵 协方差矩阵的特征值分解 确定主元个数 将特征向量按特征值的大小顺序排序 单位化特征向量 重建测试数据 控制限的设定 故障数据的检测
  • HTML学习-表单语法、表单元素格式、单选框、多选框、按钮 2021-1-19

    表单语法 表单form action 表单提交的位置 可以是网站 也可以是一个请求处理地址 method post get 提交方式 get方式提交 我们可以再url中看到我们提交的信息 不安全 高效 post方式提交 比较安全 传输大文件
  • 利用setTimeout实现倒计时

    倒计时60秒 function countDown that count if count 0 that setData timeCountDownTop 获取验证码 counting false return that setData c
  • stata学习笔记

    受限被解释变量类型 普通断尾随机变量 断尾回归 对于分析的样本解释变量有上限或者下限的要求 零断尾计数数据 零断尾泊松回归和负二项回归 正整数 偶然断尾 自选择问题 样本选择模型 因为某些原因 导致被解释变量的取值有所不同 归并数据 归并T
  • 实例一 LINUX OS 简单制作 JAVA WEB + TOMCAT7.0 RPM 安装包

    1 安装rpmbuild 并配置环境 1 1 首先 你应该检查 rpmbuild 是否已经被安装在你的系统上 你将会利用这个工具从 spec 文件或 SRPM 组件创建 RPM 要检查它是否被安装了 请执行 rpmbuild showrc
  • 单链表、双链表以及环形单链表

    1 单链表 import java util Stack public class SingleLinkedListDemo public static void main String args 测试 HeroNode h1 new He
  • Python:奇数筛选

    今天第一次来csdn 写博客 还是蛮兴奋的 看了小甲鱼的Python视频 想照着他的写写看 功能 从一组数中筛选出奇数 def odd x return x 2 temp range 10 show filter odd temp list
  • 电脑分辨率高,plsql显示太小,怎么设置

    新电脑分辨率比较高 装了plsql developer后 打开发现整个界面的字体菜单非常小 如何设置 效果如下图片 解决方案 右键 gt 属性 gt 兼容性 gt 更改所有用户的设置 gt 更改高DPI设置 gt 高DPI缩放替代 gt 勾
  • unity3D代码控制脚本的停止和启动

    这个问题已经是我第三次在网上查资料了 同样的问题应该重复查询说明使用频率很高 就有理由应该记住 其实这个问题很简单 我认为可行的方法只有一种 就是获取脚本文件 然后把enable属性设置为true或者false就行了 ps 脚本文件可以堪称
  • 文本编辑器Vim常用操作和技巧

    文章目录 1 Vim常用操作 1 1 Vim简介 1 2 Vim工作模式 1 3 插入命令 1 4 定位命令 1 5 删除命令 1 6 复制和剪切命令 1 7 替换和取消命令 1 8 搜索和搜索替换命令 1 9 保存和退出命令 2 Vim使
  • CSMA/CA协议详解【计算机网络】

    读书笔记 2018年9月5日17 13 26 计算机网络 第六版 谢希仁 虽然CSMA CD协议已成功地应用于使用有线连接的局域网 但无线局域网能不能也使用CSMA CD协议呢 显然 这个协议的前一部分CSMA能够使用 在无线局域网中 在发