计算机网络----基本概念
基本概念
在这一章从整体上介绍计算机网络的概况, 为后续的学习搭建起整体的框架;
介绍计算机网络中的基础术语和概念;
什么是因特网
『 因特网 』是一个世界范围内互联了数以亿计的计算设备的计算机网络;
因特网具体构成
因特网互联了数以亿计的计算设备, 这些设备被称为『 主机 host 』或『 端系统 end system 』
- 🌰 例如, PC 电脑, 手机, 游戏机, 汽车, 等;
端系统通过『 通信链路 Communication Link 』和 『 分组交换机 Packet Switch 』连接到一起;
- 通信链路由不同类型的物理媒体组成;
- 🌰 例如, 同轴电缆, 铜线, 光纤, 无线电频谱, 等;
- 不同的链路能以不同的传输速率以『 比特/秒 bit/s 』为单位传输数据;
当一个端系统要向另外一个端系统传输数据时, 发送端系统将数据分成几段, 并在每段上加上一些相关信息, 由此形成的信息包被称为『 分组 Packet 』这些分组最终通过网络发送到了目的端系统;
“分组交换机” 从它的一条入通线链路接收到达的分组,并从它的一条出通信链路转发该分组;
- 最著名的两种分组交换机是『 路由器 Router 』和『 链路层交换机 Link - Layer Switch 』:
从发送端到接收端系统,一个分组所经历的一系列 “通信链路” 和 “分组交换机” 称为通过该网络的『 路径 Route / Path 』;
端系统通过『 因特网服务提供商 Internet Service Provider, ISP 』接入英特网;
- 每个 ISP 是一个由多个分组交换器和多个通信链路组成的网络,各个 ISP 为端系统提供了各种不同类型的网络接入;
- 端系统连接入低层的 ISP,而低层的 ISP 通过国家的,国际的高层 ISP 互联起来,高层的 ISP 是由通过高速光纤链路互联的高速路由器组成的;
端系统, 分组交换机和其他因特网部件都要遵循一系列的『 协议 Protocol 』。这些协议控制着因特网中信息的接收和发送;
因特网提供服务
在日常生活中, 我们通过网络可以使用到各种应用程序. 🌰 例如, 通讯软件, 社交网络, 在线视频, 网络游戏, 等;
这些依靠于网络的应用程序被称为『 分布式应用程序 Distributed Application 』因为它们涉及多台互相交换数据的端系统;
为了能够让应用程序在一个端系统上向另外一个端系统发送数据。端系统自身提供了一堆用于网络通信的 API.
网络协议
拿人类活动进行类比。两个人为了完成一项工作,必须遵守相同的通信协议。比如交流的语言,语法,统一遵守的社交规则;
- 如果一个人说英语,另外一个人说日语,两个人都互相听不懂对方的话,这两个人很难进行合作;
在互联网中为了能够让各种网络设备互相交流,必须遵守遵守统一的协议 Protocal;
- 一个协议定义了两个或多个通信实体之间交换的报文格式, 各部分含义。以及发送报文 / 接收报文,或其他事件时所采取的动作与次序;
网络边缘
被因特网相连起来的『 端系统 』处于网络的边缘;
端系统也称为『 主机 』, 因为他们可以容纳各种应用程序;
接入网
『 接入网 Access Network 』指将 “端系统” 连接到其『 边缘路由器 Edge Route 』的物理链路;
- 边缘路由器: 是一个端系统到任何其他远程端系统的 “路径” 上的 “第一台路由器”;
接入网主要存在三种接入网络的方式:
- 点对点方式接入;
- 以太网/WiFi方式接入;
- 广域无线接入;
生活中通常有如下几种接入网的使用环境:
- 家庭接入;
- 公司接入;
- 广域移动无线接入;
家庭接入
家庭接入互联网有如下几种方式:
数字用户线 (Digital Subscriber Line, DSL) :
- 住户通常从提供本地电话接入的电话公司处获得 DSL 因特网接入, 因此本地电话公司也是它的 ISP;
- 每个用户的 『 DSL 调制解调器 』使用电话线与位于本地电话公司的本地中心局 CO 中的『 数字用户线接入复用器 DSLAM 』 来交换数据;
- 家庭的 DSL 调制解调器将数字数据转换成高频音;
- 数字用户线接入复用器 DSLAM 将来自家庭的模型信号转换成数字信号;
- 电话线能同时承载网络信号和电话信号, 是因为他它们采用了不同的信号频率;
电缆因特网接入 (Cable Internet Access) :
- 利用了有线电视的基础设施;
- 通过光缆将电缆头端连接到地区枢纽, 然后再从这里使用传统的同轴电缆连接到各个家庭;
- 因为在这个系统中同时使用了光缆和同轴电缆, 所以也称为『 混合光纤同轴 Hybrid Fiber Coax, HFC 』
- 家庭需要使用『 电缆调制解调器 Cable Modem 』来将家庭的端系统发送出的数字信号转换成模拟信号;
- 在电缆头端, 使用『 电缆调制解调器端接系统 Cable Modem Termination System, CMTS 』来讲模拟信号转换成数字信号;
光纤到户 (Fiber To The Home, FTTH) :
- 光纤接入很简单, 从本地中心局直接连一条到家庭的光纤, 这被称为『 直接光纤 』
- 也有很多家庭共享一根光纤接入的方式;
- 家庭端使用『 光纤网络端接器 Optical Network Terminator, ONT 』它将数字信号转换成光信号;
- 中心局使用『 光纤线路端接器 Optical Line Terminator, OLT 』将光信号转换成数字信号;
企业接入
在公司和大学这种环境中, 通常端系统先接入一个由『 以太网交换机 』组成的『 局域网 LAN 』, 然后再由与以太网交换机相连的『 边缘路由器 』连接到因特网中;
物理媒介
在端到端的传输中,每个比特通过传播电磁波或者光脉冲的方式跨越物理媒介进行发送。物理媒介可以分成两种类型,导引型媒介和非导引型媒介。导引型媒介音波沿着固体媒介前行,非导引型媒介电波在空气或者外层空间传播,例如在无线局域网或数字卫星频道中传播。
双绞线:两根相互绝缘的铜导线
同轴电缆:有双向传输的功能
光缆:在玻璃光纤传播光脉冲,每一脉冲一比特(高速运行,底误码率)
非导引型介质–无线电波:通过电磁频谱传播信号
网络核心
『 网络核心 』即由互联端系统的『 分组交换机 』和『 通信链路 』构成的网状网络;
网络链路和交换机移动数据有两种基本方法:
- 电路交换 circuit switching;
- 分组交换 packet switching;
其演化方式如下图
电路交换
电路交换网络 中,在端系统建通信会话期间,预留了端系统间通信需要的资源 (缓存,链路传输速率)
- 🌰 传统的电话网络就是电路交换网络的例子;
- 发送方和接收方之间是一条他们 “专属的” 连接,这被称为『 电路 circuit 』这保证了可以以恒定的速率向接收方传送数据;
- 上图是一个电路交换网络;
- 在这个网络中, 用 4 条链路互联了 4 台电路交换机;
- 每条链路中都有 4 个电路;
- 因此每条链路同时支持 4 个并行的连接;
- 每个端系统间都建立起了『 端到端连接 end-to-end connection 』
- 对于本例的一个端到端连接来说, 它使用链路的 1/4 带宽, 哪怕其他三条电路不被使用, 也要为将来的连接进行预留;
电路交换网络中的复用
链路中的电路是通过『 频分复用 Frequency Division Multiplexing, FDM 』或『 时分复用 』来实现的;
- 对于 FDM 链路, 链路的频谱由跨越链路创建的所有连接所共享。而每个连接专用一个频段;
- 🌰 调频无线电台也使用频分复用来共享 88~108 MHz 的频谱,其中每个电台分配一个特定的频段;
- 对于一条 TDM 链路, 时间被划分为固定区间的帧, 而每帧又被划分为固定数量的时隙. 每个连接被分配了指定的时隙;
Example
计算通过电路交换网络将一个640,000比特长的文件从主机A传送到主机B需要多长时间(所有链路速率皆为1.536 Mbps,每条链路使用有24个时隙的TDM,建立端到端的电路需要500毫秒)?
t = 640000 ( ( 1.536 × 1000 × 1000 ) ÷ 24 ) + 0.5 = 10.5 s t=\frac{640000}{((1.536×1000×1000)÷24)}+0.5 = 10.5s t=((1.536×1000×1000)÷24)640000+0.5=10.5s
电路交换的特性
- 数据交换前需建立起一条从发端到收端的物理通路
- 在数据交换的全部时间内用户始终占用端到端的固定传输信道
- 交换双方可实时进行数据交换而不会存在任何延迟
电路交换的问题
- 计算机之间的数据交换往往具有突发性和间歇性特征,而对电路交换而言,用户支付的费用则是按用户占用线路的时间来收费的
- 不够灵活。只要在通话双方建立的通路中的任何一点出了故障,就必须重新拨号建立新的连接,这对紧急和重要通信是很不利的。
分组交换
- 在各种网络应用中, 端系统彼此交换『 报文 message 』
- 报文里可以包含数据, 也可以执行一种控制功能;
- 为了传输报文, 源端系统将报文拆分成较小的固定长度的数据块,再在每一个数据段前面增加一个首部(包含地址等控制信息,供交换机选择路由),称为『 分组 Packet 』
- 在源端系统和目的端系统之间, 每个分组都通过『 通信链路 』和『 分组交换机 』传送;
- 分组以等于该链路最大传输速率进行传输, 如果要经过链路发送一个 L L L 比特的分组, 链路的传输速率为 R R R 比特/秒, 则传输完该分组所需的时间为 L / R L/R L/R 秒;
存储转发传输
- 多数分组交换机在链路的输入端使用『 存储转发传输 store and forward transmission 』机制
- 它是指在交换机能够开始向输出链路传输该分组的第一个比特之前, 必须接收到整个分组;
- 如果源端系统从 0 0 0 时刻开始传输分组, 在 L / R L/R L/R 时刻路由器接收到整个分组, 之后路由器开始向目的端系统传输分组, 在时刻 2 L / R 2L/R 2L/R 目的端接收到整个分组.
- 总时延: 2 L / R 2L/R 2L/R
- 这是在只有一台路由器, 两条链路的情况下;
- 可以推导, 如果有源端到目的端之间有 N − 1 N - 1 N−1 个路由器, N N N 条速率为 R R R 链路, 则总时延为 N × L / R N \times L/R N×L/R
排队时延 & 分组丢失
- 每个分组交换机有多条链路与之相连,对于每条相连的链路,该分组交换机具有一个『 输出缓存 output buffer 』也称为『 输出队列 output queue 』
- 它用于储存路由器,准备发往那条链路的分组。需要缓存的原因是如果到达的分组需要传输到某条链路,但发现此链路正忙于传输其他分组则该分组必须在缓存中进行等待;
- 所以除了储存转发时延之外分组还要承受输出缓存的『 排队时延 queue delay 』
- 如果分组到达路由器之后,发现输出缓存已满。则这个分组就无法被接收,就会出现『 分组丢失/丢包 packet lost 』的情况。
转发表 & 路由选择协议
- 在因特网中,每个端系统都具备一个 IP 地址,当原主机要向目的端系统发送一个分组时。源端系统在该分组的首部包含了目的地的 IP 地址;
- 每个路由器都具备一个『 转发表 forwarding table 』,它会将接收到的分组中首部带的目的地址映射为对应的输出链路;
- 通过一些『 路由选择协议 routing protocol 』分组交换机可以自动地设置转发表;
分组交换 vs 电路交换
因为电路交换网络中, 在连接没有被使用时, 称为『 静默期 silent period 』其依旧占用着资源, 这导致它的传输效率比较低;
总体来讲, “分组交换” 性能优于 “电路交换”.
在相同条件下,分组交换能够比电路交换支持更多的用户。当用户数较少时,分组交换能够获得比电路交换更好的性能。
假设:1Mbps的链路,每个用户需要100kbps
电路交换:仅支持10个用户(1Mbps/100kbps)
分组交换:分组交换下1个用户活跃的概率为0.1,35个用户条件下,11个及以上用户同时活动的概率为0.0004,即10个及10个以内用户同时活跃的概率为0.9996,基本上与电路交换性能相当。
若要连续传送大量数据,且其传送时间远大于呼叫建立时间,则采用在数据通信之前预先分配传输带宽的电路交换较为合适。分组交换不需要预先分配传输带宽,在传送突发数据时可提高整个网络的信道利用率。
网络的网络
端系统经过一个『 接入 ISP 』与因特网相连;
而接入 ISP 自身也必须相连, 才能保证所有端系统都可以相连;
ISP 之间的连接被称作『 网络的网络 』
现如今的因特网网络结构非常复杂, 为了帮助理解, 下面 👇 我们从最基础的网络结构一步步地讲解:
最简单的结构:
- 最简单的方法就是将每个接入 ISP 都直接与其他所有的接入 ISP 单独连一条通信链路;
- 但很显然, 这种实现成本太高, 也很难实现;
网络结构 1:
- 创建一个单一的『 全球承载 ISP 』负责互联所有的接入 ISP;
- 因为承载全球的接入 ISP 连接成本很高, 所以全球承载 ISP 要进行收费;
- 接入 ISP 被称为『 客户 Customer 』;
- 全球承载 ISP 被称为『 提供商 Provider 』
网络结构 2:
- 如果精英全球承载 ISP 是有利可图的, 自由市场中就会涌入很多其他的公司;
- 这时就会有多个全球承载 ISP;
- 接入 ISP 可以在多个提供商之间进行选择;
- 全球承载 ISP 之间是必须互联的, 这样才能让连接到不同全球承载 ISP 的接入 ISP 之间互联;
- 这是一种两层的网络等级结构:
- 全球承载服务商位于顶层, 其也称为『 第一层 ISP ( tier-1 ISP ) 』
- 接入 ISP 位于底层;
网络结构 3:
- 这个世界很大, 有很多地方离全球承载 ISP 都很远, 接入 ISP 很难与它们连接;
- 这时出现了, 在给定区域提供连接的『 区域 ISP 』;
- 区域中, 接入 ISP 可以与区域 ISP 连接, 也可以选择接入第一层 ISP;
- 区域 ISP 与第一层 ISP 进行连接;
网络结构 4:
- 为了能够对接收到的连接和数据进行各种操作和控制, 除接入 ISP 之外, 再网络结构的各个等级都添加了『 入网点/存在点 Point of Presence, PoP』
- 除了第一层 ISP 之外, 任何 ISP 都可以选择『 多宿 Multi-Home 』即两个或更多供应商 ISP 相互连接;
- 🌰 一个接入 ISP 可以与多个区域 ISP 或全球承载 ISP 连接;
- 这样如果一个供应商 ISP 出现故障了, 不会影响当前 ISP 的服务;
- 位于相同等级层次的临近 ISP 之间还能够进行『 对等 Peer 』即通过网络连接在一起, 使他们之间的流量不需要上层的 ISP 传输;
- 因为上层的供应商会对流量收费, 两个平级 ISP 直接相连的话, 就可以省钱了;
- 当两个 ISP 对等时, 它们是不对流量进行结算的, 也就是互相不收钱;
- 当对等的需求多了, 就有第三方公司创建『 因特网交换点 Internet Exchange Point, IXP 』在这里不同等级层次的 ISP 都可以进行对等;
网络结构 5:
- 在网络结构 4 的基础之上添加了『 内容提供商网络 content provider network 』
- 类似谷歌这样的公司就有自己的 “内容提供商网络”. 它把自己的服务器连接起来, 构成一个独立于公共因特网的专有网络;
- 这个专有网络通过与较低层的 ISP 对等 (无结算) 从而避免与接入 ISP 连接, 省去这部分流量的费用;
- 并且通过自己的专有网络, 内容供应商可以对如何提供服务给端用户有了更多的控制;
分组交换网中的时延, 丢包, 吞吐量
在从一个端系统向另一个端系统传递分组的过程中, 会经历各种不同类型的时延:
- 结点处理时延 nodal processing delay;
- 排队时延 queuing delay ;
- 传输时延 transmission delay;
- 传播时延 propagating delay;
这些时延总体累加起来是, 结点总时延 total nodal delay;
时延的类型
下图 👇 这个模型中展示了端到端传输路径的一部分, 一个分组从上游结点想通过路由器 A 来向路由器 B 发送. 下面我们通过模型来解释各种时延:
结点处理时延:
- 指的是分组进入路由器后, 机器会对分组上的信息进行必要的处理.
- 🌰 例如, 通过分组的首部来找到分组的去向, 进行错误检验, 等;
- 在结束完结点处理后, 路由器将分组引向通往路由器 B 链路的队列;
排队时延:
- 指的是分组在队列上等待传输造成的时延;
- 如果链路上没有分组在传播, 则排队时延为 0;
传输时延:
- 由链路传输速率和分组长度造成的时延;
- 假如分组长度为 L L L, 链路传输速率为 R b p s / s R \space {bps/s} R bps/s, 则传输时延为 L / R L/R L/R;
- 这是将所有的分组的比特从路由器推向链路所花的时间;
传播时延:
- 分组在链路上从起点到终点传播所花的时间;
- 链路的传播速率取决于物理媒体, 但基本上略小与光速;
- 传播时延等于链路的长度, 除以传播速度;
端到端的总时延:
- 假定在源主机到目的主机之间有 N − 1 N-1 N−1 台路由器, 每台路由器和源主机上的处理时延是 d p r o c d_{proc} dproc, 每台路由器和源主机的传输时延是 d t r a n s d_{trans} dtrans, 每条链路的传播时延是 d p r o p {d_{prop}} dprop;
- 则端到端传输的总时延为: d e n d − e n d = N ( d p r o c + d t r a n s + d p r o p ) d_{end-end} = N(d_{proc} + d_{trans} + d_{prop}) dend−end=N(dproc+dtrans+dprop)
排队时延 & 丢包
排队时延的大小, 很大程度上取决于流量到达该队列的速率, 链路的传输速率, 和到达流量的性质;
- 假如 a a a 表示分组到达队列的平均速率, 单位为 p k t / s pkt/s pkt/s;
- R R R 是路由器的传输速率, 即从队列向链路推出比特的速率;
- 假定每个分组都由 L L L 个比特组成, 同时假定队列无限大;
- 则比率 L a / R La/R La/R 表达了 “比特到达队列的平均速率, 与队列向外推出的比特速率的比值”, 这被称为『 流量强度 traffic intensity 』
- 如果 L a / R > 1 La/R > 1 La/R>1 则比特到达队列的速率大于队列向外推出比特的速率, 如果分组无限地以 a a a 速率传输到向路由器, 则会造成排队时延的无限增大;
上面我们假设队列能容纳无限多的分组. 但现实中, 队列的容量是有限的:
- 如果队列已满, 新来的分组会被『 丢弃 drop 』, 即分组遭到『 丢失 lost 』,或者路由形成环路,无法送到目的地,则分组也会丢失。
- 分组丢失的份额随着 “流量强度” 增加而增加;
- 一个结点的性能不仅根据 “时延” 来衡量, 也根据 “丢包率” 来衡量;
吞吐量
从主机 A 向主机 B 传输一个文件, 在任何时间的『 瞬间吞吐量 instantaneous throughput 』指的是主机 B 接收该文件的瞬间速率;
如果文件由 F F F 个比特组成, 主机 B 接收完 F F F 比特用了 T T T 秒, 则文件传输的『 平均吞吐量 average throughput 』是 F / T b p s F/T \space bps F/T bps
观察下面 👇 这个模型, 服务器要经过路由器向客户传递数据, 服务器到路由器的链路传输速率为 R s R_s Rs, 路由器到客户链路的传输速率为 R c R_c Rc;
- 很容易想象, 客户接收分组的速率为两个链路传输速率的最小值, 即吞吐量为 m i n [ R s , R c ] min[R_s, R_c] min[Rs,Rc];
- 传输速率最小的链路也被称为『 瓶颈链路 bottleneck link 』, 其速率等于吞吐量;
- 传输一个 F F F 个比特大小的文件, 所花时间为 F / m i n [ R s , R c ] F/min[R_s, R_c] F/min[Rs,Rc]
- 同理, 如果路径中有 N N N 条链路, 速率分别是 R 1 , R 2 , . . . , R n R_1, R_2, ..., R_n R1,R2,...,Rn, 则吞吐量是 m i n [ R 1 , R 2 , . . . , R n ] min[R_1, R_2, ..., R_n] min[R1,R2,...,Rn]
在现实中, 网络核心的所有链路都有非常高的传输速率, 基本上远远高于需求, 所以限制吞吐量的因素只要是每个主机的接入网;
协议层次及其服务模型
在现实中, 我为简化一个复杂的系统, 我们通常会将其抽象成分层的体系结构;
- 每个分层各自承载特定的功能, 并与其他层次用定义好的交互方法来进行合作;
- 只要与其他层次交互的方法不变, 层次内部对于功能的具体实现改变, 不会影响到其他层次;
🌰 下图展示了民航服务的分层结构:
协议分层
计算机网络设计中, 以『 分层 layer 』的方式组织协议, 以及这些协议的网络硬件和软件;
- 所有层次的协议合起来被称为『 协议栈 protocal stack 』
『 因特网的协议栈 』由 5 个层次组成, 自顶向下分别为:
应用层:
- 这个层次存放的协议, 为网络应用程序提供服务;
- 🌰 例如, HTTP, SMTP, FTP, DNS, 等;
- 应用层协议分布在多个端系统上, 一个端系统中的应用程序使用协议向另一个端系统应用程序发送信息;
- 位于应用层的传输的信息称为『 报文 message 』
运输层:
- 运输车在应用程序两端传送应用层报文;
- 在因特网中, 有两个运输协议, TCP 和 UDP;
- TCP 为应用程序提供了面向连接的服务;
- UDP 为应用程序提供了无连接的服务;
- 运输层传输的分组, 称为『 报文段 segment 』
网络层:
- 网络层负责为传递的分层选择最合适的网络路径;
- 网络层协议有著名的 IP 协议;
- 网络层传输的分组, 称为『 数据报 datagram 』
链路层:
- 链路层将网络层传输的数据报从一个结点移动到下一个结点;
- 链路层传递的分组, 被称为『 帧 frame 』
物理层:
- 物理层将链路层传递的帧, 一个比特一个比特地从一个结点移动到下一个结点;
- 这层的协议与链路的实际传输媒体相关;
- 不同的链路媒体, 传输比特的方式也各不相同;
OSI 模型
因特网协议栈不是唯一的协议栈;
20 世纪 70 年代, 国际标准化组织 ISO 提出了『 开发系统互联 OSI 』模型的 7 层网络协议栈;
相比较与 5 层协议栈, 它在应用层和运输层间, 添加了 “表示层” 和 “会话层”;
- 表示层: 使得通信的应用程序能够明白接收到的数据的含义;
- 数据可能被压缩, 加密, 或者采用特殊的编码格式;
- 会话层: 提供了数据交换定界和同步功能;
- 提供了检查点, 数据恢复等功能;
封装
在下图可以看出, 发送端在协议栈中自顶向下地传递分组时, 每一层都会在上一层分组的基础上, 加上自己层次的附加信息 ( 首部字段 ) , 这种行为成为『 封装 encapsulation 』
- 这些首部字段, 会被接收端的对应层次所使用, 用以传递和层次相关的信息;
- 一个分组具有两种类型的字段: 『 首部字段 』 和『 有效载荷字段 payload field 』
- 有效载荷字段就是来自于上一层的分组;
从这张图还可以看出, 协议栈不需要在所有的网络设备中得以实现, 只需要各自实现自身所需的即可;
越在网络边缘, 所需的网络协议越复杂, 复杂性越高;
相关文章:
计算机网络----基本概念
基本概念 在这一章从整体上介绍计算机网络的概况, 为后续的学习搭建起整体的框架; 介绍计算机网络中的基础术语和概念; 什么是因特网 『 因特网 』是一个世界范围内互联了数以亿计的计算设备的计算机网络; 因特网具体构成 因特网互联了数以亿计的计算设备, 这些设备被称为…...
创建可直接用 root 用户 ssh 登陆的 Docker 镜像
有时候我们在 Mac OS X 或 Windows 平台下需要开发以 Linux 为运行时的应用,IDE 或可直接使用 Docker 容器,或 SSH 远程连接。本地命令行下操作虽然可以用 docker exec 连接正在运行的容器,但 IDE 远程连接的话 SSH 总是一种较为通用的连接方…...
Linux 查看内核日志的方法
文章目录 1. dmesg 命令一. 介绍内核环形缓冲区的特点 二. 主要功能三. dmesg 使用 2. 查看kmsg文件/dev/kmsg 的用途使用 /dev/kmsg与 dmesg 的关系 3. 内核日志消息的打印行为 1. dmesg 命令 一. 介绍 dmesg(display message 或 display driver message 的缩写&…...
详解登录MySQL时出现SSL connection error: unknown error number错误
目录 登录MySQL时出错SSL connection error: unknown error number 出错原因 使用MySQL自带的工具登录MySQL 登陆之后,使用如下命令进行查看 解决方法 找到MySQL8安装目录下的my.ini配置文件 记事本打开my.ini文件,然后按下图所示添加配置 此时再…...
DRNN 神经网络的Jacobian 信息辨识
DRNN 神经网络的 Jacobian 信息辨识 1. 基本原理 Jacobian 矩阵用于描述多输入多输出系统中输入和输出之间的偏导关系,其形式为: 对于 DRNN(Dynamic Recurrent Neural Network),其动态特性使得 y(t)\mathbf{y}(t)y(t…...
麒麟系统x86安装达梦数据库
一、安装准备前工作 操作系统:银河麒麟V10,CPU: x86_64 架构 下载地址,麒麟官网:https://www.kylinos.cn/ 数据库:dm8_20220915_x86_kylin10_64 下载地址,达梦数据库官网:https://…...
uniapp定义new plus.nativeObj.View实现APP端全局弹窗
为什么要用new plus.nativeObj.View在APP端实现弹窗?因为uni.showModal在APP端太难看了。 AppPopupView弹窗函数参数定义 参数一:弹窗信息(所有属性可不填,会有默认值) 1.title:"", //标题 2.content:"", //内容 3.confirmBoxCo…...
git branch -d 删除分支
Git进行版本控制时,删除分支是常见的操作。特别是当特定的功能开发完成或者分支不再需要时,删除分支可以帮助保持仓库的整洁。删除本地分支和删除远端分支是两个独立的操作。如果需要同时删除本地和远端的分支,需要分别执行以下两个命令。 一…...
kafka生产者和消费者命令的使用
kafka-console-producer.sh 生产数据 # 发送信息 指定topic即可 kafka-console-producer.sh \ --bootstrap-server bigdata01:9092 \ --topic topicA # 主题# 进程 29124 ConsoleProducer kafka-console-consumer.sh 消费数据 # 消费数据 kafka-console-consumer.sh \ --boo…...
MyBatis框架介绍、部署及使用
一、MyBatis介绍 1.1 框架概念 **框架:**就是软件的半成品,完成了软件开发过程中的通用操作,开发者只需很少或者不用进行加工,就能 实现特定的功能。从而简化开发人员在开发过程中的步骤,提高开发效率。 1.2 常用框架…...
MySQL INSERT CRTATE DELETE DORP UPDATE WHERE 的用法
MySQL INSERT CRTATE DELETE DORP UPDATE WHERE 的用法 -- 创建数据库 CREATE DATABASE example_db;-- 使用数据库 USE example_db;-- 创建表 CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),position VARCHAR(50),salary DECIMAL(10, 2) );…...
《安富莱嵌入式周报》第346期:开源2GHz带宽,12bit分辨率,3.2Gsps采样率示波,开源固件安全分析器, 开源口袋电源,开源健康测量,FreeCAD
周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频: https://www.bilibili.com/video/BV1TYBhYKECK/ 《安富莱嵌入式周报》第346期:开源2GHz带…...
Spring ApplicationListener监听
【JavaWeb】Spring ApplicationListener-CSDN博客 ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,设计初衷也是为了系统业务逻辑之间的解耦,提高可扩展性以及可维护性。事件发布…...
蓝桥杯练习题
目录 1.劲舞团 2.数字诗意 3.封闭图形个数 4.回文数组 欢迎 1.劲舞团 0劲舞团 - 蓝桥云课 #include <iostream> using namespace std; int main() {int num1,M0;long long c[1000000];int cnt0;string a,b ;while(cin>>a>>b>>c[cnt])//系统自动输入…...
【JAVA】Java高级:Java中的常用设计模式——设计模式的基本思想与应用场景
在软件开发中,设计模式是一种被反复使用的解决特定问题的最佳实践。它们提供了一种标准化的方式来解决常见的设计问题,使得代码更具可读性、可维护性和可扩展性。特别是在Java开发中,设计模式的使用可以极大地提高代码的质量和开发效率。 设…...
QT 跨平台实现 SSDP通信 支持多网卡
一.多网卡场景 在做SSDP通信的时候,客户端发出M-search命令后, 主机没有捕捉到SSDP的消息,你可以查看下,是不是局域网下,既打开了wifi,又连接了本地网络,mac os下很容易出现这种场景。此时,我们发送消息时,需要遍历所有网卡并发送M-search命令。 二.QT相关接口介绍 1…...
疑难Tips:NextCloud域名访问登录时卡住,显示违反内容安全策略
[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 1使用域名访问Nextcloud用户登录时卡住,显示违反内容安全策略 我使用官方Docker镜像来部署NextCloud 28.0.5,并通过Openresty反向代理Nextcloud,但是在安装后无法稳定工作,每次登录后,页面会卡死在登录界面,无法…...
区块链:非对称加密
在区块链技术中,非对称加密是一项核心技术,用于保障数据的安全性和用户的隐私。它通过公钥和私钥的配合,实现了信息加密、解密、身份验证和数字签名等功能。 1. 非对称加密的基本原理 非对称加密使用两个密钥: 公钥:…...
量子安全与经典密码学:一些现实方面的讨论
量子安全与经典密码学 背景:量子安全与经典密码学量子计算对传统密码学的威胁 安全性分析经典密码学的数学复杂性假设**量子密码学的物理不可克隆性假设** **性能与实现难度**后量子算法在经典计算机上的运行效率**量子通信设备的技术要求与成本** **可扩展性与适用…...
WordCloud参数的用法:
-------------词云图集合------------- 用WordcloudPyQt5写个词云图生成器1.0 WordCloud去掉停用词(fit_wordsgenerate)的2种用法 通过词频来绘制词云图(jiebaWordCloud) Python教程95:去掉停用词词频统计jieba.toke…...
数据库(总结自小林coding)|索引失效的场景、慢查询、原因及如何优化?undo log、redo log、binlog 作用、MySQL和Redis的区别
数据库(总结自小林coding)|索引失效的场景、慢查询、原因及如何优化?undo log、redo log、binlog 作用、MySQL和Redis的区别 说一下索引失效的场景?什么是慢查询?原因是什么?可以怎么优化?undo …...
(计算机组成原理)期末复习
第一章 计算机的基本组成:硬件软件(程序)计算机系统 软件有系统软件(系统管理工具),应用软件 计算机硬件:包括主机和外设,主机包括CPU和内存,***CPU由运算器和控制器所组…...
Linux下一次性关闭多个同名进程
要一次性关闭多个同名的 Python 进程,例如: 你可以使用以下几种方法。在执行这些操作之前,请务必确认这些进程确实是你希望终止的,以避免意外关闭其他重要的进程。 方法一:使用 pkill 命令 pkill 是一个用于根据名称…...
Android显示系统(01)- 架构分析
一、前言: Android是基于Linux的,而显示设备的驱动也都是和Linux普通设备一样去管理,也就是说归根结底还是要按照Linux的方式组织数据送给LCD,因此,我们理解Android设计的这一套复杂的显示系统时候,一定要…...
Bean的生命周期详解保姆级教程,结合spring boot和spring.xml两种方式讲解,5/7/10大小阶段详细分析
文章目录 Spring Bean的生命周期一、为什么知道 Bean 的生命周期?二、生命周期大致了解三、详细分析生命周期3.1 ① 初步划分为 5 步:3.1.1 spring 框架中怎么理解3.1.2 spring boot 项目中怎么理解 3.2 ② 细分 5 步为 7 步:3.2.1 spring 框…...
2024年11月26日Github流行趋势
项目名称:v2rayN 项目维护者:2dust yfdyh000 CGQAQ ShiinaRinne Lemonawa 项目介绍:一个支持Xray核心及其他功能的Windows和Linux图形用户界面客户端。 项目star数:70,383 项目fork数:11,602 项目名称:fre…...
分页/列表分页
分页和单列表差不多,只是多加了点数据 一 : 实体类 1. 原生实体类 和 2.vo实体类 vo实体类包含原生实体类的所有字段 再新字段 原生(数据库里的字段) vo(多条件查询字段 ,分页字段) 分页字段 : private Integer pageNum1 //起始页 private Integer pageSize 4 //显示页数…...
微信小程序学习指南从入门到精通
🗽微信小程序学习指南从入门到精通🗽 🔝微信小程序学习指南从入门到精通🔝✍前言✍💻微信小程序学习指南前言💻一、🚀文章列表🚀二、🔯教程文章的好处🔯1. ✅…...
STM32外设应用
STM32系列单片机是由意法半导体(STMicroelectronics)推出的一款基于ARM Cortex-M内核的32位微控制器。STM32以其高性能、低功耗、丰富的外设接口以及灵活的应用场景,广泛应用于嵌入式系统中。STM32的外设功能非常强大,几乎涵盖了大多数常见嵌入式开发所需的硬件接口。本篇文…...
Vue进阶面试题目(一)
Vue 自定义事件中,父组件如何接收子组件传递的多个参数? 在 Vue 中,子组件可以通过 $emit 方法触发自定义事件,并传递参数。父组件可以通过监听这个事件来接收参数。如果子组件需要传递多个参数,可以将这些参数作为数组或对象传…...
人工智能——大语言模型
5. 大语言模型 5.1. 语言模型历史 20世纪90年代以前的语言模型都是基于语法分析这种方法,效果一直不佳。到了20世纪90年代,采用统计学方法分析语言,取得了重大进展。但是在庞大而复杂的语言信息上,基于传统统计的因为计算量巨大…...
每天五分钟机器学习:支持向量机数学基础之超平面分离定理
本文重点 超平面分离定理(Separating Hyperplane Theorem)是数学和机器学习领域中的一个重要概念,特别是在凸集理论和最优化理论中有着广泛的应用。该定理表明,在特定的条件下,两个不相交的凸集总可以用一个超平面进行分离。 定义与表述 超平面分离定理(Separating Hy…...
树链剖分(重链剖分)
树链剖分的核心思想就是将一棵树剖分成一条一条的链 因为树不好处理 但链比较好处理 为了学会它 我们先要学会树上dfs(深度优先搜索) 然后就没了(雾) Because 树链剖分需要用到两个dfs 哦对了 我们还要了解以下的知识点 1.子…...
Spring Boot 开发环境搭建及示例应用
文章目录 1. 准备开发工具安装 JDK安装 IDE安装 Maven 2. 创建 Spring Boot 项目使用 Spring Initializr 创建项目导入项目到 IDE 3. 编写代码主类创建控制器创建实体类创建仓库接口创建服务类创建控制器 4. 配置文件5. 运行应用程序6. 测试应用程序7. 调试与优化8. 部署应用 1…...
网站布局编辑器前端开发:设计要点与关键考量
一、设计说明 (一)功能模块 可视化操作区域 这是用户进行网站布局设计的主要画布。通过拖放各种页面元素(如文本框、图片、按钮、导航栏等)到该区域,用户能够直观地构建网站页面的布局结构。支持对元素的实时缩放、旋…...
网络编程第一课
0voice第一课 https://github.com/0voice 今日学习:网络通信IO 网络通信的核心是通过系统提供的socket套接字实现的。socket和c语言中文件操作的本质类似,在c语言中,通过fopen、fclose、fread、fwrite实现了对文件的操作,socket…...
关于网络安全攻防知识
DNS 劫持 什么是DNS劫持? DNS劫持又叫域名劫持,(劫持了路由器或域名服务器等),篡改了域名的解析结果,使得指向该域名的IP指向IP,你想访问正经网站结果给你跳到一个不正经的网站,实现…...
途普科技企业知识中台完成华为昇思MindSpore技术认证
近日,北京途普科技有限公司(以下简称“途普科技”)作为华为昇腾大模型方向的应用软件伙伴,核心产品企业知识中台已成功与华为AI框架昇思MindSpore完成相互兼容性认证。这一成就标志着途普科技在AI领域与华为的合作进一步加深&…...
等保测评在云计算方面的应用讲解
等保测评(信息安全等级保护测评)在云计算方面的应用主要聚焦于如何满足等级保护相关要求,并确保云计算平台及其上运行的业务系统的安全性。以下是主要内容的讲解: 1. 云计算中的等保测评概述 等保测评是在我国网络安全等级保护制…...
【PTA】【数据库】【SQL命令】编程题2
数据库SQL命令测试题2 测试题目录 10-1 查询“李琳”老师所授课程的课程名称10-2 查询成绩比所有课程的平均成绩高的学生的学号及成绩10-3 创建带表达式的视图StuView10-4 从视图PerView中查询数据10-5 查询工资高于在“HR”部门工作的所有员工的工资的员工信息10-6 查询选修的…...
flask请求头回显的学习和探究如何进行错误页面污染回显
请求头 首先我们要了解一些flask的请求和响应是利用了什么。 flask的请求和响应主要利用了werkzeug,那么我们就要先了解一下什么是werkzeug,其结构又是什么。 werkzeug是一个基于python开发的一个web工具包,其是flask的核心组件之一。其功能…...
Node.js的url模块与querystring模块
新书速览|Vue.jsNode.js全栈开发实战-CSDN博客 《Vue.jsNode.js全栈开发实战(第2版)(Web前端技术丛书)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 4.3.1 http模块——创建HTTP服务器、客户端 要使用http模块࿰…...
Spring框架使用xml方式配置ThreadPoolTaskExecutor线程池,并且自定义线程工厂
一、自定义线程工厂 自定义线程工厂需要实现java.util.concurrent.ThreadFactory接口,重写newThread方法。 示例代码: package com.xiaobai.thread;import org.apache.log4j.Logger;import java.util.concurrent.ThreadFactory; import java.util.conc…...
自动化的内存管理技术之垃圾回收机制-JavaScript引用数据内存回收机制
垃圾回收机制(Garbage Collection, GC) 是一种自动化的内存管理技术,用于回收程序中不再使用的内存空间,避免内存泄漏。JavaScript(尤其是 V8 引擎)使用了一些经典的垃圾回收算法,如 标记-清除 …...
如何使用MySQL实现多租户架构:设计与实现全解析
项目背景 在现代SaaS(软件即服务)应用中,多租户架构是一种常见的设计模式。多租户架构能够让多个客户(租户)共享同一个应用实例和数据库资源,而不会相互干扰。在实际的业务场景中,采用多租户架…...
Flink学习连载文章8--时间语义
Time的分类 (时间语义) EventTime:事件(数据)时间,是事件/数据真真正正发生时/产生时的时间 IngestionTime:摄入时间,是事件/数据到达流处理系统的时间 ProcessingTime:处理时间,是事件/数据被处理/计算时的系统的时间 EventTime的重要性 假设,你正在去往地下停…...
jvm核心组件介绍
1. 类加载器(ClassLoader): • 想象它是一个快递员,负责把Java类(.class文件)这个“包裹”从磁盘这个“发货地”送到JVM内部这个“目的地”。类加载器确保每个类只被加载一次,并维护一个类的层级…...
【WEB开发.js】getElementById :通过元素id属性获取HTML元素
getElementById 是 JavaScript 中常用的一个 DOM 方法,用于通过元素的 id 属性获取文档中对应的 HTML 元素。这个方法返回的是一个包含该元素的引用,如果没有找到指定的元素,则返回 null。 语法: document.getElementById(id);i…...
java基础知识(Math类)
引入:Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根 import java.util.Math 1.abs绝对值 int abs Math.abs(-9); 2.pow求幂 double pow Math.pow(2,4); 3.向上取整 double ceil Math.ceil(3.9);//ceil 4 4.向下取整 dou…...
图像分割——区域增长
一 区域增长 图像灰度阈值分割技术都没有考虑到图像像素空间的连通性。区域增长法则正好相反,顾及像素的连接性. 方法:1)选择一个或一组种子; 2)选择特征及相似性判决准则; 3)从该种子开始向外生长&#x…...