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

深入理解网络原理:TCP协议详解

在现代计算机网络中,传输控制协议(TCP,Transmission Control Protocol)是最常用的传输层协议之一。TCP被广泛应用于互联网中的许多关键应用,如网页浏览、电子邮件和文件传输等。作为一种面向连接的协议,TCP提供了可靠的数据传输服务,确保数据在网络中的完整性和顺序性。本文将详细探讨TCP协议的工作原理、特性、头部结构、优缺点以及应用场景,以帮助读者深入理解TCP协议在网络中的作用。

一. TCP协议概述

传输控制协议(TCP,Transmission Control Protocol)是互联网协议套件中极为重要的传输层协议之一。它通过提供可靠、顺序和无差错的数据传输,使得在不可靠的网络环境中实现高效的数据通信成为可能。TCP是许多应用协议的基础,尤其是那些需要保证数据完整性和顺序性的应用,如HTTP、FTP、SMTP等。

1.1 TCP的历史背景

TCP的最初设计始于1970年代,由Vint Cerf和Bob Kahn发起,旨在解决不同计算机系统之间的数据传输问题。随着互联网的快速发展,TCP逐渐演变为一种重要的通信协议,成为当前互联网的核心协议之一。TCP以及其伴随的互联网协议(IP)构成了TCP/IP协议族的基础,广泛应用于各类网络应用中。

1.2 TCP的基本特性

TCP的设计原则和特性使其在许多应用中成为首选协议,主要特性包括:

1.2.1 面向连接

TCP是一个面向连接的协议,要求在数据传输之前必须先建立连接。连接的建立通过“三次握手”过程完成,这一过程不仅确保了双方的准备状态,还同步了初始序列号。连接的这种管理方式确保了数据传输的可靠性和稳定性。

1.2.2 可靠性

TCP协议提供可靠的数据传输服务。它通过多种机制保证数据的完整性,包括:

  • 数据重传:TCP使用确认(ACK)机制来确保数据包的成功传输。当发送方发送数据后,会等待接收方的确认,如果在规定时间内未收到确认,发送方会重新发送该数据包。

  • 顺序传输:TCP使用序列号来标识每个数据包,接收方通过序列号可以确保数据的顺序性。即使数据包在传输过程中被打乱,接收方也能根据序列号重新排序。

  • 校验和:TCP头部和数据部分都包含一个校验和字段,用于检测数据在传输过程中是否出现错误。如果校验和不匹配,接收方会丢弃该数据包并请求重传。

1.2.3 流量控制

TCP实现流量控制机制,防止发送方发送过多数据导致接收方的缓冲区溢出。TCP通过滑动窗口协议来管理数据流:

  • 窗口大小:接收方在ACK中会发送一个窗口大小,指示发送方可以发送的数据量。发送方根据这个窗口大小动态调整发送速率,确保数据传输不会超过接收方的处理能力。
1.2.4 拥塞控制

TCP具有拥塞控制机制,能够检测网络的拥塞情况并相应地调整数据发送速率。主要的拥塞控制算法包括:

  • 慢启动:在连接建立初期,TCP小心翼翼地逐步增加发送窗口,确保不会造成网络拥塞。

  • 拥塞避免:在网络出现拥塞时,TCP会减少发送速率,以减轻网络负担。

  • 快速重传与快速恢复:在检测到数据丢失的情况下,TCP可以快速重传丢失的数据,并迅速恢复正常的数据流。

1.3 TCP的协议栈位置

TCP位于OSI模型的传输层,与UDP(用户数据报协议)共同提供数据传输服务。TCP协议的特点使其适用于需要可靠性和顺序性的应用,而UDP则适用于对时延敏感,但对可靠性要求不高的应用。TCP的设计理念旨在兼顾效率与可靠性,尤其在互联网环境中适应多变的网络条件。

1.4 TCP的头部结构

TCP数据段由头部和数据部分组成,TCP头部包含一系列控制信息,确保数据的可靠传输。TCP头部的结构相对复杂,包括多个字段。主要字段包括:

  • 源端口和目的端口:用于识别与数据包关联的应用程序。
  • 序列号和确认号:用于确保数据的顺序和确认接收数据的完整性。
  • 数据偏移:指示TCP头部的长度。
  • 控制位:包括URG、ACK、PSH、RST、SYN、FIN等,用于控制连接的建立和终止。
  • 窗口大小:用于流量控制。
  • 校验和:用于检测传输错误。
  • 选项:可选字段,用于扩展功能。

1.5 TCP的连接管理

TCP的连接管理分为连接的建立和关闭两个部分。连接建立过程确保数据传输的可靠性,而连接关闭过程则确保良好的清理和资源释放。连接的建立和终止分别通过“三次握手”和“四次挥手”完成。

1.6 TCP与其他协议的关系

TCP虽然是一个功能强大的传输层协议,但它并不是孤立存在的。它依赖于底层的互联网协议(IP)进行数据的路由和传输。IP协议负责将数据包从源主机传输到目标主机,而TCP则在此基础上提供数据的完整性和可靠性。此外,TCP还与多种高级协议协作,如HTTP、FTP和SMTP等,支持复杂的网络应用。

1.7 小结

TCP协议因其面向连接的特性、可靠性保障以及流量和拥塞控制机制,在现代网络通信中起着至关重要的作用。凭借这些特性,TCP成为众多网络应用的基础协议,支持着日常互联网操作的稳定与高效。理解TCP的基本概念和特性,有助于网络工程师和开发者在设计和实现网络应用时做出明智的决策。

