Linux网络之数据链路层协议

news2025/3/10 20:49:30

目录

数据链路层

MAC地址与IP地址

数据帧 

ARP协议 

NAT技术

代理服务器 

正向代理

反向代理 


        上期我们学习了网络层中的相关协议,为IP协议。IP协议通过报头中的目的IP地址告知了数据最终要传送的目的主机的IP地址,从而指引了数据在网络中的一步步传输,而数据链路层作为网络层的下一层,在数据的传输过程中也扮演着重要的角色,具体扮演了什么样的角色,这是我们本期要学习的内容。

数据链路层

        通过上图,我们可以知道,主机B将报文沿着每个路由器,最终发送到了主机C。上期在学习IP协议时,我们已经知道当主机B发送数据到路由器F时,路由器会解析出数据中的目的IP地址,然后在自己的路由表中与路由表中子网掩码进行按位与得到目的IP主机对应的网络号再与路由表的目的网络的网络号进行比对,如果比对成功,再去判断路由表的flag字段中是否含有G,如果含有则当前路由器将数据发送给数据的下一跳路由器,如果不含有则证明当前数据要发送的目的IP所对应的主机与当前路由器在同一局域网,所以可以直接由当前路由器进行转发。

        所以上节课我们也得出了结论,数据中的目的IP指引数据在网络节点中一步步进行转发,直到将数据发送到目标主机上,上节课我们也提出了数据在网络中由一个节点转发至与之直接相连的下一个节点(数据的下一跳节点)时,数据的转发是通过数据帧进行转发的,接下来我们就要向大家讲述,这个数据帧究竟是什么,以及这个数据帧是如何进行转发的。  

MAC地址与IP地址

          我们再以上节课的用户手机与抖音服务器的图进行举例。图示如下。      

        当用户手机上的数据随着网络中的一个个节点传送逐渐的靠近抖音服务器,看似是横跨整个网络的传输,其实也被分成了多个局域网的传输,上述的一个红圈就是一个局域网。为什么这么说呢?

        以上图为例,以手机相连的最近的用户路由器会给手机这个主机设备分配一个与自身网络号相同的IP地址,那么手机就与与它最近的用户路由器处于了同一局域网中,后续的用户路由器又被与它最近的运营商路由器分配了与运营商相同网络号的IP,从而用户路由器又与运营商路由器处于同一局域网中,这样依次每两个相邻节点之间都形成了一个局域网,最终与抖音服务器相连的路由器我们称之为入口路由器,入口路由器又为抖音服务器分配了一个与自身网络号相同的IP地址,这样入口路由器又和抖音服务器处于同一局域网中。以上讲述并不是很准确,在后续ARP协议和NAT技术讲解之后,我们会为大家进一步补充数据依次传输的细节。

        所以上述图示,就被分成了多个局域网中主机之间的通信(一个圈就是一个局域网)。局域网之间的的主机是可以直接进行通信的。

        局域网之间的通信图示如下。

        处于同一局域网中的主机之间是可以直接互相通信的,且通信的内容可以被局域网中的其它主机获取到。正如在教室里上课,老师点名了张三,但是教室里的同学都听到了老师点名张三的话一样。

        我们规定,在局域网中,主机之间通过mac帧进行数据传输。 

        好了讲了这么多也妹有说明MAC地址和IP地址是个啥呀,别急,以上只是铺垫。

        何为MAC地址?

        简单来说MAC地址就是一个物理地址,任何一台主机一生产出来,就会在网卡中标识出唯一的地址,全球唯一,在局域网中通信时,两台主机使用mac帧进行数据传输,而mac帧的报头中需要使用到MAC地址,一个为源主机MAC地址,一个为目的主机MAC地址。

        何为IP地址?

        IP地址不是主机一生产出来就有的,而是后期相关的厂商进行分配的,IP地址分为私有IP和公网IP,私有IP在一个局域网中一定是唯一的,而在多个局域网中可以重复,公网IP是全网唯一的。在跨网络通信时,一般要使用到IP地址,IP报头中要封装目的主机的公网IP,我们称之为目的IP,目的IP指引了数据在网络中传输的主体方向。

        有了以上所有知识的铺垫,我们再来讲讲数据帧的报文。 

