【网络】数据链路层-MAC帧

数据链路层-以太网与ARP协议

文章目录

  • 1.数据链路层
  • 2.以太网
    • 2.1什么是以太网
    • 2.2MAC帧格式
  • 3.ARP协议
    • 3.1为什么有ARP协议?
    • 3.2ARP的定位
    • 3.3ARP协议工作流程
    • 3.4ARP数据格式
  • 4.RARP协议

1.数据链路层

数据链路层是网络协议栈中最底层的内容,而在之前对其他层次的学习让我们知道传输层可以保证数据的可靠性问题,网络层保证数据跨网络转发的路由问题,而数据链路层解决的就是局域网内两台主机间通信的问题。

QQ_1723167027624

2.以太网

2.1什么是以太网

以太网属于一种局域网通信技术。

不同局域网所采用的通信技术可能是不同的,常见的局域网技术有以下三种:

  • 以太网:以太网是一种计算机局域网技术,一种应用最普遍的局域网技术。
  • 令牌环网:令牌环网常用于IBM系统中,在这种网络中有一种专门的帧称为“令牌”,在环路上持续地传输来确定一个节点何时可以发送包。
  • 无线LAN/WAN:无线局域网是有线网络的补充和扩展,现在已经是计算机网络的一个重要组织部分。

虽然网络中各个局域网所采用的通信技术可能的不同的,但是IP屏蔽了底层网络的差异,对于网络通信双方的IP层及其往上的协议来说,它们并不关心底层具体使用的是哪种局域网技术。

网络中的路由器会不断去掉数据旧的局域网报头,并添加上新的局域网报头,因此数据在进行跨网络传输时,就算所需跨越的网络采用的是不同的局域网技术,最终也能够正确实现跨越。

(1)以太网通信原理

  • 以太网”不是一种具体的网络,而是一种技术标准,它既包含了数据链路层的内容,也包含了一些物理层的内容。例如,以太网规定了网络拓扑结构,访问控制方式,传输速率等。
  • 以太网中的网线必须使用双绞线,传输速率有10M,100M,1000M等。

以太网中所有的主机共享一个通信信道,当局域网中的一台主机发出数据后,该局域网中的所有主机都能够收到该数据。

  • 比如当局域网中的主机A想要发送数据给主机B时,其实局域网当中的每一台主机都能收到主机A发出去的数据,只不过最终只有主机B会将主机A发来的数据向上进行交付。
  • 局域网当中的其他主机虽然也收到了主机A发出的数据,但经过识别后发现这个数据不是发送给自己的,于是就会直接将该数据丢弃而不会向上进行交付。

(2)数据碰撞

由于以太网中的所有的主机共享一个通信信道,因此在同一时刻只允许有一台主机发送数据,否则各个主机发送的数据就会相互干扰。站在系统的角度来看,这里各个主机所共享的通信信道就是一种临界资源,这个临界资源同一时刻只允许一台主机使用。

  • 对于这个问题,以太网的做法就是先不限制各个主机发送数据的能力,局域网中的每个主机想发数据的时候直接发就行了,但是只要发送出去的数据与其他主机发送的数据产生了碰撞,那就得执行碰撞避免算法。
  • 所谓的碰撞避免算法就是,当主机发送出去的数据产生碰撞时,该主机需要等待一段时间后再进行数据重发,在主机等待的时候就能够就能够尽可能让局域网当中的数据消散。
  • 一个局域网就是一个碰撞域。

(3)交换机

交换机通过维护一个MAC地址表来记录每个端口连接的设备的MAC地址。当数据帧到达交换机时,它会根据目的MAC地址查找MAC地址表,以确定将数据帧转发到哪个端口。这种机制减少了数据帧被错误地发送到多个端口的可能性,从而降低了碰撞的概率。

交换机支持VLAN技术,可以将网络划分为多个逻辑上独立的广播域。每个VLAN内的设备只能与同一VLAN内的其他设备通信,从而减少了广播流量和碰撞的可能性。

(4)令牌环网

  • 令牌环网(Token-ring network)的传输方法在物理上采用了星形拓扑结构,但逻辑上是环形拓扑结构。
  • 令牌环网的通信传输介质可以是无屏蔽双绞线、屏蔽双绞线和光纤等。
  • 令牌环网中各节点间采用多站访问部件(Multistation Access Unit,MAU)连接在一起,MAU是一种专业化集线器,用来围绕工作站计算机的环路进行传输。

