【Linux】数据链路层

news2025/1/12 3:49:58

一、数据链路层引入

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.coloradmin.cn/o/2131251.html

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

相关文章

通义灵码用户说:“人工编写测试用例需要数十分钟,通义灵码以毫秒级的速度生成测试代码,且准确率和覆盖率都令人满意”

通过一篇文章,详细跟大家分享一下我在使用通义灵码过程中的感受。 一、定义 通义灵码,是一个智能编码助手,它基于通义大模型,提供代码智能生成、研发智能问答能力。 在体验过程中有任何问题均可点击下面的连接前往了解和学习。 …

网络安全实训八(y0usef靶机渗透实例)

1 信息收集 1.1 扫描靶机IP 1.2 收集靶机的端口开放情况 1.3 探测靶机网站的目录 1.4 发现可疑网站 1.5 打开可疑网站 2 渗透 2.1 使用BP获取请求 2.2 使用工具403bypasser.py探测可疑网页 2.3 显示可以添加头信息X-Forwarded-For:localhost来访问 2.4 添加之后转发&#xff…

芯片设计项目管理:国内某知名芯片半导体企业引进 PowerProject,构建国产化项目管理平台

国内芯片设计行业发展快速,随着其行业技术能力的不断扩大,芯片设计涵盖的领域和内容愈加丰富,因此,对专业化的项目管理理念与思路提出了更高的要求。 近日,国内某知名芯片设计企业选择北京奥博思软件技术有限公司&…

jantic/DeOldify部署(图片上色)附带Dockerfile和镜像

1. 克隆代码到DeOldify git clone https://github.com/jantic/DeOldify.git DeOldifyDeOldify源码 2. 安装依赖 这里会安装python以及创建deoldify环境 cd DeOldify conda env create -f environment.yml(base) rootDESKTOP-1FOD6A8:~/DeOldify# conda env create -f environm…

Java开发安全及防护

目录 一、开发安全 二、XSS介绍及防范措施 2.1何为XSS 2.2XSS分类 2.3常用方法 三、SQL注入介绍及防范措施 3.1何为SQL注入 3.2常用方法 四、重放介绍及防范措施 4.1何为重放 4.2常用方法 一、开发安全 在学习安全之前,我们首先学习漏洞,知道漏…

JavaScript控制语句和函数的使用

文章目录 前言一、控制语句 1.if条件语句2.switch多分支语句3.for循环语句4.while循环语句5.do...while循环语句6.break 与 continue 关键字二、函数 1.函数的定义2.函数的调用总结 前言 JavaScript 的控制语句和函数的使用,基本上同理于 Java。该篇文章主要展示如何…

力扣之1783.大满贯数量

文章目录 1. 1783.大满贯数量1.1 题干1.2 建表1.3 题解1.4 结果截图 1. 1783.大满贯数量 1.1 题干 表:Players ----------------------- | Column Name | Type | ----------------------- | player_id | int | | player_name | varchar | ----------------------…

深度学习实战89-基于改造后的长短期记忆网络LSTM 的猪肉价格预测模型研究

大家好,我是微学AI,今天给大家介绍一下深度学习实战89-基于改造后的长短期记忆网络LSTM 的猪肉价格预测模型研究。本文围绕基于改造后的长短期记忆网络 LSTM 的猪肉价格预测模型展开研究。首先介绍项目背景,阐述进行猪肉价格预测的重要性。接着详细讲解改造后的 LSTM 模型原…

LibSVM介绍及使用

介绍 LibSVM 是一个广泛使用的开源库,用于支持向量机(SVM)的实现。它由台湾大学的 Chih-Chung Chang 和 Chih-Jen Lin 开发。LibSVM 提供了一种简单易用的接口,支持多种 SVM 变体,包括分类、回归和分布估计。以下是一些…

【数据库】MySQL-基础篇-事务

专栏文章索引:数据库 有问题可私聊:QQ:3375119339 目录 一、事务简介 二、事务操作 1.未控制事务 1.1 测试正常情况 1.2 测试异常情况 2.控制事务一 1.1 查看/设置事务提交方式 1.2 提交事务 1.3 回滚事务 3.控制事务二 1.1 开启事…

C++ namespace(域)

个人主页:Jason_from_China-CSDN博客 所属栏目:C系统性学习_Jason_from_China的博客-CSDN博客 namespace的价值 避免命名冲突:在大型项目或使用多个库的情况下,不同部分可能会定义相同名称的实体(如变量、函数、类等&a…

fpga系列 HDL:简化的FIFO实现

CODE 下面是一个简化的FIFO实现示例,基于Verilog HDL: module fifo (input wire clk, // 时钟信号input wire reset, // 异步复位信号input wire wr_en, // 写使能信号input wire rd_en, // 读使能…

CSS中的位置定位总结

文章目录 静态定位相对定位绝对定位固定定位 静态定位 静态定位(position:static)/默认的文档流布局 块级元素按照书写顺序从上往下依次排列行内/行内块元素按照书写顺序从左到右依次排列,一行放不下才换行文档流中的元素都是紧密排布的,没有大的空隙&…

【机器学习】9 ——最大熵模型的直观理解

系列文章目录 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前奏例子硬币垃圾邮件代码 前奏 【机器学习】6 ——最大熵模型 例子 硬币 假设我们有一枚硬币,可能是公平的,…

哪些软件可以监控电脑屏幕?四款优秀的屏幕电脑监控软件

你是否曾好奇,员工们在电脑前的忙碌究竟是在提高公司业绩,还是在成为“网上冲浪”高手? 或者,作为家长,你是否想知道孩子们的学习状态是如火如荼,还是在和游戏“斗智斗勇”?不管是办公还是家庭…

图纸加密软件哪个最好用?2024年好用的6款图纸加密软件分享!好用不踩雷!

某知名设计公司的年度发布会上,管理层突然被一个坏消息打断——公司的一份核心图纸被泄露到互联网上,导致重要的合作项目搁浅,直接损失数百万。 这样的事件不是个例,为此,很多企业意识打破图纸加密对保护企业知识产权和…

机械设计基础知识---材料硬度

一、定义 硬度,物理学专业术语,材料局部抵抗硬物压入其表面的能力称为硬度。固体对外界物体入侵的局部抵抗能力,是比较各种材料软硬的指标。由于规定了不同的测试方法,所以有不同的硬度标准。各种硬度标准的力学含义不同&#xf…

业务资源管理模式语言13

解决方案: 创建一个与“Resource”类相关的“Resource Delivery”类来控制资源交付的确认过程。因为交货是与交易相关的,“Resource”类与“Resource Delivery”类是“1 to 1”关系。如果你采用了子模式“Resource Measurement”或者采用了“ItemizeThe…

动手学深度学习(pytorch土堆)-04torchvision中数据集的使用

CIFAR10 CIFAR-10 数据集由 10 个类的 60000 张 32x32 彩色图像组成,每个类有 6000 张图像。有 50000 张训练图像和 10000 张测试图像。 数据集分为 5 个训练批次和 1 个测试批次,每个批次有 10000 张图像。测试批次包含每个类中随机选择的 1000 张图像…

Unity 给模型贴上照片

Unity将真实世界的照片贴图到模型上 原因 模拟仿真,直接使用照片肯定是效果最好的,省下做材质了 直接拖动即可 导入图片到Unity中将图片修改为Sprite模式直接将图片拖动到Scene面板的物体上即可 注意:是将图片拖动到Scene面板的物体上&a…