Linux【网络】数据链路层

news2024/11/23 18:01:12

Linux【网络】数据链路层

  • 数据链路层
  • 以太网帧格式
  • 对比理解MAC地址和IP地址
  • ARP协议--地址解析协议
    • ARP工作流程
      • ARP请求
      • ARP应答
  • 其他协议
    • DNS-域名解析协议
    • ICMP--网络层协议
    • NAT技术
      • NAPT
    • 正向代理与反向代理

数据链路层

数据链路层用于两个设备,同一数据链路节点之间的信息传输

链路:一个节点到另一个相邻节点的一段物理线路,中间没有任何其他节点。链路由传输介质和物理设备组成,传输介质主要有双绞线、光纤、微波。在两个计算机进行通信的时候,链路只是一条完整通信路径的一部分

数据链路(Data Link):把实现控制数据传输协议的硬件和软件加到链路上就构成了数据链路。

帧(frame):数据链路层把网络层交付的数据构成帧发送到链路上,把接收到的帧取出来,交给上层的网络层

IP的核心作用是提供一种跨网络传输数据的能力。数据在使用IP进行转发时,一定先要把数据交给直接相连的下一跳主机,下一次跳到哪里,由IP层决定,而怎么跳,就是数据链路层决定了。
数据链路层:解决如何从主机到路由器这个局域网中的通信问题

以太网帧格式

在这里插入图片描述
解包:MAC帧采用的分离报头的方案是定长报头,报头一共14字节,
最后两个字节包含了一个类型字段,
如果是0800,表明报文是IP数据报,
如果是0806,表明是ARP请求/应答,
如果是8035,表明是RARP请求/应答。
MAC帧对传输的数据有要求,不能太长,同时也要求数据不能太短,如果太短后面就会有PAD填充。
前面两个字段分别是目的MAC地址和源MAC地址,长度是48位,6字节,用来让主机区分报文是否是传给自己的,一般用冒号16进制的形式来表示(例如:08:00:27:03:fb:19),MAC地址出厂就确定了,不能更改。后面还会有一个CRC校验。
交付:根据2字节的帧类型

对比理解MAC地址和IP地址

实际数据在路由过程中会存在两套地址,一套是源IP地址和目的IP地址,还有一套是源MAC地址和目的MAC地址。

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

数据在路由过程中,源IP地址和目的IP地址可以理解成是不会变化的,而数据每进行一跳后其源MAC地址和目的MAC地址都会变化。

ARP协议–地址解析协议

ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议
ARP协议建立了主机 IP地址 和 MAC地址 的映射关系.

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

协议格式如下
在这里插入图片描述
在这里插入图片描述

  • 硬件类型指链路层的网络类型,1为以太网。
  • 协议类型指要转换的地址类型,0x0800为IP地址。
  • 硬件地址长度对于以太网地址为6字节,因为MAC地址是48位的。
  • 协议地址长度对于IP地址为4字节,因为IP地址是32位的。
  • op字段为1表示ARP请求,op字段为2表示ARP应答。

从ARP的数据格式可以看出,ARP是MAC帧协议的上层协议,ARP数据格式中的前3个字段对应的就是以太网首部,由于ARP数据包的长度不足46字节,因此ARP数据包在封装成为MAC帧时还需要补上18字节的填充字段

ARP工作流程

路由器A要将数据转发给同一局域网当中的主机F,前提是路由器A必须知道主机F的MAC地址,而现在路由器A只知道主机F的IP地址,因此路由器A现在需要向主机F发起ARP请求,然后等待主机F发送ARP应答得知主机F的MAC地址

ARP请求

第一步:构建ARP请求
第二步:封装成MAC帧
第三步:广播到局域网中
第四步:所有主机解包,往ARP层交付
在这里插入图片描述
MAC帧封装完毕后,路由器A就可以将封装好的MAC帧以广播的方式发送到局域网当中了

  1. 这个MAC帧是以广播的方式发出的,局域网当中的每台主机收到这个MAC帧后,都会对该MAC帧进行解包。当这些主机识别到MAC帧当中的帧类型字段为0806后,便知道这是一个ARP的请求或应答的数据包,于是会将MAC帧的有效载荷向上交付给ARP层。
  2. 当ARP层收到这个数据包后,先判断ARP数据包当中的op字段,判定这是一个ARP请求,然后再提取出ARP数据包当中的目的IP地址字段。
  3. 局域网当中的所有主机都会将该数据包交给自己的ARP层,但最终只有主机F发现ARP数据包当中的目的IP地址与自己相同,因此只有主机F会对该ARP请求进行应答,而局域网当中的其他主机在识别到ARP数据包当中的目的IP地址与自己不匹配后,就会直接将这个ARP请求报文丢弃。