二. TCP的工作原理

传输控制协议(TCP)通过一系列精确的步骤和机制来确保数据的可靠传输。TCP的工作原理可以概括为三个主要阶段:连接建立、数据传输和连接终止。这些过程涉及多种控制机制,包括可靠性保证、流量控制和拥塞控制等。下面将详细描述TCP在工作中的具体原理。

2.1 连接建立(三次握手)

在发送数据之前,TCP需要在通信双方之间建立一个可靠的连接。这个过程称为“三次握手”(Three-way Handshake),其主要步骤如下:

  1. SYN:连接请求
    客户端向服务器发送一个SYN(同步)包,表示希望建立连接。此包中包含一个随机生成的初始序列号(ISN)。SYN包的发送是由TCP层在客户端实现的,目的是通知服务器客户端希望进行通信。

  2. SYN-ACK:确认请求
    服务器收到SYN包后,响应一个SYN-ACK(同步-确认)包。此响应包中不仅包含服务器自己选择的初始序列号,还包含对客户端ISN的确认号(即ISN + 1),表示服务器已经接收到了客户端的请求,并同意建立连接。

  3. ACK:确认建立连接
    客户端收到SYN-ACK包后,发送一个ACK(确认)包,确认收到服务器的SYN-ACK响应。此ACK包的确认号为服务器的ISN + 1,表示客户端已经成功接收到服务器的连接确认。此时,连接建立完成,双方可以开始数据传输。

建立连接的过程确保了双方在数据传输前都已准备好并同步初始状态,提供了可靠的数据通信基础。

2.2 数据传输

在连接建立后,TCP进入数据传输阶段。此阶段的关键在于如何确保数据的可靠性和顺序。以下是TCP数据传输的主要机制:

2.2.1 可靠性保证
  • 序列号:TCP为每个发送的数据段分配一个唯一的序列号。序列号不仅用于识别数据段,还用于确保数据按顺序到达接收方。接收方使用该序列号重组数据,以确保数据的完整性。

  • 确认机制:接收方在成功接收数据后,会发送一个ACK包给发送方,确认已收到的数据。如果发送方在指定的时间内未收到ACK,便会重传未确认的数据段。这种机制确保了所有数据都能够可靠传输。

  • 校验和:TCP在每个数据段中增加一个校验和字段,用于检测数据在传输过程中是否出现错误。接收方在获取数据后,计算接收到数据的校验和,并与TCP头部中的校验和进行比较。如果不匹配,接收方将丢弃该数据段并请求重传。

2.2.2 流量控制

TCP使用流量控制机制来防止发送方发送过多的数据,导致接收方的缓冲区溢出。流量控制通过滑动窗口协议实现,主要步骤如下:

  • 窗口大小:接收方在ACK包中报告其缓冲区的可用空间,即窗口大小。发送方根据窗口大小决定可以发送的数据量,从而避免发送过多数据导致接收方无法处理。

  • 滑动窗口:通过滑动窗口,TCP允许发送方在未收到ACK的情况下同时发送多个数据段。接收方在处理完数据后,会调整窗口大小,反馈给发送方,确保数据传输的流畅性和高效性。

2.2.3 拥塞控制

TCP还实现了拥塞控制机制,以应对网络条件的变化,防止网络过载。拥塞控制的主要算法包括:

  • 慢启动:在连接建立初期,TCP将发送窗口设置为一个较小的值(通常为1个MSS,最大报文段大小),并在接收到ACK时逐步增加窗口大小,通常以指数级的速度增加,以快速适应网络带宽。

  • 拥塞避免:当发送窗口达到一定阈值后,TCP将进入拥塞避免阶段,窗口的增加速度将减缓,通常以线性方式增加,目的是在网络拥塞时减少冲击。

  • 快速重传与快速恢复:当发送方在接收到3个重复的ACK时,表示有数据丢失,立即重传丢失的数据段,减少重传的延迟。在重传后,TCP进入快速恢复状态,通过调整窗口大小快速恢复正常的数据流。

2.3 连接终止(四次挥手)

数据传输完成后,TCP通过“四次挥手”(Four-way Handshake)来终止连接,确保双方都能正常关闭连接。具体步骤如下:

  1. 主动关闭连接(FIN):一方(通常是客户端)发送一个FIN(结束)包,表示希望关闭连接。

  2. 确认关闭(ACK):另一方收到FIN包后,回复一个ACK包以确认,表示同意关闭连接的请求,连接的一半关闭。

  3. 被动关闭连接(FIN):另一方在准备好关闭连接时,发送自己的FIN包,表示自身也希望关闭连接。

  4. 确认关闭(ACK):主动关闭连接的一方收到此FIN包后,发送ACK包确认。至此,连接完全关闭,双方可以安全地释放资源。

2.4 小结

TCP的工作原理通过连接建立、数据传输和连接终止三个阶段,确保了数据在复杂网络环境中的可靠性和顺序性。通过精密的机制(如序列号、确认应答、流量控制和拥塞控制),TCP能够高效地管理数据传输过程,适应动态的网络条件。理解TCP的工作原理,不仅有助于网络工程师和开发者设计出高效的网络应用,也为故障排除和性能优化提供了重要依据。

三. TCP的头部结构

