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

news2025/2/6 5:09:06

目录

先说端口号

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容易受到路由劫持等攻击,需要适当的安全策略来防范。

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

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

相关文章

【技海登峰】Kafka漫谈系列(二)Kafka高可用副本的数据同步与选主机制

【技海登峰】Kafka漫谈系列(二)Kafka高可用副本的数据同步与选主机制 一. 数据同步 在之前的学习中有了副本Replica的概念,解决了数据备份的问题。我们还需要面临一个设计难题即:如何处理分区中Leader与Follwer节点数据同步不匹配问题所带来的风险,这也是保证数据高可用的…

电商用户画像数据可视化分析

电商用户画像数据可视化分析 作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论&am…

Vue3.5常用特性整理

Vue3.5 发布已近半年&#xff0c;抽空整理下常用的新增/改动特性 响应式 Props 解构 Vue3.5 中 Props 正式支持解构了&#xff0c;并添加了响应式跟踪 设置默认值 使用 JavaScript 原生的默认值语法声明 props 默认值 以前 const props withDefaults(defineProps<{ co…

2024年12月 Scratch 图形化(一级)真题解析 中国电子学会全国青少年软件编程等级考试

202412 Scratch 图形化&#xff08;一级&#xff09;真题解析 中国电子学会全国青少年软件编程等级考试 一、单选题(共25题&#xff0c;共50分) 第 1 题 点击下列哪个按钮&#xff0c;可以将红框处的程序放大&#xff1f;&#xff08; &#xff09; A. B. C. D. 标…

游戏引擎学习第87天

当直接使用内存时&#xff0c;可能会发生一些奇怪的事情 在直接操作内存时&#xff0c;一些意外的情况可能会发生。由于内存实际上只是一个大块的空间&#xff0c;开发者可以完全控制它&#xff0c;而不像高级语言那样必须遵守许多规则&#xff0c;因此很容易发生错误。在一个…

【物联网】ARM核常用指令(详解):数据传送、计算、位运算、比较、跳转、内存访问、CPSR/SPSR

文章目录 指令格式&#xff08;重点&#xff09;1. 立即数2. 寄存器位移 一、数据传送指令1. MOV指令2. MVN指令3. LDR指令 二、数据计算指令1. ADD指令1. SUB指令1. MUL指令 三、位运算指令1. AND指令2. ORR指令3. EOR指令4. BIC指令 四、比较指令五、跳转指令1. B/BL指令2. l…

Qt展厅播放器/多媒体播放器/中控播放器/帧同步播放器/硬解播放器/监控播放器

一、前言说明 音视频开发除了应用在安防监控、视频网站、各种流媒体app开发之外&#xff0c;还有一个小众的市场&#xff0c;那就是多媒体展厅场景&#xff0c;这个场景目前处于垄断地位的软件是HirenderS3&#xff0c;做的非常早而且非常全面&#xff0c;都是通用的需求&…

html中的表格属性以及合并操作

表格用table定义&#xff0c;标签标题用caption标签定义&#xff1b;用tr定义表格的若干行&#xff1b;用td定义若干个单元格&#xff1b;&#xff08;当单元格是表头时&#xff0c;用th标签定义&#xff09;&#xff08;th标签会略粗于td标签&#xff09; table的整体外观取决…

html的字符实体和颜色表示

在HTML中&#xff0c;颜色可以通过以下几种方式表示&#xff0c;以下是具体的示例&#xff1a; 1. 十六进制颜色代码 十六进制颜色代码以#开头&#xff0c;后面跟随6个字符&#xff0c;每两个字符分别表示红色、绿色和蓝色的强度。例如&#xff1a; • #FF0000&#xff1a;纯红…

unordered_map/set的哈希封装

【C笔记】unordered_map/set的哈希封装 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】unordered_map/set的哈希封装前言一. 源码及框架分析二.迭代器三.operator[]四.使用哈希表封装unordered_map/set后言 前言 哈…

idea中git的简单使用

提交&#xff0c;推送直接合并 合到哪个分支就到先切到哪个分支

Fastdds学习分享_xtpes_发布订阅模式及rpc模式

在之前的博客中我们介绍了dds的大致功能&#xff0c;与组成结构。本篇博文主要介绍的是xtypes.分为理论和实际运用两部分.理论主要用于梳理hzy大佬的知识&#xff0c;对于某些一带而过的部分作出更为详细的阐释&#xff0c;并在之后通过实际案例便于理解。案例分为普通发布订阅…

开发板上Qt运行的环境变量的三条设置语句的详解

在终端中运行下面三句命令用于配置开发板上Qt运行的环境变量&#xff1a; export QT_QPA_GENERIC_PLUGINStslib:/dev/input/event1 export QT_QPA_PLATFORMlinuxfb:fb/dev/fb0 export QT_QPA_FONTDIR/usr/lib/fonts/设置成功后可以用下面的语句检查设置成功没有 echo $QT_QPA…

语言月赛 202412【顽强拼搏奖的四种发法】题解(AC)

》》》点我查看「视频」详解》》》 [语言月赛 202412] 顽强拼搏奖的四种发法 题目描述 在 XCPC 竞赛里&#xff0c;会有若干道题目&#xff0c;一支队伍可以对每道题目提交若干次。我们称一支队伍对一道题目的一次提交是有效的&#xff0c;当且仅当&#xff1a; 在本次提交…

自定义数据集 使用scikit-learn中svm的包实现svm分类

引入必要的库 import numpy as np from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score, classification_report 生成自定义数据集 X, y ma…

有用的sql链接

『SQL』常考面试题&#xff08;2——窗口函数&#xff09;_sql的窗口函数面试题-CSDN博客 史上最强sql计算用户次日留存率详解&#xff08;通用版&#xff09;及相关常用函数 -2020.06.10 - 知乎 (zhihu.com) 1280. 学生们参加各科测试的次数 - 力扣&#xff08;LeetCode&…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.27 NumPy+Pandas:高性能数据处理的黄金组合

2.27 NumPyPandas&#xff1a;高性能数据处理的黄金组合 目录 #mermaid-svg-x3ndEE4hrhO6WR6H {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-x3ndEE4hrhO6WR6H .error-icon{fill:#552222;}#mermaid-svg-x3ndEE4hr…

第一个3D程序!

运行效果 CPP #include <iostream> #include <fstream> #include <string> #include <cmath>#include <GL/glew.h> #include <GLFW/glfw3.h> #include <glm/glm.hpp> #include <glm/gtc/type_ptr.hpp> #include <glm/gtc/…

NeuralCF 模型:神经网络协同过滤模型

实验和完整代码 完整代码实现和jupyter运行&#xff1a;https://github.com/Myolive-Lin/RecSys--deep-learning-recommendation-system/tree/main 引言 NeuralCF 模型由新加坡国立大学研究人员于 2017 年提出&#xff0c;其核心思想在于将传统协同过滤方法与深度学习技术相结…

第二十三章 MySQL锁之表锁

目录 一、概述 二、语法 三、特点 一、概述 表级锁&#xff0c;每次操作锁住整张表。锁定粒度大&#xff0c;发生锁冲突的概率最高&#xff0c;并发度最低。应用在MyISAM、InnoDB、BDB等存储引擎中。 对于表级锁&#xff0c;主要分为以下三类&#xff1a; 1. 表锁 2. 元数…