注意:其他主机收到MAC帧后,先判断op类型为请求,交付给ARP层之后再去判断IP是否符合,不符合的报文是在ARP层丢弃的

ARP应答

1.构建ARP应答包
2.发送到局域网中
3.所有主机解包判断
4.不符合的在MAC层丢弃
在这里插入图片描述

  1. 局域网当中的所有主机都能收到这个MAC帧,但局域网当中的不相干的主机解包后,发现该MAC帧对应的以太网目的地址与自己不同后,就会将该MAC帧丢弃,而不会交付给上层ARP层,最终只有路由器A会将解包后MAC帧的有效载荷向上交付给自己的ARP层
  2. 当路由器A的ARP层收到这个数据包后,先看ARP的op字段,发现是一个ARP应答,然后就会提取出ARP数据包当中的发送端以太网的地址和发送端IP地址,此时路由器A就拿到了主机F的MAC地址。

注意:局域网当中其他不相干的主机在收到这个ARP应答报文后,直接在MAC帧层就丢弃了,并没有将其交付给自己的ARP层

任何主机,无论收到ARP请求还是应答,都是先判断op字段

其他协议

DNS-域名解析协议

在这里插入图片描述

DNS是一整套从域名映射到IP的系统,网络真实的通信过程其实和域名是没有关系的,能够用域名上网,一定是把域名转换成了IP

DNS底层使用的是UDP协议,DNS是通过向域名解析服务器发起UDP请求,解析自己DNS,也就是说浏览器不考虑缓存时,要做的第一件事就是域名解析

DNS系统是一个组织的系统管理机构,维护系统内的每个主机的IP和主机名的对应关系。如果新计算机接入网络,将这个信息注册到数据库中。当用户输入域名的时候, 会自动查询DNS服务器, 由DNS服务器检索数据库,得到对应的IP地址。

以www.baidu.com为例:
com:一级域名,一般以.com结尾的表示是一个企业域名,表示该公司是一家盈利性的商业公司。同级的还有.net网提供商。.org表示开源组织或非营利性组织,比如boost.org
baidu:二级域名,一般代表公司相关名称 www是一种习惯性写法,写不写都可以访问

总结:当我们使用浏览器输入域名的时候,先把域名转化为ip地址,然后再使用ip+端口号使用特定协议向服务器发起请求

ICMP–网络层协议

一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通; 但是IP协议并不提供可靠传输. 如果丢包了, IP协议并不能通知传输层是否丢包以及丢包的原因

ICMP功能
ICMP正是提供这种功能的协议;
ICMP主要功能包括:

  • 确认IP包是否成功到达目标地址.
  • 通知在发送过程中IP包被丢弃的原因.
  • ICMP也是基于IP协议工作的. 但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议;
  • ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6

ping命令的底层就是通过ICMP来实现的:

  1. 此处 ping 的是域名, 而不是url!,一个域名可以通过DNS解析成IP地址;

  2. ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期);

  3. ping命令会先发送一个 ICMP Echo Request给对端;

  4. 对端接收到之后, 会返回一个ICMP Echo Reply;

  5. ping命令是不关注端口的,因为ping命令是基于ICMP, 是在网络层,跳过了传输层;而端口号, 是传输层的内容。在ICMP中根本就不关注端口号这样的信息

NAT技术

NAT技术背景
之前我们讨论了, IPv4协议中, IP地址数量不充足的问题
NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能;
NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法

NAT IP转换过程
在这里插入图片描述
NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37
NAT路由器收到外部的数据时, 又会把目标IP从202.244.174.37替换回10.0.0.10
在NAT路由器内部, 有一张自动生成的, 用于地址转换的表
当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系

NAPT

如果局域网内, 有多个主机都访问同一个外网服务器, 那么对于服务器返回的数据中, 目的IP都是相同的. 那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?
这时候NAPT来解决这个问题了. 使用IP+port来建立这个关联关系<k,v>
把每一台主机看成一个客户端进程,目标主机看成服务器进程
在这里插入图片描述
客户端主机进程的ip不同,端口号相同,在经过NAT路由器的时候,NAT路由器会将端口号替换为未被使用的端口号