TCP数据段由TCP头部和数据部分组成。TCP头部包含了多种控制和管理信息,这些信息对TCP协议的可靠性、流量控制、拥塞控制等功能至关重要。TCP头部的结构相对复杂,其字段的设计旨在支持TCP的各种特性和功能。以下将详细介绍TCP头部的各个字段及其作用。

3.1 TCP头部的基本结构

TCP头部的大小通常为20字节(不包含可选字段),但在使用选项时,头部的大小可能会更大。TCP头部的基本结构如下:

字段大小 (字节)描述
源端口2发送端口号
目的端口2接收端口号
序列号4当前数据的序列号
确认号4接收方期待接收的下一个字节的序列号
数据偏移4TCP头部长度(以4字节为单位)
保留3保留字段,未使用
控制位9包含URG、ACK、PSH、RST、SYN、FIN标志
窗口大小2接收方可接收的字节数
校验和2用于错误检测
紧急指针2指示紧急数据的字节偏移
选项可变可选字段,可能包含最大报文段大小等
填充可变填充以确保TCP头部长度为4的倍数

3.2 各字段的详细说明

3.2.1 源端口和目的端口
  • 源端口:这个字段表示发送数据包的应用程序使用的端口号。通过源端口,接收方可以知道数据是从哪个应用程序发出的。

  • 目的端口:这个字段表示接收数据包的应用程序使用的端口号。目的端口帮助接收方确定数据包应该交付给哪个应用程序。

这两个字段的主要作用是确保数据能够被正确路由到发送方和接收方的应用程序。

3.2.2 序列号
  • 序列号:这是一个32位的字段,用于标识TCP数据流中每个字节的数据包。在TCP连接中,序列号用于确保数据的顺序性和完整性。接收方通过序列号来重组数据,如果接收到的数据包的序列号不连续,接收方可以请求重传缺失的数据。
3.2.3 确认号
  • 确认号:同样是一个32位的字段,确认号指的是接收方期待接收的下一个字节的序列号。它表明接收方已经成功接收并确认的最后一个字节的序列号加1。通过确认号,发送方可以知道数据是否已被成功接收,并据此决定是否需要重传数据。
3.2.4 数据偏移
  • 数据偏移:这个字段占用4位,表示TCP头部的长度,以4字节为单位。因为TCP头部可能包含可选字段,数据偏移字段帮助接收方确定数据部分的起始位置,从而正确解析接收到的数据。
3.2.5 保留字段
  • 保留:这个字段占用3位,通常未使用,保留供将来扩展使用。为了保证与未来版本的兼容性,留出这部分字段。
3.2.6 控制位
  • 控制位:这部分包含9个标志位,分别是:

    • URG:紧急指针有效,表示数据中有紧急数据需要优先处理。
    • ACK:确认号有效,表明该数据段的确认号字段有效。
    • PSH:请求接收方立即将数据传递给应用层,而不是等待缓冲区填满。
    • RST:重置连接,用于异常情况,表示当前连接不可用。
    • SYN:连接请求,用于建立连接的同步。
    • FIN:连接结束请求,表示发送方已经没有数据要发送,准备关闭连接。

控制位的设置影响TCP连接的建立、维护和终止。

3.2.7 窗口大小
  • 窗口大小:这个字段占用16位,指示接收方的缓冲区可接收的字节数。发送方根据窗口大小的值来决定可以发送的数据量,确保不会造成接收方的缓冲区溢出。
3.2.8 校验和
  • 校验和:这个字段占用16位,用于检测数据在传输过程中是否发生错误。TCP在每个数据段中计算校验和,接收方在接收到数据后也进行计算,如果两个校验和不匹配,接收方将丢弃该数据包,并要求重传。
3.2.9 紧急指针
  • 紧急指针:这个字段占用16位,仅在URG标志位为1时有效。它指示数据部分中紧急数据的结束位置,用于优先处理紧急数据。
3.2.10 选项
  • 选项:选项字段的长度是可变的,通常用于支持TCP的一些扩展功能,如最大报文段大小(MSS)、时间戳、窗口扩大因子等。选项字段允许TCP协议根据具体的网络环境和需求进行灵活配置。
3.2.11 填充
  • 填充:为了确保TCP头部的长度是4的倍数,填充字段用于填补额外的字节。填充本身不包含任何有用信息,其主要作用是满足对齐要求。

3.3 TCP头部的大小

TCP头部的基本大小为20字节,但由于可选字段的存在,实际大小可能会有所不同。TCP头部的有效大小是通过数据偏移字段计算得出的,接收方在解析数据时需要正确识别这些信息。

3.4 小结

TCP头部结构的设计旨在支持协议的多种功能,包括可靠性、顺序保证、流量控制和拥塞控制等。各字段的设置和组合使TCP能够在复杂和动态的网络环境中高效可靠地传输数据。理解TCP头部的结构和各字段的作用,对于深入掌握TCP协议的工作原理、进行故障排查和优化网络性能至关重要。

四. TCP的优缺点

传输控制协议(TCP)作为互联网协议族中核心的传输层协议,凭借其众多优越的特性被广泛应用于各种网络通信场景。然而,TCP也有其局限性。了解TCP的优缺点有助于网络工程师和开发者在设计和实现网络应用时做出明智的决策。以下将详细阐述TCP的优缺点。

4.1 TCP的优点

4.1.1 可靠性

