整理:计算机网络|数据链路层详解:MAC 地址、交换机、ARP 协议、CRC 校验

这两天一直在研究这个话题,踩了几个坑,把遇到的东西整理成文,供有需要的朋友参考。

🏠 博客主页:小谢同学的小破站✍️ 这篇文章由 小谢同学的小破站 原创,首发于 CSDN💻☕ Java学习专栏:java📗 MySQL专栏:MySQL🧩 数据结构与算法:Java 数据结构与算法🌐C语言专栏: C语言👍 欢迎

标题

1.1 数据链路层的核心任务 1.1.1 封装成帧 2. 认识以太网 3. 高频面试题总结
前言:    这里是小谢同学有关于数据链路层的学习记录,整理数据链路层相关知识。笔记用于自我复盘巩固,有错误

1. 认识数据链路层

TCP/IP五层网络模型中,从上往下依次是:应用层 → 传输层 → 网络层 → 数据链路层 → 物理层。

  • 网络层:负责跨网络传输,找目标主机(依靠IP地址)。
  • 数据链路层:负责同一个局域网内 ,把数据从一台主机送到另一台主机(核心是依靠MAC地址)。
例如:生活中的一个例子
IP地址代表的是,详细的一个小区地址(xxx小区3栋xxx号),可以使用于跨市导航MAC地址代表的是,本小区里面住户的门牌号,只在当前小区内送货用。
1.1 数据链路层的核心任务

数据链路层核心的3大核心任务:封装成帧,CRC差错检测,可靠传输机制
以太网结构为例子:

封装成帧
给网络层传下来的IP数据包,加上帧头、帧尾,组成「帧」。 帧的作用: 物理层只能传输一串0/1比特流;数据链路层务必要划定边界,告诉设备:哪一段是一完整帧。 封装搞定之后就变成了以太网数据帧,后续会交给物理层发送;
帧头中关键信息:源MAC地址,目的MAC地址,这两者就相当于寄快递的寄件人与收件人
> 通俗的话就是:寄快递,给快递包装起来,外层是纸盒子(纸盒子相当于加上的帧头与帧尾)
CRC差错检测
以太网使用 CRC循环冗余校验 什么是CRC校验冗余校验? 原理:  发送方:会根据原始的数据计算出校验码,放在帧尾一起一同发送过去。  接收方:拿收到的数据 + CRC校验码会重新进行计算结果。
结果为0 → 说明数据没有损坏结果不为0 → 说明数据出错,会直接丢弃帧 注意:差错检测只能检是否存在问题,而不能纠正错误,传输过程中发现错误会直接丢包,不会自动重传,重传的开发会交给上层TCP协议来进行处理
可靠传输机制
可靠传输字面意思上我们就能理解为:保证接收方能接收到发送方发送的数据; 3种经典的可靠传输机制:
停止等待协议: 每次发送一帧数据会等待对方返回ACK,收到之后再发送下一帧,缺点就是效率算是慢后退N帧(GBN): 可以连续发送多帧,如果发送过程中出现丢包问题,就会从丢包地方重新开始传递数据选择重传: 出错只会重新传递出错那一处,并不会重复发送数据
> 以太网本身是没有实现可靠传输的,可靠传输交给TCP来进行实现

2. 认识以太网

 以太这个概念早期并不是计算机里面的一个术语,而是物理上设想的一种物质:  1887年迈克尔逊和莫雷在美国克利夫兰做的迈克尔逊-莫雷实验否定了以太的存在,以太从此退出科学领域,只成为了一种哲学上的概念。  后续在计算机层面上引用了以太这个名词,也就是现在的以太网

以太网结构:

解释: 1.目的地址与源地址:都是MAC地址,对应关系属于收件人与寄件人的关系 2. CRC: 校验数据是否出错,会计算出校验码
结果为0 → 说明数据没有损坏结果不为0 → 说明数据出错,会直接丢弃帧

2.1 MAC地址
 MAC地址也叫物理地址,是固化在网卡硬件上,长度为48位,用12个十六进制数字表示。一般情况下在出产时已经固定好了,绝大部分情况下MAC地址是固定的,不允许修改(MAC地址通常是唯一的),但是有些设备可以修改MAC地址; 注意:MAC地址只能在同一个局域网(广播域)内生效,不能跨局域网直接通信。
> 这里我们可以使用一个例子: 长途旅途类比数据包跨网段传输 [桂林->柳州->北海->南宁]
此处的IP地址就相当于本次的起点与目的地MAC地址只负责管理 [相邻的一跳] ,数据包每次经过一台路由器,离开当前局域网之后,旧的MAC地址就会作废,路由器会重新封装一组全新的源MAC,目的MAC,直到最终一跳到达目标主机所在的局域网,目的的MAC地址才会更换成目标主机网卡的MAC地址。

轻松口诀:IP不忘初心,MAC每跳换新


2.2 二层交换机开发原理
轻松来理解:
 交换机属于二层设备,只认识MAC地址,看不懂IP地址,工作在局域网内部。  可以把交换机类比成班级里面的"快递收发员(代购跑腿的)":
交换机内部会维护一张「MAC地址‑端口映射表」(代购表);收到数据帧后,读取帧里面的目的MAC;如果映射表里存在这条记录,就单播转发到对应的端口;(如果有人要跑腿买零食并且写了姓名,就会将零食交给对方)如果没有查到记录,则执行泛洪广播,向除接收端口以外所有端口转发这条帧;(如果没有则大声询问这是谁的)交换机收到任意一个进来的数据帧时,就会读取帧里的源 MAC,更新 MAC‑端口映射表。
 交换机可以隔离冲突域,但是不能隔离广播域。

2.3 ARP协议

ARP协议建立了主机IP地址和MAC地址的映射关系.
作用就是通过目标主机的IP地址,查询得到它对应的MAC地址

工作流程:
当主机想要发送数据时,已经知道目标IP,但是不知道目标MAC;会在局域网发送ARP广播请求报文,询问这个IP对应的MAC地址;局域网内所有的主机收到请求,当IP匹配成功的主机会单播返回ARP应答,如果不匹配则丢弃广播;请求方收到应答之后,把「IP‑MAC」映射关系保存到本地ARP缓存表,后续一段时间内无需再次广播查询。

 ARP只适用于同一个局域网内部;跨网段通信时,ARP获取到的是网关路由器的MAC地址,而不是远端主机MAC地址。


3 高频面试总结

1:MAC地址能不能跨局域网通信?MAC和IP地址的区别?

MAC地址是二层链路层地址,只能在当前局域网内生效,无法跨网段通信;IP是三层网络层地址,负责端到端的远程寻址,可以跨多个局域网传输。数据包每经过一台路由器,二层源MAC与目的MAC就会被重新改写,但是三层源IP、目的IP全程保持不变。

2:简述交换机的自学习转发流程

交换机维护一张MAC‑端口映射表。收到帧时会先读取源MAC,更新映射表;再查看目的MAC,如果表中存在记录就单播转发;不存在就泛洪广播。

3:CRC校验检测出帧出错后,链路层如何处理?

以太网链路层检测出错误帧后,会直接将帧丢弃,不会进行重传,重传的可靠性会交给上层TCP协议负责。

4:ARP协议的工作过程,跨网段时ARP拿到的是谁的MAC?

ARP通过广播请求、单播应答的方式 由IP查询MAC。跨网段通信时ARP获取到的是网关路由器的MAC地址。

🔙 返回目录



今天的内容大概就这些,实际开发中大家还会遇到更多细节,欢迎留言分享自己的经验。

评论 (0)

暂无评论