数据链路层主要关注三个问题:

  1. 这个包是发给谁的?谁应该接收?
  2. 大家都在发,会不会产生混乱?有没有谁先发、谁后发的规则?
  3. 如果发送的时候出现了错误,怎么办?

数据链路层也称为MAC(Medium Access Control)层,即媒体访问控制。控制在往媒体上发数据的时候,谁先发、谁后发的问题,防止顺序错乱,这解决了第二个问题。对于第一个问题,要用到一个物理地址也就是MAC地址来解决。

  MAC地址是一个网卡的物理地址,用十六机制、6个byte表示。每张网卡的MAC地址都是唯一的,有点像身份证,是一个唯一的标识。它的唯一设计特性是为了组网的时候,不同的网卡放在一个网络里面的时候,不用担心冲突,更多的是从硬件角度理解。MAC地址的通信范围局限在一个子网里。例如,从 192.168.0.2/24 访问192.168.0.3/24 是可以用 MAC 地址的。一旦跨子网,即从192.168.0.2/24 到 192.168.1.2/24,MAC地址就不行了,需要 IP 地址起作用了。MAC数据包称为数据帧,格式一般为一个数据字段和多个首部字段组成。网络层数据报就插在数据字段中。

  MAC地址上面我们已经分析过了,类型一般指IP数据包,IP里面又包含TCP、UDP、HTTP等一层一层封装。有了这个目标 MAC 地址,数据包在链路上广播,MAC 的网卡才能发现,这个包是给它的。MAC 的网卡把包收进来,然后打开 IP 包,发现 IP 地址也是自己的,再打开 TCP 包,发现端口是自己,也就是80,而 nginx 就是监听 80。于是将请求提交给 nginx,nginx 返回一个网页。然后将网页发回请求的机器。层层封装,最后到 MAC 层。返回的时候,源 MAC 就变成了目标 MAC,再返给请求的机器。至此,第二问题也解决了。

  对于以太网,最后的CRC(循环冗余检测)通过XOR异或的算法,来计算整个包在发送的过程中是否出现了错误,主要针对第三个问题。

  一个广播的网络里接入了N台机器,怎么知道每个MAC地址是谁呢?这里就要用到ARP协议即地址解析协议,已知IP地址可以求得MAC地址。在一个局域网里,当知道了IP地址,可以发送一个广播包,用个例子说明就是1、2、3、4步。

询问和应答报文大致如下:

  交换机是MAC层的设备,它的任务是接收入链路层帧并将它们转发到出链路。交换机通过学习来记录入链和出链地址之间的关系。一台 MAC1 电脑将一个包发送给另一台 MAC2 电脑,当这个包到达交换机的时候,一开始交换机也不知道 MAC2 的电脑在哪个口,它只能将包转发给除了来的那个口之外的其他所有的口。这个时候,交换机会记住MAC1 是来自一个明确的口。以后有包的目的地址是 MAC1 的,直接发送到这个口就可以了。当交换机作为一个关卡一样,过了一段时间之后,就有了整个网络的一个结构了,这时基本上不用广播了,全部可以准确转发。由于每个机器的 IP 地址会变,所在的口也会变,因而交换机上的学习结果也就是转发表,是有一个过期时间的。

  交换机是即插即用设备,它们不需要网络管理员或用户的干预。要安装交换机的网络管理员只需要将局域网网段和交换机的接口相连。同时交换机是全双工的工作方式,任何交换机口能够同时发送和接收数据帧。交换机提高了局域网的转包性能,因为它的最大聚合带宽是该交换机所有接口速率之和。

  最后交换机容易和路由器弄混,路由器是使用IP地址来转发分组,是网络层的设备;而交换机是用MAC地址来转发分组,这是两者本质的区别。

  

参考资料:《趣谈网络协议》刘超

     《计算机网络:自顶向下方法》原书第六版 陈鸣译

