网络层·IP协议

news2024/10/5 13:44:03

承接前文TCP协议-CSDN博客

简介

协议头格式

网段划分(重要)

 

        划分方法

 

IP地址的数量限制(背景介绍)

        私有IP地址和公网IP地址(提出解决思路)

        NAT技术(解决方法)

 

路由

 

网络层

在复杂的网络环境中确定一个合适的路径
 

IP协议

主机: 配有IP地址, 可以认为就是你的电脑; 路由器: 即配有IP地址, 又能进行路由控制; 节点: 主机和路由器的统称;
 

基本认知

5e3a2e8dbab0415b86002bc960b1c072.png

        拥有数据将数据从A主机跨网络到B主机的能力,并且是择优选择,关于择优选择,我们做个比喻就知道了,比如我们去旅游,A在北京想去海南,这个时候我们可以知道,A有很多种去海南的路径(这里指的是经过的城市,而不是去往的方式),A可以径直向南经过石家庄、郑州、武汉等等城市向南走最方便的路线,但是你也可以向北走,反正地球也是圆的不是,但是这并不是最优的路线,那么在网络中秉着择优选择的道理,它是不会这样走的,它一定会选择最优的路线,来到达目的地

        基于上述,就得引入两个重要的属性,目的IP和源IP,前者指的是我们要到哪里去,指的是海南,后者指的是你上一站的地址,并且在后续的介绍中会知道它是动态的,一直在改变

        在一切的开始我们首先把结论说明再来详细介绍:ip = 目标网络 + 目标主机,用旅游的例子来说,目标网络指的就是海南,但是上面有一点没有说明的是,A去海南旅游并不是去这个省份,而是具体的某个城市,比如说三亚,这里的三亚指的就是目标主机,这就像A在去往海南的路上时,有人问他去哪里,A会回答说:去海南(目标网络),但是当A到达海南的时候,A的回答就会变成:去三亚(目标主机)

        

协议头格式

 

11e5ec35601644d4923ceefb0e1d2f9a.png
 

16位标识、3位标志、13位片偏移暂时不介绍,在最后介绍,这里面最重要的字段就是32位源地址和32位目标地址这两个了

 

同以往的思路,我们先解决两个问题:

1.如何将报头和有效载荷分离?

2.如何交付?

 

4位首部长度、16位总长度、8位协议

08172fc3b3044f7d8e98edff1031a576.png

这里有一点和TCP不一样,为什么这里有总长度,但是TCP协议中却没有了呢?这是因为性质不一样,我们要明确认知到TCP是字节流,而IP则是以报文的形式进行传输,是一个一个的,因为我们无法保证收取到的报文是一个完整的报文,所有我们得有16位总长度来自描述,帮助我们确认是否收到了一个完整的报文。问题1得到解决

 

16位首部检验和

050a7858477e4429bbd6e0d579f5e87e.png

 

8位生存时间

4d6ba2b0dac54bc9a7419ef28d151e34.png

虽然说只有8位,2^8一共256个数值,但是其实已经很大了,我们数据的路由通常也就几次就可以到达目标网络,至少是目前是够用的

 

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

d15a6091aebf49d794878ed4e898d7a9.png

至于源IP这一点我们在后续会提到,这个是动态的,至于是说明时候填先的字段,这是在应用层就已经完成了,在bind套接字的时候,我们就已经表明,凡是从这个套接字出去的数据,都是从哪里来到哪里去,操作系统会自动帮我们完成绑定,这里的自动是说前面的绑定工作都正确实现的情况下说明的

 

4位版本号

