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

计算机网络笔记再战——理解几个经典的协议6——TCP与UDP

目录

先说端口号

TCP

使用序号保证顺序性和应答来保证有效性

超时重传机制

TCP窗口机制

UDP

路由协议

协议分类:IGP和EGP

几个经典的路由算法

RIP

OSPF

链路状态数据库(LSDB)

LSA(Link State Advertisement)

区域划分

路由器角色

路由协议特性

BGP

BGP的协议版本

BGP的路由策略和优化

BGP的优势和局限性


我们现在终于来到了传输层。顾名思义,我们就是在这里传递一整个信息单元。我们现在,是向一个IP和一个端口传递一个信息。

先说端口号

我们的计算机本质上占用一个IP,可是,上面还有非常多的应用程序,我们如何区分每一个包是到哪一个应用程序的呢?答案是使用端口号来作为一个标识一个终点。

一般的,我们的通信有五个特征:两个IP:源IP和目标IP,两个端口:源端口和目标端口以及协议号,五个特征中只要有一个不一样就不是一个通信!

端口的分配则是有著名端口(也就是一般流行协议占用的端口)和时序分配的端口(在最后一个被占用的端口处+1)

协议端口号
HTTP80
HTTPS443
FTP (控制连接)21
FTP (数据连接)20
SSH22
Telnet23
SMTP25
DNS53
POP3110
IMAP143
SNMP161
DHCP (客户端)68
DHCP (服务器)67
RDP3389

TCP

经典三次握手,这个方式来保证TCP的有链接性质。

使用序号保证顺序性和应答来保证有效性

我们在原始的数据包中插入一个序号,来表达数据的次序,这样来保证数据可以再传递之后恢复原模原样。

对于尝试建立的应答机制,则是确保通信链路是有效的。一般是主机发送表达主机的通信功能正常,目标机接受并发送表达目标机可以正常的接受和发送,最后是主机传递数据表达主机的接受是正常的。

超时重传机制

重发超时是一种确定度量通信是否正常的机制。换而言之,当我们发送应答报文的时候,多久之前收到主机的回复是正常的这个事情。

TCP窗口机制

TCP窗口控制机制(TCP Window Control)是确保可靠数据传输的一个关键机制,旨在调节和管理发送方与接收方之间的流量,从而避免网络过载,并确保数据在可靠的、按顺序的方式到达目的地。这个机制的核心是TCP的滑动窗口(Sliding Window)协议,它通过控制可发送数据的量来平衡两端的发送和接收能力。

在TCP连接中,接收方通常具有一个缓冲区,用于存储从发送方接收的数据。在接收方的缓冲区未满时,接收方允许发送方继续发送数据;如果缓冲区接近满时,接收方就会通知发送方减缓数据的发送。这个缓冲区的大小由接收方的“接收窗口”来表示。接收方通过在TCP报文段的“窗口大小”字段中告知发送方它的接收窗口大小,从而控制发送方的发送速率。

在TCP的滑动窗口机制中,发送方能够一次性发送多个数据段,而不必等待每个数据段的确认(ACK)。窗口大小决定了发送方可以连续发送而无需等待确认的最大字节数。随着数据的传输和确认,发送方的窗口不断向前滑动,使得新的数据段可以继续发送。窗口的大小动态变化,基于网络的拥塞情况以及接收方的缓冲区状态。

拥塞控制机制是窗口控制中的一个重要方面。为了防止过多的数据超出网络的处理能力,TCP协议使用了一种名为慢启动(Slow Start)和拥塞避免(Congestion Avoidance)的算法。在连接开始时,TCP会以非常小的窗口开始传输数据,每当成功收到确认时,窗口的大小会加倍增长。随着连接的延续,TCP会根据网络的实际情况逐渐增加窗口大小,但如果出现拥塞,窗口会减小,直到网络恢复正常。

此外,TCP还通过快速重传和快速恢复机制来提高数据传输的效率和可靠性。当接收方发现数据丢失时,会立即发送重复的确认(DupACK)给发送方,通知它重新发送丢失的数据段。发送方通过这些重复确认来识别丢失的数据段,并在不经过慢启动的情况下尽快重传。

