科普 | OSI模型
本文简要地介绍 OSI 模型 1’ 2’ 3。
更新:2023 / 7 / 23
科普 | OSI模型
- 术语
- 节点
- 链路
- 协议
- 网络
- 拓扑
 
- 概念
- 作用
- 结构
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
 
- 数据如何流动
- OSI 和TCP/IP 的对应关系和协议
- 参考链接
术语
节点
节点( Node )是连接到网络的物理电子设备,比如电脑、打印机、路由器等等。如果配置正确的话,节点可以在网络上进行信息的收发。
节点 可以彼此相邻,其中的 节点 A 可以直接连接到 节点 B。节点之间也可以有中间节点,例如 节点 A 和 节点 B之间可以防止一个交换机或路由器。
通常,路由器将网络连接到因特网,而交换机运行在网络内部,促进内网通信。
链路
链路 连接网络中的节点。它可以是有线的,比如以太网;也可以是无线的,比如 WiFi。
 链路 是点对点的( 节点 A 和 节点 B相连 ),要么是多点的( 节点 A与 节点 B和 节点 C相连)。
协议
协议 定义了管理通信过程中语法(可通信的内容)、语义(如何通信)以及同步(何时通信以及通信的速度)的规则。协议 可以由硬件、软件或二者的组合实现。协议 可以由任何人创建,但是最被广泛采纳的 协议 都是基于标准的。
有线和无线链路都可以有 协议。
虽然任何人都可以创建协议,但是基于因特网组织(例如,因特网工程任务组 IETF,Internet Engnieering Task Force )发布的标准的协议通常都是最被广泛采纳的。
网络
网络( network )是一组计算机、打印机或任何其他想要共享数据的设备的通用术语。
 网络 的类型包括:LAN、HAN、CAN、MAN、WAN、BAN 或 VPN。
拓扑
拓扑( topology )描述的是节点和链路任何在网络配置中组合在一起,通常用图来描述。
下面是一些常见的网络拓扑类型:
 
 网络 由 节点、节点 之间的 链路 和管理 节点 间数据传输的协议组成。
概念
网络上的所有设备都具有网络硬件和软件这些特征,它们需要一种通用的规则才能实现彼此之间的友好的交流。这个规则可以被统称为 协议。
 协议 并不知有一个,在不同的位置,我们会应用到不同的 协议,所产生的效果也不尽相同,而且一些 协议 需要协同配合才能完成工作。
随着时代的发展,协议 越来越多,我们想要了解其中某一项协议的具体聂荣变得越来越复杂。为了解决这个问题,一个叫做 ISO 的国际化标准组织将这些条例进行了整理规划,方便不同的人群了解不同的协议。
OSI,全称为 Open System Interconnection,中文名称为 开放系统互连。
 OSI 模型是由国际标准化组织 ISO 创建的描述网络功能的概念模型,支持各种通信系统使用标准协议进行通信。简单而言,OSI 为保证不同计算机系统彼此之间发送信息的方式提供了标准。人们可以将 OSI 模型视为一种通用计算机网络语言。根据这一概念,通信系统分为七个抽象层(层 是对网络上的功能和行为进行分类和分组的一种方式),逐层堆叠而成,如下所示,OSI 模型的每一层负责处理特定作业并与其上下层进行通信 2。

 对通信系统的攻击中,DDoS 攻击是第3层的网络连接层;应用程序层攻击的是第7层应用层;协议层攻击的目标是第 3 和 4 层。
要牢记,虽然某些技术(比如,协议)在逻辑上比起其他层来说可能 “属于” 某一层,但并非所有的技术都完全契合 OSI 模型中的单个层。例如,以太网( Ethernet )、802.11( WiFi )和地址解析协议( ARP,Address Resolution Protocol )程序不只在一层上工作。
 OSI 只是一个模型,一个工具,并不是一组规则。
作用
虽然现代互联网并未严格采用 OSI 模型,但 OSI 模型对于解决网络问题仍然很有帮助。无论是某位无法使用笔记本电脑上网的客户,还是为数千名用户提供服务的网站宕机,OSI 模型都能帮助分解问题并找到问题根源。如果可以将问题范围缩小到模型的某个特定层,就能避免许多不必要的工作。
OSI 参考模型定义了开放系统的层次结构和各层所提供的服务。OSI 参考模型的一个成功之处在于,它清晰地分开了 服务、接口 和 协议 这3个容易混淆的概念。
- 服务:描述每一层的功能;
- 接口:定义了某层提供的服务如何被高层访问;
- 协议:每一层功能的实现方法。
通过区分这些抽象概念,OSI 参考模型将功能、定义与实现细节区分开来,概括性高,使它具有普遍的适应能力。
OSI 模型具有以下优点:
-  - 分工合作,责任明确。性质相似的工作划分在同一层,性质不同的则划分到不同层。这样每一层的功能都是明确的,每一层都有其负责的工作范围。一旦出现问题,很容易找到问题所在的层,仅对此层加以改善即可。
 
