Linux:数据链路层

news2025/1/18 16:58:52

文章目录

  • 路由表
  • 数据链路层
  • 分片
  • mac帧报头
  • ARP协议
    • ARP的周边话题

路由表

在这里插入图片描述
当主机a想要发送消息到主机b,这一整个过程中,数据报文在进行传输的过程实际上是一跳一跳的过去的,而报文可能会经过公网进行传递,本质上这些网络都是靠对应的路由器来进行链接的

当在之前的实验中,向某个地方进行请求的时候,请求的ip都是公网ip,而在平时的云服务器中是使用的是公网ip的,并且在ip协议的报头中,也有对应的ip字段,表示的是源ip地址和目标ip地址,这些都是来保证网络数据包可以传递过去的保障,那这和这里的路由有什么关系呢?

路由的工作之一是有路由转发的工作,每一个主机都有一个叫做路由表的东西,那这个路由表有什么用呢?在Linux的操作系统中可以查到这个内容:

在这里插入图片描述

那我上述所示的这个机器,通过这样的指令就查询到了路由表的存在,那当现在要有一个目标主机,现在要进行报文的发送了,就会拿着这个目标主机的ip,和子网掩码进行按位与,得到的就是Destination,然后再和每一行的Destination进行比对,如果匹配成功就发送,没有成功就继续进行匹配

那匹配路由表会有下面的几种可能性,我们分别进行讨论

**1. 不知道?**这种情况通常来说是路由的算法做的不佳的原因,这里我们不考虑这种情况
**2. 给主机具体的下一跳:**通过查询路由表,找到了想要传递的下一跳的目的地,所以直接就通过下一跳跳过去了
**3. 路由器也不清楚:**比对路由表,发现没匹配成功,这个时候就会把报文传递给默认路由,所谓的默认路由,就是网段内的另外一个路由器,然后在这个路由器中进行查询,继续传递
**4. 到达入口路由器:**这个就是比较理想的状态了,此时已经找到目标服务器了,那么就可以直接传递进去了

数据链路层

在实际的使用当中,报文其实并没有直接通过网络发出去,而是会交给下一层协议,那这层协议就是我们要谈论的最后一层协议了:数据链路层

对于数据链路层来说,实际上已经算是一个网卡硬件驱动层了,数据链路层不能发送过大的报文,这也是和硬件相关的,被硬件所控制的,那这就必然要求,上层不能交付过大的报文,这也就解释了对应的在TCP中,进行流量控制的章节中我们讲到,流量控制说的是对方的接收能力,比如现在对方接收能力是64kb,那为什么不直接把这64kb直接发过去,而是要一点一点发?原因就在于此,因为底层的发送是有限制的,这个限制就来源于网卡硬件

在这里插入图片描述

分片

那假设,现在就是运气不好,上层传递过来的报文就是太大了,那这该怎么办呢?作为网络层的ip协议,自然也有自己的方案,其中一种概念叫做分片,分片工作是由ip协议完成,然后传递到目标主机再由对方的ip协议进行组装,这个分片简单来说就是把ip在底层划分为若干个小的ip,然后这些小的ip再进行分次传送,送过去以后再组装成一个大的ip,再向上交付,那现在要考虑的几个问题就是,如何进行分片?又如何进行组装?

分片

对于分片来说,概念也相对比较简单,首先要知道的一点是进行分片也是要组装报头的,回顾ip协议,它的报头中是存在一个16位的标识的:
在这里插入图片描述
那这个标识是ip协议的标号,不同的ip协议标识肯定是不同的,对于相同的ip协议分片之后的标号也是相同的,这些都算比较好理解

再看下一个字段,说的是3位标志,那这个标志是干什么的呢?在这3位标志当中,其中第二位表示的是是否允许进行分片,如果显示的结果是0,那么就是表示允许分片,如果是1那就是表示的是不允许分片,第三位表示的是是否为结束标记,如果是1表示当前还没有结束,如果是0表示的是当前已经结束了,代表这个分片结束了

再看下一个字段是片偏移,这个就更简单了,就是一个偏移量

下面我用一个例子来进行解释上面的这一套理论:假设现在有一个报文是3000字节,而数据链路层最多发1500字节的报文,那它该如何进行划分呢?