数据帧 

        数据帧又称作MAC帧,简单来说就是处于数据链路层的报文,一般情况下mac帧的有效载荷为IP报文,也可能为ARP报文(后续会讲到)。数据帧的报文图示如下。

  • 目的地址(6字节):局域网中数据帧要发送的目标主机的MAC地址。
  • 源地址(6字节):局域网中发送数据帧的主机的MAC地址。
  • 类型(2字节):数据帧的有效载荷一般情况下有三种,一种是IP报文,一种是ARP报文(通过IP地址获取MAC地址),一种是RARP报文(通过MAC地址获取IP地址)。如果是IP报文则2字节类型的值填充为0800,如果是ARP报文,则2字节类型的值填充为0806,如果是RARP报文,则2字节类型填充为8035。
  • 数据(有效载荷):46~1500字节,对于IP报文,如果大于1500字节就要进行分片。对于ARP报文和RARP报文,一般情况下为28字节,所以要在报文后加上PAD18字节的填充字段,保证报文的长度为46字节。
  • CRC:2字节,用于差错检验,接收端通过CRC检验数据帧的传送是否出现了差错。

ARP协议 

                主机B发送了一个数据到主机C。其实简单的来说确实是这样,准确的说法就是从主机B开始,一直到数据传送到主机C,是通过了多个局域网,最终才将数据传送到了主机C。更准确的说,其实就是主机B发送了数据帧给路由器F,路由器F先判断数据帧的报头,发送数据帧报头的目的MAC地址是自己所以进行了数据帧的解包,然后通过解包后的IP报文的目的IP地址,将这个IP地址在自己的路由表中进行查询,首先将该IP依次和路由表中的子网进行按位与,得到的主机号与路由表中的目标网络的网路号进行比对,对比成功,然后再去判断flag字段的选项,发现为G,所以当前路由器就对IP报文进一步进行封装成MAC帧,然后发送给下一跳路由器,因为当前路由器和下一条路由器都处于同一局域网(为什么处于同一局域网,在后续讲NAT技术时会讲到),所以可以直接发送MAC帧,后续的转发都依靠上述原则,逐步分析MAC帧报头和IP报文的目的IP,直到数据帧发送到了入口路由器D,路由器D对发送来的数据帧报头进行分析,发现报头中的目的MAC地址就是自己,所以对MAC帧进行了解包,然后对解包之后的IP报文的目的IP进行了分析,与自己的路由表中的子网掩码按位与得到的网络号与自己路由表中的目的网络的网络号进行对比,发现对比成功,然后判断flag标志位,发现标志位为U没有G,所以路由器D就认为目的IP主机与自己在同一局域网内,所以就将IP报文重新封装成了MAC帧,然后将MAC帧直接在局域网内发送给目的IP对应的主机。

        好了,那么此时问题来了,封装MAC帧是需要自己的MAC地址与目的主机的MAC地址的,此时路由器D此时只知道目的IP所对应的主机的IP地址,那么如何通过IP地址获取到MAC地址呢?

        此时ARP协议就登场了。

        ARP报文如下图中的以太网ARP字段所示。

  • 硬件类型:硬件类型指的是链路层的网络类型,1为以太网。
  • 协议类型:要转换的地址的类型,要转为IP地址,则填充0800。
  • 硬件地址长度:对于以太网而言为6字节。
  • 协议地址长度:对于要转换的IP地址而言,协议地址长度为4字节。
  • op:为1表示ARP请求,为2表示为ARP应答。        
  • 后面四个就不必多说了,分别为源主机MAC地址,源主机IP地址,目的主机MAC地址,目的主机IP地址。

        我们以图示简单的来讲解一下,怎么样通过ARP协议,将目的主机的IP地址转为MAC地址。        

        ARP协议也是处于数据链路层的协议,在局域网中,刚开始主机A不知道主机B的地址,所以主机A会向主机B发送ARP请求,然后对ARP的请求报文进行封装,封装成了MAC帧,然后在局域网中进行广播,然后局域网的每个主机都会接收这个MAC帧,都以为是发送给自己的,然后对MAC帧进行解包,得到了ARP报文,然后每个主机的ARP协议层首先分析ARP报文的OP字段,发现为1表明是一个请求,然后分析目的IP字段,发现目的IP地址并不是自己主机的IP地址,所以都对该ARP请求报文进行了抛弃,只有主机B发现目的IP与自己的IP地址一致,所以就会接收ARP请求,对主机A做出ARP响应,此时主机B已经通过主机A发送给自己的ARP请求获知了,主机A的MAC地址和IP地址,响应ARP报文中,会将OP字段设置为2,表示这是一个ARP响应报文,同时填充相应的字段,然后封装成MAC帧传递给同一局域网中的主机A,此时局域网中的其它主机也会接收到这个MAC帧,但是当前的MAC帧并不是以广播的形式进行传送的,它有明确的源MAC地址和目的MAC地址,所以当每个局域网中的主机分析到MAC帧的报头的目的MAC地址并不是自己时,就会直接在接收到MAC帧时进行抛弃,而不是解包成ARP报文发送到ARP协议层进行分析之后再抛弃,只有主机A发现MAC帧的目的地址是自己的主机MAC地址,所以会对MAC帧进行解包,解包之后的ARP相应报文会被发送至主机A的ARP协议层,然后会分析ARP协议,发现OP字段为2,表明这是一个响应报文,然后分析得到了源MAC地址,这个源MAC地址就是主机B的地址,所以此时主机A就通过主机B的IP地址得到了主机B的MAC地址。

        所以此时也就解释了为什么上图中的路由器D可以通过主机C的IP地址获知主机C的MAC地址从而向主机C发送MAC帧。与此同时,在上图由主机B到主机C,主机B可以通过路由器F给自己分配IP地址,因为DHCP协议,主机B也会获知路由器F的IP地址,所以也会通过类似的方法获知路由器的MAC地址,从而实现局域网MAC帧的传输。往后的路由器F和路由器G,也是会通过类似的方法实现MAC帧的传送,需要注意的是,一般情况下,与主机相连的我们称之为NAT路由器,不与主机相连的我们称之为ISP路由器。NAT路由器的LAN口用于给局域网中的主机分配私有IP,而WAN口会被ISP路由器分配公网IP,而ISP路由器的LAN口和WAN口一般情况下都为公网IP,所以NAT路由器的WAN口公网IP和ISP的LAN口的公网IP一般都是ISP分配的公网IP,切这两个公网IP处于同一局域网,可以发送MAC帧传送数据,WAN口的IP又会被下一个ISP路由器分配处于同一局域网的公网IP,直到到达了最后一个入口路由器,入口路由器一般情况下也为NAT路由器,NAT路由器的WAN口公网IP是上一跳ISP路由器分配的公网IP地址,LAN口是一个私有IP地址,用于为局域网主机分配IP地址。