-  - 对等交谈。计算机通过网络进行通信时,按照对等交谈的原则,即同一层找同一层,通过各对等层的协议来进行通信,比如,两个对等的网络层使用网络协议通信。
 
-  - 透层处理,层层负责。在 OSI模型中,两个实体通信必须涉及下一层,只有相邻层之间可以通信,下层向上层提供服务,上层通过接口调用下层的服务。层间不能有越级调用关系,每层功能的实现都是在下层提供服务的基础上完成的,即每一层都是利用下层提供的服务来完成本层功能,并在此基础上为上层提供进一步的服务。
 
- 透层处理,层层负责。在 
结构
OSI 模型将整个通信功能划分为7个层次。划分的原则如下:
-  - 网络中所有节点都划分为相同的层次结构,每个相同的层次都有相同的功能;
 
-  - 同一节点内各相邻层次间可通过接口协议进行通信;
 
-  - 每一层使用下一层提供的服务,并向它的上层提供服务;
 
下面是一个简单的示意图:
 
如何记住所有层的名字呢?很简单 —— Please Do Not Tell the Secret Password to Anyone.
- Please | 物理层 Physical Layer
- Do | 数据链路层 Data Link Layer
- Not | 网络层 Network Layer
- Tell | 传输层 Transport Layer
- Secret | 会话层 Session Layer
- Password | 表示层 Presentation Layer
- Anyone | 应用层 Application Layer
应用层

 应用层 是 OSI 参考模型中最靠近用户的一层,为计算机用户提供应用接口,也为用户直接提供各种网络服务,比如因特网浏览器( 比如 firefox )或文字处理程序( 例如 Microsoft Word )。
 应用层 拥有应用程序运行所需的服务和功能,不包括应用程序本身。
软件应用程序( 如 web 浏览器和电子邮件客户端 )依靠 应用层 发起通信。但需要明确地是,客户端软件应用程序不属于 应用层;相反,应用层 负责协议和数据操作,软件依靠上述操作向用户呈现有效数据。
这一层中运行的协议包括文件传输协议( FTP,File Transfer Protocol )、安全壳协议( SSH,Secure Shell )、简单邮件传输协议( SMTP,Simple Mail Transfer Protocol )、因特网消息访问协议( IMAP,Internet Message Access Protocol )、域名服务( DNS,Domain Name Service )和超文本传输协议( HTTP,Hypertext Transfer Protocol )。
 虽然这些协议中的每一个都服务于不同的功能,运行的方式也各不相同,但从较高的层次看,它们都促进了信息的交流。
表示层

 表示层 提供各种用于应用层数据的 加密、压缩 和 转换 功能,确保一个系统的 应用层 发送的数据能被另一个系统的 应用层 识别。如果必要,该层可以提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。
- 加密
 - SSL或- TLS加密协议位于- 表示层,它们为网络上的节点提供身份认证和数据加密功能,帮助确保传输的数据抵御恶意用户的攻击。
 如果设备通过加密连接进行通信,则第6层- 表示层负责发送端加密和接收端解密,以便向- 应用层呈现非加密可读数据。
- 压缩
 - 表示层还负责压缩从- 应用层接收的数据,然后将数据传递到第5层- 会话层。这有助于尽量减少要传输的数据量,从而提高通信速度和效率。
- 转换
 两台相互通信的设备可能使用不同的编码方法,因此第6层- 表示层负责将传入数据转换为接收设备- 应用层可以理解的语法。
会话层

 会话层 负责初始化、维持和终止两个设备的 表示层 实体之间的通信会话。它响应来自 表示层 的请求,并向 传输层 发起请求,确保会话保持打开的时长足以传输所有交换数据,而后立刻关闭会话以避免浪费资源。
 其中有一些重要的概念需要考虑:
- 客户端与服务器模型
 请求消息的应用被称为客户端,拥有被请求消息的应用被称为服务器;
- 请求与响应模型
 在建立会话的过程和会话期间,不断有来回的信息请求,还有包含被请求信息的响应或者是 “嘿,我没有你要的东西”
