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

Linux学习之IP协议

前言:

在学习IP协议i前,我们其实知道网络协议栈是一层层的,上层封装好之后就传给下层,对于我们正要学习到的TCP协议,在对数据进行封装之后,并不是直接就将数据进行传输,而是交给下一层网络层进行传输,将数据通过网络形式从一台主机传输到另一台主机。我们的TCP只是给我们网络层,提供了许多可靠性策略,但是数据的传输并不是直接靠TCP。

实际上IP协议已经可以帮我们跨网络传输数据,但是并不能保证每次数据都是可靠的,安全的传输,通过TCP协议提供的策略,基本上数据传输时完全可靠的,安全的。

目录

前言:

IP协议

IP协议的报头

网段划分

公网IP与私网IP

理解运营商和全球网络

ip路由

数据链路层

认识MAC地址

认识ARP

ARP欺骗

网络整体结构

域名

NAT技术

NAPT

NAT和代理服务器


IP协议

 首先从一台主机到另一台主机,进行数据传输的过程中首先要进行源地址与目的地址的确定,即从源ip到目的ip,其次就是进行路段的选择,即路由选择。

而ip地址就是由两部分组成:目标网络+目标主机。先到达目标的网络区域,在确定是哪一台主机。ip地址通过这种方式,在进行网络通信的过程中,就能有较高的效率去排除,知道知道对应的目标主机。

IP协议的报头

关于ip的报头还是主要有两个问题:

1.报头与载荷的有效分离 

靠固定长度加自描述字段进行分离,如这里的报头总共20字节,剩下的为数据,其次还有4位首部长度(一个字节4位)。子描述字段报头首部+总长。

 2.将有效载荷交付给上层。

有8位协议字段表示要交付的上层协议。

网段划分

我们知道ip地址有网络好于主机号构成:

网络号:保证相互连接的两个网段具有不同的标识。

主机号:同一网段中,主机间有相同的网络号,因此靠主机号唯一识别。

主机之间通过路由器在网络层上跨网段传输数据,实际上路由器可以是一个个子网的主机,需要对齐进行配置ip地址。一个路由器相当于在两个子网中。

根据主机与网络号不同的位数,我们就可以对ip地址进行划分。IPv4下总共用32位标识:

随着 Internet 的飞速发展 , 这种划分方案的局限性很快显现出来 , 大多数组织都申请 B 类网络地址 , 导致 B 类地址很快就 分配完了, A 类却浪费了大量地址 ;
例如 , 申请了一个 B 类地址 , 理论上一个子网内能允许 6 5 千多个主机 . A 类地址的子网内的主机数更多 .
然而实际网络架设中 , 不会存在一个子网内有这么多的情况 . 因此大量的 IP 地址都被浪费掉了 .
针对这种情况提出了新的划分方案 , 称为 CIDR(Classless Interdomain Routing):
引入一个额外的子网掩码 (subnet mask) 来区分网络号和主机号 ;
子网掩码也是一个 32 位的正整数 . 通常用一串 "0" 来结尾 ;
IP 地址和子网掩码进行 " 按位与 " 操作 , 得到的结果就是网络号 ;
网络号和主机号的划分与这个 IP 地址是 A 类、 B 类还是 C 类无关 ;

除此之外也有一些特定格式的特定ip地址。

IP 地址中的主机地址全部设为 0, 就成为了网络号 , 代表这个局域网 ;
IP 地址中的主机地址全部设为 1, 就成为了广播地址 , 用于给同一个链路中相互连接的所有主机发送数 据包;
127.* IP 地址用于本机环回 (loop back) 测试 , 通常是 127.0.0.1

我们知道ip地址的数量是有限的,并且数量是越来越少,为了较少ip地址的浪费,提高利用率,用了三种方式来解决:

动态分配 IP 地址 : 只给接入网络的设备分配 IP 地址 . 因此同一个 MAC 地址的设备 , 每次接入互联网中 , 得到 的IP 地址不一定是相同的 ;
NAT 技术 ( 后面会重点介绍 );
IPv6: IPv6 并不是 IPv4 的简单升级版 . 这是互不相干的两个协议 , 彼此并不兼容 ; IPv6 16 字节 128 位来表 示一个IP 地址 ; 但是目前 IPv6 还没有普及 ;

公网IP与私网IP