+-------------------+-------------------+-------------------+-------------------+
|      Source       |    Destination    |    Sequence       |  Acknowledgment   |
|      Port (16)    |       Port (16)    |    Number (32)    |    Number (32)    |
+-------------------+-------------------+-------------------+-------------------+
| Data  | Reserved |  Control Flags  |   Window Size (16) |   Checksum (16)   |
| Offset| (3 bits) |   (9 bits)      |    (16 bits)       |    (16 bits)       |
| (4 bits)           |                   |                   |                   |
+-------------------+-------------------+-------------------+-------------------+
|  Urgent Pointer (16 bits)   |           Options (Variable)             |
+----------------------------+-------------------------------------------+
  • TCP首部的第一个字段是源端口(Source Port)和目标端口(Destination Port),每个字段占用2个字节。这两个字段标识了数据传输的源地址和目的地址,即分别标识了发送方和接收方的端口号,它们决定了数据的最终接收者和发送者。接下来是序列号(Sequence Number),占用4个字节,它表示发送方发送的第一个字节在数据流中的位置。序列号是TCP协议确保数据按顺序传输的关键,它使接收方能够重新排列和处理接收到的数据。

  • 紧随其后的是确认号(Acknowledgment Number),同样占用4个字节,它标识接收方期望接收到的下一个字节的序号。确认号仅在ACK标志位被设置时有效,表示接收方已经收到的数据字节数,并确认了下一个期望的字节。接下来是数据偏移(Data Offset),占4位,它指定了TCP首部的长度,指示首部的最后一个字节的位置,从而帮助接收方确定数据部分的开始位置。数据偏移字段后面是保留字段(Reserved),占3位,通常设置为0,保持兼容性。

  • TCP首部的下一个字段是标志位(Flags),占9位,通常包含6个重要的控制标志位:URG(紧急指针有效)、ACK(确认字段有效)、PSH(推送数据段)、RST(重置连接)、SYN(同步连接)、FIN(终止连接)。这些标志位用于控制连接的建立、数据的传输以及连接的终止。

  • 接下来是窗口大小(Window Size),占2个字节,指示接收方的缓冲区大小,或者说是接收窗口的大小,决定了发送方可以发送的最大数据量。这个字段用于流量控制,确保接收方的缓冲区不会被填满,导致丢包或阻塞。

  • 接着是校验和(Checksum),占2个字节,用于检测TCP首部和数据部分在传输过程中是否发生了错误。校验和通过对数据进行计算得出,发送方和接收方都需要进行校验,以确保数据的完整性。

  • 紧接着是紧急指针(Urgent Pointer),占2个字节,它仅在URG标志位被设置时有效,用于指示紧急数据的结束位置。紧急数据通常是具有优先级的数据,接收方需要立即处理。

  • 最后是选项字段(Options),它是一个可选的部分,占用可变长度。选项字段用于提供一些附加功能,如最大段大小(MSS)、时间戳等。选项的长度可以根据需要变化,因此这个字段的长度是可变的。

UDP

UDP就会简单很多,他就是一个超级简单的对IP的封装,不提供任何超时重传,包纠正等错误处理机制。所以,他比较迅速。

路由协议

我们下面要做的就是专门的讨论包转发这个事情。也就是讨论路由。路由分为静态路由和动态路由。

静态路由由人手动设置,也就是人直接介入控制。动态路由则是网络之间自动调节反馈,动态的规划每一个部分包应该走何处实现网络的最小阻塞。

协议分类:IGP和EGP

协议分为外部网关协议EGP和内部网关协议IGP。他们分别完成网络之间的路由和网络内部的路由。