在这里插入图片描述

那现在划分的问题结束了,它是如何进行组装的呢?正是由于有标记位的存在,才能保证不会丢失,偏移量和标记位加起来就能确定这个报文是不是最后一个,是不是开头,是不是中间

需要注意的是,正常来说是不建议进行分片的,因为如果有一个报文丢失了,那么整个报文都要进行重传,ip协议是没有TCP协议的保存机制的

mac帧报头

在计算机当中,每台主机除了对应的ip之外,还应该拥有一个mac地址,这个mac地址指的是网卡,对于每一个网卡来说,它都有一个单独的mac地址与之对应,它的作用主要就是用来在同一个局域网中进行区分特定的主机

那下图所示的是mac帧的报头信息

在这里插入图片描述

首先是数据部分,这个数据部分指的是ip报文,那随之而来的就是每一个协议都要思考的问题,它是如何做到报头和有效载荷进行分离,以及它是如何进行交付的?

报头和有效载荷分离

结论是,它是采用的定长报头的方式,当收到报文的时候就可以根据定长的报头实现和有效载荷的分离,其中有源地址和目的地址还有类型

如何进行分用?

如何进行识别这个报文是用以做什么的呢?答案是在报头的类型中会有记录,如果当前使用的是0800类型,那么表示的就是一个ip的数据包,这个使用的是0806类型,那么表示就是一个ARP请求,如果使用的是8035,那么表示的是RARP请求报文

ARP协议

这里我假设一个场景,有一个数据包要从A主机传递到B主机,经过一系列传输后,传递到了入口路由器,假设这个入口路由器叫做路由器d,那在它接受到这个数据包之后,根据子网掩码的运算,发现此时这个路由器d直接相连的网络就是这个数据包的目的地,那么这就意味着这个路由器d要经过内网转发,把数据交给主机b,那这就意味着一件事,对于数据包来说,它必须要知道主机b的mac帧地址,这样才能把数据送到主机b,那现在的问题是,路由器d接受到了这个报文,只知道目标主机b的ip地址,但是不知道主机b的mac地址,所以在内网交付的过程中,路由器d是无法把数据交给主机b的

所以现在对于路由器d来说,它必须要有一种方法,能根据ip地址转换成目标主机的mac地址,只有得到了对方的mac地址,才能把信息数据交给主机b,所以在一个局域网中,这种把ip地址和mac地址相关联的方法,就叫做是ARP协议

在这里插入图片描述

如上图所示,展示的就是ARP协议的一个基本的过程,主机a通常就是入口路由器,它和所在局域网当中的所有主机进行相连,当它要进行内网传递的时候,就要发送一个ARP请求包,然后去获取这个主机的mac地址,如果获取成功了,就把这个数据包发送出去,如果没成功这个数据包就发送失败了

ARP协议报头

既然是协议,那么就意味着ARP协议也是有报头的,那么这里对于ARP协议的报头进行理解:

在这里插入图片描述

如上图所示,展示的是ARP协议的报文信息,而前面的字节表示的是报头,后面的28字节ARP请求和应答表示的是有效载荷,那我们先说这个报头的信息

对于报头来说,头部有这个以太网的目的地址和源地址,ARP协议是属于mac帧的上层的,但是它又是属于数据链路层的

对于有效载荷来说,第一个参数是硬件类型,一般来说说的是网络类型,这里一般填写的也是以太网,一般写1就行,不过有时候也可能会有无线网的信息,第二个参数是协议类型,协议类型的意思就是要转化的地址,比如说这个ARP协议是要转换成mac地址,那么这里一般的固定写法就是写成0800,代表的是要把ip地址转换成mac地址,再说后面的类型,硬件地址长度和协议地址长度,硬件地址长度对于以太网来说是6字节,对于ip地址来说是4字节,这些字段的内容一般都是固定的,直接填写就好

重点是后面的这个op字段,这个op字段如果写的是1,表示的这是一个ARP请求,如果写的是2,表示的这是一个ARP应答,比如作为入口路由器来说,它作为发起者,它本身填写的就是1,而如果作为接收端要返回,那么写的就是2,后面是发送端的ip地址和以太网地址,还有目的端的以太网地址和ip地址