其次ip地址也被被硬性划分为公网ip和私网ip。(规定组建局域网的必须是私有ip)

我们在日常生活过中使用的一般都是直接的私网ip。不过对于我们使用的云服务器,这是事公网ip。

如果一个组织内部组建局域网 ,IP 地址只用于局域网内的通信 , 而不直接连到 Internet , 理论上 使用任意的 IP 地址都 可以, 但是 RFC 1918 规定了用于组建局域网的私有 IP 地址
10.*, 8 位是网络号 , 16,777,216 个地址
172.16. 172.31. , 12 位是网络号 , 1,048,576 个地址
192.168.*, 16 位是网络号 , 65,536 个地址
包含在这个范围中的 , 都成为私有 IP, 其余的则称为全局 IP( 或公网 IP);

理解运营商和全球网络

我们先来理解运营商:

运营商其实就是建设了网络基础设施的大型企业,负责让我们中国的每一个人用到互联网,为我们配备网络的。所以在网络通信时,首先要经过运营商。

全球网络

 ip地址就相当于是一个巨大的资源,因此就需要对资源进行划分,我们简单地以国家为个体进行划分(公网ip):

内网路由器就是由家庭管理,先来自运营商内部的子网,子网的路由器网络从广域网来,而广域网就是一些大公司组建的机房。

ip路由

IP 数据包的传输过程也和问路一样:
1.当 IP 数据包 , 到达路由器时 , 路由器会先查看目的 IP;
2.路由器决定这个数据包是能直接发送给目标主机 , 还是需要发送给下一个路由器 ;
3.依次反复 , 一直到达目标 IP 地址 ;
那么如何判定当前这个数据包该发送到哪里呢 ? 这个就依靠每个节点内部维护一个路由表 ;

路由器在进行数据传输中,如何选择其他网段呢,首先会将自己的ip地址与其他路由器的子网掩码按位与,如果结果是ip地址,就说明是传输的网段,就交给目标主机,如果不匹配,他回去再路由表按位与,找到你需要那个路由器的接口,从该接口转发给下一个路由器。

路由表可以使用 route 命令查看
如果目的 IP 命中了路由表 , 就直接转发即可 ;
路由表中的最后一行 , 主要由下一跳地址和发送接口两部分组成 , 当目的地址与路由表中其它行都不匹配 时, 就按缺省路由条目规定的接口发送到下一跳地址。

再往下,我们知道数据并不会直接就发送到网络层了,而是发送给数据链路层了,数据链路层是有要求的,要求一次不能发送太多的数据报,而此时的封装后的ip数据包已经很大了,所赐此时需要对ip数据包进行分片,并且在处理之后进行组装。

如何进行分片与组装呢:这里就看的是ip协议包头中的3位标志字段,其中只有第二位与第三位有含义,第二位为0,表示允许分片,第三位表示结束标记(是否是最后一个小包)。

数据链路层

用于两个设备(同一种数据链路节点)之间进行传递.

数据链路层实现了一个区间内的通信(一跳),而IP实现的是直至到最终目的通信(点对点)。

数据链路层处理的是:直接相连的主机之间进行数据交付的问题。

而MAC地址区分了一个局域网中特定的主机。

源地址和目的地址是指网卡的硬件地址 ( 也叫 MAC 地址 ), 长度是 48 , 是在网卡出厂时固化的 ;
帧协议类型字段有三种值 , 分别对应 IP ARP RARP;
帧末尾是 CRC 校验码

报头域有效载荷如何分离,怎么判断分用呢?

 还是一样,采用定长的报文格式,可以看到14字节的报头,剩下的就是有效载荷。

报头的前6个字节目的主机MAC地址,之后的6字节为u源主机MAC地址,之后的两个字节标识上一层协议的类型。

认识MAC地址

MAC地址用来识别数据链路层中相连的节点;
长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可 能会冲突; 也有些网卡支持用户配置mac地址)。
MAC地址用于一个局域网内的网络设备寻址和传输数据,MAC地址是硬件地址,是不可被修改的,(其实是网卡的地址),也是用来唯一标识一个局域网中的网络设备。
IP地址可以进行不同网段之间的划分,用于不同网段之间数据的传输和路由,是一种标识主机的逻辑地址。
MAC帧只在局域网中有效,在数据传输过程中,每经过一个网段,向上层决策之后解包,之后在封装(重新添加MAC帧),到下一网段在解包,在封装 -----整个过程类似于唐僧取经,每到一个地方,都会被问“你从哪里来,要到哪里去?”先拆掉之前的包,在换上新的包。直到到达终点。

