Linux网络-数据链路层,MAC帧解析

news2024/11/16 7:56:10

目录

数据链路层VS网络层 

以太网概念

以太网的帧格式(报文格式)(也可以称之为MAC帧)

MAC地址的概念

MAC帧格式

局域网通信原理

MTU

MTU说明

MTU对IP协议的影响

MTU对UDP协议的影响

MTU对TCP协议的影响


数据链路层VS网络层 

IP:在复杂的网络环境中确定一个合适的路径。

而主机B到路由器F,F到G,G到H等等的局域网数据转发的问题,都是由数据链路层在这个局域网中完成转发任务的。

以太网概念

"以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的 内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;

例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;

以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等;

故上方所说的局域网转发时一个节点到另一个节点的转发,本质都是在以太网中进行的。

以太网是一种局域网技术。

以太网的帧格式(报文格式)(也可以称之为MAC帧)

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

MAC地址的概念

MAC地址用来识别数据链路层中相连的节点(标识数据链路层中的主机的唯一性~)

长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)

在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(所以说数据链路层是驱动层~)

IP地址描述的是路途总体的 起点 和 终点;

MAC地址描述的是路途上的每一个区间的起点和终点;(解耦)

MAC帧格式

目的地址和源地址都是MAC地址,类型标识了数据链路层进行解包之后,将有效载荷交给上层的谁,比如交给IP层(则有效载荷就是IP报文),还是ARP层(后面说ARP协议)

报头定长,可以进行解包,向上分用依据的就是类型字段的内容。

局域网通信原理

局域网内通信时,不管是两个主机之间,还是主机与路由器之间,都需要数据链路层封装MAC帧,来进行局域网转发。

这个过程就像在教室内,任意两个人进行交流一样(大声交流,不是小声交流),这里比如H1发送数据帧后,这个局域网中所有主机都会收到这个MAC帧, 由数据链路层进行解析,发现目的MAC地址不是自己,则就会直接丢弃。

因为可能存在两个主机同时发送数据帧的情况,故MAC帧数据在以太网中传输时可能发生碰撞,此时,会有碰撞避免算法,比如发送方知道自己发出的MAC帧发生了碰撞,就随机等待若干时长之后再进行重传(所以严格来说,除了TCP有可靠性,数据链路层也有可靠性策略存在)

故,局域网内主机越少越好(更小概率发生数据碰撞),局域网内节点发送数据帧时,数据帧越短越好~

所以,回归到之前讲IP时,说存在MTU限制,就是因为数据链路层因为物理原因有限制,这里其实就是根本原因(好像~)

在网络转发过程中,目的IP不会变,MAC帧的源MAC和目的MAC会变。

MTU

MTU说明

MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层产生的限制。

以太网帧中的数据长度规定最小46字节,最大1500字节(这里的数据其实就是IP报文!或者ARP报文)

最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;

MTU对IP协议的影响

由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包(分片).

MTU对UDP协议的影响

一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就会在网络层分成多个IP数据报.(这里的数据指的当然就是应用层数据啦~)

这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果UDP数据报在 网络层被分片, 整个数据被丢失的概率就大大增加了.

MTU对TCP协议的影响

TCP的一个数据报也不能无限大, 还是受制于MTU. TCP的单个数据报的最大消息长度, 称为MSS(Max Segment Size);(指的是TCP的有效载荷,即应用层数据)

TCP在建立连接的过程中, 通信双方会进行MSS协商.

最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU).

双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值. 然后双方得知对方的MSS值之后, 选择较小的作为最终MSS. MSS的值就是在TCP首部的40字节变长选项中(kind=2);#TCP/IP# TCP头部选项功能详解_arvin_xiaoting的博客-CSDN博客_tcp选项


注意,之前讲MAC帧时格式时,发现MAC帧里的类型字段,不仅仅标识着IP,还有ARP,也就是MAC帧的有效载荷不一定为IP报文,还有可能是ARP报文。