TCP是一个可靠的协议,其主要优点之一是能够提供可靠的数据传输。TCP通过以下机制确保数据的完整性和正确性:

  • 确认机制:TCP使用确认(ACK)机制来确保数据包的成功传输。每当接收方成功接收到一个数据段时,都会向发送方发送一个确认应答。如果发送方在规定时间内未收到ACK,它会自动重传该数据段。

  • 序列号和重传机制:每个TCP数据段都有一个序列号,接收方可以根据序列号重组数据,确保数据按顺序到达。如果接收方检测到数据丢失或错误,可以请求重传相应的数据段。

  • 校验和:TCP在每个数据段中包含校验和字段,用于检查数据在传输过程中是否被篡改或损坏。如果发现错误,接收方会丢弃该数据包并请求重传。

4.1.2 顺序保证

TCP保证数据按发送顺序到达接收方。在多种数据传输场景中,数据的顺序性至关重要。例如,在文件传输和流媒体播放等应用中,数据的完整性和顺序性是确保用户体验的关键。TCP通过序列号机制确保接收方能够正确组装收到的数据。

4.1.3 流量控制

TCP实现了流量控制机制,防止发送方发送数据过快导致接收方的缓冲区溢出。通过滑动窗口协议,TCP根据接收方的处理能力动态调整数据的发送速率。这一机制保证了数据传输的平稳性,避免网络拥堵和数据丢失。

4.1.4 拥塞控制

TCP具有先进的拥塞控制机制,可以根据网络的实时状态动态调整数据的发送速率,以避免网络负载过重。通过慢启动、拥塞避免、快速重传和快速恢复等算法,TCP能够有效地管理网络资源,提高网络的整体性能。

4.1.5 端到端通信

TCP提供的是端到端的通信服务,通过源端口和目的端口的信息,确保数据能够准确无误地传输到目标应用程序。这种特性使得TCP适用于各种应用场景,从网页浏览到文件传输,TCP都能确保数据准确到达。

4.2 TCP的缺点

4.2.1 延迟

由于TCP在数据传输过程中引入了确认、重传和流量控制等机制,导致其在某些情况下会出现延迟。尤其是在高延迟的网络环境中,TCP的性能可能受到影响,实时应用(如视频会议或在线游戏)可能会受到不利影响。

4.2.2 资源消耗

TCP的复杂性导致其在资源消耗方面相对较高。每个TCP连接都需要维护连接状态、序列号、确认号、窗口大小等信息,这对系统资源(如内存和处理器)要求较高。在高并发的情况下,TCP连接的管理可能会成为系统瓶颈。

4.2.3 数据包大小限制

TCP的最大报文段大小(MSS)是有限制的,通常受限于网络链路的特性。在某些情况下,TCP可能会经历分段和重组,这增加了额外的开销并可能导致性能下降。

4.2.4 不适合实时应用

由于TCP的重传和流量控制机制,对于对实时性要求较高的应用(如实时语音通信和视频流),TCP并不是最佳选择。UDP(用户数据报协议)通常更适合这类应用,因为它提供更低的延迟,虽然不具备TCP的可靠性。

4.2.5 连接管理开销

TCP是面向连接的协议,这意味着在数据传输之前必须先建立连接,并在传输完成后终止连接。这一过程涉及三次握手和四次挥手,增加了连接管理的开销。在频繁建立和关闭连接的场景中,这可能导致性能下降。

4.3 小结

TCP协议凭借其可靠性、顺序保证、流量控制和拥塞控制等优点,成为现代网络通信的主要协议之一。它适用于对数据完整性和顺序性有高要求的应用场景,如网页浏览、文件传输和电子邮件等。然而,TCP的延迟、资源消耗、连接管理开销等缺点使得它在某些实时应用中表现不佳。理解TCP的优缺点有助于网络工程师和开发者在特定应用场景中选择合适的传输协议,以满足不同的网络需求和性能要求。

五. TCP的应用场景

传输控制协议(TCP)因其可靠性、顺序保证和流量控制等特性,被广泛应用于各种网络通信场景。以下是一些典型的TCP应用场景以及它们的特点和需求。

5.1 网页浏览

应用背景

现代网页的传输主要依赖于HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)。HTTP是一个基于请求-响应模式的协议,通常运行于TCP之上。

TCP的作用
  • 可靠性:TCP确保网页内容在传输过程中不丢失、不损坏,保证用户能够完整地加载网页。
  • 顺序传输:在加载网页时,多个资源(如HTML、CSS、JavaScript、图片等)可能会以不同的顺序请求。TCP通过序列号确保这些资源按正确的顺序到达,避免页面渲染错误。

5.2 文件传输

应用背景

文件传输协议(FTP)和安全文件传输协议(SFTP)是用于在网络上进行文件传输的常用协议。这些协议通常建立在TCP之上,以确保文件的完整性和安全性。

TCP的作用
  • 完整性保证:TCP的重传机制确保在文件传输过程中,任何丢失或损坏的数据块都会被重新发送,确保文件在接收方正确无误。
  • 流量控制:通过TCP的流量控制机制,可以有效管理数据传输速率,防止网络拥堵,特别是在处理大文件时。

5.3 电子邮件

应用背景

电子邮件使用多种协议,包括SMTP(简单邮件传输协议)、POP3(邮局协议3)和IMAP(互联网消息访问协议)。这些协议通常依赖于TCP进行邮件的发送和接收。

TCP的作用
  • 可靠的邮件传输:SMTP使用TCP将邮件从发送方传送到接收方邮件服务器,确保邮件在传输过程中不丢失。
  • 顺序保证:电子邮件中,多个邮件可能需要按顺序处理。TCP保证邮件的正确到达和顺序,提高邮件处理的效率。