随着局域网增多,数据在传输过程中就有大概率会发生碰撞,为了应对这一问题,于是又出现了交换机,交换机管理者与它相连的路由器的通信。

认识ARP

虽然我们在这里介绍ARP协议, 但是需要强调, ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议。

数据链路层获取到了上层封装后的ip数据帧,可以进行网络传输,但是网络通信不仅仅看ip地址,这只是表示主机的,那么主机上的网络设备呢?是靠MAC地址标识的,找不到目的网络设备的地址先进行处理,就算找到了该主机,还是会丢弃数据包的。

ARP 协议的作用
ARP 协议建立了主机 IP 地址 和 MAC 地址 的映射关系 .
在网络通讯时 , 源主机的应用程序知道目的主机的 IP 地址和端口号 , 却不知道目的主机的硬件地址 ;
数据包首先是被网卡接收到再去处理上层协议的 , 如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
因此在通讯前必须获得目的主机的硬件地址 ;
原理(先广播确定,在传输):
源主机发出 ARP 请求 , 询问 “IP 地址是 192.168.0.1 的主机的硬件地址是多少 ”, 并将这个请求广播到本地网 段( 以太网帧首部的硬件地址填 FF:FF:FF:FF:FF:FF 表示广播 ); 
目的主机接收到广播的 ARP 请求 , 发现其中的 IP 地址与本机相符 , 则发送一个 ARP 应答数据包给源主机 , 将自 己的硬件地址填写在应答包中;
每台主机都维护一个 ARP 缓存表 , 可以用 arp -a 命令查看。缓存表中的表项有过期时间 ( 一般为 20 分钟 ), 如果20 分钟内没有再次使用某个表项 , 则该表项失效 , 下次还要发 ARP 请求来获得目的主机的硬件地址。

 ARP报头:

 

  

注意到源 MAC 地址、目的 MAC 地址在以太网首部和 ARP 请求中各出现一次 , 对于链路层为以太网的情况是多余的, 但如果链路层是其它类型的网络则有可能是必要的。
硬件类型指链路层网络类型 ,1 为以太网 ;
协议类型指要转换的地址类型 ,0x0800 IP 地址 ;
硬件地址长度对于以太网地址为 6 字节 ;
协议地址长度对于和 IP 地址为 4 字节 ;
op字段为1表示ARP请求,op字段为2表示ARP应答。

源主机通过广播获取目的主机的MAC地址,在网络通信时根据MAC地址传输给特定网络设备在进行上层协议的解包。因为每一个路由器要构建路由器表的时候也要认识周围的路由器,此时也适用arp协议进行记录。所以ARP不经可以在节点到主机之间,还可以是节点到节点之间。(路由器之间)。

ARP欺骗

举例:

  • 1.主机A要和主机C通信,主机A发出ARP包询问谁是192.168.1.3?请回复192.168.1.1。
  • 2.这时主机B在疯狂的向主机A回复,我是192.168.1.3,我的地址是0A-11-22-33-44-02。
  • 3.由于ARP协议不会验证回复者的身份,造成主机A错误的将192.168.1.3的MAC映射为0A-11-22-33-44-02。

其次在发送ARP请求后,如果获取到目的主机的ARP应答,此时还会将目的主的MAC地址缓存在主机中。但若收到很多的ARP应答(存在伪装的ARP应答,用虚假的ip地址和MAC地址构建的ARP应答),(更新ARP缓存)ip地址会去使用虚假的映射ip地址,MAC地址使用我的MAC地址,造成的后果会让网络阻塞,主机网络断开。

网络整体结构

域名

由于ip地址与端口号不方便我们我们日常使用,因此可以使用域名来代替ip地址与端口号:

域名简介
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称 .
域名使用 . 连接
com: 一级域名 . 表示这是一个企业域名 . 同级的还有 "net"( 网络提供商 ), "org"( 非盈利组织 ) .
baidu: 二级域名 , 公司名 .
www: 只是一种习惯用法 . 之前人们在使用域名时 , 往往命名成类似于 ftp.xxx.xxx/ www.xxx.xxx 这样的格 式, 来表示主机支持的协议 .