425a075e00e54555ac4de110c16255af.png

        至于IPv4现在看来是不够的,2^32,大约40亿个,实际上早就不够了,可能在国内都不够我们使用,而IPv6拥有了2^128位数值,这个数值号称连地球上的每一颗沙子都能够分配一个IP地址,那么为什么早期的建设是采用IPv4的呢?历史的局限性,就可以很好的解释了,早期的人们看来40亿是完全够用的,就像我们认为IPv6提供的IP地址是够用的一样

        那么我们为什么不全部更新为IPv6呢?网络是一台已经发动的机器,是无法停下来的,这是底层的修改,通常我们修改都不会涉及到底层,并且IPv4它的更改是全球性的,影响太大,成本太高,以至于我们即使在IP地址不够用的情况下,还是选择不更新,这是本质原因,但是主要原因其实是因为有了解决方法,这一点后续谈及

        还有一点原因需要我们了解,基于成本的原因,其实很多国家是无法进行修改的,只有经济实力雄厚,国际影响力大的国家才有资格推行,而我们知道IPv4是漂亮国的标准,IPv6是在颠覆IPv4的地位,其实现在我国在大力推行IPv6,并且属于领先地位,再则我国的人口基数很大,当国内普及了之后,那么国外就不能够忽视中国这个庞大的互联网群体了,他们也必须要反过来适配我们的网络,一旦领先会发生什么事情这里就不多说了,再则因为政策影响,其实国内的设备很多都是支持IPv6的,现在我们的路由器都是内置了IPv6的功能的,只不过我们现在一般是默认关着的

 

8位服务类型

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

        这个是路由器用来制定转发策略时候用到的,这里也就不深入了解了,只需要知道,最优路径不一定是最短的,还有可靠性的因素影响,8位服务类型就是基于这方面的考虑来让路由器自行选择转发策略

        4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4;
        4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节;
        8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0);

        4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要;
        16位总长度(total length): IP数据报整体占多少个字节;
        16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的;
        3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话,最后一个分片置为1, 其他是0. 类似于一个结束标记;
        13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了);
        8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL-= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环
        8位协议: 表示上层协议的类型;
        16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏;
        32位源地址和32位目标地址: 表示发送端和接收端;
        选项字段(不定长, 最多40字节):;

关于16位标识3位标志字段、13位分片偏移的介绍我们放在了后面和MAC帧数一起,这样才好理解,当然还是那句话,最重要的字段就是32位源地址和32位目标地址,其他的都是赐予的

网段划分(重要)


为了方便理解我们首先理解下面几个模型,还是和以前一样首先理解为什么想要网络划分

 

99d83e63851645d9ab4655741b374e59.png

类比于网络通信,就能够理解了为什么需要网络划分了

查找的本质就是排除,上述模型中,假如A是一个个人去排除找到丢失物品的人,那么这是效率极低的方式,但是一层一层的交付再向下递给,这样就实现了一次查找就排除一群对象,这样做查找效率就非常高

所以,互联网中的每一台主机,都要隶属于某一个子网! --- 为了方便定位这个主机!

为什么方便是因为效率高,那这也是为什么需要子网划分了,至此就解决了为什么的问题

这也是为什么 ip = 目标网络 + 目标主机

那怎么办?怎么做到子网划分的呢?

 

46a6efcaa1ce40e5b424056e73d76ae4.png

 

634cef139e3b4ed5a0d5d6047d79cb88.png

        这也是为什么国内的评论是会附带地址了,其实知道了子网划分的原理理解起来不是一件难事

        目前上述就是子网划分的宏观理念,但是注意实际上肯定不是这样做的,实际上要复杂的多

 

网段划分(详细)

IP地址分为两个部分, 网络号和主机号;
网络号: 保证相互连接的两个网段具有不同的标识;
主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;
1c938f6fcaa84ce3919bc26b020fccd4.png

不同的子网其实就是把网络号相同的主机放到一起;
如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复;

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

分析

fb7fac4b962e4d6a9dec1a7213418719.png

 

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

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

 打开设备中连接无线网络的属性中可以看到

a1763562c087403d97c3c3e50f361a06.png

        实际上一台笔记本在一开始没有连接到网络的时候是没有IP地址分配的,也就是说没有被分配,当第一次连接之后才有的

        就好比你去别人家里做客,用别人家的网络,首先你与他家的路由器建立连接,申请到了IP地址,你才能用他家的网络进行上网

 

