TCP 协议学习
一、引言
在当今的网络通信世界中,TCP(Transmission Control Protocol,传输控制协议)是最为重要的协议之一。它为各种网络应用提供了可靠的、有序的数据传输服务,是互联网通信的基石。无论是网页浏览、电子邮件发送、文件下载,还是在线视频播放等应用,都离不开 TCP 协议的支持。理解 TCP 协议对于网络工程师、软件开发人员以及对网络技术感兴趣的人来说至关重要。
二、TCP 协议概述
(一)基本概念
TCP 是一种面向连接的、可靠的传输层协议。面向连接意味着在进行数据传输之前,通信双方需要先建立连接,就像打电话之前需要先拨号一样。这种连接是全双工的,即数据可以在两个方向上同时传输3。可靠则体现在 TCP 协议能够保证数据的准确传输,不会出现数据丢失、重复或乱序的情况
(二)与 UDP 的对比
UDP(User Datagram Protocol,用户数据报协议)是另一种传输层协议,与 TCP 形成了鲜明的对比2。UDP 是无连接的,不需要在数据传输之前建立连接,直接将数据包发送出去。它不保证数据的可靠性,可能会出现数据丢失、重复或乱序的情况,但通信速度快,适用于对实时性要求较高、对数据可靠性要求不高的应用场景,如语音通话、视频直播等。而 TCP 则适用于对数据可靠性要求较高的应用场景,如文件传输、电子邮件等。
三、TCP 报文格式分析
(一)报文格式各字段详解
- 源端口和目的端口:源端口是发送方应用程序使用的端口号,目的端口是接收方应用程序使用的端口号。端口号用于标识不同的应用程序,通过端口号,接收方可以将接收到的数据正确地交付给相应的应用程序。
- 序列号和确认号:
- 序列号:用于标识本报文段中所发送数据的第一个字节的编号。在 TCP 传输中,每个字节都会按顺序编号。如果 SYN 标记为 1 时(表示发送方请求建立连接),这个序列号是初始序列值;如果 SYN 标记不为 1,表示是当前数据分段的第一个字节的序列号。序列号的作用是保证数据的顺序性,接收方可以根据序列号将接收到的数据正确地组装成原始的报文。
- 确认号:表示接收方期望接收的下一个报文段的第一个字节数据的编号。即编号为确认号 - 1 以及之前的字节均已收到。确认号的作用是让发送方知道哪些数据已经被接收方成功接收,以便发送方可以继续发送后续的数据。
- 数据偏移字段:也称为头部长度字段,指示 TCP 首部的长度。由于 TCP 首部的长度是可变的,所以需要这个字段来标识首部的结束位置和数据的开始位置。通常情况下,TCP 首部的典型长度是 20 字节,但如果存在选项字段,首部长度会增加34。
- 保留字段:为将来的扩展保留,目前尚未使用。
- 标志位字段:
- URG:表示本报文段中发送的数据是否包含紧急数据。当 URG 标志位为 1 时,紧急指针字段有效,指示紧急数据的位置。
- ACK:表示前面的确认号字段是否有效。ACK = 1 时表示有效,说明该报文段是一个确认报文或者包含数据的报文。
- PSH:告诉对方接收到该报文后是否立即把数据推送给上层。当 PSH = 1 时,接收方应该尽快将数据交付给上层应用程序,而不是等到缓冲区满了再交付。
- RST:表示是否重置连接。如果 RST = 1,说明 TCP 连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接4。
- SYN:在建立连接时使用,用来同步序号。当 SYN = 1,ACK = 0 时,表示这是一个请求建立连接的报文段;当 SYN = 1,ACK = 1 时,表示对方同意建立连接4。
- FIN:标记数据是否发送完成。如果 FIN = 1,表示数据已经发送完成,可以断开连接4。
- 窗口大小字段:表示从确认号开始还可以接收多少字节,也表示当前接收端的接收窗口还有多少剩余空间。该字段可以用于 TCP 的流量控制,发送方会根据接收方的窗口大小来调整发送数据的速度,以避免接收方的缓冲区溢出。
- TCP 校验和字段:用于确认传输的数据是否损坏。发送方会对 TCP 报文段的首部和数据部分进行校验和计算,并将结果放入校验和字段中。接收方在接收到报文段后,也会进行校验和计算,如果计算结果与报文段中的校验和不一致,则说明数据在传输过程中出现了损坏,接收方会丢弃该报文段。
- 紧急指针字段:仅当前面的 URG 控制位为 1 时才有意义。它指出本数据段中为紧急数据的字节数。
(二)报文实例分析
为了更好地理解 TCP 报文格式,我们可以通过抓包工具(如 Wireshark)来捕获网络中的 TCP 报文,并对其进行分析。例如,在一次网页浏览过程中,我们使用抓包工具捕获到了客户端与服务器之间的 TCP 连接建立过程的报文:
- 第一次握手报文:客户端向服务器发送一个请求建立连接的报文段,其中 SYN 标志位为 1,ACK 标志位为 0,序列号为一个随机生成的数值(假设为 1000),表示这是客户端的初始序列号。此时,客户端进入 SYN_SENT 状态,表示正在等待服务器的响应。
- 第二次握手报文:服务器收到客户端的请求后,向客户端发送一个同意建立连接的报文段,其中 SYN 标志位为 1,ACK 标志位为 1,序列号为另一个随机生成的数值(假设为 2000),确认号为客户端的序列号加 1(即 1001),表示服务器已经收到了客户端的请求,并同意建立连接。此时,服务器进入 SYN_RCVD 状态,表示正在等待客户端的确认。
- 第三次握手报文:客户端收到服务器的响应后,向服务器发送一个确认报文,其中 SYN 标志位为 0,ACK 标志位为 1,序列号为客户端的序列号加 1(即 1001),确认号为服务器的序列号加 1(即 2001),表示客户端已经收到了服务器的同意,并确认建立连接。此时,客户端和服务器都进入 ESTABLISHED 状态,表示连接已经建立成功,可以开始进行数据传输。
四、TCP 的可靠性保证机制
TCP 作为一种可靠的传输层协议,具备多种机制来确保数据在网络中的可靠传输。
(一)数据分段与重组
TCP 将来自上层应用的数据分割成适当大小的报文段进行传输。这样做主要有以下几个好处:
- 适应不同网络的 MTU(最大传输单元):不同的网络类型可能具有不同的 MTU 限制。通过将数据分段,可以确保报文段的大小不会超过网络的 MTU,避免数据在传输过程中被分割或丢失。
- 提高传输效率:较小的报文段更容易在网络中传输,减少了因单个报文过大而导致的传输延迟和丢包风险。
- 便于错误检测和恢复:如果某个报文段在传输过程中出现错误,只需重传该报文段,而不必重传整个数据。
接收方在接收到报文段后,会根据序号将其重新组装成原始的数据。这种分段与重组的过程保证了数据的完整性。
(二)确认与重传
- 确认机制:接收方在成功接收到一个报文段后,会立即向发送方发送一个确认报文,告知发送方该报文段已被正确接收。确认报文中包含了确认号,该确认号表示接收方期望接收的下一个报文段的序号。通过这种确认机制,发送方可以确定哪些数据已经被接收方成功接收,哪些数据还需要重传。
- 超时重传:当发送方发送一个报文段后,会启动一个定时器。如果在定时器超时之前没有收到接收方的确认报文,发送方就会认为该报文段丢失,并重新发送它。定时器的超时时间是根据网络状况动态调整的,以适应不同的网络延迟和丢包情况。例如,在网络拥塞时,超时时间会适当延长,以避免频繁的重传加重网络负担;而在网络状况良好时,超时时间可以缩短,以提高数据传输的效率。
(三)校验和
TCP 在每个报文段的头部都包含一个校验和字段。发送方在发送报文段之前,会计算该报文段的校验和,并将其填入校验和字段中。接收方在接收到报文段后,也会重新计算校验和,并与接收到的校验和进行比较。如果两者不相等,说明报文段在传输过程中出现了错误,接收方会丢弃该报文段,并向发送方发送一个通知,要求发送方重传。校验和机制可以有效地检测出数据在传输过程中可能出现的错误,保证了数据的准确性。
(四)序号与确认号的协同工作
序号用于标识每个报文段中的数据字节。发送方为每个发送的报文段分配一个唯一的序号,接收方根据序号可以将接收到的报文段按正确的顺序组装起来。确认号则是接收方用来告诉发送方哪些数据已经被成功接收。接收方在确认报文中设置确认号为下一个期望接收的字节序号。通过序号和确认号的协同工作,发送方可以确定哪些数据已经被接收方确认,哪些数据还需要重传。例如,如果发送方发送了三个报文段,序号分别为 1000、2000 和 3000,每个报文段包含 1000 个字节的数据。接收方接收到这些报文段后,会在确认报文中设置确认号为 4000,表示已经成功接收了序号为 1000 到 3999 的字节数据,期望接收序号为 4000 的字节数据。发送方根据接收方的确认号,可以确定哪些报文段已经被确认,哪些报文段需要重传。
五、TCP 的拥塞控制策略
(一)拥塞控制的重要性
在当今复杂的网络环境中,TCP 的拥塞控制策略起着至关重要的作用。随着互联网的迅速发展,网络中的数据流量呈爆炸式增长,各种应用对网络带宽的需求也越来越大。如果没有有效的拥塞控制机制,当大量的数据同时在网络中传输时,很容易导致网络拥塞。网络拥塞会带来一系列严重的后果,如数据传输延迟大幅增加、丢包率急剧上升、网络吞吐量显著下降等,这不仅会影响用户的网络体验,还可能对关键的网络应用和服务造成严重干扰。
例如,在在线视频会议、实时金融交易等对网络延迟和可靠性要求极高的应用场景中,网络拥塞可能导致视频卡顿、交易延迟甚至失败,给用户带来极大的不便和损失。因此,TCP 的拥塞控制策略对于确保网络的稳定运行、提高网络资源的利用效率以及保障各种网络应用的服务质量至关重要。
(二)慢启动机制
-
原理与作用
- 慢启动是 TCP 在连接建立初期采用的一种谨慎的数据传输策略。其核心思想是在对网络状况不了解的情况下,逐渐增加发送数据的速度,以避免一开始就发送大量数据导致网络拥塞。
- 在慢启动阶段,发送方将发送窗口的大小初始化为一个较小的值,通常为 1 个 MSS(Maximum Segment Size,最大报文段大小)。然后,每收到一个确认报文,发送窗口的大小就会增加一倍。这样,发送方可以逐步试探网络的承载能力,根据网络的反馈来调整数据发送速度。
-
实际应用示例
- 假设一个新的 TCP 连接建立后,发送方开始发送数据。初始发送窗口大小为 1 个 MSS,发送一个报文段后,等待接收方的确认。当接收方成功接收到这个报文段并返回确认报文时,发送方的发送窗口大小变为 2 个 MSS。此时,发送方可以发送两个报文段。如果这两个报文段也都被成功接收并确认,发送窗口大小将变为 4 个 MSS,以此类推。通过这种方式,发送方在不引起网络拥塞的前提下,逐渐增加数据发送量,以适应网络的承载能力。
(三)拥塞避免机制
-
原理与目标
- 当发送窗口的大小达到一个预设的阈值时,TCP 进入拥塞避免阶段。在这个阶段,发送方不再像慢启动阶段那样指数级地增加发送窗口大小,而是采用线性增长的方式。
- 拥塞避免的目标是在避免网络拥塞的同时,尽可能地提高网络的吞吐量。通过缓慢而稳定地增加发送窗口大小,发送方可以在不超出网络承载能力的前提下,充分利用网络资源进行数据传输。
-
工作过程详解
- 例如,在拥塞避免阶段,每经过一个往返时间(RTT),发送窗口的大小增加一个 MSS。同时,发送方会持续监测网络的拥塞状况。如果在一段时间内没有出现丢包或确认报文延迟到达等拥塞迹象,发送方就会继续线性地增加发送窗口大小。然而,如果发现网络出现拥塞的迹象,如连续出现多个报文段丢失或确认报文长时间延迟,发送方就会立即采取措施调整发送策略,以缓解网络拥塞。
(四)快速重传与快速恢复机制
-
快速重传
- 当接收方收到一个失序的报文段时,它会立即向发送方发送重复的确认报文,以告知发送方有报文段丢失。如果发送方连续收到三个重复的确认报文,它会认为有报文段丢失,并立即重传丢失的报文段,而不必等待定时器超时。
- 快速重传的目的是在检测到数据丢失后尽快进行重传,减少数据传输的延迟。例如,接收方期待序号为 1000 的报文段,但收到了序号为 1002 的报文段,它会立即向发送方发送确认号为 1000 的重复确认报文。如果发送方连续收到三个这样的重复确认报文,就会快速重传序号为 1000 的报文段,而不必等待传统的超时重传机制触发。
-
快速恢复
- 在快速重传之后,发送方会进入快速恢复阶段。在这个阶段,发送方会将发送窗口的大小减半,然后线性地增加发送窗口的大小,直到达到拥塞避免阶段的窗口大小。
- 快速恢复的作用是在发生数据丢失后,迅速调整发送策略,避免网络拥塞的进一步加剧,同时尽快恢复数据的正常传输。例如,发送方在快速恢复阶段将发送窗口大小减半后,每收到一个确认报文,就会将发送窗口的大小增加一个较小的值(通常为 1 个 MSS),逐步恢复数据发送速度,同时密切监测网络状况,以确保不会再次引发网络拥塞。
(五)拥塞控制的动态调整与适应
-
网络状况的实时监测
- TCP 通过多种方式实时监测网络的拥塞状况。除了根据丢包情况和确认报文的延迟来判断网络拥塞外,还可以利用一些其他指标,如往返时间的变化、接收窗口的大小等。发送方会持续分析这些指标的变化,以准确了解网络的当前状态。
- 例如,如果往返时间突然增加,或者接收窗口大小减小,发送方就会推断网络可能出现了拥塞,从而及时调整发送策略。
-
自适应调整策略
- TCP 的拥塞控制策略具有很强的自适应能力。根据网络状况的变化,发送方会动态地调整发送窗口的大小、慢启动阈值以及重传定时器的超时时间等参数。在网络状况良好时,适当增加发送窗口大小,提高数据传输速度;在网络出现拥塞迹象时,迅速减小发送窗口大小,降低数据发送速度,以缓解拥塞。
- 这种自适应调整策略使得 TCP 能够在不同的网络环境下都能有效地进行数据传输,适应各种复杂的网络条件,确保网络的稳定性和可靠性。
(六)拥塞控制对网络性能的影响
-
提高网络吞吐量
- 通过合理的拥塞控制策略,TCP 可以避免网络拥塞,充分利用网络资源,从而提高网络的吞吐量。当网络处于轻度拥塞状态时,TCP 能够及时调整发送速度,使得网络能够在不发生严重拥塞的情况下传输更多的数据。
- 例如,在一个具有一定带宽的网络中,如果没有拥塞控制,发送方可能会无限制地发送数据,导致网络拥塞,吞吐量下降。而有了有效的拥塞控制,发送方会根据网络状况调整发送速度,使得网络能够保持在一个较高的吞吐量水平。
-
降低数据传输延迟
- 拥塞控制可以减少数据在网络中的排队等待时间,从而降低数据传输延迟。当网络拥塞时,数据报文会在路由器等网络设备中排队等待处理,导致延迟增加。通过及时调整发送速度,TCP 可以减少网络中的数据量,降低排队等待时间,提高数据传输的及时性。
- 例如,在实时视频通信等对延迟敏感的应用中,拥塞控制可以确保视频数据能够及时传输,减少卡顿现象,提高用户体验。
-
增强网络稳定性
- 拥塞控制有助于维持网络的稳定性。通过避免网络拥塞的发生,TCP 可以减少因拥塞导致的网络故障和数据丢失,提高网络的可靠性。同时,拥塞控制还可以平衡网络中不同用户和应用的带宽需求,避免某些用户或应用占用过多的网络资源,影响其他用户和应用的正常使用。
- 例如,在一个多用户共享网络的环境中,拥塞控制可以确保每个用户都能获得相对公平的网络资源,避免个别用户的大量数据传输影响其他用户的网络体验,从而增强整个网络的稳定性。
六、TCP 的流量控制机制
(一)流量控制的目的
TCP 的流量控制机制旨在确保发送方不会发送过多的数据,导致接收方的缓冲区溢出。通过流量控制,接收方可以根据自己的处理能力来控制发送方的数据发送速度,从而保证数据的有序接收和处理。
(二)窗口大小的作用
接收方通过在确认报文中设置窗口大小字段来通知发送方自己还能够接收多少数据。发送方会根据接收方的窗口大小来调整自己的数据发送速度。如果接收方的窗口大小为 0,发送方会停止发送数据,直到接收方的窗口大小不为 0 为止。
(三)动态调整窗口大小
在数据传输过程中,接收方的处理能力可能会发生变化,因此接收方会根据自己的实际情况动态地调整窗口大小。例如,如果接收方的处理速度加快,它可以增大窗口大小,通知发送方可以发送更多的数据;如果接收方的处理速度减慢,它可以减小窗口大小,通知发送方减少数据的发送量。
七、TCP 的连接管理
(一)连接建立过程(三次握手)
- 第一次握手:客户端向服务器发送一个 SYN 报文段,请求建立连接。这个报文段中包含客户端的初始序列号(ISN),用于标识客户端发送的数据。
- 第二次握手:服务器收到客户端的 SYN 报文段后,向客户端发送一个 SYN/ACK 报文段,确认客户端的请求,并同时请求建立连接。这个报文段中包含服务器的初始序列号和对客户端序列号的确认号。
- 第三次握手:客户端收到服务器的 SYN/ACK 报文段后,向服务器发送一个 ACK 报文段,确认服务器的请求。此时,连接建立成功,客户端和服务器可以开始进行数据传输。
(二)连接释放过程(四次挥手)
- 第一次挥手:客户端向服务器发送一个 FIN 报文段,请求关闭连接。这个报文段表示客户端已经没有数据要发送了,但仍然可以接收数据。
- 第二次挥手:服务器收到客户端的 FIN 报文段后,向客户端发送一个 ACK 报文段,确认客户端的请求。此时,服务器可能还有数据要发送给客户端,所以连接还没有完全关闭。
- 第三次挥手:服务器向客户端发送一个 FIN 报文段,请求关闭连接。这个报文段表示服务器也没有数据要发送了。
- 第四次挥手:客户端收到服务器的 FIN 报文段后,向服务器发送一个 ACK 报文段,确认服务器的请求。此时,连接完全关闭。
八、学习 TCP 协议的网站推荐
(一)TCP/IP Guide
网址:Welcome to The TCP/IP Guide!
这是一个非常全面的 TCP/IP 协议学习资源网站,涵盖了 TCP 协议的各个方面,包括原理、报文格式、连接管理、拥塞控制等。网站内容丰富,讲解详细,并且配有大量的图表和实例,非常适合初学者和深入学习者。
(二)Wireshark 官网
网址:https://www.wireshark.org/
Wireshark 是一款流行的网络协议分析工具,其官网提供了丰富的学习资源,包括教程、文档、论坛等。通过使用 Wireshark 抓包分析 TCP 协议的报文,可以更加直观地理解 TCP 协议的工作原理和细节。
(三)Coursera 和 edX 上的相关课程
许多知名高校在 Coursera 和 edX 平台上开设了网络协议相关的课程,其中包括对 TCP 协议的深入讲解。这些课程通常由专业的教授授课,内容系统全面,并且提供作业和测验,帮助学习者巩固所学知识。
(四)Stack Overflow
网址:https://stackoverflow.com/
这是一个非常受欢迎的编程问答社区,在上面可以找到很多关于 TCP 协议的问题和解答。当在学习 TCP 协议过程中遇到问题时,可以在 Stack Overflow 上搜索相关问题,或者提问寻求帮助。
(五)RFC 文档
TCP 协议的标准定义在一系列的 RFC(Request for Comments)文档中。可以在 IETF(Internet Engineering Task Force)的官方网站上找到这些文档,网址为:https://www.rfc-editor.org/。虽然 RFC 文档比较专业和技术化,但对于深入理解 TCP 协议的细节非常有帮助。
九、总结
TCP 协议作为网络通信的核心协议之一,具有重要的地位和作用。通过对 TCP 协议的报文格式、可靠性保证机制、拥塞控制策略、流量控制机制以及连接管理等方面的深入理解,我们可以更好地掌握网络通信的原理和技术。同时,利用推荐的学习网站,可以进一步加深对 TCP 协议的学习和研究,为网络工程、软件开发等领域的工作和学习提供坚实的基础。无论是对于专业的网络工程师还是普通的网络用户,了解 TCP 协议都有助于更好地理解和解决网络通信中的各种问题,提高网络应用的性能和可靠性。
相关文章:
TCP 协议学习
一、引言 在当今的网络通信世界中,TCP(Transmission Control Protocol,传输控制协议)是最为重要的协议之一。它为各种网络应用提供了可靠的、有序的数据传输服务,是互联网通信的基石。无论是网页浏览、电子邮件发送、…...
python3的基本数据类型:String(字符串)
一. 简介 本文简单学习了一下 python3中的一种数据类型: String(字符串)。 Python中的String类型是一种用于表示文本数据的数据类型。 它可以包含字母、数字、符号等字符,用于存储文本信息。 二. python3的基本数据类型&…...
面试总结(2024/10/16)
面试总结(2024/10/16) 面试11.闭包2.promise3.全局数据的保存4.多模板切换,布局,系统主题颜色5.同一个搜索,不同的搜索条件,输入框不同的校验方法6.自定义一个组件,包括哪些属性7.多个父组件之间…...
从图像识别到聊天机器人:Facebook AI的多领域应用
随着人工智能技术的快速发展,Facebook已在多个领域内广泛应用AI技术,以提升用户体验、提高效率并推动创新。从图像识别到聊天机器人,Facebook的AI应用涵盖了社交媒体的方方面面,下面我们将深入探讨这些应用的具体实现及其对用户生…...
linux中级(NFS服务器)
NFS:用于在NNIX/Linux主机之间进行文件共享的协议 流程:首先服务端开启RPC服务,并开启111端口,服务器端启动NFS服务,并向RPC注册端口信息,客户端启动RPC,向服务器RPC服务请求NFS端口࿰…...
微软主动出击,“钓”出网络钓鱼者
微软正采取一种巧妙的策略来对抗网络钓鱼行为者,其手段是通过访问Azure平台创建高度仿真的蜜罐租户,以此作为诱饵,吸引网络犯罪分子进入,进而收集他们的相关信息。 凭借所收集的数据,微软能够绘制出恶意基础设施的地图…...
Xcode16 编译运行YYCache iOS18 sqlite3_finalize 闪退问题解决方案
问题原因 升级Xcode 16 之后,真机运行APP,发现会有Crash,崩溃堆栈线上Crash 在 YYCache 之中。如下图所示 崩溃堆栈如下: * thread #1, queue com.apple.main-thread, stop reason signal SIGABRTframe #0: 0x00000001d9391…...
Kafka-Windows搭建全流程(环境,安装包,编译,消费案例,远程连接,服务自启,可视化工具)
目录 一. Kafka安装包获取 1. 官网地址 2. 百度网盘链接 二. 环境要求 1. Java 运行环境 (1) 对 java 环境变量进行配置 (2) 下载完毕之后进行解压 三. 启动Zookeeper 四. 启动Kafka (1) 修改Conf下的server.properties文件,修改kafka的日志文件路径 (2)…...
django模板相关配置
模板引擎配置 Django支持多种模板引擎,最常用的是Django自带的模板引擎和Jinja2模板引擎。模板引擎的配置主要在settings.py文件中的TEMPLATES列表中进行。 BACKEND:指定模板引擎。例如,BACKEND: django.template.backends.django.DjangoTe…...
MongoDB等保限制下的连接认证问题
目录 一、问题描述 二、解决方案 三、代码示例 四、拓展知识 一、问题描述 用户调整用户连接认证机制以满足等保要求,调整后程序连接mongodb失败。数据库日志报错如下: {"t":{"$date":"2024-10-10T14:39:07.825+08:00"},"s":&q…...
2024 睿抗机器人开发者大赛(RAICOM)-【网络安全】CTF 部分WP
文章目录 一、前言二、MICS你是黑客么循环的压缩包Goodtime 三、WEBpy 四、Crypto变异凯撒RSAcrypto3 一、前言 WP不完整,仅供参考! 除WEB,RE,PWN外,其余附件均已打包完毕 也是一个对MISC比较友好的一个比赛~ 123网…...
idea 无法输入中文 快速解决
idea在某些情况会出现无法输入中文的情况,我们不去深究内部原因,直接上解决方案: 1、点击菜单help->Edit Custom VM Options 2、最后一行,追加: -Drecreate.x11.input.methodtrue 、 3、重启...
掌握ElasticSearch(五):查询和过滤器
一、查询和过滤器的区别 在 Elasticsearch 中,查询(Query)和过滤器(Filter)是用于检索和筛选数据的重要组成部分。它们虽然都能用来查找文档,但在性能和用法上有所不同。下面详细介绍查询和过滤器的概念以…...
自学[vue+SpringCloud]-012-SpringCloud工程发送邮件
文章目录 前言一、配置QQ邮箱1.1 设置1.2 获取授权码 二、服务发送邮件2.1 引入依赖包2.2 新建AlarmMessageDto2.3 增加controller代码2.4 main方法测试 总结 前言 skywalking监控通过webhook调用SpringCloud服务接口,接口中发送告警邮件。 一、配置QQ邮箱 1.1 设…...
STM32通信协议-I2C
目录 一,IC2的协议规则 I2C总线是PHILIPS公司开发的两线式串行总线,I2C总线主要解决了单片机一对多通信的问题 两根通信线:SCL,SDA,同步,半双工通信,支持数据应答机制,支持总线挂载多设备。 …...
廉颇老矣尚能饭否,实践甘肃数据挖掘挑战赛作物与杂草的智能识别,基于YOLOv3全系列【tiny/l/spp】参数模型开发构建田间低头作物杂草智能化检测识别模型
一、背景 田间杂草的有效管理是现代农业生产中面临的重要挑战之一。杂草不仅竞争作物的养分、 水分和阳光,还可能成为害虫和病原体的寄主,从而降低农作物的产量和品质。因此,开发 高效、精确的杂草检测和管理系统对于提高农业生产效率、降低化…...
基于Django+Python的宾馆管理系统设计与实现
项目运行 需要先安装Python的相关依赖:pymysql,Django3.2.8,pillow 使用pip install 安装 第一步:创建数据库 第二步:执行SQL语句,.sql文件,运行该文件中的SQL语句 第三步:修改源…...
MySQL--mysql的安装
1.Linux上mysql的安装: Ubuntu下: (1)安装前首先切换到管理员身份:sudo su (2)然后执行命令:apt install mysql-server (注意:装的是服务器端,客户端自动就安装了) (3)执行过程中按y; 2.Mysql初始化配置 注意,一定是sudo su,必须是管理员才能进行Mysql的初始化设置; 初始化…...
qt 构建、执行qmake、运行、重新构建、清除
qt右键功能有 构建、执行qmake、运行、重新构建、清除,下面简单介绍一下各个模块的作用。 1. 执行qmake qmake是一个工具, 它根据pro文件生成makefile文件,而makefile文件中则定义编译与连接的规则。pro文件中定义了头文件,源文件…...
微软发布 Win11 22H2/23H2 十月可选更新KB5044380!
系统之家于10月23日发出最新报道,微软针对Win11 22H2和23H2用户,发布了10月可选更新KB5044380,用户安装后版本号升至22621.4391和22631.4391。本次更新开始推出屏幕键盘的新游戏板键盘布局,支持用户使用Xbox控制器在屏幕上移动和键…...
TensorFlow面试整理-TensorFlow 基础概念
在学习和准备 TensorFlow 时,了解基础概念是至关重要的。以下是 TensorFlow 的一些核心基础概念: 1. Tensor (张量) ● 定义:张量是 TensorFlow 中的核心数据结构。它是一个多维数组,可以表示标量、向量、矩阵以及更高维的数组。张量在数学上与矩阵非常相似,但可以具有任意…...
Java实现HTTP代理的技巧与方法
在互联网时代,代理IP已经成为了网络访问中不可或缺的一部分。无论是为了保护隐私,还是为了访问特定的网络资源,代理IP都能发挥重要作用。那么,如何在Java中实现HTTP代理呢?本文将带您逐步了解这个过程。 什么是HTTP代…...
MFC图形函数学习02——绘制像素点函数
再次强调一下,我们这里学习的MFC图形函数,是指绘制二维图形的函数。一般来说,一个二维图形组成的基本要素是点、线、面以及相关的颜色。在本文中,将学习绘制像素点函数,与绘制像素点相关的其它基础知识也随着绘图函数学…...
Oracle CONNECT BY、PRIOR和START WITH关键字详解
Oracle CONNECT BY、PRIOR和START WITH关键字详解 1. 基本概念2. 数据示例3. SQL示例3.1. 查询所有员工及其上级3.2. 显示层次结构3.3. 查询特定员工的子级 4. 结论 在Oracle数据库中,CONNECT BY、PRIOR和START WITH关键字主要用于处理层次结构数据,例如…...
gateway 整合 spring security oauth2
微服务分布式认证授权方案 在分布式授权系统中,授权服务要独立成一个模块做统一授权,无论客户端是浏览器,app或者第三方,都会在授权服务中获取权限,并通过网关访问资源 OAuth2的四种授权模式 授权码模式 授权服务器将授…...
Unity3D学习FPS游戏(1)获取素材、快速了解三维模型素材(骨骼、网格、动画、Avatar、材质贴图)
前言:最近重拾Unity,准备做个3D的FPS小游戏,这里以官方FPS案例素材作为切入。 导入素材和素材理解 安装Unity新建项目新建文件夹和Scene如何去理解三维模型素材找到模型素材素材预制体结构骨骼和网格材质(Material)、…...
Eclipse Java 构建路径
Eclipse Java 构建路径 Eclipse 是一款广受欢迎的集成开发环境(IDE),特别适用于 Java 开发。在 Eclipse 中,构建路径(Build Path)是指编译器在编译项目时搜索类(.class)文件和源代码(.java)文件的路径。正确设置构建路径对于确保项目能够顺利编译和运行至关重要。 …...
FileLink跨网文件摆渡系统:重构跨网文件传输新时代
在数字化浪潮的推动下,企业对于数据的高效利用和安全管理提出了前所未有的要求。面对不同网络环境间的文件传输难题,传统方法往往显得力不从心,不仅效率低下,还存在极大的安全隐患。而FileLink跨网文件摆渡系统的出现,…...
macOS下QuickTime player+Blackhole录视频只录制系统声音
Blackhole是一个虚拟的音频驱动程序,免费的 安装方法: 方法1:通过homebrew安装 前提:你的系统中自己安装了homebrew,没有安装用方法2 系统终端执行下面的命令中的一个: brew install blackhole-2ch 或…...
Vscode + EIDE +CortexDebug 调试Stm32(记录)
{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0","configurations": [{"cwd": "${workspaceRoot…...
景乔网站建设/泰安百度推广代理
1、无法使用网络:Permission denied(maybe missing internet permission) 在AndroidMainifest.xml中增加允许使用网络选项(在</application>结束标签之后>): <uses-permission android:name&qu…...
网站建设亿码酷适合5/腾讯控股第三季度营收1401亿
论文译文:地址 1、阅读论文 Radford A, Metz L, Chintala S. Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks[J]. Computer Science, 2015. 2、翻译论文 摘要 近年来,使用卷积神经网络的监督学习被…...
wordpress 重写 函数/百度灰色关键词排名
运动损伤按损伤形成时间分()(由于各种原因形成的突发损伤,指一瞬间遭受直接暴,的损伤),慢性骑自行车的人上坡前往往要加紧蹬几下,这样的目的是:[ ]A.增大车的动能 B.增大车的势能 C…...
瑞金市网站建设/百度手机助手下载2022官方正版
点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达99套Java企业级实战项目4000G架构师资料作者:乐傻驴链接:jianshu.com/u/d5950a6af4cd概述对于 Spring和 SpringBoot到底有什么区别,我听到了很多答案&#x…...
网站批量上传服务器/网络推广方案
2015年,马云带领阿里巴巴集团的高管拜访了位于芬兰游戏公司supercell这家公司开发出了《部落战争》、《皇室战争》、《海岛奇兵》等App端知名游戏图片来自多玩BBS社区但是,这么知名的游戏公司开发团队当时却不足7人!整个团队好像cell一样&…...
用vs2013做网站/南宁seo推广外包
Google近期宣布针对Google Cloud API的.Net支持。这包括C#绑定和PowerShell cmdlet。还有一个Visual Studio扩展,它允许在Google Compute Engine上浏览Google Cloud 资源和部署Asp.Net 应用。\\针对Google Cloud API的C#绑定\\该C#绑定提供对以下Google Cloud服务的…...