5.4 远程访问

应用背景

远程访问协议,如SSH(安全外壳协议)和Telnet,允许用户通过网络远程登录到其他计算机进行管理和操作。

TCP的作用
  • 安全和可靠的连接:SSH在TCP之上提供加密和认证,确保远程连接的安全性。TCP的可靠性保证了命令和数据的完整传输。
  • 顺序控制:在远程会话中,命令的顺序执行至关重要。TCP确保命令按顺序到达,避免因数据丢失导致的操作混乱。

5.5 流媒体传输

应用背景

虽然流媒体传输常常使用UDP,但在某些情况下,如视频会议或高质量视频播放,TCP也被用于流媒体的传输。

TCP的作用
  • 数据完整性:在流媒体传输中,TCP确保视频和音频数据块按顺序到达,避免数据丢失或损坏,提高用户体验。
  • 流量控制:TCP的流量控制机制可以帮助管理带宽,确保在网络条件变化时仍然能够流畅播放。

5.6 数据库连接

应用背景

数据库管理系统(如MySQL、PostgreSQL和Oracle)通过TCP协议与客户端进行通信,支持数据的存取和管理。

TCP的作用
  • 可靠的连接:TCP在数据库操作中确保查询请求和响应的可靠性,避免因网络问题造成的数据丢失。
  • 顺序操作:数据库操作往往需要按照特定顺序执行,TCP的序列号机制帮助确保操作的顺序性。

六. 总结

传输控制协议(TCP)是互联网协议族中最重要的传输层协议之一,因其提供的可靠性、顺序保证、流量控制和拥塞控制等特性,被广泛应用于各种网络场景。TCP的优点使得它非常适合于需要确保数据完整性和顺序性的应用,如网页浏览、文件传输、电子邮件、远程访问、流媒体传输和数据库连接等。

然而,TCP也有其局限性,如较高的延迟、资源消耗、连接管理开销等,使其在某些实时应用中表现不如UDP等无连接协议。因此,在具体应用场景中,开发者和网络工程师需要根据需求选择合适的协议,以确保网络通信的高效性和可靠性。

了解TCP的工作原理、优缺点和应用场景,有助于在设计和实现网络应用时做出更为明智的决策,从而提高系统的性能和用户体验。随着网络技术的不断发展,TCP仍将继续在现代网络通信中发挥着不可替代的作用。

相关文章:

深入理解网络原理:TCP协议详解

在现代计算机网络中,传输控制协议(TCP,Transmission Control Protocol)是最常用的传输层协议之一。TCP被广泛应用于互联网中的许多关键应用,如网页浏览、电子邮件和文件传输等。作为一种面向连接的协议,TCP…...

二极管钳位电路——Multisim电路仿真

目录 二极管钳位电路 2.1 二极管正向钳位电路 二极管压降测试 2.1.1 二极管正向钳位电路图 2.1.2 二极管正向钳位工作原理 2.2 二极管负向钳位电路 2.2.1 二极管负向钳位电路图 2.2.2 二极管负向钳位工作原理 二极管正向反向钳位仿真电路实验结果 2.3 二极管顶部钳位…...

【更新】LLM Interview (2)

字数溢出,不解释 前文:llm interview (1) 文章目录 强化学习专题1 什么是RL?2 RL和监督、非监督、深度学习的区别3 RL中所谓的损失函数与深度学习中的损失函数有何区别?4 RL历史5 RL分类5.1 分类图示5.2 根据智能体动作选取方式分…...

第二节:文件系统

理论知识 文件系统的基本概念:文件系统是操作系统中负责管理持久数据的子系统,它将数据组织成文件和目录的形式,方便用户存储和访问数据。Linux文件系统的类型:常见的 Linux 文件系统类型有 Ext2、Ext3、Ext4、XFS、Btrfs 等。Ex…...

astrbot_plugin_composting_bucket开源程序是一个用于降低AstrBot的deepseek api调用费用的插件

一、软件介绍 文末提供程序和源码下载 astrbot_plugin_composting_bucket开源程序是一个用于降低AstrBot的deepseek api调用费用的插件,让deepseek api调用费用更低! 本插件功能已集成到 AstrBot ,您可以移除此插件,在 AstrBot…...

8.Three.js中的 StereoCamera 立体相机详解+示例代码

✨ 运行效果 👀 左边一幅图、右边一幅图,略微偏移,形成立体感~ (戴上VR眼镜或红蓝3D眼镜体验更明显哦~) 🔥 小球或方块旋转中,左右略微不同步,立体感更强&am…...

MYSQL——时间字段映射Java类型

在 Java 中查询数据库中的【时间字段】时,可以使用以下几种类型来处理: 1. java.sql.Date 适用场景:当数据库中的时间字段是 date 类型时,使用 java.sql.Date 是最合适的选择。示例代码:ResultSet rs statement.exe…...

搭建speak yarn集群:从零开始的详细指南

在大数据处理领域,Apache Spark 是一个高性能的分布式计算框架,而 YARN(Yet Another Resource Negotiator)是 Hadoop 的资源管理器。将 Spark 集成到 YARN 中,不仅可以充分利用 Hadoop 的资源管理能力,还能…...

第十三章-PHP MySQL扩展

第十三章-PHP与MySQL 一&#xff0c;连接数据库 1. 使用 MySQLi&#xff08;面向对象方式&#xff09; <?php // 数据库参数 $host localhost; $username root; $password ; $database test_db;// 创建连接 $conn new mysqli($host, $username, $password, $databa…...