在令牌环网中有一种专门的帧称为“令牌”,这个“令牌”会在环路上持续地传输,只有拿到“令牌”的主机才能发送数据,因此发送出去的数据不会发生碰撞。

  • 令牌环网当中的“令牌”就像系统当中用于保护临界资源的互斥锁一样,“令牌”与互斥锁一样也有“忙”和“闲”两种状态,“忙”表示令牌已经被占用,而“闲”则表示令牌没有被占用。
  • 想要发送数据的计算机必须首先检测到“闲”令牌,并将其置为“忙”状态,然后才可以发送数据,这就和申请互斥锁的过程很像。
  • 此外,由于“令牌”在网环上是按顺序依次传递的,因此对于所有入网的计算机而言,它们获取令牌的机会都是相等的,因此不会造成某台主机发送数据的饥饿问题。

2.2MAC帧格式

MAC帧是数据链路层的一种数据数据格式,用于在局域网(以太网)传递数据。

QQ_1723168031354

  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。
  • 帧协议类型字段有三种值,分别对应IP协议(0800)、ARP协议(0806)和RARP协议(8035)。
  • 帧末尾是CRC校验码。

(1)MAC帧如何将报头与有效载荷进行分离?

以太网MAC帧的帧头和帧尾都是固定长度的,因此当底层收到一个MAC帧后,直接提取出MAC帧当中固定长度的帧头和帧尾,此时剩下的就是有效载荷了。

(2)MAC帧如何决定将有效载荷交付给上层的哪一个协议?

以太网MAC帧对应的上层协议不止一种,因此在将MAC帧的报头和有效载荷分离后,还需要确定应该将分离出来的有效载荷交付给上层的哪一个协议。

在MAC帧的帧头当中有2个字节的类型字段,因此在分离出报头和有效载荷后,根据该字段将有效载荷交付给对应的上层协议即可。

(3)数据传输过程

假设局域网当中的主机A想要将IP数据报发送给同一局域网当中的主机B,那么主机A封装MAC帧当中的目的地址就是主机B的MAC地址,源地址就是主机A的MAC地址,而帧协议的类型对应就是0800,紧接着就是要发送的IP数据报,帧尾部分对应就是CRC校验。

当主机A将该MAC帧发送到局域网当中后,局域网当中的所有主机都可以收到这个MAC帧,包括主机A自己。

  • 主机A收到该MAC帧后,可以对收到的MAC帧进行CRC校验,如果校验失败则说明数据发送过程中产生了碰撞,此时主机A就会执行碰撞避免算法,后续进行MAC帧重发。
  • 主机B收到该MAC帧后,提取出MAC帧当中的目的地址,发现该目的地址与自己的MAC地址相同,于是在CRC校验成功后就会将有效载荷交付给上层IP层(0800)进行进一步处理。
  • 局域网中的其他主机收到该MAC帧后,也会提取出MAC帧当中的目的地址,但发现该目的地址与自己的MAC地址不匹配,于是就会直接将这个MAC帧丢弃掉。

也就是说,当底层收到一个MAC帧后,会根据MAC帧当中的目的地址来判断该MAC帧是否是发给自己的,如果是发送给自己的则会再对其进行CRC校验,如果校验成功则会根据该MAC帧的帧协议类型,将该MAC交付给对应的上层协议进行处理,如果不是发送给自己的则在数据链路层直接将数据丢弃。

(4)认识MAC地址

  • MAC地址用来识别数据链路层中相连的节点。
  • 长度为48位,及6个字节,一般用16进制数字加上冒号的形式来表示,例如:08:00:27:03:fb:19。
  • 在网卡出厂时就确定了,不能修改,MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突;也有些网卡支持用户配置MAC地址)。

我们可以通过ifconfig命令来查看我们的MAC地址。

QQ_1723168466230

ether:以太。

(5)对比理解MAC地址和IP地址

实际数据在路由过程中会存在两套地址,一套是源IP地址和目的IP地址,还有一套是源MAC地址和目的MAC地址。

  • IP地址描述的是数据通信总体的起点和终点。
  • MAC地址描述的是数据通信上的每一个区间的起点和终点。

