计算机网络(十) —— IP协议详解,理解运营商和全球网络
目录
一,关于IP
1.1 什么是IP协议
1.2 前置认识
二,IP报头字段详解
三,网段划分
3.1 IP地址的构成
3.2 网段划分
3.3 子网划分
3.4 IP地址不足问题
四,公网IP和私有IP
五,理解运营商和全球网络
六,路由
七,IP报文的分片与组装
一,关于IP
1.1 什么是IP协议
场景:我数学成绩很好,10次考试6次满分,然后大家都在传,说我有“数学考满分的能力”,那么我一定能做到吗? --> 不一定,只是有很大的概率考满分
问题:如何保证我每次都考满分?
解答:
- 我有很大的概率考满分,如果没考满分,就重新考;
- 这样就能保证每次都考满分。老师是给我安排考试的人(提供策略),我是真正“执行考试”的人,没考到满分就重新考,这相当于超时重传
- 然后老师提供策略,就相当于Tcp,所以Tcp在网络中更多的是:“提供可靠性策略”,真正去考试的是“我”,我就是 --> IP协议。
IP协议的本质工作:提供一种能力,将数据从A主机跨网络送到B主机。
用户需要的是:提供一种能力,将数据“可靠地”将数据从A主机跨网络送到B主机;按照现在的网络,将数据成功送过去的概率很高,但不是100%,所以传输层提供策略,下层提供能力,两者结合就能保证“我”每次都能考满分。
1.2 前置认识
数据发送的过程中会经过很多路由器,就好比我们网络基础1的旅游的例子
- 要对所有的主机进行标识,用源ip和目的ip来标识源主机和目的主机;IP分为私有IP和共有IP
- 旅游的例子,我们要先去故宫,得先去北京:“去目标城市,去目标地点”;唐僧要去西天的大雷音寺,拜见佛祖求取真经:“西天就是目标城市,大雷音寺就是目标地点,但是到了目标地点还不够,还得通过端口找到佛祖这个进程,然后交数据”
IP地址 = 目标网络 + 目标主机
任何一个主机都是在某个子网上的,由这个子网的路由器连接,发送数据后要先到达主机B所在的的子网网络(先到达目标网络),然后想办法将报文交给主机B(交给目标主机) --> 依据:路由器的转发机制。(会跨越很多子网)
我们处在一个精心设计的世界中,你有身份证号,上学时有学号,上班时有工号,但是我们学号不是单纯的数据,是有格式的:学号 = 年纪编号 + 学院编号 + 专业编号 + 班级编号 + 学号03
场景:
- 我捡到一个校园卡,只有学号432008,大部分人不知道这个学号上对应的学院编号是多少,我只知道这是个学号,但这肯定是其它学院学生的,因为这个学号开头和我不一样!
- 然后我每个学院都去问一遍,这个归还校园卡的过程本质是“查找”,查找的本质就是“排除”,一个一个学院去问效率太低。
- 那么每个学院都有学生会主席,每个学生会主席都给自家学院建了一个群,然后每个主席又相互建了一个主席群,而且学生会主席肯定知道其它学院的编号,然后我艾特主席,把卡照片发给他,然后主席再把照片发主席群里去
- 然后主席艾特了以下电气学院的主席,然后电气主席说这是我们学院的学号,然后电气主席再把照片发到他的电气学院群里去艾特小美,然后交换联系方式,最后物归原主
上面一顿操作下来,让整个校园卡归还过程快速合理,一开始我说不是我学院的,排除了我这个学院的所有人,然后主席找到了电气主席本质是排除了其它学院,就加速了归还过程。
查找的本质是“排除”,所以建立群的方式,是提升了淘汰的效率,以前一次淘汰一个人,现在是淘汰一群人
我们把我自己的学院编号叫做源IP地址,把要归还的校园卡的学校叫做目的IP,我的群叫做局域网主机,把主席叫做局域网出口路由器,把主席群叫做公网,像这样一个一个群,就能提高效率,因为一次可以排除很多东西
IP协议意义:构建网络的时候,为我们将来定位一台主机,提供基础保证。
二,IP报头字段详解
两个老问题:
- 报头和有效载荷如何分离?
- 如何将有效载荷交付给上层?
①4位首部长度
- 真实报头长度 = 4位首部长度(假设是x) * 4,范围为[0000, 1111],换成十进制就是[0, 15]
- 标准报头长度为20字节,那么x就是5,首部长度就是[5, 15],就是[20, 60]字节之间,这和Tcp是一模一样的
②16位总长度
- 代表报文总长度,所以报文长度 = 固定长度报头 + 自描述字段,
- 有效载荷长度 = 总长度 - 固定长度报头,就能将有效载荷和报头分离
③4位版本
- 这个是固定死的,对于IPv4来说就是4
- 但是现在有个问题,ip地址是32位,也就是42亿个,现在入网设备太多了,面临着“IP地址不足”的问题
- 解决方法有很多,NAT,还有IPv6,其中IPv6相当于新的协议了,它用128位来标识,IPv6和IPv4不兼容,IPv6我国最强大,主要用在国内内网,IPv4主要用在公网,这个我们后面讲运营商在讲,现在默认认为是4
④8位服务类型
- 丢包问题是无法解决的,这4个选项是为了在进行数据包转发时,给路由器提供转发依据的,提高可靠性,了解一下即可
- 3位优先权字段(已经弃用),4位TOS字段, 和1位保留字段(必须置为0)。4位 TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。对于 ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要
⑤8位生存时间(TTL)
- 数据每经过一个路由器就是一次转发,但是网络太大了可能出bug,而且接收方可能会挂掉无法接收数据,那么IP报文会被无限转发,这种报文称为流离报文
- 所以我们给每个报文设置一个生存时间,表示该报文在转发的时候能经过的路由器的跳数,每经过一个路由器,生存时间就 -=1,如果为0时,路由器直接丢弃报文
⑥8位协议
- 指的就是我们要把IP的有效载荷交付给上层的哪一个协议
- 下层分离报头和有效载荷后,根据8位协议将有效载荷交付给上层的指定协议
⑦32位源IP和32位目的IP
- 我们以前在进行socket套接字编码的时候,要求填充 ip + port,现在可以认为:我们在应用层要把点分十进制的ip字符串转化成4字节的ip是为了填充报头的这两个内容的,而32位源IP和32位目的IP是提供给路由器让它进行路径选择的
- Tcp只存在操作系统上,在各路由器中是没有Tcp层的
- 只有通信双方主机具有Tcp层,因为所有路由器只工作在网络层。(路由器可能有Tcp,但是不用)
⑧16位标识,3位标志和13位片偏移后面讲
三,网段划分
3.1 IP地址的构成
IP地址分为两部分:网络号和主机号
- 网络号:保证相互连接的两个网段具有不同的标识
- 主机号:同一段网络内,主机之间具有相同的网络号,但是必须具有不同的主机号
这就好比我们学号的班级加个人编号一样,一个班级内的同学前面的数字是一样的,这叫做同一个网段,后面两个数字或者三个数字不一样,这就是主机号不能相同
- 路由器本质也是一个特定子网的主机,所以路由器它自己也要配置IP地址和主机号
- 路由器实现转发,那么路由器要连接至少两个局域网/子网,所以路由器也一定要配置多个IP地址和主机号 --> 原因:路由器有多张网卡
- 路由器一般是一个子网中的第一台设备,它的IP地址一般都是“网络号.1”
- 路由器的核心功能是IP报文的转发,但是路由器的功能不仅仅如此,比如构建局域网/子网,子网中的主机的IP就是路由器分配的,这个后面公网IP和私有IP再将讲
- 内网IP:如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复;并且路由器里面也有操作系统的,所以路由器会对子网IP做管理(DHCP协议)
DHCP协议:全称 Dynamic Host Configuration Protocol,动态主机配置协议
- DHCP通常用于大型网络环境中,主要工作就是集中地址管理,分配IP地址,使网络中的主机动态获得IP地址,Gateway地址,DNS服务器地址等信息,能够提升地址的使用效率
- DHCP是基于UDP的,一般的路由器都有DHCP,所以路由器也可以看作是DHCP服务器
- 我们连接校园网或者WiFi时,都会要求输入密码,这其实就是路由器在验证你的身份,验证通过后,路由器就会给你动态分配一个IP地址,然后我们就可以进行各种上网动作了
3.2 网段划分
故事:网络开始兴起的时候是32位的IP,可以标识2^32差不多42亿,用完就没了,所以我们可以认为IP地址是一种有限的资源,就意味着各个国家是要竞争IP的
IP分为网路地址和主机地址,曾经提出的划分这两个地址的方式,是把IP地址分为5类,称之为分类划分法:
各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
但是随着网络发展,这种划分方式问题很快出现:
- 大多数组织都申请的B类网络地址,导致B类网络地址很快就被分完了
- 所以A类浪费了大量的地址,而且每一个子网中的主机号也很难全部用完,例如,申请一个B类地址,理论上一个B类子网能构建6万5千多个主机IP,A类的更多,但是实际上一个子网不会有这么多主机,因此大量的IP被浪费掉了
- 所以网络的研究员针对性地提出了一种划分方案:CIDR
3.3 子网划分
注意:该方法是针对上面五种IP的类类型提出的,因为可以看到有些IP地主机号太多了,实际情况下不需要这么多主机,所以需要将主机号减少,减少IP的主机数,就能划分出更多子网,减少IP地址浪费
CIDR,全称Classless Interdomain Routing:
- 在分类划分法的基础之上,引入一个额外的子网掩码,来区分网络号和主机号,这个掩码也是一个32位正整数,用”0“和”1“表示,通常用一串”0“来结尾
- 将IP地址和当前网络地子网掩码进行”按位与“,得到的结果就是当前所在网络的网络号
有了CIDR之后,一个网络就被更细粒度地划分成了一个个更小地子网,这样IP地主机号就越来越小,就可以减少IP地址被大量浪费,下面是具体步骤:
- 比如在某个子网中,将IP地2前24位作为网络号,那么该网络地子网掩码地32个比特位中前24位就是1,后面8位就是0,每8位以点隔开,最后就是255.255.255.0
- 假设子网中有一台主机192.128.128.0,那么将这个IP与掩码进行“按位与(&)”计算后,就是192.168.128.0,就是这个子网对应地网络号
- 子网掩码,可以对32位IP进行任意划分,为了书写方便,我们一般把子网掩码这样表示:192.168.128.0 /24,“/24“ 表示整个IP地址当中前24个比特位位1,后面8个为0
特殊的IP地址:
有些IP具有特殊用途,不能作为主机地IP地址:
- IP地主机地址为0,就是网络号,代表这个局域网
- 将主机号设为1,就成为了“广播地址”,用于给一个链路中相互连接地所有主机发送数据包
- 127.*地IP地址通常用于本机环回测试,通常是127.0.0.1
3.4 IP地址不足问题
CIDR虽然一定程度上缓解了IP地址浪费的问题,但是没有增加IP地址的绝对上限,仍然不是很够用,所以有下面三种解决方法:
- 动态地址分配:只给接入网络的设备分配IP地址,因此同一个MAC地址的设备,每次接入互联网中,得到的IP地址不一定是相同的,简单来说就是路由器发放和回收IP,在校园网中,我们在宿舍,教室和图书馆接入的校园网,每次的IP都是不相同(共享IP,你要用就给你,不用或用完了还给我)
- NAT技术,后面介绍
- IPv6:不是IPv4的升级版,是真正变革性的技术,与IPv4毫不相干,是两种不同的协议,用128字节表示一个地址,但是IPv6还没有普及
四,公网IP和私有IP
如果一个组织内部组件局域网,在这个局域网内,IP地址只用于局域网内地通信,而不直接连接到公网上,理论上使用任何IP都可以,但是为了规范,RFC 1918 规定了用于组件局域网地私有IP地址:
- 10.* ,前8位是序列号,共16777216个地址
- 172.16.*到172.31.*,前12位是网络号,共1048576个地址
- 192.168.*,前16位是网络号,共65536个地址
包含在上面三个范围中地,都成为私有IP,其余地都是公网IP,我们连接云服务器时,连接的这个IP就是云服务器地公网IP:
同时,我们也可以通过ifconfig这个命令来查看我们这台机器私有IP:
在我们Windows的cmd控制台上输入ipconfig命令,也可以看到大量以192.168开头的私有IP:
在我们的使用生涯中,我们从一开始使用的IP其实都是私有IP,在云服务器中才接触到公网IP
问题:数据是如何发送到服务器的?
解答:路由器上有两种网络接口,分别是LAN口IP,WAN口IP:
- LAN口(Local Area Network):表示连接本地网络的端口,主要与局域网中的交换机,集线器或PC主机相连,LAN口IP也叫做子网IP
- WAN口(Wide Area Network):表示连接广域网的端口,一般指互联网,WAN口IP也叫做外网IP
我们使用的电脑,家用路由器,运营商路由器,广域网以及我们要访问的服务器之间的关系大致如下:
- 不同的路由器,子网IP其实是一样的(通常都是192.168.1.1),子网内主机IP不能重复,但是不同子网的IP地址可以重复
- 我们的家里的路由器连接的一定是运营商的IP,所以我们家里的路由器与运营商其实是构建成一个子网的,所以我们家里路由器的WAN口IP也是运营商路由器的内网IP
- 所以我们的报文出去的时候,它会做一种策略:会将源IP替换成每一个路由器的WAN口IP;所以上面我们的请求从家用路由器出去后,dst不变仍为122.77.241.3,WAN口IP会被替换成10.1.1.2也就是家用路由器的WAN口IP,然后交给运营商路由器
- 然后运营商路由器再次替换src为运营商路由器的WAN口IP,这样依次转发,最后到达对方主机时,dst不变,src就变成了对方路由器的WAN口IP --> 这种不断替换私有IP的过程我们叫做 —— NAT技术
- IP资源不够,所以用这种策略,用公网IP构建网络的话,IP资源是远远不够的,所以就介入到上面这种模式,可以极大减少主机数,私有IP全由路由器维护,所以互联网 = 私有IP + 共有IP,前者主要给底层路由器的主机用,后者主要给路由器用
问题:为什么私有IP不能出现在公网中?
解答:
- 不同局域网中主机的IP可能是相同的,所以私有IP不能标识唯一的一台主机,所以私有IP不能出现在公网中
- 而且也因为IP地址不足的问题,我们不能让主机直接使用公网IP,私有IP的重复也意味着我们可以在不同的局域网中使用相同的IP地址,环节二IP不足
五,理解运营商和全球网络
问题:我们是怎么上网的?
解答:
- 有运营商的工作人员拉网线,然后光纤入户。需要两个设备,一个是调制解调器(猫),路由器,一般是两个盒子。
- 光纤里面有很多玻璃丝,用来传输光信号或者高低电平,然后光纤插到解调器上,解调器的作用是模拟信号转数字,数字信号转模拟,计算机只认识01序列,所以解调器将模拟信号转化成数字信号后转给家用路由器
- 但是光拉网线不行,还得“交钱”,然后就会给你家路由器一个账号和密码之后,路由器才能上网。
- 同时,路由器还有一个功能就是构建局域网,然后我们的wifi就可以看到了路由器名字了,但是我怕别人来蹭网,于是在除了运营商的账号密码外,还有一个路由器账号和密码,所以路由器里面存在着两套账号密码
关于运营商:
- 在上网前有一个步骤非常重要:网络基础设施建设,基础设施建设好了,网民就多了,接着就会孵化出大大小小的互联网公司,然后提供更多工作岗位,推动经济发展
- 但是这个基础建设,是非常耗时耗力的,而且回报周期很长,所以一般的私人企业不愿意做这种活儿,所以咱们国内的那三个公司肯定也不愿意做,但是我们国家“要求”你这么做,同时国家也会大力扶持国企进行基础设施建设,“强迫”运营商去建设
- 在20年前,手机的流量费是非常贵的,下个图片可能5毛钱就没了,所以基础设施搞好,还要降流量费,这样才会有更多人进来
- 而且你不仅要城里的人能上网,还得要村里的人也能上网,所以需要很多基层的工作人员下基层安装维护设备,就是来你家里安装网线的人
- 如果运营商没钱了,国家就来给补给,所以有一个强大的国家,才会有我们国家如此丰富的网络基础设施,让人随时随地都可以上网
关于全球网络:
- IP地址是一份大的资源, 在分配的时候不是按国家大小来分配的,一般是按照国家组织地区人口综合评估来分发的IP个数的
- 各个国家是有自己的国际路由器的,这个路由器彼此都是连接的,就类似于我们前面的学生会主席,我们国家的子网掩码是0000 0010 0000 0000 0000 0000 0000 0000,也就是前8位0000 0010
- 前面8个比特位就不用了,然后每个省也有自己的省路由器,34个省,2^6,然后我们就可以拿着前面的6个比特位来进行编号,然后6+8=14,所以子网掩码就是14位,之后国际路由器也就可以和我们的国内路由器进行通信了
- 然后每个省有很多市,然后再次分配4个比特位进行编号,到了市路由器之后,子网就变成了14+4=18了。
- 然后这个地区的ip开头就都是同样的的,假设西安是0000 0010这是国际掩码,然后0000 10这是省路由器掩码,然后00 10这是市编码,后面就是主机号了
- 一共是0000 0010 0000 1000 1000 0000 0000 0000,换成点分十进制就是2.8.128.5
- 当一个外国人要想访问2.8.128.5时,先转化为0000 0010.0000 1000.1000 0000,最后一个就是5 --> 0000 0101 ,先发现不是他国内的IP,然后把请求交给美国国际路由器,然后扔到群里面,艾特中国路由器,然后中国路由器再把请求在国内的省路由器群里面艾特了西安,然后到了西安后,西安再问,最后找到2.6.126.5的主机,进行访问
- 而当请求到了我们国内路由器,之后的所有工作都是由运营商做的
六,路由
主机A要把数据发给主机B,是要先根据目标IP,经过路由完成转发,实际是一跳一跳转发的
我们可以查看当前主机的路由表:
IP数据包的传输过程中会遇到很多路由器,每当数据包到一个路由器后,路由器会查看该数据的目的IP地址,并告知数据下一跳该往哪跳
问题:查路由表是怎么查的呢?
解答:拿着目标主机的IP地址,按位与&上路由表中的子网掩码,然后和Destination做对比,如果比对不成功,如果不是就直接对比下一个掩码和Destination,如果对比成功,那么表示目标网络正确,就通过eth0把数据发送出去
我们查路由器表,会有下面四种结果:
- 路由器不知道下一跳要去哪(这种情况基本不会发生,如果发生就是该路由器没配置好,算法设计有问题。)
- 给你转到下一跳
- 路由器不清楚,但是会给我们转入默认路由
- 已经到达目标局域网的入口路由器
对于转入默认路由,一般是“同网段的另一台路由器”,但是一个子网一般只有一个路由器,所以我们连接的路由器一般都是子网IP对应的1号路由器,如果我判断一个报文的目的IP不是我这个子网的,所以直接交给下一跳
七,IP报文的分片与组装
实际上在一台主机上,报文并没有通过网络层直接发出去,而是继续交给了自己的下一层协议(数据链路层,属于网卡的驱动层,还有物理层),数据链路再去转发给路由器或者同一个网段的主机。
但是数据链路层,无法一次发送过大的报文,所以就要求上层不能给我交付过大的报文。
ifconfig命令可以查看当前协议栈的一些信息,其中上面红框框的 mtu 表示当前的数据链路层的MAC帧一次最多发送1500字节的数据,这个数据包括IP的报头和IP的有效载荷
但是,如果一个报文超过1500字节,但是又数据链路层又不得不发,这时候就会对报文进行分片, 而且既然有分片,那么必定有组装,所以就要求IP报头里包含分片组装的相关信息:
- 其中16位标识就是IP报文的编号,分片之后的IP报文编号是相同的
- 对于3位标志位字段,第二位为0,标识允许切片,第三位用来结束标记,表示当前是否是最后一个小片,是的话为0,不是为1
- 对于13位偏移,假设一个报文都分成了很多片,这个偏移量表示这个小片在原来的大报文里的偏移量,用于组装报文
- 对于分片后的每个IP报文,都会重新添加IP报头的
问题:如何组装的?
解答:
- 先确保将所有的分片全都聚在一起(相通的标识)
- 然后通过片偏移排序(完成组装),去掉报头然后拼接
问题:我如何知道一个IP报文是分片报文呢?
解答:
- 只要我收到了后面的切片部分,那么片偏移一定不为0,如果片偏移为0,我们还有个三位标识符的结束标识,简单来说,如果一个IP报文不是分片的,那么片偏移=0,更多分片=0,一个不为0那么就是分片的
- 总结:片偏移 != 0 || 更多分片 == 1,只要符合任意一个条件,就说明这个IP是被分片的
问题:如何知道切片报文是否丢失?
解答:丢失报文有丢失,那么一般是三种情况:1,丢第一个 2,丢中间的 3,丢最后一个
- 如果丢了第一个,如果根据片偏移排序时没有一个报文的片偏移是0的,就能甄别出来
- 如果丢最后一个,收到的报文没有任何一个更多分片结束标记为0,那么就认为丢最后一个
- 对于丢中间,在进行排序时,第一个报文长度就是下一个报文的片偏移,假设三个1500长度的报文,第一个片偏移是0,排完序后第二个直接就是3000了,但是我们两个报文片偏移加起来才1500,那么我可以认为第二个报文丢了,识别出丢中间
问题:建不建议分片呢?
解答:不建议。因为在IP当中,如果有任意一个分片丢失导致组装失败,那么在Tcp看来就相当于整个报文丢失了,会进行全部重发,所以分片可能会增加丢包概率,降低传输效率
相关文章:

计算机网络(十) —— IP协议详解,理解运营商和全球网络
目录 一,关于IP 1.1 什么是IP协议 1.2 前置认识 二,IP报头字段详解 三,网段划分 3.1 IP地址的构成 3.2 网段划分 3.3 子网划分 3.4 IP地址不足问题 四,公网IP和私有IP 五,理解运营商和全球网络 六ÿ…...

速速收藏!这些2024年上映的AI电影与短剧,申请加入你的国庆假期宅家计划!
2024年上映的AI电影 01 科幻惊悚电影《致命AI Afraid》 导演:克里斯韦兹上映日期:2024-08-30(美国)片长:84分钟剧情简介:Curtis一家被选中去测试一种革新性的居家设备:数字家庭助手AIA,包括各种感应设备和摄像头等,…...

23.2 prometheus为k8s做的4大适配工作
本节重点介绍 : k8s监控中的4大采集类型总结prometheus为k8s监控做的4大适配工作 k8s关注指标分析 在监控每个细分的领域时,我们都要先思考下到底需要关注哪些方面的指标。k8s中组件复杂,我们主要专注的无外乎四大块指标:容器基础资源指标…...

1、如何查看电脑已经连接上的wifi的密码?
在电脑桌面右下角的如下位置:双击打开查看当前连接上的wifi的名字:ZTE-kfdGYX-5G 按一下键盘上的win R 键, 输入【cmd】 然后,按一下【回车】。 输入netsh wlan show profile ”wifi名称” keyclear : 输入完成后,按一下回车&…...