在服务器中,搭建FusionCompute,实现集群管理

序&#xff1a;需要自备一台服务器&#xff0c;并安装部署好KVM&#xff0c;自行下载镜像&#xff0c;将所需的CNA和VRM镜像放到服务器中&#xff0c;小编所用的进项版本如下&#xff0c;读者可自行根据需求下载其它版本的镜像。 CNA镜像&#xff1a;FusionCompute_CNA-8.3.0-…...

嵌入式开发学习日志Day11

一、函数的递归调用 在调用一个函数的过程中&#xff0c;又出现直接或者间接的调用函数本身&#xff0c;称之为函数的递归调用&#xff1b; 函数的递归调用是使用大量的内存空间完成程序进行的&#xff1b; 1.间接调用 2.直接调用 注意&#xff1a; 上图仅为示意&#xff0c;…...

【线性规划】对偶问题的实际意义与重要性质 学习笔记

【线性规划】对偶问题的实际意义与重要性质_哔哩哔哩_bilibili...

代码随想录第30天:动态规划3

一、01背包理论基础&#xff08;Kama coder 46&#xff09; “01背包”&#xff1a;有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 1. 确…...

DSP48E2 的 MAC模式功能仿真

DSP48E2 仿真代码&#xff1a; 测试的功能为 P i ( A D ) ∗ B P i − 1 P_{i} (AD) * B P_{i-1} Pi​(AD)∗BPi−1​ timescale 1ns / 1nsmodule dsp_tb;// 输入reg CLK;reg CE;reg SCLR;reg signed [26:0] A, D;reg signed [17:0] B;// 输出wire signed [47:0] P;par…...

【环境配置】Mac电脑安装运行R语言教程 2025年

一、安装 Xcode Command Line Tools 打开终端&#xff0c;输入如下命令&#xff1a; xcode-select --install安装完成后&#xff0c;输入如下命令&#xff0c;能看见版本号说明安装成功 gcc --version二、下载安装R语言 https://mirrors.tuna.tsinghua.edu.cn/CRAN/ 点开后…...

常见算法的总结与实现思路

前言 hello&#xff0c;我是Maybe。昨天和今天花了两天左右的时间。把常见的排序算法都学完了&#xff0c;自己也实现了一遍。感觉收获满满&#xff0c;但是过程是艰辛的。下面我将分享代码和思维导图&#xff0c;希望可以帮助到大家。 思维导图(含注意事项&#xff0c;实现思…...

Ethan独立开发产品日报 | 2025-04-27

1. CreateWise AI 旨在提升你工作效率的AI播客编辑器 人工智能播客编辑器&#xff0c;让你的播客制作速度提升10倍&#xff01;它可以自动去除口头语和沉默&#xff0c;生成节目笔记和精彩片段&#xff0c;还能一键制作适合社交媒体分享的短视频——所有这些功能都只需一次点…...

5G与边缘计算:协同发展,开启智慧世界新篇章

**5G与边缘计算&#xff1a;协同发展&#xff0c;开启智慧世界新篇章 ** 大家好&#xff0c;我是Echo_Wish。今天我们来探讨一个备受关注的技术话题——5G与边缘计算的协同发展。随着5G网络的逐步普及以及边缘计算技术的快速发展&#xff0c;二者的结合为我们带来了前所未有的创…...

AcWing 885:求组合数 I ← 杨辉三角

【题目来源】 https://www.acwing.com/problem/content/887/ 【题目描述】 给定 n 组询问&#xff0c;每组询问给定两个整数 a&#xff0c;b&#xff0c;请你输出 C(a,b) mod (10^97) 的值。 【输入格式】 第一行包含整数 n。 接下来 n 行&#xff0c;每行包含一组 a 和 b。 …...

Python3:Jupyterlab 安装和配置

Python3:Jupyterlab 安装和配置 Jupyter源于Ipython Notebook项目&#xff0c;是使用Python&#xff08;也有R、Julia、Node等其他语言的内核&#xff09;进行代码演示、数据分析、机器学习、可视化、教学的非常好的工具。 最新的基于web的交互式开发环境&#xff0c;适用于n…...

如何搭建spark yarn模式的集合集群

一、环境准备 在搭建 Spark on YARN 集群之前&#xff0c;需要确保以下环境已经准备就绪&#xff1a; 操作系统&#xff1a;推荐使用 CentOS、Ubuntu 等 Linux 发行版。 Java 环境&#xff1a;确保安装了 JDK 1.8 或更高版本。 Hadoop 集群&#xff1a;已经搭建并运行的 Had…...

智能座舱架构中芯片算力评估

在智能座舱&#xff08;Intelligent Cockpit&#xff09;领域&#xff0c;芯片的算力是决定系统性能、响应速度以及用户体验的关键因素之一。 随着汽车智能化程度的不断提高&#xff0c;智能座舱对芯片的算力、功耗、集成度以及安全性提出了更高的要求。 智能座舱架构中芯片算…...

STM32完整内存地址空间分配详解

在STM32这类基于ARM Cortex-M的32位微控制器中&#xff0c;整个4GB的地址空间(从0x00000000到0xFFFFFFFF)有着非常系统化的分配方案&#xff0c;每个区域都有其特定的用途。下面我将详细介绍这些地址区域的分配及其功能&#xff1a; STM32完整内存地址空间分配详解(0x00000000…...