划分方法

 

老式划分法

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

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类无关;

路由器内置了子网掩码,所以网络管理员其实就是在做配置子网子网掩码用来划分子网这些工作

 

994ce6ca60b74bb4ad79b21d3239999b.png

所以全0和全1是不被使用的

子网掩码如何划分

35f42efea3684eea9eba15eb99e2c33f.png

特殊的IP地址

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

IP地址的数量限制

我们知道, IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 2的32次方 个IP地址, 大概是43亿左右. 而TCP/IP协议规定, 每个主机都需要有一个IP地址,并且唯一;
这意味着, 一共只有43亿台主机能接入网络么?
实际上, 由于一些特殊的IP地址的存在, 数量远不足43亿; 另外IP地址并非是按照主机台数来配置的, 而是每一个网卡都需要配置一个或多个IP地址;
不仅仅是我们普通用户手机等设备需要IP地址,路由器,机房设备等等都需要IP地址,可想而知IP是不能够这样使用的;

CIDR(子网掩码划分)在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然不是很够用. 这时候有三种方式来解决

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

不够治本的其实还是IPv6,不过因为提出了另一种方式NAT技术,现阶段可以解决IP地址不足的问题,并且它并不需要改变现有设备,只需要支持NAT功能就行了,所以现在IPv6的推广被阻碍的原因就是这个啦,NAT内网转公网的技术也被我们国内的高人运用,实现了IPv6的地址转为IPv4的地址,所以这也是国内为什么IPv6是被普遍使用的,虽然我们没有意识到,其实我们用的5G和IPv6的发展是息息相关的

在国内我们使用IPv6,但是到了公网,我们也用了技术可以修改成为IPv4,这样两者也不会相互影响,在国内也可以继续大力发展IPv6

 

私有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);

国内学校大多数都是用192.168.*,这也是为什么很多都是192.168开头的网络

Linux系统下

b25a4a445e4945e6b3bf37c1cf749e0f.png

这也是为什么在绑定套接字的时候是不能够直接绑定你的IP地址的,因为那是私网IP

这个拿家用路由器来说明,当你要入网的时候,你会提交一份请求,然后让运营商技术人员来帮你完成,其实入网是有一个办网的账号和密码的,之后交的网费都是通过这个账号来交的,通常是手机号,技术人员在开始就会把这个账号和密码配置进路由器,这个和我们上网连接的那个账号是不一样的,那个是用来连接的,不是上网的。实际上当你通过路由器进行上网的时候,它就会经过路由器,因为路由器配置过账号(最开始的那一个),所以当不欠费的情况下上网,它是直接会通过的,

运营商扮演的角色应该是基础设施建造者

868fd976d9df49499ab47d1a0d22a53d.png

这一块也可以看出,当你访问外网的时候,运营商可以直接对你的数据进行解读,发现你访问外网,那么它就可以直接掐掉你的请求,这就是墙,并且这是无法绕开的,因为这直接从物理上就隔断了,你的设备可没有直接与其他内容提供者直接相连的,甚至间接都没有

由此我们可以得知路由器做的事情

路由器:

1.转发

2.DHCP|组建局域网 -- 体现在配置无线网络,设置网络名称+密码

3.NAT

并且路由器只能使用上面的私网IP,前两者用于企业基本,后一者就是家用小型使用

 

33b2c73169ee49d4ac490055047542c8.png

        一个路由器可以配置两个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的服务器上. 这样的服务器可以在阿里云/腾讯云上进行购买路由;

这里的地址/24,这里的24就是掩码了,标识32位中前24位为1后续为0,参考掩码的定义就可以了解了

二进制为:11111111 11111111 11111111 00000000

将其转化为十进制,就是:255.255.255.0

 

分析类比于之前提到的模型来看