会话层 还负责同步数据传输与检查点。例如,如果传输一个 100 MB 的文件,会话层 可以每 5 MB 设置一个检查点。如果在传输了 52 MB 后连接断开或崩溃,可以从最后一个检查点恢复会话,也就是只需要再传输 50 MB 数据。若未设置检查点,则必须从头开始传输整个文件。
根据所采用的协议,会话可能会启动各种故障解决程序。根据所使用的应用程序 / 协议 / 硬件,会话可能支持单工、半双工或全双工模式。
会话层 采用的协议有网络基本输入输出系统( NetBIOS,Network Basic Input Output System )和远程过程调用协议( RPC,Remote Procedure Call Protocol )等等。
传输层

 传输层 建立在 数据链路层 的功能( 线路规划、流量控制 和 错误检测 )之上,负责两个设备间的端到端通信,包括从 会话层 提取数据,将数据分解为多个区块( 称为 数据段 ),然后再发送到第3层 网络层。
 接收端设备 传输层 负责重组数据段,确保数据可供 会话层 使用。
流量控制 用于确定最佳传输速度,避免采用快速连接的发件人淹没采用慢速连接的收件人。传输层 通过确保接收数据的完整性(如果不完整,则请求重新传输)来对接收端进行 错误控制。
传输层 向高层屏蔽了下层数据通信的细节,使高层用户看到的只是两个在传输实体间的一条主机到主机的、由用户控制和设定的可靠的数据传输通路。我们通常说的 TCP UP 就是在这一层,端口号即是这里的 “端”。
传输层 中最有名的两个协议是传输控制协议( TCP,Transimission Control Protocol )和用户数据报协议( UDP,User Datagram Protocol )。
 TCP 和 UDP 都将数据发往网络设备上的特定端口,这些网络设备都有自己的IP地址。IP地址和端口号的组合被称为套接字( socket )。
- TCP
 - TCP是一个面向连接的协议,优先保证的是数据的质量而不是速度。
 - TCP显式地与目的节点建立连接,并要求在数据传输时进行源节点与目的节点之间的握手操作。握手能够确认数据已经被接收。如果目的节点没有收到所有的数据,- TCP就会要求进行重传。
 - TCP也会保证数据包以正确的顺序交付或重组。
- UDP
 - UDP是一个无连接的协议,优先保证速度而不是数据的质量。
 - UDP不要求进行握手,这也正是它被称为无连接的原因。因为- UDP不必等待确认,所以它可以以更快的速度发送数据,但并非所有的数据都能成功传输,我们也就不会知道哪些数据传输失败了。如果信息被拆分为多个数据报,除非这些数据报都含有一个序列号,否则- UDP无法确保以正确的顺序重组数据包。
网络层

 网络层 负责促进两个不同网络之间的数据传输,而如果两台通信设备位于同一网络则不需要使用网络层。
路由器是 网络层 的主力,它们是在第三层中必不可少的。路由器跨越多个网络移动数据包。路由器不仅通过连接到网络服务提供商( ISPs,Internet Service Providers )提供因特网访问,还跟踪着所在网络中的一切( 记住交换机跟踪的是一个网络中的所有 MAC 地址 ),它所连接的其它网络,以及在这些网络中路由数据包的不同路径。
路由器将所有的地址和路由信息都保存在路由表中。以下是一个简单的路由表示例:
 
 网络层 的数据单元是数据包( packet )。每个数据包都包括一个帧加上一个IP地址信息的包装。换句话说,帧被第三层 网络层 的地址信息封装了。
数据包中传输的数据有时也被称为负载( payload )。每个数据包中都有抵达目的地所需的一切,但能否成功到达就是另一回事儿了。接收端的 网络层 会再重组这些数据包。
 节点一旦连接到因特网,它就会被赋予一个因特网协议( IP,Internet Protocol )地址,它看起来要么像 172.16.254.4( IPv4 地址 ),要么像 2001:0db8:85a3:0000:0000:8a2e:0370:7334( IPv6 地址)。路由器在它们的路由表中使用IP地址。
IP地址通过地址解析协议( ARP,Address Resolution Protocol )与物理节点的 MAC 地址相关联,ARP 用节点对应的IP地址解析 MAC 地址。
数据链路层

 数据链路层 与 网络层 十分相似,但 数据链路层 用于促进同一网络上两台设备之间的数据传输。
