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

[计算机网络]--IP协议

前言

作者:小蜗牛向前冲

名言:我可以接受失败,但我不能接受放弃

  如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 

目录

一、IP协议基本知识

1、IP协议和TCP协议的关系

 2、IP的报文格式

二、网段划分

1、基本知识

2、IP不足 

3、子网划分 

4、路由

三、报文的分片 

1、为什么要分片

2、如何分片

3、分片的影响 


本期学习:什么是IP协议,IP协议的报头格式,网段的划分,IP不足怎么解决的,报文的的分片问题。

前面我们学习了在位于应用层的http和https协议,传输层的udp和tcp协议,下面我们继续为与网络层的IP协议。

一、IP协议基本知识

1、IP协议和TCP协议的关系

 我们知道TCP协议从传输层将数据交给网络层上的IP协议,IP的作用是起定位主机,有能力将A主机上的数据报跨网络发送到B主机上。

但是IP协议有能力做的到,就一定会做到吗?

显然是不一定的。

从概念上来说:

IP协议(Internet Protocol)

  • P协议位于网络层(第三层),负责在网络上寻址和路由数据包,以确保它们能够正确地从源主机传输到目标主机。
  • IP协议定义了如何封装数据包,包括源和目标IP地址,以及一些其他的控制信息。
  • IP协议是一种无连接的协议,意味着它不维护与通信的另一端的持久连接。每个数据包在网络上独立传输,可能采用不同的路径。

TCP协议(Transmission Control Protocol):

  • TCP协议位于传输层(第四层),建立在IP协议之上。
  • TCP是一种面向连接的协议,提供可靠的、面向流的通信。它确保数据的顺序传递和错误检测,同时负责拆分长消息为更小的数据块。
  • TCP通过使用端口号来将数据传输到正确的应用程序,与IP地址一起提供了端到端的通信。
  • TCP协议通过三次握手建立连接,提供流量控制和拥塞控制,以确保可靠的数据传输。

在实际的网络通信中,TCP常常依赖于IP协议来实现数据包的传输。TCP通过IP协议发送和接收数据,IP协议负责将TCP数据包从源主机路由到目标主机。因此,IP和TCP协议一起工作,形成了互联网通信的基础。 

感性的理解:

 张三在数学上非常有天赋,基本上每次考试都会考满分,而张三的父亲是学校的教导主任,要是有一天张三没有考到满分,父亲就会要求重新考试,直到张三考到满分为止。

在这个故事中父亲相当于TCP,张三相对于IP,要是IP没有将数据发送到目的主机,TCP就会给IP重传数据,直到IP将数据发送成功。

所以TCP为IP协议能力成功性提供保护作用

 2、IP的报文格式

 4位版本号(version):

  • 指定IP协议的版本, 对于IPv4来说, 就是4。
  • 虽然有IPv6但是由于没有在世界上广泛运用,所以一般认为版本就是IPv4。

 4位头部长度(header length):

  • IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大 的数字是15, 因此IP头部最大长度是60字节

 32位源地址和32位目标地址:

  • 表示发送端和接收端.

8位服务类型(Type Of Service): 

  • 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0).
  • 4位 TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本.
  • 这四者相互冲突, 只能选择一个. 对于 ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要.

16位总长度(total length): 

  • IP数据报整体占多少个字节

8位协议:

  • :表示上层协议的类型

8位生存时间(Time To Live, TTL) :

  • 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL -= 1, 一直减到0还没到达, 那么就丢弃了.
  • 这个字段主要是用来防止出现路由循环

 16位头部校验和:

  • 使用CRC进行校验, 来鉴别头部是否损坏.

16位标识(id)和3位标志字段,13位分片偏移(framegament offset):这个和IP的分片有关,下面在细细分析。

二、网段划分

在学习网段划分前,我们先来看一个故事,在学校中 常常用学院号+随机编号来表示学生的学号

有一张三的同学捡到一个交李四同学的作业本,上面写这李四的姓名和学号。

张三同学采取二种方案来寻找失主来寻找李四:

方案一:在原地等待,每经过一个同学就问是不是叫李四,丢东西没。这张三一问就是一下午,心里想肯定不能这样学校有几万人,我要是这样一个一个排除得到时候去。 心里想可以可以执行方案二。

方案二:交到学院的学生会去,学生会的同学一看学号这不是电子信息工程学院的同学吗?于是在校学生会的群里将这个李四同学作业本丢失的事情和电子信息工程的学生会说了,电子信息工程的学生会的会长,又在他们院班长群成功找到了李四。

方案二让张三同学交还李四 作业本省了很多力。

而在网络中为了更加方便定位主机,也就要像学校那样分学院。在网络中是划分子网,在找子网,在找主机。这样就大大提供的查找效率(查找的本质就是排除)

1、基本知识

IP地址分为两个部分, 网络号(目标网络)和主机号(目标主机)

 

  • 网络号: 保证相互连接的两个网段具有不同的标识;
  • 主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;
  • 不同的子网其实就是把网络号相同的主机放到一起.
  • 如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网 中的其他主机重复.

通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的IP地址都不相同 

那么问题来了, 手动管理子网内的IP, 是一个相当麻烦的事情

  • 有一种技术叫做DHCP, 能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便.
  • 一般的路由器都带有DHCP功能. 因此路由器也可以看做一个DHCP服务器

 过去曾经提出一种划分网络号和主机号的方案把所有的IP地址分为五类, 如下图所示

  • A类 0.0.0.0到127.255.255.255
  • B类 128.0.0.0到191.255.255.255
  • C类 192.0.0.0到223.255.255.255
  • D类 224.0.0.0到239.255.255.255
  • E类 240.0.0.0到247.255.255.255 

随着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到全1就是子网的地址范围; IP地址和子网掩码还有一种更简洁的表示方法,例如140.252.20.68/24,表示IP地址为140.252.20.68, 子网掩码的高 24位是1,也就是255.255.255.0

 特殊的IP地址

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

2、IP不足 

 IP地址的数量限制

我们知道, IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 2的32次方 个IP地址, 大概是43亿左右.

而TCP/IP 协议规定, 每个主机都需要有一个IP地址

. 这意味着, 一共只有43亿台主机能接入网络么?

实际上, 由于一些特殊的IP地址的存在, 数量远不足43亿;

另外IP地址并非是按照主机台数来配置的, 而是每一个网卡 都需要配置一个或多个IP地址.

CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然 不是很够用.

这时候有三种方式来解决:

  • 动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到 的IP地址不一定是相同的;
  • NAT技术;
  • IPv6: IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表 示一个IP地址

NAT(Network Address Translation,网络地址转换) 

用于将私有网络内部的IP地址转换成公共网络(如Internet)上使用的IP地址

NAT技术通常用于家庭网络企业内部网络,因为它允许多个设备共享一个公共IP地址。它的工作原理是将私有网络内部的IP地址映射到公共网络上的一个或多个IP地址。这样,在私有网络内部的设备可以使用私有IP地址进行通信,而NAT设备则负责将这些通信转换为公共IP地址,并在公共网络上进行传输。当公共网络上的响应到达时,NAT设备将其转发回私有网络内部的适当设备。

NAT技术有几种不同的形式,包括静态NAT、动态NAT和PAT(Port Address Translation,端口地址转换)。静态NAT将私有IP地址映射到公共IP地址的固定映射上,而动态NAT则动态地分配公共IP地址,以便在需要时进行通信。PAT是一种特殊形式的动态NAT,它还会将端口号也转换为公共IP地址和端口的组合,以允许多个设备共享同一个公共IP地址。

3、子网划分 

子网划分是指将一个大的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地址, 一个是WAN口IP, 一个是LAN口IP(子网IP).
  • 路由器LAN口连接的主机, 都从属于当前这个路由器的子网中.
  • 不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1).
  • 子网内的主机IP地址不能重复.
  • 但是子网之 间的IP地址就可以重复了.
  • 每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级, 最外层的运营商路由器, WAN口IP就是一个公网IP了.
  • 子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级 替换, 最终数据包中的IP地址成为一个公网IP. 这种技术称为NAT(Network Address Translation,网络地 址转换).
  • 如果希望我们自己实现的服务器程序, 能够在公网上被访问到, 就需要把程序部署在一台具有外网IP的服务器上. 这样的服务器可以在阿里云/腾讯云上进行购买

