当前位置: 首页 > news >正文

计算机网络 第三章 数据链路层 局域网的数据链路层

在这里插入图片描述

在前面我们学习了ppp协议,该协议用于ISP和用户之间连接的数据链路层,ppp协议由封装成帧、LCP链路控制协议和NCPs网络控制协议组成,在该节学习了ppp协议中帧的格式为 7E + EF + 03 + 协议 + 数据部分 + FCS + 7E,LCP链路和NCP链路建立的过程;同时探讨了在ppp协议中如何实现数据链路层的透明传输以及差错检测。接下去我们将学习局域网是中的数据链路层,就是ISP接了一根网线到家中,我连接家中的WIFI,即探讨局域网中的数据链路层。

一、广播信道中的数据链路层

广播信道就不在像我们的点对点信道一样,发送方和接收方不是互相直接连接的,而是采用总线的形式连接,所有的主机都连接在同一个总线上,连接在总线上源主机通过向总线发送数据,经过总线的传输到达目的主机,这显然是比我们单一的两个主机之间两两连接来的效果好的,两两连接会导致线的数量会非常的庞大,而采用下列的总线结构,线的数量会大大的减小并且,对于主机的数量扩展是十分容易的。

在这里插入图片描述

使用广播信道传输数据的话,也会产生问题,就是当总线上的两个同时的想要使用总线传输信息的时候,可能会产生总线的抢用,以及也可能会 造成发送的数据产生碰撞,为了解决该问题,我们将在接下去的学习中找到解决办法。

1.1总线型局域网——以太网的特点

局域网的特点就是使用一对多的广播通信,当共享信道上有多个主机发送信息的时候,就会产生冲突;这个想想我们自己家中的局域网络就能很好的理解,只不过家中的局域网的信道大部分都是无线的形式。

既然是采用广播信道的方式来传送数据,那么请想一想你和你家人同时连接着自己家中的WIFI,而你们同时发送消息的时候,消息是如何有序的被发送的,而不会产生冲突呢?

1.2媒体共享技术

为解决共享信道信息传播的冲突问题,提出以下解决方案

①频分复用

②时分复用划分

③码分复用

④波分复用

以上四种方式都是属于静态划分信道,其实这种方式在数据链路层是很不常用的,一般用于物理层,这四种方式其实都是在某一种程度上说是独占信道的某一时间或是某一物理特性的,当总线上的设备变得非常多的时候,这些方式显然就不够用了。所以接下去学习CSMA/CD协议,看他是如何解决数据的碰撞问题的。

1.3CSMA/CD协议

CSMA/CD叫做多点接入、载波监听、碰撞监测。

  • 多点接入:表示多台设备是连接在同一个总线上的
  • 载波监听:主机想要想某个主机发送信息时,首先会检测总线上此时是否有载波,即检测其上是否存在信息传送,只有检测到总线上无信息传送时,才向总线发送信息。
  • 碰撞检测:信息发送后,要监测信息是否在总线传输途中是否发生碰撞。

对于多点接入和载波监听是很好理解的;对于碰撞检测来说,我们具体来看一下它是如何进行碰撞检测的。

