当前位置: 首页 > news >正文

NAT:连接私有与公共网络的关键技术(4/10)

一、NAT 的工作原理

NAT 技术的核心功能是将私有 IP 地址转换为公有 IP 地址,使得内部网络中的设备能够与外部互联网通信。其工作原理主要包括私有 IP 地址到公有 IP 地址的转换、端口号映射以及会话表维护这几个步骤。

私有 IP 地址到公有 IP 地址的转换

当内部网络中的设备需要访问外部互联网时,这些设备通常被分配了私有 IP 地址,如 10.0.0.0~10.255.255.255(A 类)、172.16.0.0~172.31.255.255(B 类)、192.168.0.0~192.168.255.255(C 类)范围内的地址。这些私有 IP 地址在因特网上是不可路由的,因此需要通过 NAT 设备将其转换为公有 IP 地址。NAT 设备通常是路由器,它至少有一个有效的外部全球 IP 地址。当内部设备发送数据包到外部网络时,NAT 设备会将数据包中的源私有 IP 地址替换为公共 IP 地址。

端口号映射

为了区分不同的内部设备和它们的会话,NAT 设备使用端口号进行映射。例如,当内部设备发起连接请求时,NAT 设备会将该请求的源端口号记录下来,并在转换后的数据包中使用一个唯一的外部端口号。返回的数据包也会通过这个外部端口号重新映射回原始的内部设备和端口号。端口地址转换(PAT)也称为 NAPT(Network Address Port Translation)或地址超载(address overloading),它是一种多对一的 NAT 变体,将多个内部地址映射为一个合法公网地址,但以不同的协议端口号与不同的内部地址相对应,即 <内部地址 + 内部端口> 与 < 外部地址 + 外部端口 > 之间的转换。

会话表维护

NAT 设备会维护一个会话表,记录所有正在进行的会话信息,包括内部设备的私有 IP 地址和端口号、转换后的公有 IP 地址和端口号,以及目标 IP 地址和端口号。通过这个会话表,NAT 设备能够正确地将返回的数据包路由回相应的内部设备。例如,当主机 10.0.0.1 向 IP 地址为 128.119.40.186 的 Web 服务器(端口 80)发送 HTTP 请求时,主机 10.0.0.1 将随机指派一个端口,如 3345,作为本次请求的源端口号,将该请求发送到路由器中。路由器将为该请求指派一个新的源端口号,如 6001,并将请求报文发送给 WAN 接口。同时,在 NAT 转换表中记录一条转换记录:138.76.29.7:6001–10.0.0.1:3345。当外部网络的响应数据包到达路由器的 WAN 接口时,路由器查询 NAT 转换表,发现目标地址和端口号在转换表中有记录,从而将其目的地址和目的端口转换成为 10.0.0.1:3345,再发送到内部网络中的相应设备。

二、NAT 的类型

1. 静态 NAT

静态 NAT 实现了私有地址和公有地址的一对一映射,一个公网 IP 只会分配给唯一且固定的内网主机。在网络管理员手动配置下,静态 NAT 通过在路由器中指定静态 NAT 条目,实现内部网络 IP 地址与外部公共网络 IP 地址之间的转换。当内部网络上的计算机向外部网络发送请求时,路由器将修改请求中的源 IP 地址为预先配置的公网 IP 地址。例如,在一个企业内部,有一台服务器需要对外提供服务,这时就可以使用静态 NAT,将该服务器的私有 IP 地址静态映射到一个公网 IP 地址上,以便外部网络能够通过这个公网 IP 地址访问到该服务器。

2. 动态 NAT

动态 NAT 基于地址池来实现私有地址和公有地址的转换。内部网络上的计算机向外部网络发送请求时,路由器查找 NAT 转换表以找到与计算机的源 IP 地址相对应的映射关系。如果该映射关系存在,则路由器使用该映射关系中的外部 IP 地址来修改请求中的源 IP 地址;如果该映射关系不存在,则路由器创建一个新的映射关系,并将此映射关系添加到 NAT 转换表中。当动态 NAT 地址池中的地址用尽后,只能等待被占用的公网地址被释放后,其他主机才能使用它来访问公网。例如,在一个拥有多个用户的网络环境中,当用户需要访问外网时,路由器从地址池中选择一个未使用的公网 IP 地址进行映射,连接结束后释放地址,以供其他用户使用。

