Linux——数据链路层
1. 认识以太网
认知:以太网是用于局域网数据通信的协议标准,定义了同一局域网内通过电缆/无线怎么在设备之间传输数据帧。
注:整个网络世界可以具象看出由许许多多的局域网组成,
• 家庭中的设备A and 家庭中的设备B and 家庭路由器(出入口)
• 家庭A的路由器 and 家庭B的路由器 and 社区路由器(出入口)
• 社区A的路由器 and 社区B的路由器 and 市区路由器(出入口)
• A省的路由器 and B省路由器 and 国家路由器(出入口)
• A国路由器 and B国路由器 and C国路由器.......
路由器构成了每个局域网的出入口
注:把链路层发送的数据叫做数据帧!
• 6位目的地址 and 6位源地址:目的Mac地址 and 源Mac地址
• 类型:上层传递下来有效载荷的协议类型,字段对应 IP、ARP、RARP;
注:0800对应IP,0806对应ARP,0835对应RARP,后续两个稍后再说
问:以太网协议怎么分离报头和有效载荷?
答:报头为固定长度
认知:网络中传输的报文带两个地址,一个是MAC地址一个是IP地址,IP地址决定了下一目的地的Mac地址的选择,IP地址是你的最终目的地,MAC地址是中途的临时地址。
2. 局域网的通信过程
假设同一局域网内,主机A发送报文给主机E,主机A会将报文发送到当前局域网中,所有的主机收到该报文时,会将自己的Mac地址和该条报文的前6位字节进行比较,发现不合符目标Mac地址,于是丢弃,上层意识不到下层已经接受过报文了。主机E发现自己的Mac地址和报文中的目的Mac地址相同,于是开始向上层层交付。
认知:局域网就是一个碰撞域,一次只能发送一个数据帧,如果同时发送多个数据,就会出现碰撞问题,导致数据丢失。因此在局域网通信时,单个数据帧要有下限和上限(46~1500)
注:这个是硬件工程师规定的。
思考:在网络通信的过程中,对于访问者个人而言,他是知道目的主机的IP的,想想socket通信时,我们需要输入对端的IP+端口号才能够访问,所以知道对端的IP对于主机A不是问题,但是!主机A是怎么知道主机E的Mac地址的?
答:ARP协议!
3. 认识ARP协议
ARP协议属于数据链路层协议之一,他位于网络层协议和以太网协议的中间,结构如图,属于定长协议
以太网首部、以太网源地址、发送端以太网地址、发送端IP地址、目的IP地址 不过多介绍
• 硬件类型:1代表以太网
• 协议类型:0800代表IP协议
• op:1表示ARP请求,2表示ARP应答
• 目的以太网地址:初始情况下为 FFFFFF
问:前面说了,数据帧的下限为46字节,为什么ARP请求只有28?
答:末尾的PAD用于填充垃圾数据(0or1),来保证满足数据帧长度的下限,读取的时候不会出问题。
3.1 通过ARP协议如何得知目的IP的Mac地址?
注:假设还是主机A发送报文给主机E
因为主机A不知道主机E的Mac地址,所以起初他会发送ARP协议数据帧,该帧中将op设置为1,表示为请求ARP,将该数据帧在局域网内广播(对应先前讲的广播IP),局域网内所有的主机都会收到该条数据帧,并对其进行ARP协议解析,当发现其目的IP地址与当前主机的IP地址不对应时,就丢弃该条报文。
主机E做解析后 发现 op字段为1 是请求,并且目的IP地址与自己的IP地址对应,并且为请求, 主机E需要做应答处理,将op设置为2,并且此时ARP协议中的目的以太网地址为主机A的地址,源以太网地址为主机E的Mac地址,将该数据帧再次发送到局域网内,非相关的主机仍然收到了这条数据帧,只不过这次因为目的Mac已知,非相关的主机直接丢弃数据帧
对于主机A,先看op字段为2 表示应答,得到了主机E的Mac地址,后续就可以将带数据的数据帧发给主机E了
细节1:主机都会在一段时间内(分钟级别),记录下来当前局域网中各个IP对应的Mac地址的映射关系
问:为什么不永久记录下来?
答:IP是变化的,MAC地址换了网口后也是变化的
细节2:相同局域网内的两台主机会通过上述方法得知目标Mac地址,对于不同局域网内的两台主机,通信时,会先通过上述方法,知道当前局域网内路由器的Mac地址,然后发送报文,报文到达了新的路由器时,他得找下一个路由器的Mac地址,就会重复上述过程,直至发给目标主机。目标IP不会变,但是Mac地址一直会变,所以路由器中只需要记录IP地址,可以通过ARP协议的请求与应答去查下一目的地的Mac地址
4. NAT技术的相关问题
问题:先前讲述了NAT技术的含义,报文从主机A通过公网传到服务器的过程大致理解了,那么服务器的应答怎么通过公网传给主机A?
答:借助NAPT转换表
NAPT转换表:记录 源IP+port/目的IP+端口 和 NAT路由器wan口IP地址 + 端口/目的IP+端口 的映射关系 当外部服务器发送回应时,他的 目的 IP+端口 是NAT路由器的WAN口IP+端口,他会查表做对应替换,更改目标ip+端口、
• 这张表是路由器自己维护的
• 除了ip会替换,必要的时候NAT路由器内的端口号也会替换,为了避免冲突(多个主机访问同一个服务器的时候)
• 私有IP在不同内网中可以重复,同一个内网中不可以重复
• 这张表从内到外,从外到内都是唯一键值对wan口ip+端口是唯一的,多个主机访问同一路由器,wan口ip相同,但是端口是不同的(IP相同不要紧,端口不同就可以)
• 从内往外访问服务器时,途径的每个由路由器都会构建NAPT表,回来的时候就可以做内网穿透
内网穿透:借助NAPT转换表 内网设备能够被外网访问,
认知1:NAT就是这个世界网络的真相
认知2:上述路由表内的键值关系越多,路由器越好也越贵,所以就区分了家用路由器和企业路由器
认知3:外网无法直接到内部,这就是为什么所有的服务器你得必须登录后才能访问,用户得先做些什么,服务器才能够给你回应。用户访问服务器的过程就是在建表的过程。
5. 正向代理
正向代理:(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。通过这种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问控制等
工作原理:• 客户端将请求发送给正向代理服务器。
• 正向代理服务器接收请求,并根据配置进行处理,如缓存查找、内容过滤等。
• 正向代理服务器将处理后的请求转发给目标服务器。
• 目标服务器处理请求,并将响应返回给正向代理服务器。
• 正向代理服务器将响应返回给客户端。
缓存功能:正向代理服务器可以缓存经常访问的资源,当客户端再次请求这些资
源时,可以直接从缓存中获取,提高访问速度。
• 内容过滤:正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告、
阻止恶意网站等。
• 访问控制:通过正向代理,可以实现对特定网站的访问控制,如限制员工在工作
时间访问娱乐网站。
• 隐藏客户端身份:正向代理可以隐藏客户端的真实 IP 地址,保护客户端的隐私。
• 负载均衡:在多个目标服务器之间分配客户端请求,提高系统的可扩展性和可靠
性。
6. 反向代理
反向代理:服务器是一种网络架构模式,其作为 Web 服务器的前置服务器,接收
来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回
给客户端。这种架构模式可以提升网站性能、安全性和可维护性等
基本原理:反向代理服务器位于客户端和 Web 服务器之间,当客户端发起请求时,它首先
会到达反向代理服务器。反向代理服务器会根据配置的规则将请求转发给后端的 Web
服务器,并将 Web 服务器的响应返回给客户端。在这个过程中,客户端并不知道实际
与哪个 Web 服务器进行了交互,它只知道与反向代理服务器进行了通信。
7. NAT和代理服务器
• 路由器往往都具备 NAT 设备的功能, 通过 NAT 设备进行中转, 完成子网设备和其他子
网设备的通信过程
• 代理服务器看起来和 NAT 设备有一点像. 客户端像代理服务器发送请求, 代理服务器将
请求转发给真正要请求的服务器; 服务器返回结果后, 代理服务器又把结果回传给客户
端
问:代理服务器和NAT有何区别?
答:
• 从应用上讲, NAT 设备是网络基础设备之一, 解决的是 IP 不足的问题 、代理服务器则是更贴近具体应用, 比如通过代理服务器进行科学上网, 另外像迅游这样的加速器, 也是使用代理服务器.
• 从底层实现上讲, NAT 是工作在网络层, 直接对 IP 地址进行替换. 代理服务器往往工作在应用层.
• 从使用范围上讲, NAT 一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网
• 从部署位置上看, NAT 一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上.
8. 内网打洞
内网打洞:是指通过 NAT 穿透 技术,使得 两个内网设备(或一个内网设备和外网设备)之间能够直接通信,而不需要借助中介服务器。内网打洞一般用于 P2P(对等)通信,使得两台设备可以通过直接连接互相通信。
9. 交换机
交换机:如果一个局域网内的主机数量过多,就需要用到交换机,交换机工作在数据链路层
交换机的核心作用:划分碰撞域
主机A如果想把数据发给主机D,交换机识别到主机A和主机D在一个碰撞域中,就不会做转发,减小另一个碰撞域的碰撞概率。
10. 回顾TCP/IP网络的四层结构体系
• 应用层:解决 业务处理 ,如Web游浏览、电子邮件、文件传输
回答了我收到报文该怎么处理的问题。
• 传输层:解决 通信可靠性、数据传输的完整性、流量控制 等问题
回答了我该如何将报文有效传给对方的问题。
• 网络层:解决 长距离通信 的问题
回答了我该将报文传给谁的问题。
• 链路层:解决子网内通信 问题
回答了同一局域网内,报文怎么传给对方的问题
网络四层从下到上:怎么传 → 传给谁 → 怎么可靠的传 → 传过去后怎么处理的?
问题:描述一下浏览器从发起http到得到网页的整个过程,越详细越好
答:
①. 解析URL,获得域名、参数、路径、协议
②. 解析域名获得 IP地址 and 端口号
③. connect 发起三次握手请求,该过程不会传输有效载荷,只含报头
注:三次请求的过程中,确定了双方接收缓冲区的大小从而确定了内部滑动窗口的大小,确定了传输层每次发送最大报文的大小
④. 该报文通过网络层做路径选择,根据目的IP确定下一跳IP地址,链路层获得下一跳的Mac地址,将报文路由给下一跳
注:这里涉及了一个网络IP的划分,从公网到内网的一个转换,内网ip是怎么转到公网的,公网ip又是怎么把回应发到内网的(内网发送报文时,会在各个路由器内将源IP和路由器的WAN口ip做转换,转换时会维护一张NAPT表,好做后续的内网穿透,当WAN口IP是公网IP时,不再转换)
⑤. 三次握手成功,客户端发送请求
⑥. 服务端回复相应
⑦. 客户端渲染界面
相关文章:

Linux——数据链路层
1. 认识以太网 认知:以太网是用于局域网数据通信的协议标准,定义了同一局域网内通过电缆/无线怎么在设备之间传输数据帧。 注:整个网络世界可以具象看出由许许多多的局域网组成, • 家庭中的设备A and 家庭中的设备B and 家庭路由…...
ubuntu 22.04 安装下载
ubuntu 22.04下载安装及相关配置_ubuntu22.04下载-CSDN博客...
深度学习面试八股简略速览
在准备深度学习面试时,你可能会感到有些不知所措。毕竟,深度学习是一个庞大且不断发展的领域,涉及众多复杂的技术和概念。但别担心,本文将为你提供一份全面的指南,从基础理论到实际应用,帮助你在面试中脱颖…...
【深度学习-pytorch篇】1. Pytorch矩阵操作与DataSet创建
Pytorch矩阵操作与DataSet创建 1. Python 环境配置 1.1 安装 Anaconda 推荐使用 Anaconda 来管理 Python 环境,访问官网下载安装: https://www.anaconda.com/download/success 1.2 安装 PyTorch 请根据自己的系统平台(Windows/Linux/ma…...

游戏引擎学习第310天:利用网格划分完成排序加速优化
回顾并为今天的内容做个铺垫 昨天我们完成了一个用于排序的空间划分系统,但还没有机会真正利用它。昨天的工作刚好在结束时才完成,所以今天我们打算正式使用这个空间划分来加速排序。 现在我们在渲染代码中,可以看到在代码底部隐藏着一个“…...

数据结构 - 树的遍历
一、二叉树的遍历 对于二叉树,常用的遍历方式包括:先序遍历、中序遍历、后序遍历和层次遍历 。 1、先序遍历(PreOrder) 先序遍历的操作过程如下: 若二叉树为空,则什么也不做;否则࿰…...

时序模型介绍
一.整体介绍 1.单变量 vs 多变量时序数据 单变量就是只根据时间预测,多变量还要考虑用户 2.为什么不能用机器学习预测: a.时间不是影响标签的关键因素 b.时间与标签之间的联系过于弱/过于复杂,因此时序模型依赖于时间与时间的相关性来进行预…...
Java面试实战:从Spring到大数据的全栈挑战
Java面试实战:从Spring到大数据的全栈挑战 在某家知名互联网大厂,严肃的面试官正在面试一位名叫谢飞机的程序员。谢飞机以其搞笑的回答和对Java技术栈的独特见解而闻名。 第一轮:Spring与微服务的探索 面试官:“请你谈谈Spring…...
解决idea与springboot版本问题
遇到以下问题: 1、springboot3.2.0与jdk1.8 提示这个包org.springframework.web.bind.annotation不存在,但是pom已经引入了spring-boot-starter-web 2、Error:Cannot determine path to tools.jar library for 17 (D:/jdk17) 3、Error:(3, 28) java: …...

【第4章 图像与视频】4.4 离屏 canvas
文章目录 前言为什么要使用 offscreenCanvas为什么要使用 OffscreenCanvas如何使用 OffscreenCanvas第一种使用方式第二种使用方式 计算时长超过多长时间适合用Web Worker 前言 在 Canvas 开发中,我们经常需要处理复杂的图形和动画,这些操作可能会影响页…...
[AXI]如何验证AXI5原子操作
如何验证 AXI5 原子操作 摘要:在 UVM (Universal Verification Methodology) 验证环境中,验证 AXI5 协议的原子操作 (Atomic Operations) 是一项重要的任务,特别是在验证支持高并发和数据一致性的 SoC (System on Chip) 设计时。AXI5 引入了原…...

尚硅谷redis7 74-85 redis集群分片之集群是什么
74 redis集群分片之集群是什么 如果主机宕机,那么写操作就被暂时中断,后面就要由哨兵进行投票和选举。那么一瞬间若有大量的数据修改,由于写操作中断就会导致数据流失。 由于数据量过大,单个Master复制集难以承担,因此需要对多个复制集进行…...
Android获取设备信息
使用java: List<TableMessage> dataListnew ArrayList<TableMessage>();//获取设备信息Hashtable<String,String> ht MyDeviceInfo.getDeviceAllInfo2(LoginActivity.this);for (Map.Entry<String, String> entry : ht.entrySet()) {String key entry…...

WPF的基础控件:布局控件(StackPanel DockPanel)
布局控件(StackPanel & DockPanel) 1 StackPanel的Orientation属性2 DockPanel的LastChildFill3 嵌套布局示例4 性能优化建议5 常见问题排查 在WPF开发中,布局控件是构建用户界面的基石。StackPanel和DockPanel作为两种最基础的布局容器&…...

apache的commons-pool2原理与使用详解
Apache Commons Pool2 是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击…...

打印Yolo预训练模型的所有类别及对应的id
有时候我们可能只需要用yolo模型检测个别类别,并显示,这就需要知道id,以下代码可打印出 from ultralytics import YOLO# 加载模型 model YOLO(yolo11x.pt)# 打印所有类别名称及其对应的ID print(model.names) {0: person, 1: bicycle, 2: c…...
语法糖介绍(C++ Python)
语法糖(Syntactic Sugar)是编程语言中为了提升代码可读性和简洁性而设计的语法结构。它不改变语言的功能,但能让代码更易写和理解。以下是 C 和 Python 中常见的语法糖示例: C 中的常见语法糖 范围 for 循环(Range-bas…...
事务详解及面试常考知识点整理
事务详解及面试常考知识点整理 1. 什么是事务? **事务(Transaction)**是将多条 SQL 语句打包执行的操作单元,具有“一气呵成”的特性。就好比你要完成“把大象放进冰箱”这件事,一共分三步: 打开冰箱门把…...

设计模式26——解释器模式
写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用,主要是下面的UML图可以起到大作用,在你学习过一遍以后可能会遗忘,忘记了不要紧,只要看一眼UML图就能想起来了。同时也请大家多多指教。 解释器模式(Interp…...

在MDK中自动部署LVGL,在stm32f407ZGT6移植LVGL-8.3,运行demo,显示label
在MDK中自动部署LVGL,在stm32f407ZGT6移植LVGL-8.3 一、硬件平台二、实现功能三、移植步骤1、下载LVGL-8.42、MDK中安装LVGL-8.43、配置RTE4、配置头文件 lv_conf_cmsis.h5、配置lv_port_disp_template 四、添加心跳相关文件1、在STM32CubeMX中配置TIM7的参数2、使能…...

ArcGIS 与 HEC-RAS 协同:流域水文分析与洪水模拟全流程
技术点目录 洪水淹没危险性评价方法及技术介绍基于ArcGIS的水文分析基于HecRAS淹没模拟的洪水危险性评价洪水风险评价综合案例分析应用了解更多 —————————————————————————————————————————————————— 前言综述 洪水危险性及…...
树莓派设置静态ip 永久有效 我的需要设置三个 一个摄像头的 两个设备的
通过 systemd-networkd 配置 此方法适用于较新的Raspberry Pi OS版本,支持同时绑定多个IP地址到同一网卡,且配置清晰稳定。 1.禁用DHCP客户端对eth0的管理:编辑/etc/dhcpcd.conf文件,添加以下内容以忽略eth0接口的自动分配 sudo nano /etc…...

多模态大语言模型arxiv论文略读(九十九)
PartGLEE: A Foundation Model for Recognizing and Parsing Any Objects ➡️ 论文标题:PartGLEE: A Foundation Model for Recognizing and Parsing Any Objects ➡️ 论文作者:Junyi Li, Junfeng Wu, Weizhi Zhao, Song Bai, Xiang Bai ➡️ 研究机构…...

Fine-tuning:微调技术,训练方式,LLaMA-Factory,ms-swift
1,微调技术 特征Full-tuningFreeze-tuningLoRAQLoRA训练参数量全部少量极少极少显存需求高低很低最低模型性能最佳中等较好接近 LoRA模型修改方式无变化局部冻结插入模块量化插入模块多任务共享不便较便非常适合非常适合适合超大模型微调❌✅✅✅(最优&…...
vscode连接的linux服务器,上传项目至github
问题 已将项目整个文件夹拷贝到克隆下来的文件夹中,并添加了所有文件,并修改了commit -m,使用git push -u origin main提交的时候会出现vscode请求登录github,确定之后需要等待很久,也无果 原因 由于 远程服务器无法…...

XCTF-web-mfw
发现了git 使用GitHack下载一下源文件,找到了php源代码 <?phpif (isset($_GET[page])) {$page $_GET[page]; } else {$page "home"; }$file "templates/" . $page . ".php";// I heard .. is dangerous! assert("strpos…...
indel_snp_ssr_primer
indel标记使用 1.得到vcf文件 2.提取指定区域vcf文件并压缩构建索引 bcftools view -r <CHROM>:<START>-<END> input.vcf -o output.vcf bgzip -c all.filtered.indel.vcf > all.filtered.indel.vcf.gz tabix -p vcf all.filtered.indel.vcf.gz3.准备参…...
图论核心:深度搜索DFS 与广度搜索BFS
一、深度优先搜索(DFS):一条路走到黑的探索哲学 1. 算法核心思想 DFS(Depth-First Search)遵循 “深度优先” 原则,从起始节点出发,尽可能深入地访问每个分支,直到无法继续时回溯&a…...
Java 调用 HTTP 和 HTTPS 的方式详解
文章目录 1. HTTP 和 HTTPS 基础知识1.1 什么是 HTTP/HTTPS?1.2 HTTP 请求与响应结构1.3 常见的 HTTP 方法1.4 常见的 HTTP 状态码 2. Java 原生 HTTP 客户端2.1 使用 URLConnection 和 HttpURLConnection2.1.1 基本 GET 请求2.1.2 基本 POST 请求2.1.3 处理 HTTPS …...
Redis--基础知识点--28--慢查询相关
1 慢查询的原因 1.1 非命令数据相关原因 1.1.1 网络延迟 原因:客户端与 Redis 服务器之间的网络延迟可能导致客户端感知到的响应时间变长。 解决方案:优化网络环境 排查: 1.1.2 CPU 竞争 原因:Redis 是单线程的,…...