几个经典的路由算法

  • 距离向量路由算法(Distance Vector Routing) 距离向量路由算法是最基本的路由算法之一,每个路由器通过与邻居路由器交换距离信息来更新路由表。每个路由器维护一张包含到达各目的地的最短路径的表。每次更新时,路由器会将其自己的路由表发送给邻居路由器。邻居路由器接收到更新后,将自己对每个目的地的距离加上与该邻居的距离,从而更新自己的路由表。常见的距离向量算法包括RIP(Routing Information Protocol),它采用跳数作为距离度量标准。距离向量算法的优点是简单易实现,但缺点是收敛较慢且容易发生环路。

  • 链路状态路由算法(Link State Routing) 链路状态路由算法与距离向量不同,它要求每个路由器向网络中的所有其他路由器广播其链路状态信息,描述它与每个邻居路由器的连接状况。每个路由器在接收到链路状态信息后,都会构建一张包含所有网络拓扑的完整图,并使用Dijkstra算法来计算到各目的地的最短路径。链路状态路由的代表协议是OSPF(Open Shortest Path First)。相比于距离向量,链路状态算法具有更快的收敛速度和更高的可扩展性,但其计算和存储要求较高。

  • 洪泛路由算法(Flooding) 洪泛算法是一种简单的路由策略,每个路由器接收到一个数据包后,都会将该数据包广播到所有其他路由器,直到数据包到达目的地。洪泛算法不需要任何路由表,仅仅通过“广播”实现网络中的数据传输。尽管这种方法简单有效,适用于广播式的网络(如无线网络或一些特定的点对点网络),但它的缺点是网络带宽的浪费,因为每个数据包都被多次发送,可能导致严重的网络拥塞和冗余数据。

  • 路径选择算法(Path Vector Routing) 路径选择算法是距离向量路由和链路状态路由的结合体。在路径选择算法中,每个路由器不仅传播距离信息,还传播其到达每个目的地的完整路径。这样,每个路由器可以选择根据路径的完整信息来做路由决策。BGP(Border Gateway Protocol)是路径选择算法的典型代表,常用于Internet的自治系统之间的路由选择。BGP能够根据路径的多种属性(如AS路径、路由策略等)来选择最佳路径。路径选择算法可以在复杂的大型网络中有效运作,但其复杂性较高,处理路径策略和更新的效率成为挑战。

  • 混合路由算法(Hybrid Routing) 混合路由算法结合了距离向量和链路状态算法的优点。它试图通过将两者结合在一起,提供更高的效率和灵活性。一个典型的混合路由协议是EIGRP(Enhanced Interior Gateway Routing Protocol)。EIGRP结合了距离向量算法的简单性和链路状态算法的快速收敛特点,使用Diffusing Update Algorithm(DUAL)来实现网络拓扑的快速更新。EIGRP通过在路由更新时同时传递距离和链路状态信息来避免路由环路,并实现较快的收敛。

RIP

RIP(路由信息协议)是一个典型的距离向量算法的路由协议,被广泛的用在LAN上

在这里,我们定义跳数为经过路由器的个数作为距离的标准,对路由表内部存储的IP——路由器映射对进行匹配。这样的话,就知道什么样的IP走那一条传递路径。

当然,这里很容易出现环形的链路导致通知报文无限的传递,办法是毒性逆转(直接说此路不同断开环的形成)和触发更新(立即将路径的链路更新广播到其他的路由器上)

OSPF

OSPF(Open Shortest Path First,开放最短路径优先)是一种链路状态路由协议,广泛应用于大型企业网络和ISP的内部网(也称为自治系统)。OSPF采用Dijkstra算法计算最短路径,并通过将网络的拓扑信息传播给所有路由器,从而构建全局路由表。与距离向量路由协议(如RIP)相比,OSPF的收敛速度更快、扩展性更好,适合较大的网络环境。

链路状态数据库(LSDB)

OSPF的核心思想是通过交换链路状态信息来保持网络拓扑的一致性。每个路由器都有一张链路状态数据库(LSDB),该数据库包含了网络中所有路由器和它们之间连接的详细信息。每个路由器通过交换链路状态广告(LSA,Link State Advertisement)来描述自己与邻居的连接情况。LSA通过多播方式传播,所有路由器都能收到LSA,从而更新自己的LSDB。

LSA(Link State Advertisement)

LSA是OSPF路由器交换的基本信息单元,描述了每个路由器的链路状态。LSA包括多个类型,主要有:

  • Router LSA(类型1):由路由器生成,描述该路由器与其直接连接的网络和邻居的状态。

  • Network LSA(类型2):由网络的DR(Designated Router,指定路由器)生成,描述广播网络的拓扑。

  • Summary LSA(类型3和4):用于在不同区域之间传播路由信息,尤其是跨区域路由选择。

  • AS External LSA(类型5):用于从外部自治系统引入路由信息。

区域划分

为了提高OSPF的扩展性和减少路由计算的复杂度,OSPF支持区域(Area)划分。一个OSPF网络通常由多个区域组成,其中一个区域被称为骨干区域(Area 0),它是所有区域的核心,其他区域通过骨干区域相互连接。通过将网络划分为多个区域,OSPF能够限制LSA的传播范围,从而减少路由计算的负担。区域之间的路由信息通过路由器之间的ABR(Area Border Router)交换。每个区域内部都进行链路状态更新,而不同区域之间通过骨干区域交换路由信息。