数据链路层 定义了数据的传输格式(将从 网络层 提取的数据包分解成更小的部分,称为 帧 )、可以在节点间流动的数据量大小、数据流动可以持续的时长,以及在流中检测到错误时应采取的措施。
 如果使用更加正式的技术术语来描述:
- 线路规划
 谁应该交流多久?节点传输信息的时间应该持续多久?
- 流量控制
 应该传输的数据量是多少?
- 错误控制-- 检测和校正
 从电尖峰脉冲到连接器,所有的数据传输方法都有可能出错。一旦第二层的- 数据链路层能够 ”告诉” 上层出现的问题,上层就能纠正那些错误。第二层主要关心- 错误检测,而不是- 错误校正。
数据链路层 又分为2个子层,
- 逻辑链路控制子层(- LLC,- Logic Link Control)
 - LLC子层处理帧的寻址以及流量控制。速度取决于两个节点之间的链路,例如以太网或- WiFi;
- 介质访问控制子层(- MAC,- Media Access Control)
 - MAC子层负责分配硬件标号,这个标号称为- MAC地址,它能够唯一标识网络上的各个设备。两个设别不应该有相同的- MAC地址。- MAC地址在硬件制造时就分配好了,位于网卡当中,大多数网络都会自动对其进行识别。交换机会跟踪网络上的所有- MAC地址。
数据链路层 的数据单元是帧( frame )。帧的大小通常有一个最大值。这个值被称为最大传输单元( MTU,Maximum Transmission Unit )。每一帧都包括一个帧头、主体和一个帧尾:
- 帧头
 通常包括源节点和目的节点的- MAC地址;
- 主体
 由药传输的比特组成;
- 帧尾
 包括错误检测信息。当检测到错误时,根据实现或网络的配置或协议,帧可能被丢弃,或者错误会被报告给上面的层,用于进一步错误校正;
 例如,错误检测机制有循环冗余校验(- CRC,- Cyclic Redundancy Check)和帧校验序列(- FCS,- Frame Check Sequence);
物理层

 物理层 包括参与数据传输的物理设备,如电缆和交换机。同时还负责将数据转换为 bitstream,也就是由 1 和 0 构成的字符串。另外,两台设备的 物理层 必须达成信号约定,以便区分两台设备的字符串 1 和 0。
物理层 的数据单元是比特( bit )。比特是可传输数字信息的最小单元。比特是二进制的,要么是 0 要么是 1。字节( byte )是由8个比特组成,用于表示单个自负,比如字母、数字或符号。
根据硬件设备支持的数据速率(传输速率,每秒或每毫秒的比特数量),比特被发送到硬件设备或从设备发出。这个过程是同步的,从而保持单位时间内发送和接送比特的数量相等( 这被称为 比特同步 )。比特的传输方式由信号的传输方式决定。
节点可以发送比特、接受比特或者收发兼顾。
- 如果节点只能收或者只能发,那么该节点采用的就是单工模式;
- 如果节点既可以收又可以发,那么节点采用的就是双工模式;
- 如果节点可以同时进行收发,那么它就是全双工模式,否则就是半双工模式;
数据如何流动
为通过网络来将人类可读信息从一台设备传输到另外一台设备,必须在发送设备沿着 OSI 模型的七层结构向下传输数据,然后在接收端沿着 OSI 模型的七层结构向上传输数据。
举例如下:
- 2’ 4
 A想给B发一封电子邮件,A在笔记本电脑的电子邮件应用程序中编写邮件,点击发送。电子邮件应用程序将电子邮件传递到应用层,应用层选取电子邮件通信协议SMTP,再将数据传递到表示层。接着,表示层压缩数据,再将数据传递到会话层,由会话层初始化通信会话。而后,数据将到达发送方的传输层,在传输层被分段,再在网络层将这些数据段分解为数据包,然后在数据链路包被进一步分解为帧。随后,数据链路层将这些帧传输到物理层,物理层将数据转换为bitstream位流1和0,最后通过物理介质(比如电缆)来发送数据
 B的计算机通过物理介质(比如WifFi)接收bitstream后,数据沿其设别的同一系列层级流动,但顺序刚好相反。首先,物理层将bitstream从1和2转换为帧,传递到数据链路层。然后,数据链路层将帧重组为数据包,供网络层使用。接着,网络层将数据包重组为数据段供传输层使用,传输层再将数据段重组为数据片段。随后,数据将流入收件方的会话层,会话层将数据传递到表示层并结束通信会话。表示层解压数据并将原始数据传递到应用层。应用层将人类可读数据传递到B的电子邮件应用程序中,这样她就可以查看邮件了。
 2.1
 A公司和B公司是不同国家的公司,他们之间的商定统一用英语作为交流的语言,所以此时表示层( 类似于公司文秘的角色 ),就是将应用层的传递信息转翻译成英语,但是同时为了防止除了A和B以外的公司看到,公司A的人也会对这份报价单做一些加密的处理。会话层( 类似于公司的外联部 ) 的同事拿到表示层的同事转换后的资料,将建立并记录本地会话,会话层的同事那里可能会掌握本公司与其他好多公司的联系方式,负责管理本公司与外界好多公司的联系会话。他首先要找到公司B的地址信息,然后将整份资料放进信封,并写上地址和联系方式,准备将资料寄出。等到确定公司B已接收到此份报价单后,此次会话就结束了,外联部的同事就会终止此次会话。传输层就相当于公司中的负责快递邮件收发的人,公司自己的投递员,他们负责将上一层的要寄出的资料投递到快递公司或邮局。网络层就相当于快递公司庞大的快递网络、全国不同的集散中心,比如说,从深圳发往北京的顺丰快递陆运,首先要到顺丰的深圳集散中心,从深圳集散中心再送到武汉集散中心,从武汉集散中心再到北京顺义集散中心。这个每个集散中心,就像网络中的一个IP节点。数据链路层相当于连接不通集散中心之间的物流汽车或火车线路及排班,会进行流量控制和错误控制。而物理层相当于快递寄送过程中的交通工具,例如汽车、火车、飞机和船。
