概述:

  为什么需要介质访问控制子层(MAC)?

  介质访问控制子层(MAC)是局域网体系结构中划分的子层,多路访问链路采用共享介质连接所有站点.发送站点通过广播方式发送数据并占用整个带宽,如果有多个站点同时发送信息,就会产生冲突,而在点对点链路网络中就不会存在这样的问题,因为在点对点网络中,目的节点是唯一的,不需要寻址,双方之间的通讯也只在彼此之间产生,不会有其他用户占用这个传输介质,所以,为了解决多路通信中介质征用的问题,IEEE把这种访问共享介质的功能专门划分出了一个子层,就是介质访问控制子层(MAC).

MAC的功能:

  一是用来寻址(这里指MAC地址),寻找目的节点.

  二是用来解决网络中多个用户争抢共享信道的现象.

为什么MAC子层之上又定义了一个LLC子层(逻辑链路控制子层)?

  从MAC功能上来看,MAC并不能保证可靠数据的传输,为了做到这一点,在其之上又增加了一个LLC,用来保证数据的可靠性传输,来为网络层提供服务.

说到共享信道,先来提一下信道的分类.

  点对点信道:有两个没有经过任何中间设备的节点构成的信道.点对点信道封装的是点对点类型的数据链路层协议(PPP协议).

  广播信道:一个信道被多条链路共享,一个节点发送的数据会被多个节点收到,对应的链路就是广播链路,广播信道封装是广播型数据链路层协议(以太网协议,WLAN协议).

MAC地址是什么?

  在局域网中,MAC的作用是用来找到我们要进行通信的计算机,MAC地址分为源地址(发送发的MAC地址),和目标地址(接收方MAC地址),源地址是单播地址(也叫单播帧),目标地址可能是单播地址,也可能是多播地址,或广播地址.

  单播地址:全球唯一,每个网卡上都有自己的一个MAC地址.

MAC地址的帧格式:

如何解决介质争用?

  在局域网中解决方案有CSMA协议(载波侦听多路访问),CSMA/CD协议(带冲突检测的载波侦听多路访问),后者是前者的改进版.

  在WLAN网络中解决方案是CSMA/CA协议,也是CSMA协议的改进版.

CSMA/CD的工作过程:

  1.   发送数据帧前先监听信道,信道忙,则持续监听,直到信道空闲,信道一旦空闲则立即发送数据.
  2.   边发送边检测冲突,如果发送完毕都没有检测到冲突,则发送成功.
  3.   如果检测到冲突,则停止发送,并发送一个32位干扰信号(阻塞信号),以加强冲突信号,采用二进制指数退避算法随机延迟一段时间后,再重复以上步骤.

  流程图:

以太网(802.3)的物理层:

扩展局域网:

用网桥(bridge)连接若干局域网(LAN)可以构造一个更大的局域网,成为桥接局域网或者扩展局域网.

原来的局域网成为了扩展局域网的一部分,称为这个扩展局域网的一个网段,

百度百科是这样定义网桥的:

  网桥(Bridge)像一个聪明的中继器。中继器从一个网络电缆里接收信号, 放大它们,将其送入下一个电缆。相比较而言,网桥对从关卡上传下来的信息更敏锐一些。网桥是一种对帧进行转发的技术,根据MAC分区块,可隔离碰撞。网桥将网络的多个网段在数据链路层连接起来

802.1d协议(STP 生成树协议):

  生成树协议的设计目的是要使二级交换网络中不存在二层环路,那么什么是环路呢?

  假设现在有两个交换机B,C之间有两条链路,主机A,D分别连接B,C.主机A在某一时刻发送了一个广播包到达了交换机A,交换机A接到广播信号,会通过两条链路向交换机B发送,这样交换机B就会受到两个广播信号,收到以后他也会通过两条链路向A广播,这样就形成了一个恶性循环,也就是形成了广播风暴,造成大量的网络设备,和带宽资源的浪费.

  上面说的两条链路成为"冗余链路",在显示网络设计中大量存在,本来的设计目的是当一条链路失效以后,另一条冗余链路可以马上接管所有工作,当然实际中冗余链路会带来广播风暴隐患.

  STP的工作原理是把整个交换网络看作是一个生成树实例,称之为公共生成树(CST),STP就是把一个物理网络拓扑结构变成无欢路的逻辑拓扑结构,采用两项主要技术:一是通过选举,使得交换网络中各个交换机处于特定的角色,另一个就是把交换机之间连接的端口划分为不同的角色,使可能形成环路的交换机端口在正常工作时处于堵塞状态.