NAT技术

        在学习网络层的IP协议时,我们知道了IP协议的地址是有限的,所以为了解决IP地址不足的问题,我们引入了一个NAT技术,何为NAT技术呢?     

        如上图,主机A要发送数据帧到服务器。如果主机A发送数据时将数据帧中的IP报文的源IP写成了自己的私有IP,那么将来服务器接收到了数据帧对数据帧进行解包之后,得到了IP报文,发现IP报文的源IP是一个私有IP,那么此时服务器就蒙了,因为私有IP是可以重复的,那么此时服务器就不知道是给哪个子网的这个私有IP对应的主机发送响应MAC帧。

        基于以上问题,我们产生了NAT技术,因为我们上文已经说到了,NAT路由器的WAN接口是一个由ISP路由器分配的公网IP地址,也就是全网唯一的,所以说,当NAT路由器的LAN口给客户端A主机分配了子网IP之后,客户端主机A先将MAC帧发送至NAT路由器,然后NAT路由器对MAC帧进行解包,然后将解包之后的IP报文的源IP替换成了自己的的WAN口公网IP,因为公网IP是唯一的,所以当服务器发送响应MAC帧时会将响应MAC帧的有效载荷IP报文的目的IP地址填充成NAT路由器的WAN口公网IP。

        说的挺好,将源IP替换成了自己的WAN口的公网IP,那么将来服务器将响应MAC帧通过NAT路由器的WAN口公网IP发送至NAT路由器时,NAT路由器怎样将收到的MAC真发送给局域网中的客户端A呢?这就又引申了一个概念,就是在NAT路由器将客户端A的私有IP替换成自己的公有IP时,会生成一个对照表,大致图示如下。

        即将来NAT路由器接收到响应MAC帧时,会将响应的MAC帧通过对照表发送给局域网中的私有IP对应的主机。

        那么如果上图中的客户端主机A和客户端主机B都向服务器发送了MAC帧,那么经过NAT路由器将私有IP转为公网IP之后,就会有两个对照的记录,那么将来NAT路由器接收到响应MAC帧时,究竟发送给哪一个局域网中的主机呢,此时又诞生了NAPT技术,即就是给私有IP和公有IP都带上了端口号,这样就产生了一一对应的关系,简单图示如下。

代理服务器 