这种关联关系也是由NAT路由器自动维护的. 例如在TCP的情况下, 建立连接时, 就会生成这个表项; 在断开连接后, 就会删除这个表项

NAT技术的缺陷
由于NAT依赖这个转换表, 所以有诸多限制
无法从NAT外部向内部服务器建立连接
装换表的生成和销毁都需要额外开销
通信过程中一旦NAT设备异常, 所有的TCP连接也都会断开

正向代理与反向代理

正向代理:正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从目标服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转发请求,将获得的内容返回给客户端

  • 正向代理需要主动设置代理服务器ip或者域名进行访问,由设置的服务器ip或者域名去访问内容并返回
  • 正向代理是代理客户端,为客户端收发请求,使真实客户端对服务器不可见

反向代理
反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。

  • 正向代理需要配置代理服务器,而反向代理不需要做任何设置。

  • 反向代理是代理服务器,为服务器收发请求,使真实服务器对客户端不可见

  • 负载均衡策略:客户端可能会发送大量的数据,反向代理服务器需要合理的将数据分配给服务器集群。

  • 作为反向代理的服务器,需要配置较高,充当软件服务的可以是Nginx,当反向代理服务器中的服务器集群将请求处理完,可以通过代理服务器将结果发回给客户端,也可以直接发回给客户端。

NAT和代理服务器的区别:

  1. 从应用层面上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题。代理服务器则是更贴近具体应用, 比如通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器;

  2. 从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换,代理服务器往往工作在应用层;

  3. 从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网。

  4. 从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上

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

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

相关文章

DPDK程序结合网络助手接收数据

网络调试工具&#xff1a;https://download.csdn.net/download/hdsHDS6/88390999?spm1001.2014.3001.5503 DPDK代码&#xff1a; #include <stdio.h> #include <string.h> #include <rte_eal.h> #include <rte_ethdev.h> #include <rte_ip.h> …

[管理与领导-112]:IT人看清职场中的隐性规则 - 9 - 付出与回报的关系:先付出,后回报,不行就止损,这才是职场价值交换的本质

目录 一、职场中付出与回报的先后关系 二、付出与回报四象限模型 三、职场专业性的本质 一、职场中付出与回报的先后关系 在职场中&#xff0c;个人的付出和回报之间存在着先后关系。以下是按照先后关系划分的四种类型&#xff1a; 先付出后回报型&#xff0c;不回报&#…

对进程的初步认识以及fork()函数的理解

什么是进程 进程是什么呢&#xff1f;其实解释的通俗浅显一点就是我们运行到内存的程序。我们知道运行一个磁盘里的程序时&#xff0c;会将该程序先加载&#xff08;将磁盘的数据拷贝&#xff09;到内存当中&#xff0c;因此该程序就可以称为一个进程。首先我们以Windows操作…

特斯拉被称为自动驾驶领域的苹果

特斯拉的自动驾驶技术无疑是居于世界上领先地位的,有人形容特斯拉是自动驾驶汽车领域的苹果。特斯拉发布的Tesla Vision系统只配备了摄像头,不依靠雷达。 这并不是特斯拉唯一和其它对手不同的地方,他们的整个战略都是基于车队和销售产品,而其大多数竞争对手则销售自…

ENVI报错:SaveRasterFile failed:IDLnaMetadata Error

ENVI报错&#xff1a;SaveRasterFile failed:IDLnaMetadata Error 问题描述 ENVI在另存为为TIFF文件时&#xff0c;报了下面这个错误信息 原因 输出路径或者是存放影像的路径里面包含中文&#xff0c;不能包含中文 解决方案 把所有相关路径中的中文改成英文

【第十四届蓝桥杯单片机组】学习笔记(5):PCF8591( AD/DA芯片)

目录 概述功能字芯片寻址控制字A/D转换单通道读取多通道读取 概述 芯片通信方式&#xff1a;IICAIN0&#xff0c;AIN1&#xff0c;AIN2&#xff0c;AIN3&#xff1a;(Analog signal In) 模拟信号输入AOUT&#xff1a;模拟信号输出 功能字 芯片寻址 这是在比赛提供的PCF8591芯…