3. NAPT

NAPT 允许多个内部地址映射到同一个公有地址的不同端口。它借助端口可以实现一个公有地址同时对应多个私有地址,该模式同时对 IP 地址和端口号进行转换,实现不同私有地址(不同的私有地址,不同的源端口)映射到同一个公有地址(相同的公有地址,不同的源端口)。例如,在家庭网络中,多个设备可以通过同一个公网 IP 地址访问外网,NAPT 会为每个设备分配不同的端口号,以区分不同的设备和它们的会话。

4. Easy IP

Easy IP 允许多个内部地址映射到网关出接口地址上的不同端口,是 NAPT 的一种特例,不同的是 Easy IP 无需创建公网地址池,可以实现自动根据路由器上 WAN 接口的公网 IP 地址实现与私网 IP 地址之间的映射。Easy IP 主要应用于通过路由器 WAN 接口 IP 地址作为要被映射的公网 IP 地址的情形,特别适合小型局域网接入 Internet 的情况,比如小型网吧、中小型企业等。出接口通过拨号方式获得临时(或固定)公网 IP 地址以供内部主机访问 Internet。

三、NAT 的应用

1. 在家庭网络中的应用

家庭中的设备通过私有 IP 地址连接到路由器,路由器通过 NAT 技术将这些设备的流量转换为单一的公有 IP 地址流量,使设备能够同时访问互联网,同时提升了网络安全性,简化了网络配置。

在家庭网络中,NAT 技术被广泛应用于路由器上,使得家中的多个设备能够共享一个公有 IP 地址访问互联网。这不仅节省了 IP 地址资源,还提供了额外的安全性。

设备连接:家庭中的设备(如智能电视、游戏机、电脑、手机等)通过私有 IP 地址连接到路由器,路由器通过 NAT 技术将这些设备的流量转换为单一的公有 IP 地址流量,从而使这些设备能够同时访问互联网。例如,一个家庭可能有一台智能电视、一台游戏机和两台手机,它们都通过路由器连接到互联网。路由器使用 NAT 技术将这些设备的私有 IP 地址转换为一个公有 IP 地址,使得这些设备能够同时访问互联网上的各种资源,如视频流、游戏服务器和社交媒体平台。

安全性提升:由于私有 IP 地址在互联网上不可见,外部攻击者无法直接访问家庭网络中的设备,从而增强了网络的安全性。例如,如果一个家庭的网络没有使用 NAT 技术,那么外部攻击者可以通过扫描互联网上的 IP 地址来找到家庭网络中的设备,并尝试攻击它们。但是,如果家庭网络使用了 NAT 技术,外部攻击者只能看到路由器的公有 IP 地址,而无法直接访问家庭网络中的设备。

简化网络配置:使用 NAT 技术,家庭用户无需为每个设备配置公有 IP 地址,只需配置路由器即可,使得网络配置更加简单和灵活。例如,一个家庭用户在设置家庭网络时,只需要配置路由器的 IP 地址、子网掩码和网关等参数,就可以让家庭中的所有设备都能够访问互联网。而如果没有使用 NAT 技术,家庭用户需要为每个设备都配置一个公有 IP 地址,这不仅非常繁琐,而且还需要支付额外的费用。

2. 在企业网络中的应用

企业内部网络通过使用私有 IP 地址进行隔离,防止内部网络结构和设备直接暴露在互联网中,提高了网络安全性。NAT 技术还能节约 IP 地址资源,实现访问控制和管理,以及与负载均衡技术结合使用,提升企业关键应用的稳定运行。

在企业网络中,NAT 技术不仅在解决 IP 地址短缺问题上,还在提升网络管理和安全性方面发挥了关键作用。