正向代理

        正如大学里的校园网,一般情况下,当学生在使用互联网时访问的其实并不是访问的软件对应的企业服务器,而是校园内的代理服务器。

        

        为什么要有校园代理服务器呢,主要有两个原因?

  1. 校园内可能同时有大量相同的请求服务,比如都同时观看爱奇艺体育中的球赛,所以如果没有代理服务器,那么此时就会有大量相同功能的请求发送,需要多次频繁的访问外网。但是有了代理服务器之后,代理服务器进行分析,发现大量的请求都是为了获取相同的一个资源,所以代理服务器就会发送相同的请求,将获取的球赛资源缓存到自己代理服务器中,多个主机请求相同的资源时,直接就可以从代理服务器中获取相应的资源。
  2. 处于安全性考虑,如果没有代理服务器,那么此时就相当于校园内的主机可以直接与外部的服务器进行数据交换,那么如果有了恶意分子,恶意分子就直接可以攻击校园内的主机,而校园内的主机大部分的拥有者都是学生,并不具备对于恶意攻击的访问能力。所有有了代理服务器之后,与外网服务器之间直接进行交互的就是代理服务器,代理服务器有专业的认识进行管理,可以有效的对不法攻击进行防范。 

        给发送端,建立的代理服务器,我们称为正向代理。 

反向代理 

        反向代理就类似于给企业端配置了一个企业端代理服务器。

        为什么要在企业端配置这样一个代理服务器呢?主要原因还是两个。

        1.我们知道主机与服务器之间的通信是要贯穿TCP/IP网络协议栈的,特别是TCP协议为了保证可靠传输要建立连接,那么如果有多个客户主机去访问了同一企业服务器,那么当企业服务器就会获取大量的连接,而维护连接又要创建大量的数据结构,所以如果大量的客户主机访问了同一企业服务器,就会导致这个企业服务器创建大量的维护连接的数据结构,从而增加了服务器的负载。有了企业代理服务器之后,代理服务器会合理的对用户的请求进行分配,从而不会导致某一个企业服务器的负载过大,我们称之为负载均衡。

        图示如下。

        2.同样在企业端配置企业代理服务器是为了保护企业服务器的安全,因为有了企业代理服务器,客户主机不会与企业服务器直接进行通信,而是会与企业代理服务器进行交互,企业代理服务器会对每个客户请求进行甄别,能够有效的组织非法客户的恶意请求,这样就保证了企业服务器的安全,有人会说难道不能为企业服务器配置一些有效的防护策略吗,当然有,但是加上企业代理服务器之后安全级别会更高。

        在接收端我们配置了相应的代理服务器,我们称之为反向代理。 

        以上便是数据链路层的所有重点内容。

        本期内容到此结束^_^

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

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

相关文章

如何使用 PyInstaller 打包 Python 脚本?一看就懂的完整教程!

PyInstaller 打包指令教程 1. 写在前面 通常,在用 Python 编写完一个脚本后,需要将它部署并集成到一个更大的项目中。常见的集成方式有以下几种: 使用 PyInstaller 打包。使用 Docker 打包。将 Python 嵌入到 C 代码中,并封装成…

解锁DeepSpeek-R1大模型微调:从训练到部署,打造定制化AI会话系统

目录 1. 前言 2.大模型微调概念简述 2.1. 按学习范式分类 2.2. 按参数更新范围分类 2.3. 大模型微调框架简介 3. DeepSpeek R1大模型微调实战 3.1.LLaMA-Factory基础环境安装 3.1大模型下载 3.2. 大模型训练 3.3. 大模型部署 3.4. 微调大模型融合基于SpirngBootVue2…

Hadoop、Hive、Spark的关系

Part1:Hadoop、Hive、Spark关系概览 1、MapReduce on Hadoop 和spark都是数据计算框架,一般认为spark的速度比MR快2-3倍。 2、mapreduce是数据计算的过程,map将一个任务分成多个小任务,reduce的部分将结果汇总之后返回。 3、HIv…

基于VMware虚拟机的Ubuntu22.04系统安装和配置(新手保姆级教程)

文章目录 一、前期准备1. 硬件要求2. 软件下载2-1. 下载虚拟机运行软件 二、安装虚拟机三、创建 Ubuntu 系统虚拟机四、Ubuntu 系统安装过程的配置五、更换国内镜像源六、设置静态 IP七、安装常用软件1. 编译工具2. 代码管理工具3. 安装代码编辑软件(VIM&#xff09…

基于SpringBoot的历史馆藏系统设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

蓝桥杯[每日两题] 真题:好数 神奇闹钟 (java版)

题目一:好数 题目描述 一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位 )上的数字是奇数,偶数位(十位、千位、十万位 )上的数字是偶数,我们就称之为“好数”。给定…