NAT技术

NAT 技术背景
之前我们讨论了 , IPv4 协议中 , IP 地址数量不充足的问题
NAT 技术当前解决 IP 地址不够用的主要手段 , 是路由器的一个重要功能 ;
NAT 能够将私有 IP 对外通信时转为全局 IP. 也就是就是一种将私有 IP 和全局 IP 相互转化的技术方法 :
很多学校 , 家庭 , 公司内部采用每个终端设置私有 IP, 而在路由器或必要的服务器上设置全局 IP;
全局 IP 要求唯一 , 但是私有 IP 不需要 ; 在不同的局域网中出现相同的私有 IP 是完全不影响的 ;

NAPT

那么问题来了 , 如果局域网内 , 有多个主机都访问同一个外网服务器 , 那么对于服务器返回的数据中 , 目的 IP 都是相同 的. 那么 NAT 路由器如何判定将这个数据包转发给哪个局域网的主机 ?
这时候 NAPT 来解决这个问题了 . 使用 IP+port 来建立这个关联关系

NAT和代理服务器

路由器往往都具备 NAT 设备的功能 , 通过 NAT 设备进行中转 , 完成子网设备和其他子网设备的通信过程 .代理服务器看起来和NAT 设备有一点像 . 客户端向代理服务器发送请求 , 代理服务器将请求转发给真正要请求的服务器; 服务器返回结果后 , 代理服务器又把结果回传给客户端 .
那么 NAT 和代理服务器的区别有哪些呢 ?
从应用上讲 , NAT 设备是网络基础设备之一 , 解决的是 IP 不足的问题 . 代理服务器则是更贴近具体应用 , 比 如通过代理服务器进行翻墙, 另外像迅游这样的加速器 , 也是使用代理服务器 .
从底层实现上讲 , NAT 是工作在网络层 , 直接对 IP 地址进行替换 . 代理服务器往往工作在应用层 .
从使用范围上讲 , NAT 一般在局域网的出口部署 , 代理服务器可以在局域网做 , 也可以在广域网做 , 也可以 跨网.
代理服务器又分为正向代理和反向代理. 正向代理用于请求的转发 ( 例如借助代理绕过反爬虫 ). 反向代理往往作为一个缓存.

相关文章:

Linux学习之IP协议

前言: 在学习IP协议i前,我们其实知道网络协议栈是一层层的,上层封装好之后就传给下层,对于我们正要学习到的TCP协议,在对数据进行封装之后,并不是直接就将数据进行传输,而是交给下一层网络层进…...

Python Dash库:一个Web应用只需几行代码

大家好,在数据科学领域,数据可视化是将数据以图形化形式展示出来,帮助我们更直观地理解数据。Python中有一个非常流行的数据可视化库叫做Dash,Dash以其简洁、高效和强大的功能而闻名,它允许开发者快速构建交互式Web应用…...

用Docker 创建并运行一个MySQL容器

可以在DockerHub官网上荡:mysql - Official Image | Docker Hub 指令是:docker pull mysql; 因为文件比较大可能时间比较长,我是跟着黑马的课走的 课程提供的有文件,我就用已有的资源了。 在tmp目录里放入mysql.tar包 然后cd进去 输入指令:docker lo…...

在Java中如何有效地处理内存泄露

在Java中,处理内存泄露有多种方法,以下是其中三种常见的方法及其原理和适用场景: ## 1. 合理使用垃圾回收机制 Java中的垃圾回收机制(Garbage Collection,GC)是一种自动化的内存管理技术,它可以…...

值得收藏!修复Windows 10/11中找不到输出或输入设备的五种方法

序言 这篇文章主要关注处理声音输出/输入设备未发现的问题。它提供了许多可行的方法,帮助了许多Windows用户。阅读以下内容以找到你的解决方案。 最近,我将Windows 10更新到21H2,发现我的音频无法工作。当我把鼠标放在任务栏上的声音图标(上面有一个十字图标)上时,它会…...

Slurm运行pytorch深度学习模型(小白版)

Slurm背景: Slurm 是一种开源的作业调度系统,它用于管理大型计算集群中的计算资源和作业。你可以把它想象成一个“交通管制员”,负责管理计算集群中的各种任务,确保它们按照用户设定的规则有序地执行。 Slurm 的主要功能包括&…...