c84035d362c24d8a960e26e6fa8ed920.png

路由器拥有组建局域网的能力,你向上交付的数据到了运营商不一定就到了公网,可能还是在一个运营商路由器构建的子网中,它会继续向上交付

并且因为路由器横跨了至少两个网络,所以路由器会配置至少两个IP地址

子网IP(LAN口IP):指的就是自己构建的子网中的IP地址,自己是路由器,所以是.1结尾,对内;

WAN口IP:指的就是在外部中子网的IP地址,对外;

 

私有IP可以重复

到现在我们就可以知道了,私有IP是可以重复的,它只需要保证在本子网络中不重复就行了,所以我们就可以利用重复的网络进行上网了,从而解决了IP地址不够的问题

 

NAT技术

16a4fe7d4714475292486be59d0558d0.png

我们把上述的替换src源IP的技术称为NAT技术(Network Address Translation,网络地址转换)

细心的人可能会发现虽然我们可以做到数据请求到服务器,服务器响应返回给了路由器,那么路由器怎么把响应再返回给主机呢?在一开始我们就把主机的地址(src)给替换了的,其实NAT不仅仅是直接替换进行了,它还得保留一些东西,这一点我们得到后面才能揭晓了

 

实际网络划分(简化)

d1135fa416d643ddabd691fe740fdf8c.png

这里我们简易大区域划分了一下,这也是为什么像抖音、b站这类平台评论可以看到评论人的国家,在国内可以看到省份,那么不精确到市级别的原因也是因为进一步就是运营商的职务了,互联网平台有公网IP是可以看到数据是从哪一个地方传递过来的,前面提到服务器的响应是直接给源IP地址路由器的

衡量网络质量的其实就是我们所说的上下行速度,这都是明码标价的,大型互联网公司肯定需要的流量比我们普通用户需要的流量大得多。自然收取的费用也大的多

 

路由

 

怎么走?

在复杂的网络结构中, 找出一条通往终点的路线
路由的过程, 就是这样一跳一跳(Hop by Hop) "问路" 的过程.
所谓 "一跳" 就是数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间

20a0c91b37c746ecb2d170f686082d2a.png

IP数据包的传输过程也和问路一样
当IP数据包, 到达路由器时, 路由器会先查看目的IP;
路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
依次反复, 一直到达目标IP地址

拿问路举例子,当你向问一个人怎么去一所学校的报道时候会出现以下几种情况(只考虑问路情况)

第一种:不搭理你 --

在网络环境中,路由器不会拒绝你,所以不会出现不搭理报文的情况;

第二种:不知道,但是他知道谁知道,让你去问他 --

路由器不知道报文去哪里的情况下,在不确定的情况下一定得把报文交给下一个路由器,它一定得知道谁知道,知道下一跳,也就是默认路由器,这个被称为默认网关,每一个路由器都得配置一个默认网关;

第三种:知道怎么走,他可以直接告诉你怎么走,但是只知道方向,让你沿着方向走 -- 

路由器知道该怎么走,但是更多细节可能不清楚,知道下一跳路由器,它就会直接把报文转发到吓一跳路由器;

第四种:这个人就是学校的保安,他直接告诉你可以进去了,这时候你就会改口问,18号宿舍楼怎么走,他也可以直接告诉你怎么走 -- 

这就是代表你找到了目标网络,你进去问18号宿舍楼(简化了,实际上你还得去找老师),就是在找目标主机,学校的保安就是这个子网的入口路由器;

第二、三种在数据转发在网络中是常态,同时在第四种情况下我们发现,我们后面改口了,联想到问路,其实在一开始问路的时候,你是不会直接问学校(目标网络)的18号宿舍楼(目标主机)怎么走的,而是直接问学校怎么走;实际中在路由的过程中,我们只会看目标网络,只有找到了目标网络,再结合入口路由器(它会知道目标主机怎么走)之后我们才会开始找目标主机