内部网络隔离:企业内部网络通过使用私有 IP 地址进行隔离,防止内部网络结构和设备直接暴露在互联网中,提高了网络安全性。例如,一个企业可能有多个部门,每个部门都有自己的内部网络。通过使用私有 IP 地址,这些部门的内部网络可以相互隔离,防止外部攻击者通过互联网直接访问企业内部的网络结构和设备。

IP 地址节约:大多数企业只需使用一个或少数几个公有 IP 地址,通过 NAT 技术使大量内部设备能够访问互联网,从而有效节约了 IP 地址资源。例如,一个企业可能有数百台甚至上千台内部设备,如果为每台设备都分配一个公有 IP 地址,那么将会消耗大量的 IP 地址资源。但是,如果使用 NAT 技术,企业只需要使用一个或少数几个公有 IP 地址,就可以让所有的内部设备都能够访问互联网。

访问控制和管理:企业可以通过 NAT 设备实现流量监控和管理,设置访问控制策略,限制特定设备或应用的互联网访问,提升网络管理的灵活性和效率。例如,企业可以通过 NAT 设备设置访问控制策略,限制某些部门的设备只能访问特定的网站或应用程序,从而提高网络的安全性和管理效率。

负载均衡与高可用性:在大型企业中,NAT 技术与负载均衡技术结合使用,可以实现对外服务的负载分担和高可用性配置,确保企业关键应用的稳定运行。例如,一个大型企业可能有多个服务器对外提供服务,通过使用 NAT 技术和负载均衡技术,可以将外部的请求分发到不同的服务器上,从而实现负载分担和高可用性配置,确保企业关键应用的稳定运行。

四、NAT 配置的常见问题及解决方案

1. 常见问题

             (1)内外网穿透问题,内部用户无法直接通过互联网连接到外部服务器或应用程序,反之亦然。

    • 在实际网络环境中,当 NAT 设备将私有 IP 地址映射到公共 IP 地址时,可能会发生内外网的访问限制现象。例如,内部用户无法直接通过互联网连接到外部服务器或应用程序;反之亦然。这通常是由于 NAT 设置不恰当所导致的。
    • (2)端口映射冲突与限制,可能导致端口冲突和安全威胁。
    • 在 NAT 设备上不正确地设置端口映射可能导致端口冲突和安全威胁的发生。如果两个或多个应用试图同时映射相同的端口或者映射了受到限制的端口,则可能导致网络拥塞和数据篡改等问题。此外,一些 NAT 设备可能具有内置的安全功能来阻止某些特定端口的通信以防止恶意活动入侵系统。
    • (3)ACL 问题及应用受限,可能导致安全问题以及内部用户权限不足。
    • ACL (访问控制列表) 是 NAT 设备的一种机制可用来管理网络流量和提高安全性。如果 ACL 配置不合适或不准确,可能导致拒绝服务攻击、SQL 注入等安全问题以及内部用户在访问受保护资源时的权限不足。