叉车司机N1考试的实操部分有哪些注意事项?

叉车司机 N1 考试实操部分分为场地考试和场内道路考试&#xff0c;以下是一些注意事项&#xff1a; 场地考试 起步&#xff1a;检查车辆仪表和个人仪容&#xff0c;穿好工作服、戴安全帽&#xff0c;不穿拖鞋等不符规定的鞋。同时检查换挡和换向操纵杆在空档位置&#xff0c;…...

【行业特化篇2】金融行业简历特化指南:合规性要求与风险控制能力的艺术化呈现

写在最前 作为一个中古程序猿,我有很多自己想做的事情,比如埋头苦干手搓一个低代码数据库设计平台(目前只针对写java的朋友),比如很喜欢帮身边的朋友看看简历,讲讲面试技巧,毕竟工作这么多年,也做到过高管,有很多面人经历,意见还算有用,大家基本都能拿到想要的offe…...

Linux 定时备份到windows 方案比较

1 传输协议比较 特性SCPRSYNCSFTP基本功能文件传输&#xff08;本地与远程&#xff09;文件和目录的同步与传输文件管理&#xff08;上传、下载、删除等&#xff09;增量传输不支持增量传输支持增量传输不支持增量传输性能传输速度较慢&#xff0c;效率低高效&#xff0c;适合…...

【网络编程】TCP/IP四层模型、MAC和IP

1. TCP/IP的四层模型 网络模型的目的&#xff1a;规范通信标准&#xff0c;确保不同设备和系统之间能够有效通信 对比OSI模型与TCP/IP模型&#xff1a; OSI模型的七层架构&#xff08;物理层、数据链路层、网络层、传输层、会话层、表示层、应用层&#xff09;TCP/IP模型的四…...

Java学习手册: IoC 容器与依赖注入

一、IoC 容器概述 IoC&#xff08;Inversion of Control&#xff0c;控制反转&#xff09;容器是 Spring 框架的核心组件之一。它负责创建对象、管理对象的生命周期以及对象之间的依赖关系。通过将对象的创建和管理交给 IoC 容器&#xff0c;开发者可以实现代码的松耦合&#…...

Web 基础与Nginx访问统计

目录 Web基础 域名与DNS 域名的结构 网页与HTML 网页概述 HTML 概述 HTML基本标签 1、HTML 语法规则 2、HTML 文件结构 静态网页和动态网页 HTTP协议概述 HTTP方法 HTTP状态码 Nginx访问状态统计 Web基础 域名与DNS 网络是基于 TCP/IP 协议进行通信和连接的,每一台主机都有一…...

了解Android studio 初学者零基础推荐(1)

线上学习课程链接 开发Andorid App 使用的语言有很多&#xff0c;包括java, kotlin,C,等&#xff0c;首先让我们了解kotlin这个热门语言。 kotlin 程序 fun main() {println("hello,xu") } kotlin中的函数定义语法&#xff1a;函数名称在fun关键字后面&#xff0…...

Android Studio 2024版,前进返回按钮丢失解决

最近升级完AS最新系统后&#xff0c;顶部的前进和返回按钮默认隐藏了 解决方案&#xff1a; 1. 打开settings 2. 找到左侧 Appearance & Behavior 下面点击 Menus and Toolbars 3. 点击 Main Toolar 4. 点击Left&#xff0c;右键选择 Add Actions 5. 弹框中选择 Main Me…...

详解UnityWebRequest类

什么是UnityWebRequest类 UnityWebRequest 是 Unity 引擎中用于处理网络请求的一个强大类&#xff0c;它可以让你在 Unity 项目里方便地与网络资源进行交互&#xff0c;像发送 HTTP 请求、下载文件等操作都能实现。下面会详细介绍 UnityWebRequest 的相关内容。 UnityWebRequ…...

安装qt4.8.7

QT4.8.7安装详细教程&#xff08;MinGW 4.8.2和QTCreator4.2.0)_qtcreater482-CSDN博客 QT4.8.7安装详细教程&#xff08;MinGW 4.8.2和QTCreator4.2.0) 1、下载 1&#xff09;下载QT4.8.7 http://download.qt.io/archive/ 名称&#xff1a;qt-opensource-windows-x86-mingw482…...

2025系统架构师---管道/过滤器架构风格

引言 在分布式系统与数据密集型应用主导技术演进的今天&#xff0c;‌管道/过滤器架构风格‌&#xff08;Pipes and Filters Architecture Style&#xff09;凭借其‌数据流驱动‌、‌组件解耦‌与‌并行处理能力‌&#xff0c;成为处理复杂数据转换任务的核心范式。从Unix命令…...

仙宫云ComfyUI —【Wan2.1】AI视频生成部署

【Wan2.1】AI视频生成本地部署与使用技巧全面详解_哔哩哔哩_bilibili 所有模型下载&#xff1a;https://pan.quark.cn/s/9d793aa1b258 Runninghub本期课程工作流下载&#xff08;可获得1000RH币&#xff09;&#xff1a;https://www.runninghub.cn/?utm_sourcekol01-RH145 仙…...

学成在线。。。

一:讲师管理 介绍:可以实现对讲师的分页展示,多条件组合分页查询,对讲师的添加,修改,删除操作。 针对于添加来说,使用requestBody注解,搭配postmapping接收数据,使用service层的对象,调用mapper方法,向数据库中保存数据。 修改: 先根据讲师id,查询出讲师,再去…...