比如唐僧取经,源IP地址就是东土大唐,目的IP地址就是西天,而源MAC地址就是取经路途上一个区间内的起点,目的MAC地址就是取经路途上一个区间内的终点。

因此数据在路由过程中,源IP地址和目的IP地址可以理解成是不会变化的(但实际上由于NAT技术,源IP地址也是会发生变化的),而数据每进行一跳后其源MAC地址和目的MAC地址都会变化。

(6)认识MTU

MTU(Maximum Transmission Unit,最大传输单元)描述的是底层数据帧一次最多可以发送的数据量,这个限制是不同的数据链路层对应的物理层产生的。

  • 以太网对应MTU的值一般是1500字节,不同的网络类型有不同的MTU,如果一次要发送的数据超过了MTU,则需要在IP层对数据进行分片(fragmentation)。
  • 此外,以太网规定MAC帧中数据的最小长度为46字节,如果发送数据量小于46字节,则需要在数据后面补填充位,比如ARP数据包的长度就是不够46字节的。

(7)认识MSS

由于数据链路层限制了单次数据传输的数据量(MTU),所以为了避免数据在网络层进行IP分片,我们应在传输层对向网络层交付的数据大小加以控制。

我们将TCP的单个数据报的最大报文长度,称为MSS(Max Segment Size)。

TCP通信双方在建立连接的过程中,就会进行MSS协商,最终选取双方支持的MSS值当中的较小值作为最终MSS。

MSS的值实际就是在TCP首部的40字节的选项字段当中的(kind=2)。

最理想的情况下,MSS的值正好就是在数据不会在IP层进行分片的最大长度。

MSS和MTU的关系如下:

QQ_1723169159367

3.ARP协议

地址解析协议(Address Resolution Protocol,ARP)协议,是根据IP地址获取MAC地址的一个TCP/IP协议。

3.1为什么有ARP协议?

ARP 协议建立了主机 IP 地址 和 MAC 地址 的映射关系。

  • 在网络通讯时,源主机的应用程序知道目的主机的 IP 地址和端口号,却不知道目的主机的硬件地址(MAC地址);
  • 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
  • 因此在通讯前必须获得目的主机的硬件地址。

3.2ARP的定位

在TCP/IP四层模型中,网络协议栈自顶向下分为应用层、传输层、网络层和数据链路层。

其中应用层最典型的协议有HTTP、HTTPS和DNS等,传输层最典型的协议有TCP和UDP,网络层最典型的协议就是IP,数据链路层最典型的协议就是MAC帧协议,但实际数据链路层还有两种协议叫做ARP和RARP。

QQ_1723169474831

ARP、RARP和MAC帧协议虽然都属于数据链路层的协议,但ARP协议和RARP协议属于MAC帧的上层协议。

也就是说,MAC帧的上层协议不一定就直接是网络层的协议,MAC帧的上层协议有可能也属于数据链路层的协议,但就是位于MAC帧的上层。

网络层当中的ICMP协议和IGMP协议,这两个协议虽然与IP协议都属于网络层,但这两个协议属于IP的上层协议。

3.3ARP协议工作流程

QQ_1723170399916

  1. 源主机发出 “ARP请求”,询问“IP 地址是 172.20.1.2 的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填 FF:FF:FF:FF:FF:FF 表示广播)。
  2. 目的主机接收到广播的 ARP请求,发现其中的 IP 地址与本机相符,则发送一个 “ARP应答” 数据包 给源主机,将自己的硬件地址填写在应答包中;
  3. 每台主机都维护一个 ARP 缓存表,可以用arp -a命令查看。 缓存表中的表项有过期时间(一般为 20 分钟),如果 20 分钟内没有再次使用某个表项,则该表项失效,下次还要发 ARP 请求来获得目的主机的硬件地址。
QQ_1723170928361

3.4ARP数据格式

QQ_1723169662165

  • 硬件类型指链路层的网络类型,1为以太网。
  • 协议类型指要将什么类型的地址转换为MAC地址,0800为IP地址。
  • 硬件地址长度对于以太网地址为6字节,因为MAC地址是48位的,该字段如果硬件类型为以太网,则填6。
  • 协议地址长度对于IP地址为4字节,因为IP地址是32位的,该字段如果协议类型为IP,则填4。
  • op字段为1表示ARP请求,op字段为2表示ARP应答。