路由器角色

OSPF定义了几种不同的路由器角色,每个角色在网络中的功能不同:

  • DR(Designated Router):在广播网络(如Ethernet)中,DR负责生成网络LSA,减少网络中交换的LSA数量。通常,DR是根据接口的优先级和IP地址来选举的。

  • BDR(Backup Designated Router):是DR的备份角色,当DR发生故障时,BDR将会接管DR的工作。

  • ABR(Area Border Router):连接多个区域的路由器,负责不同区域之间的路由信息交换。

  • ASBR(Autonomous System Boundary Router):连接外部自治系统的路由器,通常负责引入外部网络的路由信息,如通过BGP协议与其他自治系统通信。

路由协议特性

OSPF具有以下几种关键特性:

  • 带宽计量:OSPF使用带宽作为度量标准,而不是跳数。每个链路的带宽会影响计算的最短路径,OSPF默认的成本(Cost)是带宽的倒数。

  • 收敛速度快:OSPF的收敛速度比基于距离向量的协议快。因为路由器立即发现网络拓扑的变化并更新LSDB,因此能快速重新计算最短路径。

  • 支持VLSM(Variable Length Subnet Mask):OSPF支持变长子网掩码,使得IP地址空间的利用更加灵活。

  • 路由认证:OSPF支持路由认证功能,可以对OSPF交换的LSA数据进行验证,确保网络安全。

  • 多路径路由:OSPF支持ECMP(Equal-Cost Multi-Path),即当有多个等价的最短路径时,数据包可以同时通过多个路径进行负载均衡。

BGP

BGP(Border Gateway Protocol,边界网关协议)是一种用于自治系统(AS)之间交换路由信息的外部网关协议,是Internet核心路由协议之一。BGP主要用于在不同的自治系统之间传递路由信息,并帮助决定跨越多个自治系统的最佳路径。它是一个路径向量协议,与OSPF等内部网关协议(IGP)不同,BGP主要用于自治系统之间的路由选择。

BGP通过交换路由通告(Route Advertisement)来交换关于可达性的信息。这些路由通告不仅包括目的网络的地址和掩码,还包括如何到达该网络的路径信息。BGP选择路径时,不仅依据网络的可达性,还考虑了路径属性、策略、AS路径等多个因素。BGP是一个基于路径的协议,这意味着它不仅仅传递目的地的IP地址,还传递到达目标的路径信息。

  1. 路径选择 BGP使用路径向量的方式来选择最优路径。每条路径都由一个AS路径(AS Path)标识,它记录了数据包从源自治系统到达目的自治系统经过的路径。BGP的选择标准不仅仅是路径长度,还包括以下几个因素:

    • AS路径长度:即路径中经过的自治系统数目,路径较短通常较优。

    • 路径的下一跳(Next Hop):决定数据包最终的传送目标,BGP通过下一跳来确定最佳路由。

    • 本地优先级(Local Preference):用于在本自治系统内选择最优路径,优先级高的路径优先被选择。

    • 多出口鉴别器(MED,Multi-Exit Discriminator):用于在两个自治系统之间,指示数据流的优先出口。较低的MED值意味着较优路径。

    • 路由聚合(Aggregated Routes):BGP可以通过聚合多个路由信息来减少路由表的大小。

  2. BGP路由通告 BGP在交换路由信息时,会通过BGP路由通告来广播一条或多条路由。BGP通告不仅包含目标地址,还包括路由的属性,如AS路径、下一跳等。路由器根据这些路由属性来做出路径选择。BGP路由信息的传播采用了“传递”的方式,即将信息从一个自治系统传递给其他自治系统,直到达到最终目标。

  3. 策略控制 BGP提供了强大的路由策略控制能力,管理员可以通过配置BGP策略来影响路由选择。例如,可以通过设置本地优先级、AS路径过滤、MED值等来控制路由选择,从而实现复杂的路由策略。

  1. BGP类型 BGP有两种类型:

    • EBGP(External BGP):用于不同自治系统之间的路由交换,是Internet中自治系统之间的主要路由协议。

    • IBGP(Internal BGP):用于同一自治系统内部的路由交换,允许自治系统内的路由器知道自治系统外部的路由信息。

  2. 路径向量协议 BGP是一种路径向量协议,与距离向量协议(如RIP)和链路状态协议(如OSPF)不同,BGP不仅仅传递目标网络地址,还传递到达目标的路径信息。每个路径由经过的AS序列(即AS路径)标识,这使得BGP能够避免环路并选择最优路径。

  3. 路由器角色 在BGP中,路由器的角色分为两种:

    • BGP邻居(Peers):BGP路由器通过建立邻居关系来交换路由信息。邻居关系是通过TCP连接(默认端口179)建立的。

    • BGP路由器:路由器会从BGP邻居接收路由通告,并通过选择最佳路径来更新自己的路由表。

  4. 连接建立和维护 BGP通过TCP连接(端口号179)来进行通信,连接的建立通过三次握手完成。建立连接后,BGP会定期交换路由信息,确保网络拓扑和路由表的一致性。BGP还通过“Keepalive”报文定期检查连接的有效性,若发现连接中断,则会触发重新建立连接。