考虑源荷不确定性的热电联供微网优化(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

华为云云耀云服务器L实例评测|云耀云服务器L实例部署Gogs服务器

华为云云耀云服务器L实例评测&#xff5c;云耀云服务器L实例部署Gogs服务器 一、云耀云服务器L实例介绍1.1 云耀云服务器L实例简介1.2 云耀云服务器L实例特点 二、Gogs介绍2.1 Gogs简介2.2 Gogs特点 三、本次实践介绍3.1 本次实践简介3.2 本次环境规划 四、远程登录华为云云耀云…

【Spring】IoC 与 DI

IoC 与 DI 1. IoC2. DI 1. IoC IoC (Inversion of Control): 控制反转控制反转: 表示应用程序的控制权&#xff08;对象的生命周期&#xff09;由应用程序自身的代码反转到容器或框架中。应用程序的组件不再直接控制其依赖项的创建和生命周期管理&#xff0c;而是委托给容器。…

微服务moleculer03

1. Moleculer 目前支持SQLite&#xff0c;MySQL&#xff0c;MariaDB&#xff0c;PostgreSQL&#xff0c;MSSQL等数据库&#xff0c;这里以mysql为例 2. package.json 增加mysql依赖 "mysql2": "^2.3.3", "sequelize": "^6.21.3", &q…

Windows下载AOSP

关于repo repo只是谷歌做的&#xff0c;方便下载安卓源码的工具&#xff0c;本质上是对下载清单进行批量处理&#xff0c;然后使用git克隆。 在windows上下载源码只需要自己处理即可。 具体做法 首先使用git克隆安卓源码清单 git clone https://mirrors.tuna.tsinghua.edu.…

1.Tensor For Beginner - Motivation

为何要研究张量&#xff1f; --主要原因是几何。 Tensors Geometry 了解张量后&#xff0c;可深入了解几何的工作原理 几何的一个例子&#xff1a;爱因斯坦广义相对论中的时空几何 时空是如何弯曲的&#xff0c;宇宙是如何膨胀的。 要从数学上理解这两个问题&am…

归并排序及其非递归实现

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 归并排序递归实现 归并排序非递归实现 归并排序递归实现 图示&#xff1a; 代码&#xff1a; 先分再归并&#xff0c;像是后序一般。 //归并排序 void MergeSort(int* arr, int left, int right) {int* temp (int…

Pikachu靶场——越权访问漏洞(over permission)

文章目录 1. over permission1.1 水平越权1.1.1 源代码分析1.1.2 漏洞防御 1.2 垂直提权1.2.1 源代码分析1.2.2 漏洞防御 1.3 越权访问漏洞防御 1. over permission 漏洞描述 越权访问&#xff08;Broken Access Control&#xff0c;BAC&#xff09;&#xff0c;指应用在检查…

用python表格初级尝试

Excel&#xff0c;我的野心 当我输入3,2 就表示在第3行第2列。的单元格输入数据input输入表头 &#xff08;input内除了/&#xff0c;空格 回车 标点符号等 全部作为单元格分隔符&#xff09;由我设置input输入的是行or列 给选项 1. 行 2. 列默认回车或没输入值是列由我设置起…

SEO效果又慢又差,为什么还会有SEO从业者?

“SEO效果又慢又差&#xff0c;这么还会有SEO从业者&#xff1f;”这句话是我今天在某Q群里看到的&#xff0c;其实这个问题我之前也有写过一篇《你问我&#xff0c;为什么还有人做SEO&#xff1f;》。我文中提到过因为搜索无处不在&#xff0c;有搜索后&#xff0c;搜索引擎就…

JavaScript:从入门到进阶的旅程

JavaScript是一种广泛使用的编程语言&#xff0c;为网页和应用程序提供了交互性和动态性。从初学者到资深开发者&#xff0c;JavaScript都是一项值得掌握的技能。在本文中&#xff0c;我们将探讨JavaScript的基础知识&#xff0c;以及一些进阶的概念和技巧。 一、JavaScript简…

Linux系统编程系列之线程

一、什么是线程 线程&#xff08;Thread&#xff09;是计算机中的基本执行单元&#xff0c;是操作系统调度的最小单位。线程是进程内的一个独立执行流程&#xff0c;一个进程可以包含多个线程&#xff0c;这些线程共享进程的资源&#xff0c;但每个线程都有自己的独立栈空间以及…

基于SSM的学生事务处理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

matplotlib从起点出发(9)_Tutorial_9_cycler

0 需求 绘图时有时需要指定几种颜色&#xff0c;或者线型&#xff0c;我们统称为样式&#xff0c;让绘制出的内容在这些样式中循环配置。这时就需要使用到本文所提到的技巧&#xff0c;即cycler. 1 进入教程 本文是自定义属性循环(cycler)设置的演示&#xff0c;用于控制多线…