MAC地址和交换机的更多相关文章

  1. 交换机工作原理、MAC地址表、路由器工作原理详解

    一:MAC地址表详解 说到MAC地址表,就不得不说一下交换机的工作原理了,因为交换机是根据MAC地址表转发数据帧的.在交换机中有一张记录着局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据 ...

  2. 交换机的MAC地址作用

    交换机的MAC地址在交换机进行数据交换时是没有作用的,因为交换机并不对转发的数据帧进行拆包重封装. 如果只是完成数据帧交换,则可以不要MAC地址(仅指二层交换机,三层交换机完成路由功能自然每个端口得有 ...

  3. MAC地址表、ARP缓存表、路由表及交换机、路由器基本原理

    在网上找到了这篇讲述MAC地址,ARP协议和路由表的文章,如获至宝.一篇文章把组网中的相关概念讲的明明白白. 原文是发布在51cto博客上,但不知道为什么点进去却是404.让我没想到的是这个技术论坛上 ...

  4. 【小菜学网络】交换机与MAC地址学习

    上一小节介绍了 集线器 ,一种工作于物理层的简单网络设备.由于集线器采用广播的方式中继.转发物理信号,传输效率受到极大制约. 精准转发 为了解决集线器工作效率低下的尴尬,我们需要设计一种更高级的网络设 ...

  5. 以太网MAC地址组成与交换机基本知识

    以太网MAC地址 MAC地址由48位二进制组成,通常分为六段,用十六进制表示,工作在数据链路层. 数据链路层功能: 链路的建立,维护与拆除 帧包装,帧传输,帧同步 帧的差错恢复 简单的流量控制 第八位 ...

  6. (转载)详解网络传输中的三张表,MAC地址表、ARP缓存表以及路由表

    郑重声明:原文转载于http://dengqi.blog.51cto.com/5685776/1223132 向好文章致敬!!! 一:MAC地址表详解 说到MAC地址表,就不得不说一下交换机的工作原理 ...

  7. 网络传输中的三张表,MAC地址表、ARP缓存表以及路由表

    一:MAC地址表详解 说到MAC地址表,就不得不说一下交换机的工作原理了,因为交换机是根据MAC地址表转发数据帧的.在交换机中有一张记录着局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据 ...

  8. Cisco 绑定mac地址

    在Cisco中有以下三种方案可供选择,方案1和方案2实现的功能是一样的,即在具体的交换机端口上绑定特定的主机的MAC地址(网卡硬件地址),方案3是在具体的交换机端口上同时绑定特定的主机的MAC地址(网 ...

  9. MAC地址表、ARP缓存表以及路由表

    一:MAC地址表详解 说到MAC地址表,就不得不说一下交换机的工作原理了,因为交换机是根据MAC地址表转发数据帧的.在交换机中有一张记录着局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据 ...

随机推荐

  1. @EnableHystrixDashboard注解无法使用情况

    本人使用的是springboot 2.1.3,在引入hystrix仪表盘时,发现@EnableHystrixDashboard注解无法使用. 原来的pom配置 度娘之后,发现是springboot版本 ...

  2. Elasticsearch修改分词器以及自定义分词器

    Elasticsearch修改分词器以及自定义分词器 参考博客:https://blog.csdn.net/shuimofengyang/article/details/88973597

  3. elasticSearch中集群状态的guan'l

    es中集群出现上面的问题一般是磁盘空间不够引起的,就是node节点所在的磁盘空间不足引起的 es整个集群放在c盘,都快满了 说明es的磁盘已经快被使用完了,我们可以临时更新下磁盘空间大小 修改 ES分 ...

  4. 删库吧,Bug浪——我们在同一家摸鱼的公司

    那些口口声声, Bug越来越难写人的,应该盯着你们: 像我一样,我盯着你们,满眼恨意. IT积攒了几十年的漏洞, 所有的死机.溢出.404和超时, 像是专门为你们准备的礼物. 圈复杂度.魔鬼变量.内存 ...

  5. 入门大数据---Flink学习总括

    第一节 初识 Flink 在数据激增的时代,催生出了一批计算框架.最早期比较流行的有MapReduce,然后有Spark,直到现在越来越多的公司采用Flink处理.Flink相对前两个框架真正做到了高 ...

  6. vue全家桶(3.1)

    4.数据请求 4.1.axios是什么? axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它有以下特征: 从浏览器中创建 XMLHttpRequest 从 no ...

  7. Python之浅谈模块

    目录 模块的四种形式 什么是模块 import和from......import 循环导入 模块的搜索路径 Python文件的两种用途 random模块 模块的四种形式 什么是模块 ​ 模块就是一个p ...

  8. C++ 调用Python文件方法传递字典参数并接收返回值

    首先本地需要安装有Python环境,然后在c++工程中包含Python的头文件,引用Python的lib库. //python 初始化 Py_Initialize(); if (!Py_IsIniti ...

  9. 支持十万并发的黑科技-NIO

    今天是猿灯塔“365天原创计划”第3天. 今天讲: 支持十万并发的黑科技-NIO 翻译过来就是:Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC(一种远程调用) 分布式服务框架(SOA),致 ...

  10. html5中contenteditable属性如果过滤标签,过滤富文本样式

    ​​在div中使用contenteditable=”true”可以达到模拟输入框的效果,但是当我们复制其他网页内容进去的时候,会发现连带的样式也一起复制进去了.很明显我们不需要复制富文本样式,那么如何 ...