【Linux】数据链路层

一、数据链路层引入

1.1 数据链路层的功能

       在网络层中,我们使用IP协议进行通信,需要进行跨网络转发到目标主机,本质上就是一个报文经历了无数个子网,而数据链路层就是解决在一个子网中如何传输报文的问题。

       数据链路层的功能是:用于两个设备(同一种数据链路节点)之间进行传递。

1.2 认识以太网

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

  • 例如以太网中的网线必须使用双绞线,传输速率有10M,100M,1000M等;
  • 以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网,无线LAN等。

1.3 交换机

1.3.1 什么是交换机 

       交换机是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。交换机工作于OSI参考模型的第二层,即数据链路层。交换机拥有一条高带宽的背部总线和内部交换矩阵,在同一时刻可进行多个端口对之间的数据传输。交换机的传输模式有全双工,半双工,全双工/半双工自适应。

1.3.2 交换机的工作原理

       当交换机收到数据时,它会检查它的目的MAC地址,然后把数据从目的主机所在的接口转发出去。交换机之所以能实现这一功能,是因为交换机内部有一个MAC地址表,MAC地址表记录了网络中所有MAC地址与该交换机各端口的对应信息。某一数据帧需要转发时,交换机根据该数据帧的目的MAC地址来查找MAC地址表,从而得到该地址对应的端口,即知道具有该MAC地址的设备是连接在交换机的哪个端口上,然后交换机把数据帧从该端口转发出去。

  1. 交换机根据收到数据帧中的源MAC地址建立该地址同交换机端口的映射,并将其写入MAC地址表中。
  2. 交换机将数据帧中的目的MAC地址同已建立的MAC地址表进行比较,以决定由哪个端口进行转发。
  3. 如数据帧中的目的MAC地址不在MAC地址表中,则向所有端口转发。这一过程称为泛洪(flood)。
  4. 广播帧和组播帧向所有的端口转发。

1.3.3 交换机的功能和作用

1.学习MAC地址

       交换机了解每一端口相连设备的MAC地址,并将地址同相应的端口映射起来,并存放在交换机缓存中的MAC地址表中。如果接收到新的端口回应,它可以学习新的MAC地址并记录好。

2、转发数据帧

       当一个数据帧的目的地址在MAC地址表中有映射时,它被转发到连接目的节点的端口而不是所有端口。消除回路 当交换机包括一个冗余回路时,以交换机通过生成树协议避免回路的产生,同时允许存在后备路径。

3、连接不同网络

       交换机除了能够连接同种类型的网络之外,还可以在不同类型的网络之间起到互连作用。如今许多交换机都能够提供支持快速以太网或FDDI等的高速连接端口,用于连接网络中的其它交换机或者为带宽占用量大的关键服务器提供附加带宽。

4、划分局域网

       交换机可以像网桥那样,将局域网分为多个冲突域,每个冲突域都是有独立的宽带,因此大大提高了局域网的带宽。

二、以太网的帧格式

       对于不同类型的MAC帧的格式是不一样的,类型为0800的是IP数据报;类型为0806的是ARP请求和应答报文;类型为8035的是RARP请求和应答报文。

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

三、MAC地址

3.1 认识MAC地址

  • MAC地址用来识别数据链路层中相连的节点
  • 长度为48位,即6个字节,一般使用16进制数字加上冒号形式来表示(例如:08:00:27:03:fb:19)
  • 在网卡出厂时就确定了,不能进行修改,MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会发生冲突,也有些网卡支持用户配置MAC地址)
  • 在日常生活中,我们有一些硬件中也是有自己的唯一的标号,这个标号可以帮助厂家来判断这个硬件是不是自己家生产的,也可以帮助厂家去定位自己产品的生产线。

3.2 对比理解MAC地址和IP地址

  • IP地址描述的是路途总体的起点和终点
  • MAC地址描述的是路途上的每一个区间的起点和终点

四、MTU

4.1 了解一下MTU

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

  • 以太网帧中的数据长度规定最小是46字节,最大是1500字节的,ARP数据报的长度不够46字节,要在后面补充填位
  • 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU
  • 如果一个数据报从以太网路由到拨号链路上,数据报长度大于拨号链路的MTU,则需要对数据报进行分片
  • 不同的数据链路层标准的MTU是不同的

4.2 MTU对IP协议的影响

       由于数据链路层MTU的限制,对于较大的IP数据报要进行分包,一旦有一个分片丢失,就要重新传输这些报文分片,占用带宽。

  1. 将较大的IP报文分成多个小包,并给多个小包打上标签
  2. 每一个小包的IP协议头的16位标识ID都是相同的
  3. 每一个小包的IP协议头的3位标志字段中,第二位置为0,表示允许分片;第三位表示结束标记(当前是否是最后一个小包,是的话置为1,不是的话置为0)
  4. 达到对端时再将这些小包按顺序重组,拼装到一起返回给传输层
  5. 一旦这些小包中任意一个小包丢失,接收端的重组就会失败,但是IP层不会负责重新传输数据