BGP的协议版本
  1. BGP-4 BGP-4是BGP的当前版本,支持CIDR(Classless Inter-Domain Routing,无类别域间路由)和VLSM(Variable Length Subnet Mask,变长子网掩码)。它支持路由聚合、路由反向传播以及跨多个AS的路由信息传播。BGP-4已经成为Internet中最广泛使用的BGP版本。

  2. BGP-3和早期版本 BGP-3及更早版本(如BGP-2)较为简单,不支持CIDR,因此在IP地址分配方面的灵活性较差。BGP-4被广泛应用并发展成为现在的标准。

BGP的路由策略和优化

BGP协议支持多种路由策略,能够根据不同的需求对路由进行优化。管理员可以通过以下方式调整路由策略:

  • 路由过滤:可以基于AS路径、前缀、地址等条件过滤进出的路由信息,控制网络中的路由传播。

  • 路由重分发:可以将来自其他路由协议(如OSPF、RIP)的路由信息引入BGP,或者将BGP路由信息传递给其他协议。

  • 负载均衡:BGP支持ECMP(Equal-Cost Multi-Path),可以根据不同路径的代价将流量分配到多个路径上,从而实现负载均衡。

BGP的优势和局限性

优势

  • BGP支持大规模的网络,能够有效地管理复杂的路由信息。

  • 提供了灵活的路由选择和策略控制,能够根据不同的需求选择最优路径。

  • 具有较高的可扩展性,适用于Internet级别的路由选择。

局限性

  • BGP协议复杂,配置和管理相对困难。

  • 因为BGP是基于路径的协议,它的收敛速度相对较慢,可能导致网络变化时出现短时间的不稳定。

  • BGP容易受到路由劫持等攻击,需要适当的安全策略来防范。

相关文章:

计算机网络笔记再战——理解几个经典的协议6——TCP与UDP