同时,在局域网中,当某一个路由器得到数据包,由目的IP决定转发给下一跳X路由器时,由数据链路层封装MAC帧,但是,此时X路由器的MAC地址是不知道的,因此要封装MAC帧,进而转发给X路由器,必须先知道其MAC地址。ARP协议就是用来解决此问题的。

在同一网段中,通过目标节点IP,获取对方的MAC地址  -- ARP协议,地址解析协议。(局域网协议)

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

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

相关文章

【Linux】应用层协议:HTTP和HTTPS

每个人都可以很喜欢每个人,但喜欢治不了病,喜欢买不了东西,喜欢不能当饭吃,喜欢很廉价… 文章目录 一、HTTP协议1.URL1.1 URL的组成1.2 urlencode && urldecode 2.HTTP协议格式2.1 http请求和响应的格式2.2 通过代码来进行…

[Eigen中文文档] 求解稀疏线性系统

文档总目录 本文目录 稀疏求解器列表内置直接求解器内置迭代求解器外部求解器的包装器 稀疏求解器概念计算步骤基准测试例程 英文原文(Solving Sparse Linear Systems) 在Eigen中,有多种方法可用于求解稀疏系数矩阵的线性系统。由于此类矩阵的特殊表示&#xff0c…

零基础速成simulink代码生成——结合CANOE的DBC文件CAN报文代码生成 移植到硬件4

零基础速成simulink代码生成——结合CANOE的DBC文件CAN报文代码生成 移植到硬件4 本次我们将讲解如何将代码放到嵌入式硬件上运行,本次例子将dbc文件导入simulink中,生成代码,不需要我们自己实现数据库的内容。 导入DBC文件 新建一个simulink模型 MCU_CAN.slx simulink具…

开源计算机视觉库OpenCV详解

目录 1、概述 2、OpenCV详细介绍 2.1、OpenCV的起源 2.2、OpenCV开发语言 2.3、OpenCV的应用领域 3、OpenCV模块划分 4、OpenCV源码文件结构 4.1、根目录介绍 4.2、常用模块介绍 4.3、CUDA加速模块 5、OpenCV配置以及Visual Studio使用OpenCV 6、OpenCV和OpenGL的区…

SpringBoot常用操作

SpringBoot常用操作 SpringBoot启动过程 1. 生成一个SpringApplication的对象1. webApplicationType 推测web应用类型(NONE、REACTIVE、SERVLET)2. 从spring.factories中获取BootstrapRegistryInitializer对象3. initializers 从spring.factories中获…

A brief taste of JIFA

JIFA 是阿里贡献给 Eclipse 的一个适用于 Java 应用的问题诊断应用。 它以图形化的方式展示 Heap Dump AnalysisGC Log AnalysisThread Dump Analysis 因为云环境/生产环境的一些限制,应用的问题可能不能被就地分析,所以Jifa provides a web solution…

关于运动模糊问题的分析及处理方法

1、问题背景 前段时间有做一个化妆镜项目,就是一面镜子上装有一个摄像头,用户对着镜子化妆时,可同时用来采集人脸信息,分析人脸用的。客户反馈抓拍静止的人脸图像时,画面正常,而当人脸稍微运动时&#xff…

java springboot整合MyBatis实现分页查询以及带条件的分页查询