从ARP的数据格式也可以看出,ARP是MAC帧协议的上层协议,ARP数据格式中的前3个字段和最后一个字段对应的就是以太网首部,但由于ARP数据包的长度不足46字节,因此ARP数据包在封装成为MAC帧时还需要补上18字节的填充字段。

所以根据MAC帧中的类型字段,可以决定将该MAC帧交付给上层的哪一个协议:IP协议、ARP协议还是RARP协议。

4.RARP协议

RARP(Reverse Address Resolution Protocol,反向地址转换协议),是根据MAC地址获取IP地址的一个TCP/IP协议。

也就是说,某些情况下我们可能只知道一台主机的MAC地址,此时要得知该主机的IP地址就可以使用RARP协议。

理论上来说,RARP协议一定比ARP协议简单,因为既然我们已经知道一台主机的MAC地址了,那么我们就已经可以直接向给主机发送消息了,因此我们可以直接发消息询问对方的IP地址就行了。


不了解自我,我们的内心便没有办法得到完全的满足。 —斯瓦米·拉玛

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/52887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

恶劣天气下的目标检测新突破:多尺度退化建模与特征融合策略

更多优质内容,请关注公众号:智驾机器人技术前线 1.论文信息 论文标题:Degradation Modeling for Restoration-enhanced Object Detection in Adverse Weather Scenes 作者:Xiaofeng Wang, Xiao Liu, Hong Yang, Zhengyong Wang, …

阿里PAI-ChatLearn:大规模 Alignment高效训练框架正式开源

导读 ChatGPT是OpenAI开发的基于大型语言模型(LLM)的聊天机器人,以其令人惊叹的对话能力而迅速火爆并被广泛采用。ChatGPT 成功背后得益于大型语言模型生成领域的新训练范式:RLHF (Reinforcement Learning from Human Feedback),即以强化学习…

PTA L1-028 判断素数

L1-028 判断素数(10分) 本题的目标很简单,就是判断一个给定的正整数是否素数。 输入格式: 输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于的需要判断的正整数。 …

利用clip模型实现text2draw

参考论文 实践 有数据增强的代码 import math import collections import CLIP_.clip as clip import torch import torch.nn as nn from torchvision import models, transforms import numpy as np import webp from PIL import Image import skimage import torchvision …

滚柱导轨:数控机床高效运行的驱动力

机床制造者最关心的莫过于机床的精度,刚性和使用寿命,对导轨系统的关注甚少。但导轨为机床功能的实现奠定了可靠的基础,各种类型的机床工作部件,都是利用控制轴在指定的导轨上运动。机床设计者根据机床的类型和用途选用各种不同形…

Python进阶04-网络编程

零、文章目录 Python进阶04-网络编程 1、计算机网络 网络相关知识请参考计算机网络详解 (1)IP地址的概念 IP 地址就是标识网络中设备的一个地址,好比现实生活中的家庭地址。 (2)IP地址的表现形式 IP 地址分为两类…

【Python Web开发】Flask+HTML学习笔记

目录 Flask框架一、安装flask库二、运行一个网页三、库函数及变量 HTML标签语言一、基本格式二、标签2.1 块级标签2.1.1 标题2.1.2 div2.1.3 图片2.1.4 列表2.1.5 表格 2.2 行内标签2.2.1 span2.2.2 超链接2.2.3 输入 2.3 其他标签2.3.1 提交表单 Flask框架 一、安装flask库 …

探索Unity与C#的无限潜能:从新手到高手的编程之旅

在数字创意与技术创新交织的今天,Unity游戏引擎凭借其强大的跨平台能力和灵活的编程接口,成为了无数开发者心中的首选。而C#,作为Unity的官方脚本语言,更是以其面向对象的特性和丰富的库支持,为游戏开发注入了无限可能…

Golang | Leetcode Golang题解之第375题猜数字大小II

题目&#xff1a; 题解&#xff1a; func getMoneyAmount(n int) int {f : make([][]int, n1)for i : range f {f[i] make([]int, n1)}for i : n - 1; i > 1; i-- {for j : i 1; j < n; j {f[i][j] j f[i][j-1]for k : i; k < j; k {cost : k max(f[i][k-1], f[…