SQL如何利用Bitmap思想优化array_contains()函数

目录 0 问题描述 1 位图思想 2 案例实战 3 小结 0 问题描述 在工作中,我们往往使用array_contains()函数来进行存在性问题分析,如判断某个数是否在某个数组中,但是当表数据量过多,存在大量array_contains()函数时,…...

面试官:打开了一个新窗口,怎么知道这个窗口已经被打开过?

前言 我们现在来想这么一个场景,在掘金的文章管理页打开了一篇文章草稿,然后点击编辑,这个时候打开新标签页 A ,再点击一次编辑,打开了标签页 B 。 此时如果你在 A 编辑, B 是感知不到 A 的内容变动的&am…...

机器学习项目实践-基础知识部分

环境建立 我们做项目第一步就是单独创建一个python环境,Python新的隔离环境 创建:python -m venv ml 使用:.\Scripts\activate python -m venv ml 是在创建一个名为 ml 的虚拟环境,这样系统会自动创建一个文件夹ml,…...

CNN卷积神经网络,TensorFlow面试题

目录 CNN卷积神经网络 什么是TensorFlow? 张量是什么 TensorFlow有什么优势?...

Android 官网Ota介绍

构建 OTA 软件包 | Android 开源项目 | Android Open Source Project...

Redis(持久化)

文章目录 1.RDB1.介绍2.RDB执行流程3.持久化配置1.Redis持久化的文件是dbfilename指定的文件2.配置基本介绍1.进入redis配置文件2.搜索dbfilename,此时的dump.rdb就是redis持久化的文件3.搜索dir,每次持久化文件,都会在启动redis的当前目录下…...

基于Flask的岗位就业可视化系统(一)

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 前言 本项目综合了基本数据分析的流程,包括数据采集(爬虫)、数据清洗、数据存储、数据前后端可视化等 推荐…...

嵌入式学习68-C++(运算符重载和虚函数)

知识零碎: cin >> n 相当于scanf C系统提供的6种基本函数 …...

UVA1048/LA3561 Low Cost Air Travel

UVA1048/LA3561 Low Cost Air Travel 题目链接题意输入格式输出格式 分析AC 代码 题目链接 本题是2006年ICPC世界总决赛的A题 题意 很多航空公司都会出售一种联票,要求从头坐,上飞机时上缴机票,可以在中途任何一站下飞机。比如,假…...

学习和分析各种数据结构所要掌握的一个重要知识——CPU的缓存利用率(命中率)

什么是CPU缓存利用率(命中率),我们首先要把内存搞清楚。 硬盘是什么,内存是什么,高速缓存是什么,寄存器又是什么? 我们要储存数据就要运用到上面的东西。首先里面的硬盘是可以无电存储的&#…...

IOS自动化—将WDA打包ipa批量安装驱动

前言 CSDN: ios自动化-Xcode、WebDriverAgent环境部署 ios获取原生系统应用的包 如果Mac电脑没有配置好Xcode相关环境,可以参考以上文章。 必要条件 Mac电脑,OS版本在12.4及以上(低于这个版本无法安装Xcode14,装不了Xcode14就…...

SAP PP学习笔记12 - 评估MRP的运行结果

上一章讲了MRP的概念,参数,配置等内容。 SAP PP学习笔记11 - PP中的MRP相关概念,参数,配置-CSDN博客 本章来讲 MRP跑完之后呢,要怎么评估这个MRP的运行结果。 1,Stock/Requirements List and MRP List 在…...

AndroidStudio的Iguana版的使用

1.AndroidStudio介绍 Android Studio 是用于开发 Android 应用的官方集成开发环境 (IDE)。Android Studio 基于 IntelliJ IDEA 强大的代码编辑器和开发者工具,还提供更多可提高 Android 应用构建效率的功能,例如: 基于 Gradle 的灵活构建系统…...

通过方法引用获取属性名的底层逻辑是什么?

很多小伙伴可能都用过 MyBatis-Plus&#xff0c;这里边我们构造 where 条件的时候&#xff0c;可以直接通过方法引用的方式去指定属性名&#xff1a; LambdaQueryWrapper<Book> qw new LambdaQueryWrapper<>(); qw.eq(Book::getId, 2); List<Book> list bo…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...