在首次发起请求的时候,是并不知道这个信息的,所以对于目标的这些不清楚的字段,一般用全f来进行表示

所以我们可以看到对于整个网络协议栈来说,是分为四层的,其中在最底层的叫做mac帧,mac帧的上层是ARP协议,这个ARP协议也是属于数据链路层,这俩是在一层的,所以在网络中进行路由的时候,路由表当中是会包含有主机相连的信息

ARP的周边话题

下面对于ARP的周边问题进行解释

ARP的触发机制?

数据包从a主机到b主机的这个过程,是需要到入口路由器的,然后入口路由器再传递到主机b,而这个ARP机制并不会重复去做,只有在ARP缓存失效的时候才会触发这个ARP机制

ping问题

实际上,对于每一个子网来说,都有自己的内网ip和内网对应的子网掩码,而在网络中是存在一条叫做ping的命令的,这个命令就是给目标主机发送一个报文,而主要目的是要收到目标主机的应答,它的作用主要是用来检测网络的连通性的报文,所以依据这个ping命令,是可以做到获取同一个网段的所有人的ip地址和mac地址的,换句话说,通过我的ip和子网掩码,可以得到我的网络号,根据我的网络号再拼接ip地址,就能ping所有的主机,得到所有主机的ip地址和mac地址

ARP应答的问题?

当ARP应答获取成功了之后,那么就会把mac地址和ip地址缓存起来,形成一个对应关系,而这个缓存是有时间限制的,太长的缓存信息就被丢弃了,那假设现在有一个主机的网卡被更换了呢?这就意味着mac地址也会被更换,所以ARP协议对于收到了新的ARP信息之后,会自动更新为最新的信息,这都没问题,但是会出现一个问题

假设现在有另外一个主机m,它接入到了这个网段当中,它有ipm和macm,那么假设未来它构建一个报文,经过内网转发,直接一直向主机a发送ARP的应答,那么对于路由器来说,就会构建出一个主机b和macm的映射关系,那这其实是一个比较恐怖的事,因为未来这个路由器向主机b发送的消息,都会推送到主机m上,而转到主机b上的信息因为mac地址不匹配,反而会被丢弃,那这个主机m就被叫做是一个中间人机器

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

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

相关文章

【Arthas案例】某应用依赖两个GAV-classifier不同的snakeyaml.jar,引起NoSuchMethodError

多个不同的GAV-classifier依赖冲突,引起NoSuchMethodError Maven依赖的三坐标体系GAV(G-groupId,A-artifactId,V-version) classifier通常用于区分从同一POM构建的具有不同内容的构件物(artifact)。它是可选的&#xf…

美食分享|基于Springboot和vue的地方美食分享网站系统设计与实现(源码+数据库+文档)

地方美食分享网站系统 目录 基于Springboot和vue的地方美食分享网站系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台: 2、后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介…

四信AI智能视频边缘分析盒+传感云平台,开启食品安全智慧监管新模式

方案背景 民以食为天,食品是人类生存必备的物质之一,食品生产安全关乎每个人的生命健康与社会可持续发展。在食品生产过程中,如何实现安全、健康生产是监管机构首要考虑因素,也是当今社会必须共同关注与努力的方向。 监管机构必…

数据库性能优化入门:数据库分片初探

数据库分片是一种用于提升数据库性能的架构模式,选择正确的分片策略和实施方式对于提高数据库性能和应对大规模数据挑战至关重要。 本文介绍了数据库分片的定义、原理和实施方法。文章解释了数据库分片是如何通过将数据切分、分散存储在多个服务器上来提升性能&…

【Kotlin】委托模式