Python爬虫实战:获取猫yan电影网最新热门电影数据并做分析,为51观影做参考

一、引言 随着互联网的迅速发展,电影信息获取更加便捷。猫yan电影作为国内知名电影信息平台,提供了丰富电影数据。对于我们而言,获取并分析这些数据,能为用户提供更有价值的观影建议。本文详细介绍使用 Python 的 Scrapy 框架实现猫yan电影数据爬取与分析,为 “五一” 观…...

将有序数组转换为高度平衡二叉搜索树 | 详解与Java实现

文章目录 1. 问题描述2. 方法思路核心思想:分治法 + 递归3. 代码实现Java实现(含注释)4. 复杂度分析5. 关键点解释为何选择中间节点?为何使用 `left + (right - left) / 2` 而非 `(left + right) / 2`?6. 扩展优化迭代法实现(非递归)优化空间7. 总结1. 问题描述 108.将…...

普推知产:商标驳回复审下初步审定公告了!

近日客户的商标驳回复审后终于下初审公告了&#xff0c;经过一年多时间&#xff0c;当时申请时知道这个商标名称会被驳回&#xff0c;因为有相同一模一样的&#xff0c;客户就想要这个名称&#xff0c;因为与创始人的姓名是相关的&#xff0c;普推知产商标老杨经分析后&#xf…...

网工笔记-网络层

概述&#xff1a; 两种观点&#xff1a; 1.面向连接的可靠传输 2.面向无连接的&#xff0c;尽最大努力完成交付数据报服务 虚电路服务&#xff08;可靠传输&#xff09; 数据报服务&#xff08;尽力而为&#xff09; 两者的对比&#xff1a; 不管是虚电路还是数据报服务都是…...

el-Input输入数字自动转千分位进行展示

el-Input输入数字自动转千分位进行展示&#xff0c;存储值不变 子组件&#xff1a; <template><el-input ref"inputRef" :disabled"disabled" clearable v-model"displayValue" v-bind"$attrs" input"handleInput&quo…...

基于 Spring Boot 瑞吉外卖系统开发(九)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;九&#xff09; 保存菜品 菜品管理页面提供了一个“新增菜品”按钮&#xff0c;单击该按钮时&#xff0c;会打开新增菜品页面。 请求路径/dish&#xff0c;请求方法POST&#xff0c;参数使用DishDto类接收。 DishDto 添加f…...

C++复习补充 类型转换和RTTI

类型转换和RTTI 类型转换类与类之间的类型转换四种显示类型转换类型转换注意事项RTTI 类型转换 在 C 中&#xff0c;operator int() 是用户定义的类型转换运算符&#xff08;User-Defined Conversion Operator&#xff09;&#xff0c;允许自定义对象隐式或显式转换为特定类型…...

QT采用mqtt进行通信(17.1)

文章目录 1.试错历程2. qt5.8安装3. 开始搞了4. 测试连接mqtt broker1.试错历程 尝试过网上说的各种版本,官方库和第三方库,试过qt5.9.9, qt5.12, qt5.12.2, qt5.14 等各个版本,都能编译通过,调用mqtt库,但是都不能连接成功,真的是试吐了,不知道他们的为什么都能成功,…...

基于 BERT 微调一个意图识别(Intent Classification)模型

基于 BERT 微调一个意图识别&#xff08;Intent Classification&#xff09;模型&#xff0c;你的意图类别包括&#xff1a; 查询天气获取新闻咨询想听音乐想添加备忘查询备忘获取家政服务结束对话增加音量减小音量其他 具体实现步骤&#xff08;详细版&#xff09; 1. 准备你…...

人工智能大语言模型与AI芯片新进展:技术演进与商业化路径

人工智能大语言模型与AI芯片新进展&#xff1a;技术演进与商业化路径 Latest Advances in AI Large Language Models and Chips: Technological Evolution and Commercialization Pathways 一、研究背景与意义&#xff08;Research Background and Significance&#xff09; 技…...

【Linux】Java 开发者的 Linux 常用命令指南

Java 开发者的 Linux 常用命令指南 目录标题 Java 开发者的 Linux 常用命令指南1. Linux 目录结构2. 系统信息命令3. 服务管理系统服务防火墙管理 4. 文本编辑 (vi/vim)常用模式 5. 文件和目录操作查看与导航创建与删除查看文件内容查找文件 6. 用户管理7. 压缩和解压8. 权限管…...

全开源、私有化部署!轻量级用户行为分析系统-ClkLog

ClkLog是一款支持私有化部署的全开源埋点数据采集与分析系统&#xff0c;兼容Web、App、小程序多端埋点&#xff0c;快速洞察用户访问路径、行为轨迹&#xff0c;并生成多维用户画像。助力中小团队搭建轻量灵活的用户行为分析平台。 为什么需要一款私有化的埋点分析系统&#x…...

【Mybatis】Mybatis基础

文章目录 前言一、搭建MyBatis1.1 创建maven工程1.2 加入log4j日志功能1.3 MyBatis的增删改查1.4 核心配置文件详解 二、MyBatis获取参数值的两种方式2.1 单个字面量类型的参数2.2 多个字面量类型的参数2.3 map集合类型的参数2.4 实体类类型的参数2.5 使用Param标识参数 三、 M…...

(002)Excel 使用图表,统计

第一步新建数据&#xff0c;将数据转成表格&#xff1a; 选中表格数据&#xff0c;右下角小图标&#xff1a;汇总 图表。...