2. 解决方案

           (1)选择合适的 NAT 类型,根据不同的环境和应用场景选择最适合的 NAT 类型。

    • 了解不同的 NAT 类型对于确定如何最好地为您的组织选择配置至关重要。“全锥形”、“地址绑定型”(Address Bounded)、“端口限制型”(Port Limited) 和 “对称型”(Symmetric) 是当前市场上常见的 NAT 类型。每种类型都有其优缺点且适用于不同类型的环境和应用场景。确保为你的业务环境选用最适合的 NAT 类型。
    • (2)精确设置端口映射规则与应用,为服务和应用程序分配唯一的端口范围,使用端口扫描工具检测冲突隐患。
    • 为了减轻端口冲突风险,应正确识别需要映射的所有服务和应用程序的需求,并为它们分配唯一的端口范围。另外可以使用端口扫描工具检测当前网络环境中开放的端口是否存在冲突隐患,进而优化端口映射规则。
    • (3)遵循正确的 ACL 配置策略,使用自动化管理工具确保设备按同一标准配置,提升安全性和管理效率。
    • 使用自动化管理工具多品牌异构防火墙统一管理多品牌、多型号防火墙统一管理;确保所有设备按同一标准配置,提升安全性;集中管理简化部署,减少重复操作;统一流程减少配置差异和人为疏漏;快速定位问题,提升响应速度;集中管理减少人力和时间投入,优化成本。
    • 策略开通自动化减少手动操作,加速策略部署;自动选择防火墙避免疏漏或配置错误;自动适应网络变化或安全需求;减少过度配置,避免浪费资源;集中管理,简化故障排查流程。
    • 攻击 IP 一键封禁面对安全威胁迅速实施封禁降低风险;无需复杂步骤,提高运维效率;自动化完成减少人为失误;全程留痕,便于事后分析与审查;确保潜在威胁立即得到应对,避免损失扩大。
    • 命中率分析识别并清除未被使用的策略,提高匹配速度;确保策略有效性,调整未经常命中的策略;精简规则,降低设备的负担和性能需求;使策略集更为精练,便于维护和更新;了解网络流量模式,帮助调整策略配置;确保所有策略都在有效执行,满足合规要求。
    • 策略优化通过精细化策略,降低潜在的攻击风险;减少规则数量使管理和审查更直观;精简规则,加速策略匹配和处理;确保策略清晰,避免潜在的策略冲突;通过消除冗余,降低配置失误风险;清晰的策略集更易于监控、审查与维护;优化策略减轻设备负荷,延长硬件寿命;细化策略降低误封合法流量的可能性。
    • 策略收敛消除冗余和宽泛策略,降低潜在风险;集中并优化规则,使维护和更新更为直观;简化策略结构,降低配置失误概率。更具体的策略更加精确,便于分析;满足审计要求和行业合规标准。
    • 策略合规检查确保策略与行业安全标准和最佳实践相符;满足法规要求,降低法律纠纷和罚款风险;为客户和合作伙伴展现良好的安全管理;标准化的策略使维护和更新更为简单高效;检测并修正潜在的策略配置问题;通过定期合规检查,不断优化并完善安全策略。

五、案例与总结

1. 代码案例

以下是一个使用 Python 的socket模块模拟 NAT 工作过程的简单示例代码:

import socket# 模拟内部网络中的设备
def internal_device():# 创建一个套接字s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 假设内部设备的私有 IP 和端口private_ip = '192.168.1.10'private_port = 8000s.bind((private_ip, private_port))# 连接外部服务器的 IP 和端口public_ip = '8.8.8.8'public_port = 80s.connect((public_ip, public_port))print(f"内部设备连接到外部服务器:{public_ip}:{public_port}")s.close()# 模拟 NAT 设备
def nat_device():# 创建一个套接字s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# NAT 设备的公有 IP 和端口nat_public_ip = '203.0.113.1'nat_public_port = 9000s.bind((nat_public_ip, nat_public_port))# 监听连接s.listen(5)while True:conn, addr = s.accept()print(f"NAT 设备接收到来自内部设备的连接请求")# 模拟 NAT 转换,将源地址和端口替换为 NAT 的公有地址和端口new_conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)new_conn.connect(('8.8.8.8', 80))print(f"NAT 设备将连接转发到外部服务器:8.8.8.8:80")# 在两个连接之间转发数据while True:data = conn.recv(1024)if not data:breaknew_conn.send(data)data = new_conn.recv(1024)if not data:breakconn.send(data)conn.close()new_conn.close()if __name__ == '__main__':internal_device()nat_device()

这个示例代码简单地模拟了内部设备通过 NAT 设备连接到外部服务器的过程,但实际的 NAT 实现要复杂得多。

2. 文章总结

网络地址转换(NAT)在当今的网络环境中起着至关重要的作用。它作为私有网络与公共互联网之间的桥梁,通过将私有 IP 地址转换为公有 IP 地址,使得内部网络中的设备能够与外部互联网进行通信,有效地解决了 IPv4 地址短缺的问题。