循环链表和双向链表
一、 带尾指针的循环链表的合并 算法步骤: p存表头结点——pTa->next;Tb表头连接到Ta表尾——Ta->nextTb->next->next;释放Tb表头结点——delate Tb->next;修改指针——Tb->nextp; LinkList Connect(LinkList Ta,LinkList Tb){pTa->next; …...

【Linux庖丁解牛】—Linux基本指令(中)!
🌈个人主页:秋风起,再归来~🔥系列专栏: Linux庖丁解牛 🔖克心守己,律己则安 目录 1、rmdir与rm指令 2、man指令 3、cp指令 4、mv指令 5、cat与tac指令 6、重定向 7、more指令 8、…...

【电路笔记】-运算放大器微分器
运算放大器微分器 文章目录 运算放大器微分器1、概述2、运算放大器微分器的表示2.1 理想微分器2.2 输出公式2.3 交流分析3、实际微分器3.1 理想配置的局限性3.2 带串联电阻的伪微分器3.3 具有并联电容器的伪微分器4、总结1、概述 在我们之前关于积分器运算放大器的文章中,我们…...

【Unity踩坑】使用内购时获取Google Play license key
在Unity中使用了IAP(内购)后,需要设置Google Play license key。 这个key需要在Google Play Console中(https://play.google.com/console),找到相应的应用,在左侧“创收设置”里可以找到license…...

华为OD机试真题-数组拼接-2024年OD统一考试(E卷)
最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 每一题都含有详细的解题思路和代码注释,精选c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。 题目描述 现在有多组整数数…...

【Android 14源码分析】Activity启动流程-2
忽然有一天,我想要做一件事:去代码中去验证那些曾经被“灌输”的理论。 – 服装…...

ubuntu 18.04 cuda 11.01 gpgpu-sim 裸机编译
1,环境 ubuntu 18.04 x86_64 cuda 11.01 gpgpu-sim master commit 90ec3399763d7c8512cfe7dc193473086c38ca38 2,预备环境 一个比较新的 ubuntu 18.04,为了迎合 cuda 11.01 的版本需求 安装如下软件: sudo apt-get instal…...

【Kubernetes】常见面试题汇总(五十二)
目录 116. K8S 集群服务暴露失败? 117.外网无法访问 K8S 集群提供的服务? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二)” 。 题目 69-…...

o1-preview 在 IMO 2024 第一题的实测表现
相关博客:Learning to Reason with LLMs 以及 Introducing OpenAI o1-preview 测试了 IMO 2024 的第一题,OpenAI-o1-preview 的解题过程包括两部分:思考和推理。 正确答案是全体偶数,o1-preview 的 **思考方向正确,推…...

iOS--RunLoop原理
前言 曾经在写项目的时候遇到过这么一个问题。: 项目中添加了一个tableview,然后还有一个计时器,当滑动tableview的时候会阻塞计时器,你得执行这么一段代码后,计时器才能正常运行。 RunLoop.current.add(timer, for…...

并查集——从LeetCode题海中总结常见套路
目录 并查集定义 LeetCode128.最长连续序列 先去重再sort: 改进去重的方法: 参考: 并查集定义 在计算机科学中,并查集是一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查…...

深入理解作用域【JavaScript】
一、作用域的内部原理 JavaScript 的作用域机制是理解变量如何被访问和存储的重要概念。下面详细介绍作用域的内部原理,包括编译、执行、查询、嵌套和异常处理这五个步骤。 1. 编译 在 JavaScript 的执行过程中,首要的步骤是编译。尽管JavaScript是解…...

微信小程序实战教程:如何使用map组件实现地图功能
在微信小程序中,map组件是一个非常实用的功能,它可以帮助我们快速实现地图展示、定位、标注等操作。本文将详细介绍如何在微信小程序中使用map组件,带你轻松掌握地图开发技能。 一、map组件概述 map组件是微信小程序官方提供的一个地图组件…...

张雪峰谈人工智能技术应用专业的就业前景!
一、张雪峰谈人工智能技术应用专业 在教育咨询领域,张雪峰老师以其深入浅出的讲解和前瞻性的视角,为广大学子提供了宝贵的专业选择建议。对于人工智能技术应用专业,张雪峰老师通常给予高度评价,认为这是一个充满无限可能且就业前…...

机器学习课程学习周报十五
机器学习课程学习周报十五 文章目录 机器学习课程学习周报十五摘要Abstract一、机器学习部分1. 统计推断与贝叶斯推断2. GMM和EM算法补充3. 马尔可夫链蒙特卡罗法3.1 蒙特卡罗法3.2 马尔可夫链3.3 Diffusion模型中的马尔可夫链 总结 摘要 本周的学习涵盖了统计推断和贝叶斯推断…...

rabbitMq------客户端模块
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言消费者模块信道管理模块管理的字段提供的接口 信道内存管理连接管理类 前言 在RabbitMQ中,提供服务的是信道,因此在客⼾端的实现中&…...

地理定位营销与开源AI智能名片O2O商城小程序的融合与发展
摘要:本文阐述地理定位营销的概念、手段及其在商业中的应用,探讨开源AI智能名片O2O商城小程序如何与地理定位营销相结合,为企业营销带来新的机遇与挑战。 一、引言 在当今数字化营销的时代,地理定位营销已成为一种重要的营销手段…...

解决Vue应用中遇到路由刷新后出现 404 错误
解释: Vue 应用中遇到路由刷新后出现 404 错误,通常是因为 Vue 应用是个单页应用(SPA),它通过 Vue Router 管理路由,通过 HTML5 History Mode 实现页面导航无需重新加载页面。当直接访问非首页的路由或者刷…...

在window10下使用directml加速phi-3模型的一些记录
1.安装anaconda,安装python 安装torch等参考网上资料非常多 不细描述 2.参考微软官网【在windows上通过DirectML启用Pytorch文档,检查系统版本 检查gpu版本 3.参考微软官网【在windows上通过DirectML启用Pytorch】文档,安装torch_directml模…...

通信工程学习:什么是OSPF开放式最短路径优先
OSPF:开放式最短路径优先 OSPF(Open Shortest Path First,开放式最短路径优先)是一种内部网关协议(IGP),被广泛应用于计算机网络中,特别是在构建大型和复杂的网络时。以下是对OSPF的…...

《中国电子报》报道: 安宝特AR为产线作业者的“秘密武器
近日,中国电子报在其文章《下一代工业智能终端重新定义制造业》中对安宝特的增强现实(AR)解决方案给予了高度评价,称其为产线作业者的“秘密武器”。这一创新技术改变了传统制造业的作业方式,使得操作人员能够在生产过…...

【Android】Handler消息机制
文章目录 前言概述核心组件概述Android消息机制概述 Android消息机制分析ThreadLocal的工作原理ThreadLocal基础ThreadLocal实现原理 MessageQueueLooperHandler的工作原理总结 前言 本文用于记录Android的消息机制,主要是指Handler的运行机制。部分内容参考自《An…...

大数据必懂知识点:Parquet、ORC还是Avro作为数据存储格式,哪种在性能和压缩率上更优
目录 第一章 相关理论 1.1 Parquet格式介绍 1.1.1 起源与发展 1.1.2 特点与优势 1.2 ORC格式介绍 1.3 Avro格式介绍 1.3.1 跨语言支持 1.3.2 动态映射 1.3.3 丰富的数据模式 1.3.4 数据模式灵活性 第二章 种格式性能比较 2.1 读写性能对比 2.2 查询性能对比 2.3 压…...

P1387 最大正方形
题目描述 在一个nm 的只包含 0 和 1 的矩阵里找出一个不包含 0 的最大正方形,输出边长。 输入格式 输入文件第一行为两个整数n,m(1≤n,m≤100),接下来 n 行,每行 m 个数字,用空格隔开,0 或 1。 输出格式 一个整数…...

Python知识点:如何使用Multiprocessing进行并行任务管理
开篇,先说一个好消息,截止到2025年1月1日前,翻到文末找到我,赠送定制版的开题报告和任务书,先到先得!过期不候! 如何在Python中使用Multiprocessing进行并行任务管理 在现代编程中,…...

React常见优化问题
在React开发中,性能优化是一个重要且持续的过程,旨在提升应用的响应速度和用户体验。以下是一些常见的React优化问题详解,并附上相应的代码示例。 1. 避免不必要的组件渲染 React组件的渲染是由其props或state的变化触发的。但是,…...