在上图中,我们有一份报文中含有目的ip和源ip,那他是如何在网络中发送的呢?

在谈上面问题的前,我们要知道,在当有非常多的主机的在一起的时候,我们就可以组成一个小的局域网,局域网中主机的ip的特点是ip网络号相同(表示在同一局域网下),主机号不同(标识各主机).

那在同一局域网下各主机是如何通信的呢?假设A主机向B主机通信

A主机直接将信息广播出去,在同一局域网的主机都可以接收到,但是他们会自动丢弃不是向自己请求的报文(信息),B主机接收到A主机发送来的报文后做出回应。

那要不是在同局域网中的A,B主机又是如何进行通信的?

我们知道路由器可以跨越局域网,可以在二个局域网中通信(既跨子网通信)。

路由器有二个ip

LAN口IP(子网IP):对内

WAN口IP:对网

 正因为有了着二种IP,当A主机要和B主机通信,就可以通过路由器的选择功能,报文不断的在网络中路由器中跳跃从而找到目的主机B。

下面我们来重点理解一下路由

4、路由

路由的过程, 就是这样一跳一跳(Hop by Hop) "问路" 的过程. 所谓 "一跳" 就是数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间

IP数据包的传输过程也和问路一样 

  • 当IP数据包, 到达路由器时, 路由器会先查看目的IP;
  • 路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
  • 依次反复, 一直到达目标IP地址
  • 路由表可以使用route命令查看
  • 如果目的IP命中了路由表, 就直接转发即可;
  • 路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配 时,就按缺省路由条目规定的接口发送到下一跳地址。

那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表 

  • 这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到 192.168.56.0/24网络;
  • 路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接 口,Flags中的U标志表示此条目有效(可以禁用某些 条目),G标志表示此条目的下一跳地址是某个路由器的 地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发 ;

报文通过路由器发送的大致过程:

  • 遍历路由表
  • 目的IP&路由表中配置的Genmask ,确定报文要去的目标网络
  • 对比结果和destination
  • 通过Iface发送报文

三、报文的分片 

1、为什么要分片

在后面我们学习的数据链路层中MAC帧协议,自己的有效载荷不能超过1500字节(MTU,可修改)。这就导致IP发送的报文不能超过1500字节,而TCP协议可能会发送超过1500字节的报文给IP协议,为了满足下一层的要求,IP协议就会将报文分片发送。

2、如何分片

在回答如何分片前,我们先进行回答IP协议的报头上来,前面我们还有三个 ,16位标识(id)和3位标志字段,13位分片偏移(framegament offset):没有说,下面解释一下:

16位标识(id)

 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个 id都是相同的.

3位标志字段 

  • 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到).
  • 第二位置为1表示禁 止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文.
  • 第三位表示"更多分片", 如果分片了的话, 最后一个分片置为1, 其他是0. 类似于一个结束标记

 13位分片偏移(framegament offset):

  • 是分片相对于原始IP报文开始处的偏移.
  • 其实就是在表示当前分片 在原报文中处在哪个位置.
  • 实际偏移的字节数是这个值 * 8 得到的.
  • 因此, 除了最后一个报文之外, 其他报 文的长度必须是8的整数倍(否则报文就不连续了)

 对于分片问题:我们要解决的二个问题怎么把分片收全,怎么合并。

问题1:怎么收全?

1、我们怎么知道报文分片;

  • 通过报文中的3位标志字段 :第三位表示"更多分片
  • 更多分片为1,就说明报文分片;
  • 更多分片为0&&13位分片偏移>0,说明分片了。

2、我们怎么去识别报文的分片是是同一个报文的?

  • 16位标识(id)
  • 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个 id都是相同的

3、分片报文那个在前那个在后

  • 更多分片为1而且片偏移为0在是第一个分片
  • 更多分片为0而且片偏移>0为最后一个
  • 其他位置:当前的起始位置+自身报文长度=下一个报文中填充偏移量的大小。