【JAVA入门】Day28 - 数据结构

【JAVA入门】Day28 - 数据结构 文章目录 【JAVA入门】Day28 - 数据结构一、栈二、队列三、数组3.1 ArrayList 四、链表4.1 LinkedList 五、二叉树5.1 二叉查找树5.2 二叉树的遍历方式5.3 平衡二叉树5.4 平衡二叉树的旋转5.5 平衡二叉树需要旋转的几种情况 六、红黑树6.1 红黑规…

永成防回水防回气装置煤矿毫不犹豫选择

永成防回水防回气装置煤矿毫不犹豫选择&#xff0c;不敢说我们有多好&#xff0c;我们只把简单的事做好&#xff0c;用心服务&#xff0c;因为品质&#xff0c;所以信任。因为信任&#xff0c;所以值得选择。 本防回水防回气装置是一种用于煤矿瓦斯管路爆渣和燃烧时防止回火、…

3_1_PID控制原理

自从计算机进入控制领域以来&#xff0c;用数字计算机代替模拟计算机调节器组成计算机控制系统&#xff0c;不仅可以用软件实现PID控制算法&#xff0c;而且可以利用计算机的逻辑功能&#xff0c;使PID控制更加灵活。数字PID控制在生产过程中是一种最普遍采用的控制方法&#x…

[Algorithm][综合训练][奇数位丢弃][求和][计算字符串的编辑距离]详细讲解

目录 1.奇数位丢弃1.题目链接2.算法原理详解 && 代码实现 2.求和1.题目链接2.算法原理详解 && 代码实现 3.计算字符串的编辑距离1.题目链接2.算法原理详解 && 代码实现 1.奇数位丢弃 1.题目链接 奇数位丢弃 2.算法原理详解 && 代码实现 解法…

YOLOv9改进策略【损失函数篇】| 利用MPDIoU,加强边界框回归的准确性

一、背景 目标检测和实例分割中的关键问题&#xff1a; 现有的大多数边界框回归损失函数在不同的预测结果下可能具有相同的值&#xff0c;这降低了边界框回归的收敛速度和准确性。 现有损失函数的不足&#xff1a; 现有的基于 ℓ n \ell_n ℓn​范数的损失函数简单但对各种尺度…

Redis与SpringMVC的整合与最佳实践

整合Redis与Spring MVC&#xff08;现在通常是Spring Boot的一部分&#xff09;可以提高应用性能&#xff0c;特别是在处理大量数据缓存和会话状态管理方面。 下面是一些关于如何整合Redis与Spring MVC的最佳实践&#xff1a; 1. 引入依赖 首先&#xff0c;你需要在你的项目中…

【Java】Maven多环境切换实战(实操图解)

Java系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 文章目录 Java系列文章目录一、前言二、学习内容&#xff1a;三、问题描述四、解决方案&#xff1a;4.1 Maven多环境配置学习4.2 切换环境4.2.1 先打包4.2.2 之后可以切换 五、总结…

【ACM独立出版 | 厦大主办】第五届计算机科学与管理科技国际学术会议(ICCSMT 2024,10月18-20)

第五届计算机科学与管理科技国际学术会议(ICCSMT 2024) 定于2024年10月18-20日在中国厦门举行。 会议旨在为从事“计算机科学”与“管理科技”研究的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学术发展趋势&#xff0c;拓宽研究思路…

设计模式结构型模式之适配器模式

结构型模式之适配器模式 一、概述和使用场景1、概述2、使用场景&#xff1a;3、主要分类 二、 代码示例1、类适配器模式2、接口适配器3、对象适配器 四、总结1、适配器模式2、适配器模式的优点3、适配器模式的缺点 一、概述和使用场景 1、概述 适配器模式是一种结构型设计模式…

力扣面试经典算法150题:整数转罗马数字

整数转罗马数字 今天的题目是力扣面试经典150题中的数组的中等难度题&#xff1a; 整数转罗马数字。 题目链接&#xff1a;https://leetcode.cn/problems/integer-to-roman/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 七个不同的符号代表罗马…

SprinBoot+Vue餐厅点餐系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…