1 委托模式简介 委托模式的类图结构如下。 对应的 Kotlin 代码如下。 fun main() {var baseImpl BaseImpl()var baseWrapper BaseWrapper(baseImpl)baseWrapper.myFun1() // 打印: BaseImpl, myFun1baseWrapper.myFun2() // 打印: BaseImpl, myFun2 }interface Base {fun my…

C语言第四十弹---预处理(下)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 预处理 1、#和## 1.1 #运算符 1.2、##运算符 2、命名约定 3、#undef 4、命令行定义 5、条件编译 6、头文件的包含 6.1、头文件被包含的方式 6.1.1、本地…

docker从入门到熟悉

一、什么是docker? Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助Docker,您可以以与管理应用程序相同的方式来管理基础架构。通过利用Docker的快速交付…

【数据结构】考研真题攻克与重点知识点剖析 - 第 4 篇:串

前言 本文基础知识部分来自于b站:分享笔记的好人儿的思维导图与王道考研课程,感谢大佬的开源精神,习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析,本人技术…

Pnpm + Turbo 搭建 Web Component Monorepo 组件库

技术选型 使用 Pnpm Turbo 搭建 Web Component Monorepo项目 stencil-component-ui 组件库 pnpm 作为包管理器Turborepo 作为构建系统Vitepress 管理文档 pnpm 技术 什么是 pnpm? 它有哪些优势? pnpm 跟 npm、yarn一样,都是用于管理Node包依赖的管…

硬件-1、体系架构

cpu 处理器 arm处理器的七种工作模式 arm寄存器 两张图是一样的,r0---r12是通用寄存器。其他寄存器可参考图一,cpu架构。 程序状态寄存器psr(cpsr/spsr) 程序异常处理 理解示例 当使用swi(软中断指令)指令…

Thinkphp5萤火商城B2C小程序源码

源码介绍 Thinkphp5萤火商城B2C小程序源码,是一款开源的电商系统,为中小企业提供最佳的新零售解决方案。采用稳定的MVC框架开发,执行效率、扩展性、稳定性值得信赖。 环境要求 Nginx/Apache/IIS PHP5.4 MySQL5.1 建议使用环境&#xff…

Alphabet考虑收购HubSpot:一个不太可能但未可知的大手笔动作

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

腾讯云轻量应用服务器是限制月流量吗?是的

腾讯云轻量应用服务器限制流量吗?是的,轻量应用服务器是限制月流量的。每台轻量应用服务器都是按套餐售卖点,套餐包括CPU内存、公网带宽、系统盘和月流量,腾讯云百科txybk.com以2核4G5M轻量应用服务器为例,限制500GB月…

selenium 遮罩层

之前写智联自动投简历 和boss自动投简历的时候 发现操作到上限之后就有个遮罩层,会在当前页面有个顶层得div 没办法获取下面的内容 # 假设遮罩层元素有一个特定的ID或者其他属性 没有id xpath 或者class 都可以mask_element WebDriverWait(driver, 10).until(EC.…

python 利用xpath 爬取一周天气

需求: 爬取 中国天气网指定城市一周的天气,以天津为例 实现: 1,先找到一周的数据位置。 divs html.xpath("//div[classhanml]") 2,再遍历每天。 trs div.xpath("./div/div[2]/table//tr[position…

UE4几个常用节点链接

UE4几个常用节点链接 2017-12-02 12:54 1. 流光材质(及uv平铺次数) 2. 跑九宫格 3.闪光3。1 粒子闪烁效果 4.图案重复5.平移扭曲 6.溶解 刀光的uv滚动图片源或采样节点属性里改成clamp无后期发光光晕anistropic 各向异性高光法线图 法线图叠加 blendangle orrectedNo…

STL中各类容器详细介绍

STL介绍 STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C程序库。它被容纳于C标准程序库(C Standard Library)中,是ANSI/ISO C标准中最新的也是极具革命…

11-LINUX--信号

一.信号的基本概念 信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。 与信号有关的系统调用在“signal.h”头文件中有声明 常见信号的值,及对应的功能说明: 信号的值在系统源码中的定义如下: 1. #define …

数学建模-最优包衣厚度终点判别法(主成分分析)

💞💞 前言 hello hello~ ,这里是viperrrrrrr~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#xff…

STL容器(3)

1,stack容器 1.1 基本概念 概念:stack是一种先进后出的数据结构,它只有一个出口 因此: 栈中只有顶端的元素才可以被使用,因此占不允许有遍历行为 栈中进入数据称为--入栈(push) 栈中弹出数据称为--出栈&#xff08…