在这里插入图片描述

  • 主机A先进行载波监听,发现总线空闲,等待96bit时间后就会开始向主机B发送数据。(为什么要等待96比特?因为数据链路层是需要通过来帧定界的,而以太网V2的帧格式并没有帧开始和帧解释的标记,是通过中间的空闲时间来区分出帧的
  • 主机B也想发送数据,进行载波监听,发现总线空闲,等待96bit时间数据还没到达主机B,没有检测到,误以为总线空闲,开始通过总线向主机A发送信息
  • 在总线的某一处就会发生碰撞,碰撞信号就会在沿着总线沿路返回,当碰撞信号传回到发送方的,时候就会知道此次发送数据产生了碰撞,就会立马停止发送数据。
    在这里插入图片描述
    至此,引出争用期的概念:争用期为2 τ \tau τ,意思就是说在 2 τ 2\tau 2τ时间内,会产生碰撞,若 2 τ 2\tau 2τ内都没有发生碰撞,即之后就不会再发生碰撞, 2 τ 2\tau 2τ即就是信号传输的往返时延,假设A发送的信息刚送至B门口时(花费时间 τ \tau τ)与B发送的数据发生碰撞,此时碰撞信息传回A主机时花费时间 τ \tau τ,此时从发送到检测到碰撞信息的时间花费就是 2 τ 2\tau 2τ,当 2 τ 2\tau 2τ内没有收到碰撞检测信息,就不会再发生碰撞,说明A发送的信息已经送达了B,B在想发送时,会进行载波检测,就不会发送信息,会进行退避若干个 τ \tau τ时间。

退避算法

所谓的退避算法就是在发送数据之前,会进行载波监听,在检测到有数据的在占用总线传输,就会采取退避算法,退避相应的时间,然后再进行载波监听,当检测到总线无信息传送时,就会再自动等待96bit的时间(以太网帧的定界),然后发送数据。

在这里插入图片描述

传输速率为 10 M B / s 10MB/s 10MB/s的以太网,其最小帧长度

首先不解释什么是最小帧长度,我们来看下一个例子。A主机发送数据,要是此时帧的数据长度非常小的话,A发送的数据很快就会到达B,此时并没有达到 τ \tau τ。(端到端的时间为 τ \tau τ,即A到B的传播时间)

在这里插入图片描述

此时信息继续会向前传送,当传送到C时,和C的发送的信息发生碰撞,碰撞信息,接着传回A,A接受到碰撞信息后,就不知到要干嘛了,可能就会重传数据,可是A发送的信息是已经被B完好的接受到了,所以帧太短产生的影响就是可能会导致无法判断自己发送的帧是否发生碰撞。从而引出帧的最小长度的概念。

在这里插入图片描述

传输速率为 10 M B / s 10MB/s 10MB/s的以太网,假设该网络的争用期 2 τ = 51.2 u s 2\tau=51.2us 2τ=51.2us,最小帧长度为 10 M B / s ∗ τ = 512 b i t 10MB/s*\tau=512bit 10MB/sτ=512bit,所以最小帧长度为64kb;来理解以下最小帧长度,争用期 2 τ = 51.2 u s 2\tau=51.2us 2τ=51.2us就是端到端数据从A到B数据的传播时间的两倍,用 τ ∗ 10 M B / s \tau*10MB/s τ10MB/s,其实就是将信息充满整个端到端的bit数。

以太网中最小帧长度为64kb,只要是接收到的小于64kb的帧,都会被当作是无效帧而被丢弃!既然帧的长度不能太小,是否可以很大呢?显然是不行的,过大会导致一个主机强行的霸占总线时间过长。以太网帧的格式如下

在这里插入图片描述

6+6+2+4=18,18+46=64,满足最小帧长度。

还需要注意以下一点,CSMA/CD协议是总线型局域网使用的协议,即以太网协议,对于无线网络并不适用。以太网是有线局域网,WIFI就是无线网,是无线局域网。

1.4无线局域网CSMA/CA协议

CSMA/CA叫做多点接入、载波监听和碰撞避免,对于多点接入是一样的,而对于无线网络的载波监听和碰撞避免我们继续学习。

先来看碰撞避免

在以太网中,我们使用碰撞检测来确定发送的信息是被正确发送且正确被接受的,那为什么不再使用碰撞检测在以太网中进行检测呢?因为对于无线网路来说,其在传输的过程中,误码率本身就会很高,而且无线传播的不确定性,比如干扰等原因,根本就**实现不了碰撞检测。**随意对于无线网的传输使用的是碰撞避免。

我们来看个例子理解如何碰撞避免,最重要的就是退避算法

  • A、B、C、D四个主机发送信息,首先A在占用信道发送数据,发送帧的过程中,BCD想发送数据。
  • 会检测到A占用信道,BCD就会自动的使用退避算法进行退避。
    在这里插入图片描述

退避算法:
①在执行退避算法时,站点为退避计时器设置一个随机的退避时间,当退避计时器的时间减小到零时,就开始发送数据;当退避计时器的时间还未减小到零时而信道又转变为忙状态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过时间DIFS后,继续启动退避计时器。

②在进行第i次退避时,退避时间在时隙编号{0,1,…,22+1}中随机选择一个,然后乘以基本退避时间(也就是一个时隙的长度)就可以得到随机的退避时间。这样做是为了使不同站点选择相同退避时间的概率减少。当时隙编号达到255时(对应于第6次避)就不再增加了。

  • 此时BCD都会设置退避时间计数器,计数器的值依次减小,每一个时隙结束都会检测总线是否还被占用,当检测到总线不被占用,等待一段时间,我们将这里等待的一段时间称为DIFS时间,DIFS结束,退避算法计数器就又会自动的启动倒计时,倒计时最先结束且检测到总线空闲则立马发送数据帧。
    在这里插入图片描述

  • 显然C的倒计时会最先结束,则C会先发送数据帧,一旦检测到总线此时有数据帧再传送,立马冻结倒计时,等待总线状态由忙状态切换回空闲状态。
    在这里插入图片描述

  • 当在C传送帧的时候,此时E想发送数据,首先检测总线的状态,发现总线忙,使用退避算法,为退避计数器设置一个等待时间,当检测到总线由忙状态切换回空闲状态,等待一个DIFS时间。
    在这里插入图片描述

  • DIFS时间结束后,冻结的计数器启动,同时E也是启动的,此时显然是D最先倒计时结束,立马发送帧,E和B检测到总线由空闲状态切换回忙状态,立马冻结自己的计数器;等待总线切换回空闲状态。
    在这里插入图片描述

  • 同样的当检测到总线由忙状态转化为空闲状态等待DIFS时间,启动B和E的倒计时,D发送帧,B冻结;DIFS后,B启动,B发送帧。
    fa在这里插入图片描述

  • 若B想要继续发送帧,同样先进行退避,在进行发送,之所以要退避是因为,其实B在请求发送时,B还是在发送帧,请求时,总线处于忙的状态。
    在这里插入图片描述

为了避免产生碰撞,802.11标准还拥有虚拟的载波监听技术, 即在发送数据之前,源站会向目的站发送RTS请求,只有得到请求后,源数据站才会发送数据帧。

  • DIFS时间后源站发送RTS(Request to send)
  • 目的站接收到请求后,SIFS时间后发出CTS(Clear to send)
  • 源目的站接收到同意请求后,经过SIFS时间后发出帧
  • 目的站经过SIFS时间发出ACK,确认收到了。

除源站和目的站以外的其他各站在收到CTS帧(或数据帧)后就推迟接入到无线局域网中。这样就保证了源站和目的站之间的通信不会受到其他站的干扰。

在这里插入图片描述

虚拟的载波监听技术可以很好的解决隐蔽站问题,假设不使用虚拟载波监听技术,当A向B发送数据时,是感受不到CD的存在的,当检测到信道空闲,向B发送数据,而此时C也检测到信道空闲,C也同时向B发送数据,这显然是不行的,这既是隐蔽站问题;而虚拟的载波监听技术可以很好的解决该问题。

  • A向B发送RTS
  • B发送CTS,C会听见,所以C此时就不会再向B发送数据。

在这里插入图片描述

相关文章:

  • 图生视频 学习笔记
  • [CCF-CSP] 202303-4 星际网络II
  • 【代码随想录算法训练营第37期 第十五天 | LeetCode226.翻转二叉树、101.对称二叉树 2】
  • Java并发面试题,多线程通关秘籍
  • 安卓绕过限制直接使用Android/data无需授权,支持安卓14(部分)
  • docker 使用桥接网
  • 我用Mybatis的方式封装了OLAP查询!
  • Linux:网页的各种状态码及其解释
  • 非阻塞sokcet和epoll
  • 【pdb的使用方法】
  • AI预测福彩3D采取888=3策略+杀断组+杀和尾缩水测试5月24日预测第1弹
  • LoadBalancer
  • DockerK8s
  • 【深度学习】与【PyTorch实战】
  • 大模型的实践应用24-LLaMA-Factory微调通义千问qwen1.5-1.8B模型的实例
  • [NodeJS] 关于Buffer
  • canvas 绘制双线技巧
  • CAP理论的例子讲解
  • ComponentOne 2017 V2版本正式发布
  • Computed property XXX was assigned to but it has no setter
  • ES6--对象的扩展
  • gcc介绍及安装
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Less 日常用法
  • linux安装openssl、swoole等扩展的具体步骤
  • mysql_config not found
  • Python_OOP
  • Python连接Oracle
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • text-decoration与color属性
  • vue-cli3搭建项目
  • 创建一个Struts2项目maven 方式
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 和 || 运算
  • 基于游标的分页接口实现
  • 开源地图数据可视化库——mapnik
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 用Visual Studio开发以太坊智能合约
  • 找一份好的前端工作,起点很重要
  • ​Java并发新构件之Exchanger
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ‌JavaScript 数据类型转换
  • # 安徽锐锋科技IDMS系统简介
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • $nextTick的使用场景介绍
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (Java数据结构)ArrayList
  • (ros//EnvironmentVariables)ros环境变量
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题