在最后当你找到了目标主机(帮你报道的老师),其实你不是找他这个人,而是要这个人帮你办理入学手续,让他给你提高入学服务,这不就是要继续通过端口号找到这个进程,来让他给你响应吗?本质上就是进程与进程之间通信

 

怎么判断?

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

ad6c2ad3dfab4f92a252bcbc6980b2f2.png

路由表可以使用route命令查看

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

a328e8174e9f42098bd578475d05a619.png

 

路由查表过程

5b6809f9dd3b41bc9b8cfc5974ca4510.png

转发过程例1: 如果要发送的数据包的目的地址是192.168.56.3
跟第一行的子网掩码做与运算得 到192.168.56.0,与第一行的目的网络地址不符
再跟第二行的子网掩码做与运算得 到192.168.56.0,正是第二行的目的网络地址,因此从eth1接口发送出去;
由于192.168.56.0/24正 是与eth1 接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发
 

转发过程例2: 如果要发送的数据包的目的地址是202.10.1.2
依次和路由表前几项进行对比, 发现都不匹配;
按缺省路由条目, 从eth0接口发出去, 发往192.168.10.1路由器;
由192.168.10.1路由器根据它的路由表决定下一跳地址

随着转发次数的增加,网络号回越来越长,越来越精细,直到找到了目标网络,所以我们要去的目标网络号是动态的

像那些互联网公司提高服务,是需要公网IP的

关于路由表生成算法自行去了解吧
 

下篇预告 -- 16位标识、3位标志字段、13位分片偏移结合MAC帧去理解、数据链路层

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1063469.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.SpringBoot项目搭建

SpringBoot项目搭建 JavaEE对新手非常友好的 搭建框架。 集成了JavaEE开发中大部分的功能。 1.进行创建 2.进行配置 点击创建,springboot项目创建完成,下篇是安装lombok & maven镜像设置 设置完成后之后便可以启动项目了。 3.各个部分说明

【最新】如何在CSDN个人主页左侧栏添加二维码?侧边推广怎么弄?

目录 引言 效果展示 步骤讲解 引言 当你决定在CSDN上展示自己的技术才能和项目时,💡 将你的个人主页变得更炫酷和引人注目是必不可少的!在这篇博客中,我们将向你揭开神秘的面纱,教你如何在CSDN个人主页的左侧栏上添…

分享一款yyds!电子期刊制作网站

大家好,今天要跟大家分享一个超级赞的资源!有没有曾经你苦苦寻找的那一款适合自己的电子期刊制作网站呢?下面就让我来给大家详细介绍一个非常棒的网站,有了它,你可以轻松制作出专业、精美的电子期刊! 1.打开…

突破封锁|华为芯片10年进化史:从K3V1到麒麟9000S

华为海思麒麟芯片过去10年研发历程回顾如下: 2009年:华为推出第一款手机芯片K3V1,采用65nm工艺制程,基于ARM11架构,主频600MHz,支持WCDMA/GSM双模网络。这款芯片搭载在华为U8800手机上,标志着华…

基于时空注意力融合网络的城市轨道交通假期短时客流预测

导读 本论文于2023年发表于交通领域知名期刊《IEEE Intellgent Transportations Systems Magazine》上。该论文旨在研究节假日期间城市轨道交通进站流预测问题,通过搭建时空注意力融合网络,有效融合客流数据和节假日相关社交媒体数据,充分捕捉…

golang gin——文件上传(单文件,多文件)

文件上传 单文件上传 从form-data获取文件 package uploadimport ("github.com/gin-gonic/gin""net/http" ) // 单文件上传,多文件上传 func Upload(c *gin.Context) {file, _ : c.FormFile("file") // file为字段名dst : "…

Java课设 保存计算过程的计算器(附完整源码)