NAT 的工作原理包括私有 IP 地址到公有 IP 地址的转换、端口号映射以及会话表维护。不同类型的 NAT,如静态 NAT、动态 NAT、NAPT 和 Easy IP,各有其特点和应用场景。在家庭网络中,NAT 技术使得多个设备能够共享一个公有 IP 地址访问互联网,同时提升了网络安全性和简化了网络配置。在企业网络中,NAT 技术不仅节约了 IP 地址资源,还实现了内部网络隔离、访问控制和管理以及与负载均衡技术结合使用,提升了企业关键应用的稳定运行。

然而,在 NAT 配置过程中也会遇到一些常见问题,如内外网穿透问题、端口映射冲突与限制以及 ACL 问题及应用受限。针对这些问题,可以通过选择合适的 NAT 类型、精确设置端口映射规则与应用以及遵循正确的 ACL 配置策略来解决。

总之,NAT 技术是现代网络中不可或缺的一部分,它为我们提供了一种有效的方式来管理和利用有限的 IP 地址资源,同时也提高了网络的安全性和管理效率。随着网络技术的不断发展,NAT 技术也将不断演进和完善,为我们的网络生活带来更多的便利和安全保障。

 本文相关文章推荐:

1、计算机网络基础全攻略:探秘网络构建块(1/10)

2、TCP/IP 协议:网络世界的基石(2/10)

3、局域网与广域网:探索网络的规模与奥秘(3/10)

4、NAT:连接私有与公共网络的关键技术(4/10)

相关文章:

NAT:连接私有与公共网络的关键技术(4/10)

一、NAT 的工作原理 NAT 技术的核心功能是将私有 IP 地址转换为公有 IP 地址&#xff0c;使得内部网络中的设备能够与外部互联网通信。其工作原理主要包括私有 IP 地址到公有 IP 地址的转换、端口号映射以及会话表维护这几个步骤。 私有 IP 地址到公有 IP 地址的转换&#xff1…...

RabbitMQ2:介绍、安装、快速入门、数据隔离

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…...

衡山派D133EBS 开发环境安装及SDK编译烧写镜像烧录

1.创建新文件夹&#xff0c;用来存放SDK包&#xff08;其实本质就是路径要对就ok了&#xff09;&#xff0c;右键鼠标通过Open Git Bash here来打开git 输入命令 git clone --depth1 https://gitee.com/lcsc/luban-lite.git 来拉取&#xff0c;如下所示&#xff1a;&#xff0…...

【Spring MVC】如何获取cookie/session以及响应@RestController的理解,Header的设置

前言 &#x1f31f;&#x1f31f;本期讲解关于SpringMVC的编程之参数传递~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废…...

C++设计模式行为模式———策略模式

文章目录 一、引言二、策略模式三、总结 一、引言 策略模式是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。与模板方法模式类似&#xff0c;都是以扩展的方式来支持未来的变化。…...

Spring Cloud 中 bootstrap.yml 配置文件详解

Spring Cloud 中 bootstrap.yml 配置文件详解 1. 什么是 bootstrap.yml&#xff1f; bootstrap.yml 是 Spring Cloud 提供的一个特殊配置文件&#xff0c;主要用于初始化 Spring Cloud 应用程序的环境。与常见的 application.yml 不同&#xff0c;bootstrap.yml 在 Spring 应用…...

Java项目实战II基于SpringBoot前后端分离的网吧管理系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着互联网技术的不断发展…...

ASP网络安全讲述

一 前言   Microsoft Active Server Pages&#xff08;ASP&#xff09;是服务器端脚本编写环境&#xff0c;使用它可以创建和运行动态、交互的 Web 服务器应用程序。使用 ASP 可以组合 HTML 页 、脚本命令和 ActiveX 组件以创建交互的 Web 页和基于 Web 的功能强大的应用程序…...

DFS 创建分级菜单

菜单级别不确定&#xff0c;想要自适应&#xff0c;且可以折叠的菜单。 数据是一个数组。 <template><div class"Level" ref"Level"></div> </template>import {ref} from vue export default{data(){Level:ref(null),menuData…...

HDU Go Running(最小点覆盖 + 网络流优化)