之前的文章 java springboot整合MyBatis做数据库查询操作操作了springboot整合MyBatis,然后简单做了个按id查询的操作 那么 我们按上文搭建起的环境继续 我们直接在staffDao接口中声明一个分页函数 Select("select * from staff limit #{page},#{pageSize}&q…

【Vue】Vite 组件化开发

文章目录 组件化开发一、组件化开发思想二、Vue 组件的构成2.1 组件组成结构2.2 组件 template 节点2.2.1 在 template 中使用指令2.2.2 在 template 中定义根节点 2.3 组件的 script 模板 三、组件的基本使用3.1 组件的注册3.1.1 全局组件注册3.1.2 局部组件注册 3.2 组件样式…

ffmpeg命令参数

主要参数 -i 设定输入流 -f 设定输出格式(format) -ss 开始时间 -t 时间长度视频参数 -vframes 设置要输出的视频帧数 -b 设定视频码率 -b:v 视频码率 -r 设定帧率 -s 设定画面的宽与高 -vn 不处理视频 -aspect aspect 设置横纵比4:3 或16:9 或1.333或…

软件项目管理 第三章软件项目的启动过程课后习题参考答案——主编:李冰、张桥珍、刘玉娥

第三章 软件项目的启动过程 课后习题参考答案 1.选择题 (1)乙方在项目初始阶段的主要任务不包含以下哪一项(D)。 A. 项目分析 B. 竞标 C. 合同签署 D. 合同管理 (2)项目章程中不…

Spring Boot Configuration Annotation Processor not configured 问题解决

目录 问题抛出: ConfigurationProperties 问题抛出: 进行Spring Boot配置文件部署时,发出警告Spring Boot Configuration Annotation Processor not configured,但是不影响运行。 不过有时候springboot项目出错了并且排除了所有…

【裸机开发】中断系统 —— 中断向量表(设置中断向量偏移的原因)

之前的LED驱动不存在中断,也就不包含中断的初始化。如果程序包含了中断,我们应还需要初始化哪些内容?要解决这个问题,我们需要先了解一个中断系统包含了哪些内容。 ① 中断向量表:描述中断对应的中断服务函数&#xf…

C++笔记之stack、queue、priority_queue、deque

code review! C笔记之stack、queue、priority_queue、deque 文章目录 C笔记之stack、queue、priority_queue、deque一.cppreference介绍1.stack2.queue3.priority_queue4.deque 二.容器适配器三.stack详解1.创建一个不包含任何元素的 stack 适配器,并采用默认的 de…

Debian 12中再次安装R软件

上篇博客(地址:https://blog.csdn.net/my1114/article/details/131347147?spm1001.2014.3001.5501)中所述的,在Debian12中按默认方式编译安装R软件,有一定的局限性。 如下图所示: 因此,本…

Redis入门(2)-字符串

String是Redis最基础、最常见的类型,string类型的value中可存放任意数据,包括数值型、二进制的图片、音频、视频、序列化对象等。一个String类型的value最大是512M. 1.getset k v 若key存在返回之前的值,若不存在返回nil 2.strlen key 返…

【面试】标准库相关题型(三)

文章目录 1. unordered_map底层实现原理1.1 散列表1.2 STL 中的 unordered_map 的实现1.3 unordered_map 2. 迭代器底层实现原理及种类2.1 主要作用2.2 底层原理2.3 迭代器类型属性 3. 迭代器失效3.1 容器类别3.2 失效情况3.3 C11容器类别 4. STL容器的线程安全4.1 背景知识4.2…

Git分支使用方法

目录 前言 一、查看可用分支 二、创建新分支 三、切换到新分支 四、在新分支上进行工作 五、提交更改 六、切换回主分支 前言 分支是指在同一个代码仓库中的不同版本线。它们可以被用来同时开展不同的开发任务、修复bug或实现新功能,而不会影响到主要的代码…

【数据结构】栈和队列的应用

🎇[数据结构]栈和队列的应用🎇 🌟 正式开始学习数据结构啦~此专栏作为学习过程中的记录🌟 文章目录 🎇[数据结构]栈和队列的应用🎇🍰一.栈在括号表达式中的应用🚀1.原理&#x1f680…

Linux1.基础指令(上)

1.Linux系统可创建多个用户。 2.创建用户:adduser 用户名 设置密码:passwd 用户名 (系统会提示再次输入密码,注意密码不回显)。 3.删除用户首先要在root权限下,输入指令:userdel -r 用户名。 4.ls指令 ls -a(显示所有文件,包括隐藏文件) :…