4.3 MTU对UDP协议的影响

       首先,我们先来回顾一下UDP协议:一旦UDP携带的数据超过1472(1500 - 20(IP首部)- 8(UDP首部)),那么就会在网络层中分成多个UDP数据报。

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

4.4 MTU对于TCP协议的影响

我们也来回顾一下TCP协议:

  • TCP的一个数据报也不能无限大,还是受限于MTU,TCP的单个数据报的最大消息长度称为MSS。
  • TCP在建立连接的过程中,通信双方会进行MSS协商。在三次握手的时候,会通过报文告诉对方自己的窗口大小,在选项中会携带MSS字段告诉对方自己的MSS。
  • 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度还是受限于数据链路层的MTU)
  • 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值
  • 然后双方得知对方的MSS值后,选择较小的作为最终MSS
  • MSS的值就是在TCP首部的40字节变长选项中

4.5 查看硬件地址和MTU

我们可以在服务器上使用ifconfig命令查看IP地址和MAC地址和MTU:

五、ARP协议

       当我们知道要发送报文的目标IP地址后,如何在数据链路层中发送到对应的主机中呢,因为我们并不知道其MAC地址,但是我们知道其IP地址,所以我们现在需要从IP地址中得知其MAC地址,这里就引入一个新的协议——ARP协议,ARP协议不仅仅是一个数据链路层协议,而是一个介于数据链路层和网络层之间的协议。

5.1 ARP协议的作用

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

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

5.2 ARP协议的工作流程

       源主机发出ARP请求(广播),询问IP地址是192.168.0.1的主机的硬件地址是多少,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播)

       目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据报给源主机,将自己的硬件地址填写在应答包中;如果发现其中的IP地址和本机不符,直接在数据链路层中丢弃

       每一台主机都维护一个ARP缓存表,可以使用arp -a命令查看,缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还有发ARP请求来获得目的主机的硬件地址。因为有可能在之后其IP地址对应的网卡进行更换。

5.3 ARP数据报的格式(应该不重要)

  • 注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其他类型的网络则有可能是必要的。
  • 硬件类型指的是链路层类型,数字1表示的是以太网
  • 协议类型指的是要转换的地址类型,0x0800表示的是IP地址
  • 硬件地址长度对于以太网地址为6个字节
  • 协议地址长度对于IP地址为4字节
  • op字段为1表示ARP请求,op字段为2表示ARP应答

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

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

相关文章

H5端接入萤石监控

