3.6.4、随机接入-CSMA/CA协议

无线局域网使用的协议

1、基本概念

image-20221127213944540

对于上述无线局域网为什么 AC 都检测不到对方的无线信号

  • 因为 C 不在 A 的范围内,C 发送无线信号会导致 A 检测不到 C 在发送

对于上述使用广播信道的有线局域网就不会存在这样的问题

  • 总线上某个主机发送的信号,最多经过一个总线端到端传播时延,就会被总线上的主机接收到
  • 而总线上产生的碰撞信号,最多金国一个总线端到端往返传播时延(争用期),也会传遍总线

image-20221127214129510

2、帧间间隔 IFS

image-20221127214428695

SIFS 是为了让源站点转为接受状态

  • 若发送帧的时间短, SIFS 可以确保源站转为接受状态

高优先级帧的 DIFS 要短,低优先级帧的 DIFS 要长

3、工作原理

image-20221127220606764

源站有数据帧要发送,当源站检测到信道空闲,则在等待帧间间隔 DIFS 后发送该数据帧

image-20221127215827342

  • 就是考虑到可能有其他的站有高优先级的帧要发送。若有,就要让高优先级帧先发送。

目的站若正确收到该数据帧,则经过帧间间隔 SIFS 后需要向源站发送确认帧 ACK

  • 若源站在规定时间内没有收到确认帧 ACK
  • 由重传计时器控制这段时间,就必须重传该数据帧,直到收到确认为止
  • 或者经过若干次的重传失败后放弃发送

image-20221127220055694

  • SIFS 是最短的帧间间隔,用来分隔开属于一次对话的各帧,在这段时间内,一个站点应当能够从发送方式切换到接收方式
  • SIFS 是为了让源站点转为接受状态
    • 若发送帧的时间短, SIFS 可以确保源站转为接受状态

在源站和目的站的一次对话过程中,无线信道处于忙状态。

  • 无线信道处于忙状态时,其他无限站点要发送数据,则必须退避

当信道从忙状态转换到空闲状态,并经过帧间间隔 DIFS 后,其他要发送数据的无限站点需要退避一段随机时间后才能发送

image-20221127220508136

  • 防止多个站点同时发送数据而产生碰撞

image-20221127220810032

4、退避算法

image-20221127220948833


image-20221127222030359

假设在 A 占用无线信道发送帧的过程中,BCD 也要发送帧,于是进行载波监听,发现信道忙,需要退避。

根据退避算法,选择出一个退避时间,并在每个时隙对信道进行一次检测。

当检测到信道有忙状态转为空闲状态,且经过帧间间隔 DIFS 后,退避计时器开始倒计时。

假设 C 的退避计时器最短,当 C 的退避计时器到时后,C 立即开始发送帧。

此时,信道有空闲状态转换为忙状态,当 BD 检测到信道忙后,就冻结各自剩余的退避时间…

5、信道预约

image-20221127223513205


image-20221127225818678

6、虚拟载波监听

image-20221127231258672

image-20221127230840734

A 在给 B 发送数据帧之前,可以使用 RTS 帧来预约信道。

尽管 C 收不到该 RTS 帧,但是 C 可以收到 B 发送给 A 的 CTS 帧

这样 C 就知道了信道被占用多长时间。

在这段时间内 C 都不会争用信道

  • 也就是说 AB 发送数据帧时不会受到 C 的干扰

image-20221127231312639


7、习题

image-20221127231812492

解析:

image-20221127232054448


image-20221127232400191

解析:

image-20221127232713930


image-20221127233347342

解析:

image-20221127233452184

8、总结

image-20221127234035702

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,根据您的需求,我对代码进行了修改,并添加了获取响应头中的 Cookies 的代码: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <div id="app"> <el-button type="primary" @click="addRequest">添加</el-button> <el-input v-model="username" placeholder="请输入内容"></el-input> <el-input v-model="password" placeholder="请输入内容"></el-input> </div> <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.7.0/vue.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.js"></script> <!-- 引入样式 --> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> <!-- 引入组件库 --> <script src="https://unpkg.com/element-ui/lib/index.js"></script> <script> let MyVue = new Vue({ el: '#app', data() { return { username: "114514", password: "114514", } }, methods: { addRequest: function() { $.ajax({ url: "http://localhost:8080/hello", type: "POST", contentType: 'application/x-www-form-urlencoded', xhrFields: { withCredentials: true // 允许发送和接收 cookie }, success: function(res, status, xhr) { console.log(JSON.parse(res)); console.log(xhr.getResponseHeader('Set-Cookie')); // 获取响应头中的 Cookies }, error: function(xhr, status, error) { console.log(error); } }) } } }) </script> </body> </html> ``` 需要注意的是,此方法只适用于在同一域名下的请求。如果您需要跨域获取 Cookies,需要在服务器端设置相关的 CORS 配置。另外,由于您的代码中使用了箭头函数,我将其改为了普通函数,以避免出现 this 指向错误的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值