目录 前言calculator.javaMyForm.javamain.java 前言 这是一个保存计算过程的计算器,calculator.java中实现计算原理,MyForm.java中实现面板。效果如图: calculator.java import java.util.Stack;public class Calculator {public String c…

python 打包可执行文件-pyinstaller详解

python 打包可执行文件-pyinstaller详解 引言一、参数详解二、优化代码三、体积压缩 引言 pyinstaller是一个将python程序打包成独立可执行文件(exe,app等)的工具,它具有跨平台兼容性,可以在windows,mac和…

苹果系统_安装matplotlib__pygame,以pycharm导入模块

为了更便捷、连贯的进行python编程学习,尽量在开始安装python软件时,将编辑器、模块一并安装好,这样能避免以后版本冲突的问题。小白在开始安装pycharm、pip、matplotlib往往会遇到一些问题,文中列示其中部分bug,供大家…

一文了解硬盘AFR年化故障率评估方式和预测方案

目前常用评价硬盘(或者其他硬件产品)有一个关键的指标就是年化故障率(AFR)。年化故障率(AFR)是一种衡量产品可靠性的指标,表示在一年内产品发生故障的概率。 除了年化故障率(AFR&…

一文搞懂Java线程中断协商机制,如何优雅中断一个正在运行的线程?

文章目录 一、中断机制概述1、中断API2、什么是中断机制3、如何理解中断机制4、三大中断方法源码详解(1)interrupt()(2)interrupted()(3)isInterrupted()(4)注意!不同jdk…

Electron笔记

基础环境搭建 官网:https://www.electronjs.org/zh/ 这一套笔记根据这套视频而写的 创建项目 方式一: 官网点击GitHub往下拉找到快速入门就能看到下面这几个命令了 git clone https://github.com/electron/electron-quick-start //克隆项目 cd electron-quick-start //…

阿里云服务器e系列是共享型?什么意思?

阿里云服务器经济型e实例是共享型云服务器,共享型实例采用非绑定CPU调度模式。每个vCPU会被随机分配到任何空闲CPU超线程上,不同实例vCPU会争抢物理CPU资源,并导致高负载时计算性能波动不稳定,有可用性SLA保证,但无性能…

【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)

一,VMware下载地址: 百度网盘链接链接:百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https:/…

【开发篇】十六、SpringBoot整合JavaMail实现发邮件

文章目录 0、相关协议1、SpringBoot整合JavaMail2、发送简单邮件3、发送复杂邮件 0、相关协议 SMTP(Simple Mail Transfer Protocol):简单邮件传输协议,用于发送电子邮件的传输协议POP3(Post Office Protocol - Versi…

IPv6协议报文头

IPv6协议概述 IPv6(Internet Protocol Version 6)是网络层协议的第二代标准协议,也被成为IPng(IP Next Generation)。它是Internet工程任务组IETF(Internet Engineering Task Force)设计的一套…

ros2移植Apollo和autoware规控算法可跑工程

工程详细介绍请看: 自动驾驶路径规划控制ros移植Apollo和autoware规控算法可跑工程(适合入门学习,科研和实战) ros2的工程版本说明 之所以增加ros2版本,是因为想增加代码的工程应用性,其实对于科研来说并…

计算机专业毕业设计项目推荐11-博客项目(Go+Vue+Mysql)

博客项目(GoVueMysql) **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计流程以及模式&am…

正点原子嵌入式linux驱动开发——U-boot启动流程详解

在上一篇笔记中详细分析了uboot的顶层Makefile,理清了uboot的编译流程。本章来详细的分析一下uboot的启动流程,理清uboot是如何启动的。通过对uboot启动流程的梳理,可以掌握一些外设是在哪里被初始化的,这样当需要修改这些外设驱动…

14885-2010 固定资产分类与代码 思维导图

声明 本文是学习GB-T 14885-2010 固定资产分类与代码…pdf而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了固定资产的分类、代码及计量单位。 本标准适用于固定资产管理、清查、登记、统计等工作。 2 术语和定义 下列术语和定义…