OSI 和TCP/IP 的对应关系和协议
参考这里 5

参考链接
- OSI七层模型介绍 ↩︎ ↩︎ 
- 什么是 OSI 模型? ↩︎ ↩︎ ↩︎ 
- OSI 七层网络模型 ↩︎ 
- 小白也能看懂的网络基础 03 | OSI 模型是如何工作的 ↩︎ 
- OSI 7层模型和TCP/IP 4层模型 ↩︎ 
相关文章:
 
科普 | OSI模型
本文简要地介绍 OSI 模型 1’ 2’ 3。 更新:2023 / 7 / 23 科普 | OSI模型 术语节点链路协议网络拓扑 概念作用结构应用层表示层会话层传输层网络层数据链路层物理层 数据如何流动OSI 和TCP/IP 的对应关系和协议参考链接 术语 节点 节点( Node &#…...
redis相关异常之RedisConnectionExceptionRedisCommandTimeoutException
本文只是分析Letture类型的Redis 池化连接出现的连接超时异常、读超时异常问题。 1.RedisConnectionException 默认是10秒。 通过如下可以配置: public class MyLettuceClientConfigurationBuilderCustomizer implements LettuceClientConfigurationBuilderCusto…...
 
Merge the squares! 2023牛客暑期多校训练营4-H
登录—专业IT笔试面试备考平台_牛客网 题目大意:有n*n个边长为1的小正方形摆放在边长为n的大正方形中,每次可以选择不超过50个正方形,将其合并为一个更大的正方形,求一种可行的操作使所有小正方形都被合并成一个n*n的大正方形 1…...
 
STM32 串口学习(二)
要用跳线帽将PA9与RXD相连,PA10与TXD相连。 软件设计 void uart_init(u32 baud) {//UART 初始化设置UART1_Handler.InstanceUSART1; //USART1UART1_Handler.Init.BaudRatebound; //波特率UART1_Handler.Init.WordLengthUART_WORDLENGTH_8B; //字长为 8 位数据格式U…...
 
点大商城V2_2.5.0 全开源版 商家自营+多商户入驻 百度+支付宝+QQ+头条+小程序端+unipp开源前端安装测试教程
安装测试环境:Nginx 1.20PHP7.2MySQL 5.6 修复了无法上传开放平台问题 安装说明: 1、上传后端目录至网站 2、导入提供的数据库文件 3、修改数据库配置文件根目录下config.php,增加数据库用户名和密码 4、网站后台直接访问网址ÿ…...
“深入理解SpringBoot:从入门到精通“
标题:深入理解Spring Boot:从入门到精通 摘要:本文将介绍Spring Boot的基本概念和核心特性,并通过示例代码演示如何使用Spring Boot构建一个简单的Web应用程序。 1. 简介 Spring Boot是一个开源的Java框架,旨在简化基…...
 
PCB绘制时踩的坑 - SOT-223封装
SOT-223封装并不是同一的,细分的话可以分为两种常用的封装。尤其是tab脚的属性很容易搞错。如果你想着用tab脚连接有属性的铺铜,来提高散热效率,那么你一定要注意你购买的器件tab脚的属性。 第一种如下图,第1脚为GND,第…...
 
Go语法入门 + 项目实战
👂 Take me Hand Acoustic - Ccile Corbel - 单曲 - 网易云音乐 第3个小项目有问题,不能在Windows下跑,懒得去搜Linux上怎么跑了,已经落下进度了.... 目录 😳前言 🍉Go两小时 🔑小项目实战 …...
 
QT控件通过qss设置子控件的对齐方式、大小自适应等
一些复杂控件,是有子控件的,每个子控件,都可以通过qss的双冒号选择器来选中,进行独特的样式定义。很多控件都有子控件,太多了,后面单独写一篇文章来介绍各个控件的子控件。这里就随便来几个例子 例如下拉列…...
基于java在线收银系统设计与实现
摘要 科技的力量总是在关键的地方改变着人们的生活,不仅如此,我们的生活也是离不开这样或者那样的科技改变,有的消费者没有时间去商场购物,那么电商和快递的结合让端口到消费者的距离不再遥远;有的房客因地域或者工作的…...
 
Linux--进程的新建状态
新建状态: 操作系统创建了进程的内核数据结构(task_struct、mm_struct、页表),但是页表没有创建映射关系,而且磁盘里的程序的代码和数据未加载到物理内存...
区间dp,合并石子模板题
设有 N 堆石子排成一排,其编号为 1,2,3,…,N。 每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。 每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的…...
 
C++代码格式化工具clang-format详细介绍
文章目录 clang-format思考代码风格指南生成您的配置运行 clang-format禁用一段代码的格式设置clang-format的设置预览 clang-format 我曾在许多编程团队工作过,这些团队名义上都有“编程风格指南”。该指南经常被写下来并放置在开发人员很少查看的地方。几乎在每种…...
 
CentOS 7安装PostgreSQL 15版本数据库
目录 一、何为PostgreSQL? 二、PostgreSQL安装 2.1安装依赖 2.2 执行安装 2.3 数据库初始化 2.4 配置环境变量 2.5 创建数据库 2.6 配置远程 2.7 测试远程 三、常用命令 四、用户创建和数据库权限 一、何为PostgreSQL? PostgreSQL是以加州大学…...
 
QGraphicsView实现简易地图2『瓦片经纬度』
前文链接:QGraphicsView实现简易地图1『加载离线瓦片地图』 地图采用GCJ02 Web 墨卡托投影,最小坐标:(-180.00000000000000,-85.05112877980655),最大坐标:(180.00000000000000,85.05112877980655)。瓦片地图单张图片像…...
医学图像重建—第一章笔记
序言 本书涵盖内容: 2D parallel beam imaging 2D fan beam imaging 3D parallel ray imaging 3D parallel plane imaging 3D cone beam imaging 算法包括:analytical method,iterative method 应用于: X-ray CT single photon…...
python-pytorch基础之神经网络分类
这里写目录标题 生成数据函数定义数据集定义loader加载数据定义神经网络模型测试输出是否为2个输入数据,输出结果 训练模型函数计算正确率 训练数据并保存模型测试模型准备数据加载模型预测对比结果 生成数据函数 import randomdef get_rectangle():widthrandom.ra…...
 
【C++ 程序设计】实战:C++ 变量实践练习题
目录 01. 变量:定义 02. 变量:初始化 03. 变量:参数传递 04. 变量:格式说明符 ① 占位符 “%d” 改为格式说明符 “%llu” ② 占位符 “%d” 改为格式说明符 “%f” 或 “%e” 05. 变量:字节数统计 06. 变量&a…...
 
微软对Visual Studio 17.7 Preview 4进行版本更新,新插件管理器亮相
近期微软发布了Visual Studio 17.7 Preview 4版本,而在这个版本当中,全新设计的扩展插件管理器将亮相,并且可以让用户可更简单地安装和管理扩展插件。 据了解,目前用户可以从 Visual Studio Marketplace 下载各式各样的 VS 扩展插…...
 
Kafka 入门到起飞 - Kafka怎么做到保障消息不会重复消费的? 消费者组是什么?
Kafka怎么做到避免消息重复消费的? 消费者组是什么? 消费者: 1、订阅Topic(主题) 2、从订阅的Topic消费(pull)消息, 3、将消费消息的offset(偏移量)保存在K…...
 
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
 
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
 
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
 
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
 
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
 
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
 
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