官方文档 EZOPEN协议 下滑至-平台架构 web/h5端使用文档 <template><div :id"video-container${index}${index2}" class"w-full bg-black"></div> </template><script>export default {data() {return {EZVIZAToken:…

原型模式详细介绍和代码实现

&#x1f3af; 设计模式专栏&#xff0c;持续更新中&#xff0c; 欢迎订阅&#xff1a;JAVA实现设计模式 &#x1f6e0;️ 希望小伙伴们一键三连&#xff0c;有问题私信都会回复&#xff0c;或者在评论区直接发言 Java实现原型模式 介绍: 原型模式&#xff08;Prototype Patte…

视频监控平台中的视频处理核心技术揭秘:自动化监控与智能预警成为趋势?

随着科技的飞速发展&#xff0c;视频监控作为安全管理与信息获取的重要手段&#xff0c;其技术也在不断革新与优化。一个高效的视频监控平台&#xff0c;不仅依赖于先进的硬件设备&#xff0c;更离不开强大的视频处理技术作为支撑。在众多视频监控平台中&#xff0c;安防监控Ea…

Autosar(Davinci) --- 创建一个S/R类型的port(下)

前言: 前面章节我们讲解了S/R类型的Port如何创建,这一章节,我们着重讲一下生成的代码,以及我们如何添加代码让这些门与灯之间的关系产生连接。 一、CtSaDoor.c 在【Rte.c】的【IO_TASK】中我们可以看到,反复的判断Rte_Ev_Cyclic_IO_Task_0_200ms这个条件是否成立,当200…

数据分析-前期数据处理

今天找到一份关于医学体检的数据&#xff0c;在数据分析前期工作需要对数据做处理&#xff0c;在这里我们对原始数据做一些处理&#xff0c;将数据处理为可分析的标准数据。下一篇文章做数据的分析。数据想要获取的话可以到我的资源下载。1 数据读取 import pandas as pd data…

Vue3 父组件向子组件传值:异步数据处理的显示问题

一、问题场景 假设我们有一个父组件和一个子组件&#xff0c;父组件需要经过一些复杂的计算或者异步操作才能得到要传递给子组件的值。在数据还没有准备好的时候&#xff0c;子组件尝试获取并显示这个值&#xff0c;这就可能导致子组件没有数据可显示或者显示了一个不正确的初…

rust + bevy 实现小游戏 打包成wasm放在浏览器环境运行

游戏界面 代码地址 github WASM运行 rustup target install wasm32-unknown-unknown cargo install wasm-server-runner cargo run --target wasm32-unknown-unknowncargo install wasm-bindgen-cli cargo build --release --target wasm32-unknown-unknown wasm-bindgen --…

开源 TTS 模型「Fish Speech」1.4 发布;GameGen-O :生成开放世界游戏视频模型丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。 我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、…

Unity Apple Vision Pro 开发(十):通过图像识别锚定空间

XR 开发者社区链接&#xff1a; SpatialXR社区&#xff1a;完整课程、项目下载、项目孵化宣发、答疑、投融资、专属圈子 课程试看&#xff1a;https://www.bilibili.com/video/BV1mpH9eVErW 课程完整版&#xff0c;答疑仅社区成员可见&#xff0c;可以通过文章开头的链接加入…

产品探秘|开物——面向AI原生和云原生网络研究的首选科研平台

在当今高速发展的信息技术领域&#xff0c;特别是对于那些致力于前沿科技探索与实践的高校而言&#xff0c;拥有一款能够支持复杂网络业务研究与开发的平台至关重要。开物™数据网络开发平台&#xff08;Data Network Development Platform&#xff0c;简称DNDP&#xff09;&am…

Go协程及并发锁应用指南

概念 协程&#xff08;Goroutine&#xff09;是Go语言独有的并发体&#xff0c;是一种轻量级的线程&#xff0c;也被称为用户态线程。相对于传统的多线程编程&#xff0c;协程的优点在于更加轻量级&#xff0c;占用系统资源更少&#xff0c;切换上下文的速度更快&#xff0c;不…

ClickHouse的安装配置+DBeaver远程连接

1、clickhouse的下载&#xff1a; 先去clickhouse官网进行下载&#xff0c;继续往下翻找文档&#xff0c;将DBeaver也下载下来 下载地址&#xff1a;https://packages.clickhouse.com/rpm/stable/ 下载这个四个rpm包 2、上传rmp文件到Linux中 自己创建的一个clickhouse-ins…

ceph简介

ceph存储简要概述&#xff1a; 通过将文件分解成固定大小对象&#xff0c;然后存放于pool中&#xff0c;每个pool中 可包含多个pg&#xff0c;每个pg中又可包含多个osd 通过crush算法 最终数据落盘到osd中去。 一、ceph 删除osd 步骤1 修改osd数据操作权重值 ceph osd crush r…

【Qt】解决设置QPlainTextEdit控件的Tab为4个空格

前言 PyQt5 是一个用于创建跨平台桌面应用程序的 Python 绑定集合&#xff0c;它提供了对 Qt 应用程序框架的访问。用于开发具有图形用户界面&#xff08;GUI&#xff09;的应用程序&#xff0c;以及非GUI程序。PyQt5 使得 Python 开发者可以使用 Qt 的丰富功能来构建应用程序。…

kubernetes微服务基础及类型

目录 1 什么是微服务 2 微服务的类型 3 ipvs模式 ipvs模式配置方式 4 微服务类型详解 4.1 ClusterIP 4.2 ClusterIP中的特殊模式headless 4.3 nodeport 4.4 metalLB配合loadbalance实现发布IP 1 什么是微服务 用控制器来完成集群的工作负载&#xff0c;那么应用如何暴漏出去&…

PHP悦读随行一键借阅图书小程序

悦读随行&#xff1a;一键借阅图书馆小程序&#xff0c;让阅读与你同行 &#x1f4da; 封面&#xff1a;解锁阅读新方式 在这个信息爆炸的时代&#xff0c;我们总在寻找更高效、更便捷的方式来获取知识。今天&#xff0c;就让我们一起探索“悦读随行一键借阅图书馆小程序”&am…

shell脚本语法

shell脚本的变量 系统变量 系统变量是操作系统用来存储配置信息的变量&#xff0c;它们可以控制操作系统的行为和程序的运行环境。系统变量的种类和内容取决于操作系统的类型和版本。以下是一些常见的系统变量类别和它们可能包含的内容&#xff1a; 环境变量&#xff1a;这些…

深度学习-神经网络

文章目录 一、基本组成单元&#xff1a;神经元二、神经网络层三、偏置与权重四、激活函数1.激活函数的作用2.常见的激活函数1).Sigmoid2).Tanh函数3).ReLU函数 五、优点与缺点六、总结 神经网络&#xff08;Neural Network, NN&#xff09;是一种模拟人类大脑工作方式的计算模型…

0基础跟德姆(dom)一起学AI 数据处理和统计分析02-Linux进阶

* vi编辑器 * 权限相关 * 进程,网络相关 * 压缩和解压缩 * 软件安装-yum方式 * 其它命令 --- 1.过滤和管道命令 shell # grep命令, 用来过滤的 # 格式 grep [-n] 关键字 文件路径 # 从文件中过滤出要查找的内容, -n:表示带行号. # | 管道符, 即: 把前边命令的执行结果,…

QT程序的安装包制作教程

在Windows平台上开发完qt c桌面应用程序以后&#xff0c;需要制作一个安装包&#xff0c;方便生产和刻盘交货&#xff0c;本文记录相关流程。 目录 一、安装Qt Installer Framework 二、准备可执行程序 2.1 生成Release程序 2.2 完成依赖库拷贝 三、创建安装包程序 一、…