802.1q协议(VLAN 虚拟局域网):

  

如图,如果网桥只在具有相同颜色的端口之间转发帧,就会把原来的局域网分割成多个多个相互隔离的小的局域网,称之为虚拟局域网(VLAN).

  虚拟局域网顾名思义,是一个虚拟的或者说逻辑的LAN,并不是一个物理的LAN,上面图中用的是网桥,实际更多的使用交换机,那么网桥和交换机有什么区别呢?

    这是一个网络上的一个总结:

局域网交换机的基本功能与网桥一样,具有帧转发、帧过滤和生成树算法功能。但是,交换机与网桥相比还是存在以下不同: 
  (1)交换机工作时,实际上允许许多组端口间的通道同时工作。所以,交换机的功能体现出不仅仅是一个网桥的功能,而是多个网桥功能的集合。即网桥一般分有两个端口,而交换机具有高密度的端口。 
  (2)分段能力的区别 
  由于交换机能够支持多个端口,因此可以把网络系统划分成为更多的物理网段,这样使得整个网络系统具有更高的带宽。而网桥仅仅支持两个端口,所以,网桥划分的物理网段是相当有限的。 
  (3)传输速率的区别 
  交换机与网桥数据信息的传输速率相比,交换机要快于网桥。 
  (4)数据帧转发方式的区别 
  网桥在发送数据帧前,通常要接收到完整的数据帧并执行帧检测序列FCS后,才开始转发该数据帧。交换机具有存储转发和直接转发两种帧转发方式。直接转发方式在发送数据以前,不需要在接收完整个数据帧和经过32bit循环冗余校验码CRC的计算检查后的等待时间。

其实,我们只要把一个VLAN看成一个交换机(虚拟的),许多问题就比较好理解了,因为虚拟交换机和物理交换机有相同的基本属性,同一物理交换机上的不同VLAN之间就好像只有逻辑连接,没有物理连接的不同物理交换机一样,既然没有物理连接,那么不同的VLAN肯定是不能相互通信的,即使这些VLAN的成员处于同一IP网段.

  虚拟局域网的帧头部格式:

计算机网络学习笔记--数据链据层之MAC子层(整理)的更多相关文章

  1. SQL反模式学习笔记22 伪键洁癖,整理数据

    目标:整理数据,使不连续的主键Id数据记录变的连续. 反模式:填充断档的数据空缺. 1.不按照顺序分配编号 在插入新行时,通过遍历表,找到的第一个未分配的主键编号分配给新行,来代替原来自动分配的伪主键 ...

  2. 学习笔记:flutter项目搭建(mac版)

    什么是flutter Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面. Flutter可以与现有的代码一起工作.在全世界,Flutter正在被越来越多的 ...

  3. 计算机网络 学习笔记-传输层:TCP协议简介

    概述: TCP传输前先要建立连接 TCP在传输层 点对点,一条TCP只能连接两个端点 可靠传输.无差错.不丢失.不重复.按顺序 全双工 字节流 TCP报文段 TCP报文段的报头前20字节是固定的,后面 ...

  4. 计算机网络学习笔记NO.2 物理层

    2.1 基本概念 2.1.1 物理层概念 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体. 物理层主要任务:确定与传输媒体接口有关的一些特性(定义标准) 机械特性:定 ...

  5. 网络协议学习笔记(四)传输层的UDP和TCP

    概述 传输层里比较重要的两个协议,一个是 TCP,一个是 UDP.对于不从事底层开发的人员来讲,或者对于开发应用的人来讲,最常用的就是这两个协议.由于面试的时候,这两个协议经常会被放在一起问,因而我在 ...

  6. 学习笔记TF014:卷积层、激活函数、池化层、归一化层、高级层

    CNN神经网络架构至少包含一个卷积层 (tf.nn.conv2d).单层CNN检测边缘.图像识别分类,使用不同层类型支持卷积层,减少过拟合,加速训练过程,降低内存占用率. TensorFlow加速所有 ...

  7. 【深度学习笔记】(一)Mac下TensorFlow安装及环境搭建

    本文由@ray 出品,转载请注明出处.  文章链接:http://www.cnblogs.com/wolfray/p/7828903.html 在学习了一段时间台大李宏毅关于deep learning ...

  8. 计算机网络学习笔记--网络层之IP地址与子网

    IPv4地址: 我们知道在网络层(TCP/IP体系结构的网际互联层),最重要的一个协议就是IP协议,现在正处于IPv4和IPv6的过渡时期,但目前来说,IPv4仍为主流,所以主要讲Ipv4. IP地址 ...

  9. Docker学习笔记之在 Windows 和 Mac 中使用 Docker

    0x00 概述 对于开发来说,Windows 和 macOS 是更为常见和常用的系统,所以也很有必要了解在 Windows 和 macOS 中使用 Docker 的方法.很幸运的是,Docker 的官 ...

随机推荐

  1. 【探索】无形验证码 —— PoW 算力验证

    先来思考一个问题:如何写一个能消耗对方时间的程序? 消耗时间还不简单,休眠一下就可以了: Sleep(1000) 这确实消耗了时间,但并没有消耗 CPU.如果对方开了变速齿轮,这瞬间就能完成. 不过要 ...

  2. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

  3. 游戏服务器菜鸟之C#初探一游戏服务

    本人80后程序猿一枚,原来搞过C++/Java/C#,因为工作原因最后选择一直从事C#开发,因为读书时候对游戏一直比较感兴趣,机缘巧合公司做一个手游的项目,我就开始游戏服务器的折腾之旅. 游戏的构架是 ...

  4. python+uwsgi导致redis无法长链接引起性能下降问题记录

    今天在部署python代码到预生产环境时,web站老是出现redis链接未初始化,无法连接到服务的提示,比对了一下开发环境与测试环境代码,完全一致,然后就是查看各种日志,排查了半天也没有查明是什么原因 ...

  5. [C#] 简单的 Helper 封装 -- CookieHelper

    using System; using System.Web; namespace ConsoleApplication5 { /// <summary> /// Cookie 助手 // ...

  6. win8.1硬盘安装ubuntu14.04双系统

    在网上找了很多方法都失败了,原因是大多数方法都是用mbr方式安装的,如grub4dos,easybcd.以至于连自己都怀疑win8能不能用硬盘安装,差点就去买个u盘来安装了,就在打算放弃的时候在ubu ...

  7. Discuz NT 架构剖析之Config机制

    接触了Discuz NT! 一段时间了,是时候做个总结了,标题好霸气,有木有? 都是托园子里的大牛代振军的福啊,哈哈哈哈. 首先论坛的信息不是完全存储在数据库里面的,一部分信息存储在config文件里 ...

  8. VSCode调试go语言出现:exec: "gcc": executable file not found in %PATH%

    1.问题描述 由于安装VS15 Preview 5,搞的系统由重新安装一次:在用vscdoe编译go语言时,出现以下问题: # odbcexec: "gcc": executabl ...

  9. Java开发中的23种设计模式详解

    [放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...

  10. openresty 前端开发入门四之Redis篇

    这章主要演示怎么通过lua连接redis,并根据用户输入的key从redis获取value,并返回给用户 操作redis主要用到了lua-resty-redis库,代码可以在github上找得到 而且 ...