问题2、怎么合并? 

怎么保证分片合并的报文是正确的

  • 按照片偏移进行排序(升序)
  • TCP/IP有首部校验和

3、分片的影响 

什么是MTU

 MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制

  • 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充 位.
  • 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU.
  • 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分 片(fragmentation);
  • 不同的数据链路层标准的MTU是不同的;

对IP协议的影响

由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包

  • 将较大的IP包分成多个小包, 并给每个小包打上标签;
  • 每个小包IP协议头的 16位标识(id) 都是相同的;
  • 每个小包的IP协议头的3位标志字段中, 第2位置为0, 表示允许分片, 第3位来表示结束标记(当前是否是最 后一个小包, 是的话置为1, 否则置为0);
  • 到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层;
  • 一旦这些小包中任意一个小包丢失, 接收端的重组就会失败. 但是IP层不会负责重新传输数据

MTU对UDP协议的影响 

一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就会在网络层分成多个IP数据报.

  • 这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果UDP数据报在 网络层被分片, 整个数据被丢失的概率就大大增加了.

 MTU对于TCP协议的影响

  • TCP的一个数据报也不能无限大, 还是受制于MTU.
  • TCP的单个数据报的最大消息长度, 称为MSS(Max Segment Size);
  • TCP在建立连接的过程中, 通信双方会进行MSS协商.
  • 最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的 MTU).
  • 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值.
  • 然后双方得知对方的MSS值之后, 选择较小的作为最终MSS.
  • MSS的值就是在TCP首部的40字节变长选项中(kind=2)

相关文章:

[计算机网络]--IP协议

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、IP协议…...

MySQL问题记录

问题 Ubuntu2204 通过 apt 安装 mysql-server8.0.36 后,数次修改密码不生效,仍可无密码登录。 解决 mysql_native_password 是MySQL 5.7及之前版本使用的默认身份验证插件。在MySQL 8.0及更高版本中,默认的身份验证插件 caching_sha2_pass…...

LeetCode_Java_动态规划系列(1)(题目+思路+代码)

目录 斐波那契类型 746.使用最小花费爬楼梯 矩阵 120. 三角形最小路径和 斐波那契类型 746.使用最小花费爬楼梯 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。…...

Linux使用Docker部署在线协作白板WBO并结合内网穿透发布公网远程访问

文章目录 前言1. 部署WBO白板2. 本地访问WBO白板3. Linux 安装cpolar4. 配置WBO公网访问地址5. 公网远程访问WBO白板6. 固定WBO白板公网地址 前言 WBO在线协作白板是一个自由和开源的在线协作白板,允许多个用户同时在一个虚拟的大型白板上画图。该白板对所有线上用…...

petalinux烧写image.ub报错

xinlinx SDK烧写petalinux生成的BOOT.BIN和image.ub时,BOOT.BIN烧写正常,image.ub烧写报错如下 Erase Operation failed. INFO: [Xicom 50-44] Elapsed time 0 sec.ERROR: Flash Operation Failed串口助手操作擦除flash如图: 解决方法&am…...

[足式机器人]Part2 Dr. CAN学习笔记-Ch00-2 - 数学知识基础

本文仅供学习使用 本文参考: B站:DR_CAN 《控制之美(卷1)》 王天威 《控制之美(卷2)》 王天威 Dr. CAN学习笔记-Ch00 - 数学知识基础 Part2 4. Ch0-4 线性时不变系统中的冲激响应与卷积4.1 LIT System:Linear Time Invariant4.2 卷积 Convolution4.3 单位冲激 Unit Impulse—…...

【Linux】head命令使用

head命令 head是一个在 Unix 和 Unix-like 操作系统中常用的命令行工具,用于输出文件的前 n 行。默认为 10,即显示 10 行的内容。 语法 head [options] [file(s)] head命令 -Linux手册页 选项及作用 执行令 : head --help 执行命令结果…...

【书籍分享 • 第三期】虚拟化与容器技术