基于BMO磁性细菌优化的WSN网络最优节点部署算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 无线传感器网络(Wireless Sensor Network, WSN)由大量分布式传感器节点组成,用于监测物理或环境状况。节点部署是 WSN 的关键问…

学习笔记:Python网络编程初探之基本概念(一)

一、网络目的 让你设备上的数据和其他设备上进行共享,使用网络能够把多方链接在一起,然后可以进行数据传递。 网络编程就是,让在不同的电脑上的软件能够进行数据传递,即进程之间的通信。 二、IP地址的作用 用来标记唯一一台电脑…

Laya中runtime的用法

文章目录 0、环境:2.x版本1、runtime是什么2、使用实例情景需要做 3、script组件模式 0、环境:2.x版本 1、runtime是什么 简单来说,如果创建了一个scene,加了runtime和没加runtime的区别就是: 没加runtime&#xff…

OpenCV计算摄影学(16)调整图像光照效果函数illuminationChange()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 对选定区域内的梯度场应用适当的非线性变换,然后通过泊松求解器重新积分,可以局部修改图像的表观照明。 cv::illuminati…

【爬虫】开篇词

一、网络爬虫概述 二、网络爬虫的应用场景 三、爬虫的痛点 四、需要掌握哪些技术? 在这个信息爆炸的时代,如何高效地获取和处理海量数据成为一项核心技能。无论是数据分析、商业情报、学术研究,还是人工智能训练,网络爬虫&…

力扣-股票买入问题

dp dp元素代表最大利润 f[j][1] 代表第 j 次交易后持有股票的最大利润。在初始状态,持有股票意味着你花钱买入了股票,此时的利润应该是负数(扣除了买入股票的成本),而不是 0。所以,把 f[j][1] 初始化为负…

微服务保护:Sentinel

home | Sentinelhttps://sentinelguard.io/zh-cn/ 微服务保护的方案有很多,比如: 请求限流 线程隔离 服务熔断 服务故障最重要原因,就是并发太高!解决了这个问题,就能避免大部分故障。当然,接口的并发…

蓝桥杯刷题周计划(第二周)

目录 前言题目一题目代码题解分析 题目二题目代码题解分析 题目三题目代码题解分析 题目四题目代码题解分析 题目五题目代码题解分析 题目六题目代码题解分析 题目七题目代码题解分析 题目八题目题解分析 题目九题目代码题解分析 题目十题目代码题解分析 题目十一题目代码题解分…

【C++】C++11部分

目录 一、列表初始化 1.1 {}初始化 1.2 initializer_list 二、变量类型推导 2.1 auto 2.2 decltype 三、STL中一些变化 3.1 新增容器 四、lambda表达式 4.1 C98中的一个例子 4.2 lambda表达式 4.3 函数对象与lambda表达式 五、包装器 5.1 function包装器 5.2 fu…

【分布式】聊聊分布式id实现方案和生产经验

对于分布式Id来说,在面试过程中也是高频面试题,所以主要针对分布式id实现方案进行详细分析下。 应用场景 对于无论是单机还是分布式系统来说,对于很多场景需要全局唯一ID, 数据库id唯一性日志traceId 可以方便找到日志链&#…

c#面试题整理6

1.String类能否被继承,为什么 可以看到String类的修饰符是sealed,即是密封类,故不可被继承 2.一个对象的方法是否只能由一个线程访问 不是,但是可通过同步机制,确保同一个时间只有一个线程访问 3.计算2*8&#xff…

简洁实用的3个免费wordpress主题

高端大气动态炫酷的免费企业官网wordpress主题 非常简洁的免费wordpress主题,安装简单、设置简单,几分钟就可以搭建好一个wordpress网站。 经典风格的免费wordpress主题 免费下载 https://www.fuyefa.com/wordpress

Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露

一:背景 1. 讲故事 前面跟大家分享过一篇 C# 调用 C代码引发非托管内存泄露 的文章,这是一个故意引发的正向泄露,这一篇我们从逆向的角度去洞察引发泄露的祸根代码,这东西如果在 windows 上还是很好处理的,很多人知道…

【HDLbits--counter】

HDLbits--counter 在IC设计中&#xff0c;counter是十分普遍和重要的设计内容&#xff1b; 题目&#xff1a;基础计数器 module top_module (input clk,input reset,output [9:0] q);always (posedge clk) beginif(reset) beginq < 0;end else beginif(q999) beginq < 0…