题目大意&#xff1a;有一条无限长跑道&#xff0c;每个人可以规定自己跑步的方向&#xff0c;起点&#xff0c;跑步起止时间。每个人跑步的速度都是1m/s。最后从监控人员哪里得到了n个报告&#xff0c;每个报告给出了某人在某一时候所在的位置&#xff0c;问跑步的最少可能人数…...

C++设计模式-中介者模式

动机(Motivation) 多个对象相互关联的情况&#xff0c;对象之间常常会维持一种复杂的引用关系&#xff0c;如果遇到一些需求的更改&#xff0c;这种直接的引用关系将面临不断的变化。在这种情况下&#xff0c;可以使用一种”中介对象“来管理对象间的关联关系&#xff0c;避免…...

文件上传与下载服务 | Flask 实战

之前介绍了 droppy 文件共享服务的搭建。但在一些场景中&#xff0c;我们需要在命令行或在 Python 代码中&#xff0c;临时上传和下载文件。这时可以用一个更简单的策略&#xff1a;使用 flask 编写一个临时的 API。 服务端配置 以下是一个简单的 Flask 应用程序代码示例&…...

MySQL 中的排序:索引排序与文件排序

文章目录 MySQL 中的排序&#xff1a;索引排序与文件排序全解析一、引言二、索引排序&#xff08;一&#xff09;原理&#xff08;二&#xff09;示例 三、文件排序&#xff08;一&#xff09;单路排序&#xff08;二&#xff09;双路排序&#xff08;三&#xff09;归并排序 四…...

深入理解React Hooks:使用useState和useEffect

引言 React Hooks是React 16.8引入的一项强大功能&#xff0c;它使函数组件能够使用状态和其他React特性。本文将深入探讨两个最常用的Hooks&#xff1a;useState和useEffect&#xff0c;并通过实际代码示例展示它们的使用方法。 1. 什么是React Hooks&#xff1f; React Ho…...

AWS codebuild + jenkins + github 实践CI/CD

前文 本文使用 Jenkins 结合 CodeBuild, CodeDeploy 实现 Serverless 的 CI/CD 工作流&#xff0c;用于自动化发布已经部署 lambda 函数。 在 AWS 海外区&#xff0c;CI/CD 工作流可以用 codepipeline 这项产品来方便的实现&#xff0c; CICD 基本概念 持续集成( Continuous…...

Android PMS(Package Manager Service)源码介绍

文章目录 前言一、PMS 启动流程二、APK 安装流程三、APK 卸载流程四、权限管理静态权限动态权限 五、 数据存储与一致性六、 PMS 的安全性策略1、权限检查2、签名认证3、动态权限管理4、应用安装验证5、保护系统目录 七、PMS 调试方法总结 前言 PackageManagerService&#xf…...

运维面试整理总结

面试题可以参考:面试题总结 查看系统相关信息 查看系统登陆成功与失败记录 成功&#xff1a;last失败&#xff1a;lastb 查看二进制文件 hexdump查看进程端口或连接 netstat -nltp ss -nltp补充&#xff1a;pidof与lsof命令 pidof [进程名] #根据 进程名 查询进程id ls…...

图数据库 Cypher语言

图数据库 属性图 属性图&#xff08;Property Graph&#xff09;概述 属性图是一种广泛用于建模关系数据的图数据结构&#xff0c;它将**顶点&#xff08;节点&#xff09;和边&#xff08;关系&#xff09;**进行结构化存储&#xff0c;并为它们附加属性以提供丰富的语义信…...

阿里云oss转发上线-实现不出网钓鱼

本地实现阿里云oss转发上线&#xff0c;全部代码在文末&#xff0c;代码存在冗余 实战环境 被钓鱼机器不出网只可访问内部网络包含集团oss 实战思路 若将我们的shellcode文件上传到集团oss上仍无法上线&#xff0c;那么就利用oss做中转使用本地转发进行上线&#xff0c;先发送…...

Spring Boot 3.4.0 发行:革新与突破的里程碑

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...