文章目录 一、本书内容二、读者对象三、编辑推荐四、前言4.1 云计算技术的发展4.2 KVM、Docker4.3 本书内容简介4.4 作者简介 五、粉丝福利 一、本书内容 《虚拟化与容器技术》通过深入浅出的方式介绍KVM虚拟化技术与Docker容器技术的概念、原理及实现方法,内容包括…...

数据结构之:堆

堆(Heap)是计算机科学中的一种特别的完全二叉树结构,它满足某种特定顺序,用于实现优先队列等数据结构。堆主要有两种类型:最大堆(Max Heap)和最小堆(Min Heap)。 定义 …...

助力探索社交出海最短变现路径,融云 1V1 音视频「限时免费」

在社交赛道,1V1 业务是最好的切入点。 对于初创公司来说,1V1 业务的技术成本和运营成本相对可控,并且具备与秀场直播等业务融合拓展的巨大空间。未来,相信 1V1 业务会吸引更多开发者投身其中。 一位社交出海经验丰富的从业者曾在…...

汇编工具理解

当百度读取键盘敲入字符等得到的代码,譬如如下 section .datainput_buffer db 1 ; 保存输入字符的变量section .text global _start_start:mov eax, 3 ; 设置文件描述符为0 (stdin)xor ebx, ebx ; 清空ebx寄存器mov edx, 1 ; 要读取的字…...

Leetcoder Day21| 回溯理论基础+组合

语言:Java/Go 回溯理论基础 回溯函数也就是递归函数; 所有回溯法的问题都可以抽象为树形结构; 回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的树的深度。 适用的题…...

备战蓝桥杯Day17 - 链表

链表 基本概念 链表是由一系列节点组成的元素集合。 每个节点包含两部分:数据域 item 、指向下一个节点的指针 next 通过节点之间的相互链接,形成一个链表 1. 链表的初始化 # 手动建立链表 # 链表的初始化 class Node(object):def __init__(self, …...

登录页设计新选择:毛玻璃和新拟态风格,非2.5D和插画风

登录页给潜在用户传递了产品的品牌调性,是非常重要的一类页面,之前2.5D和插画风格的登录页流行一时,不过这阵风好像过去了,新的风格开始涌现了。 一、越来越流行的毛玻璃设计风格 毛玻璃风格是指将背景模糊处理,使得…...

14:00面试,14:05就出来了,问的问题有点变态。。。

下午两点,我准时走进了面试的会议室,心中既有期待也有紧张。然而,仅仅五分钟后,我便走出了会议室,心中充满了困惑和挫败感。面试官的问题确实出乎我的预料,它们既深入又具体,让我有些措手不及。…...

关于纯前端想要变成全栈编写接口的学习推荐

推荐学习uniappuniclouduniadmin 学习成本低,不到一个月就能开发出自己的接口,上传到服务空间,并且能够实现后端的功能,能够调用接口 当然这里使用的不是mysql数据库,而是unicloud推荐的存储方式 操作起来也很方便...

Rust升级慢,使用国内镜像进行加速

背景 rustup 是 Rust 官方的跨平台 Rust 安装工具,国内用户使用rustup update的时候,网速非常慢,可以使用国内的阿里云镜像源来进行加速 0x01 配置方法 1. Linux与Mac OS用户配置环境变量 修改~/.bash_profile文件添加如下内容&#xff1…...

Base64 编码 lua

Base64 编码 -- Base64 字符表 local base64_chars { A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,…...

41.仿简道云公式函数实战-数学函数-SUMIF

1. SUMIF函数 SUMIF 函数可用于计算子表单中满足某一条件的数字相加并返回和。 2. 函数用法 SUMIF(range, criteria, [sum_range]) 其中各参数的含义及使用方法如下: range:必需;根据 criteria 的条件规则进行检测的判断字段。支持的字段…...

挑战30天学完Python:Day22 爬虫

🎉 本系列为Python基础学习,原稿来源于 30-Days-Of-Python 英文项目,大奇主要是对其本地化翻译、逐条验证和补充,想通过30天完成正儿八经的系统化实践。此系列适合零基础同学,或仅了解Python一点知识,但又没…...

XML Group端口详解

在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

React Native 导航系统实战(React Navigation)

导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...