目录 先说端口号 TCP 使用序号保证顺序性和应答来保证有效性 超时重传机制 TCP窗口机制 UDP 路由协议 协议分类:IGP和EGP 几个经典的路由算法 RIP OSPF 链路状态数据库(LSDB) LSA(Link State Advertisement&#xff0…...

【AI】在Ubuntu中使用docker对DeepSeek的部署与使用

这篇文章前言是我基于部署好的deepseek-r1:8b模型跑出来的 关于部署DeepSeek的前言与介绍 在当今快速发展的技术环境中,有效地利用机器学习工具来解决问题变得越来越重要。今天,我将引入一个名为DeepSeek 的工具,它作为一种强大的搜索引擎&a…...

openssl使用

openssl使用 提取密钥对 数字证书pfx包含公钥和私钥,而cer证书只包含公钥。提取需输入证书保护密码 openssl pkcs12 -in xxx.pfx -nocerts -nodes -out pare.key提取私钥 openssl rsa -in pare.key -out pri.key提取公钥 openssl rsa -in pare.key -pubout -ou…...

《语义捕捉全解析:从“我爱自然语言处理”到嵌入向量的全过程》

首先讲在前面,介绍一些背景 RAG(Retrieval-Augmented Generation,检索增强生成) 是一种结合了信息检索与语言生成模型的技术,通过从外部知识库中检索相关信息,并将其作为提示输入给大型语言模型&#xff…...

HIVE如何注册UDF函数

如果注册UDF函数的时候报了上面的错误,说明hdfs上传的路径不正确, 一定要用下面的命令 hadoop fs -put /tmp/hive/111.jar /user/hive/warehouse 一定要上传到上面路径,这样在创建函数时,引用下面的地址就可以创建成功...

VsCode创建VUE项目

1. 首先安装Node.js和npm 通过网盘分享的文件:vsCode和Node(本人电脑Win11安装) 链接: https://pan.baidu.com/s/151gBWTFZh9qIDS9XWMJVUA 提取码: 1234 它们是运行和构建Vue.js应用程序所必需的。 1.1 Node安装,点击下一步即可 …...

x64、aarch64、arm与RISC-V64:详解四种处理器架构

x64、aarch64、arm与RISC-V64:详解四种处理器架构 x64架构aarch64架构ARM架构RISC-V64架构总结与展望在计算机科学领域,处理器架构是构建计算机系统的基石,它决定了计算机如何执行指令、管理内存和处理数据。x64、aarch64、arm与RISC-V64是当前主流的四种处理器架构,它们在…...

如何使用iframe来渲染ThingsBoard仪表盘

1、概述 当我们在使用ThingsBoard的时候,有时候需要再自己的前端项目中展示大屏,thingsboard的仪表盘是可以来做大屏的,虽然界面达不到非常的美观,但是对比之前的版本,现在的版本仪表盘做了很多的优化了。可以实现将thingsboard的仪表板嵌入到自己的vue界面中作为大屏显示…...

退格法记单词(类似甘特图)

退格法记单词,根据记忆次数或熟练程度退格,以示区分,该方法用于短时高频大量记单词: explosion爆炸,激增 mosquito蚊子granary粮仓,谷仓 offhand漫不经心的 transient短暂的slob懒惰而邋遢的…...

计算 MySQL 表行的成本是多少?

当计算表中的所有行时,将使用什么索引?好吧,MySQL文档文档对此提供了一个直接的答案,引用: InnoDB 通过遍历最小的可用二级索引来处理 SELECT COUNT(*) 语句除非索引或优化器提示指示优化器使用…...

Pygame介绍与游戏开发

提供pygame功能介绍的文档:Pygame Front Page — pygame v2.6.0 documentation 基础语法和实现逻辑 与CLI不同,pygame提供了图形化使用界面GUI(graphical user interface)基于图像的界面可以创建一个有图像和颜色的窗口 要让py…...

webpack配置方式

1. 基本配置文件 (webpack.config.js)(导出一个对象) 最常见的方式是通过 webpack.config.js 文件来配置 Webpack,导出一个对象。你可以在这个文件中导出一个配置对象,指定入口、输出、加载器、插件等。 // webpack.config.js m…...

10. k8s二进制集群之Kube Scheduler部署

在开始之前需要准备什么?创建kube-scheduler证书请求文件【即证书的生成⓵】根据上面证书配置文件生成kube-scheduler证书【即证书的生成⓶】创建与关联kube-scheduler配置文件(为后面生成系统服务做准备)创建kube-scheduler服务配置文件【准备系统服务⓵】创建kube-schedul…...

java实现8583报文解析技术详解

文章目录 概要整体架构流程技术名词解释技术细节小结概要 ISO 8583协议是金融交易系统中广泛使用的通信协议,用于规范报文的格式和数据交换。解析8583报文是实现金融交易系统的关键技术之一。本文将详细介绍8583报文解析的核心实现,重点关注解析算法和关键代码逻辑。 8583报…...

k8s服务发现有哪些方式?

在 Kubernetes 中,服务发现是指如何让应用程序在集群内互相找到并通信。Kubernetes 提供了多种服务发现的方式,适应不同的使用场景。以下是 Kubernetes 中常见的服务发现方式: 1. 环境变量(Environment Variables) 概…...

【SqlServer】SQL Server Management Studio (SSMS) 下载、安装、配置使用及卸载——保姆级教程

超详细的 SQL Server Management Studio (SSMS) 下载、安装、连接数据库配置及卸载教程 SQL Server Management Studio (SSMS) 是微软提供的图形化管理工具,主要用于连接、管理和开发 SQL Server 数据库。以下是详细的 SSMS 下载、安装、连接数据库以及卸载的完整教…...

[ESP32:Vscode+PlatformIO]添加第三方库 开源库 与Arduino导入第三方库的区别

前言 PlatformIO与Arduino在添加第三方库方面的原理存在显著差异 在PlatformIO中,第三方库的使用是基于项目(工程)的。具体而言,只有当你为一个特定的项目添加了某个第三方库后,该项目才能使用该库。这些第三方库的文…...

音频文件格式——AAC、OGG和FLAC

3.AAC文件格式 3.1 封装格式解析 高级音频编码 (Advanced Audio Coding) 是一种用于有损数字音频压缩的音频编码标准。它被设计为 MP3 格式的继承者,在相同比特率下通常可以获得比 MP3 更高的音质。AAC有两种封装格式: ADIF&am…...

BUU26 [极客大挑战 2019]HardSQL1

输入一些SQL关键词,发现空格,,union,and,by都被过滤了 被过滤,就用like替代 发现登录成功,可以注入 报错注入 注意 1.这里过滤了空格,就用()将内容包裹起来 比如说&#xff1a…...

多光谱成像技术在华为Mate70系列的应用

华为Mate70系列搭载了光谱技术的产物——红枫原色摄像头,这是一款150万像素的多光谱摄像头。 相较于普通摄像头,它具有以下优势: 色彩还原度高:色彩还原准确度提升约 120%,能捕捉更多光谱信息,使拍摄照片色…...

借助 Cursor 快速实现小程序前端开发

借助 Cursor 快速实现小程序前端开发 在当今快节奏的互联网时代,小程序因其便捷性、高效性以及无需下载安装的特点,成为众多企业和开发者关注的焦点。然而,小程序的开发往往需要耗费大量的时间和精力,尤其是在前端开发阶段。幸运…...

【deepseek】ollama chatbox webui 本地部署deepseek 踩坑记录

部署 1、前往Ollama官网下载跨平台工具 官网直达:https://ollama.com/download 2、挑选适合自己设备的模型版本,获取运行指令 访问模型库:https://ollama.com/library/deepseek-r1 ▌配置建议: • 入门级:1.5B版本&…...

在离线的服务器上部署Python的安装库

在离线服务器上部署 Python 安装库(如 SQLAlchemy、pandas、pyodbc 等),可以使用以下方法: 方法 1:在联网机器上下载依赖,拷贝到离线服务器 适用于:服务器完全无法访问互联网。 步骤 1. 在联网…...

计算机网络笔记再战——理解几个经典的协议2

理解互联网与TCP/IP 下面,我们将会开始理解互联网这个东西,进一步的,我们会理解何为TCP/IP 我们的互联网就是一个巨大的网状结构,需要注意的是——每一个网状的节点之间都是使用一个叫做NOC,Network Operation Center…...

设计高效的测试用例:从需求到验证

在现代软件开发过程中,测试用例的设计一直是质量保证(QA)环节的核心。有效的测试用例不仅能够帮助发现潜在缺陷,提升软件质量,还能降低后期修复成本,提高开发效率。尽管如此,如何从需求出发&…...

git reset 命令

git reset 的作用 git reset 是一个非常强大的命令,用于将当前分支的 HEAD(即当前指向的提交)重置到指定的提交。它还可以根据参数的不同,对工作区(Working Directory)和暂存区(Staging Area&a…...

docker被“遗忘”的那些参数该如何拯救

一、docker容器启动时没有指定端口,如何在不删除容器的情况下配置端口呢 在 Docker 中,如果容器启动时没有指定端口映射,可以通过以下步骤在不删除容器的情况下配置端口: 方法 1: 使用 docker commit 和 docker run 提交容器为新…...

BFS算法——广度优先搜索,探索未知的旅程(下)

文章目录 前言一. N叉树的层序遍历1.1 题目链接:https://leetcode.cn/problems/n-ary-tree-level-order-traversal/description/1.2 题目分析:1.3 思路讲解:1.4 代码实现: 二. 二叉树的锯齿形层序遍历2.1 题目链接:htt…...

Python分享20个Excel自动化脚本

在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式。通过Python,我们可以实现对Excel文件的各种自动化操作,提高工作效率。 本文将分享20个实用的Excel自动化脚本,以帮助新手小白更轻松地掌握这些技能。 1. Excel单…...

pytest+request+yaml+allure 接口自动化测试全解析[手动写的跟AI的对比]

我手动写的:Python3:pytest+request+yaml+allure接口自动化测试_request+pytest+yaml-CSDN博客 AI写的:pytest+request+yaml+allure 接口自动化测试全解析 在当今的软件开发流程中,接口自动化测试扮演着至关重要的角色。它不仅能够提高测试效率,确保接口的稳定性和正确性…...