计算机网络 第5章(运输层)

news2024/9/28 6:46:49

系列文章目录

计算机网络 第1章(概述)
计算机网络 第2章(物理层)
计算机网络 第3章(数据链路层)
计算机网络 第4章(网络层)
计算机网络 第5章(运输层)
计算机网络 第6章(应用层)


文章目录

  • 系列文章目录
  • 1. 概述
    • 1.1 概念
    • 1.2 总结
  • 2. 运输层端口号、复用与分用的概念
    • 2.1 为什么用端口号
    • 2.2 发送方的复用和接收方的分用
    • 2.3 TCP/IP体系的应用层常用协议所使用的运输层熟知端口号
    • 2.4 运输层传输流程
  • 3. UDP和TCP的对比
    • 3.1 概念
    • 3.2 用户数据报协议UDP(User Datagram Protocol)
    • 3.3 传输控制协议TCP(Transmission Control Protocol)
    • 3.4 总结
  • 4. TCP的流量控制
    • 4.1 概念
    • 4.2 总结
  • 5. TCP的拥塞控制
    • 5.1 概念
    • 5.2 拥塞控制的算法
      • 5.2.1 慢开始和拥塞避免
        • 5.2.1.1 慢开始(slow-start)
        • 5.2.1.2 拥塞避免(congestion avoidance)
        • 5.2.1.3 两个算法完整示意图
      • 5.2.2 快重传和快恢复
        • 5.2.2.1 快重传(fast retrasmit)
        • 5.2.2.2 快恢复(fast recovery)
        • 5.2.2.3 改进后的整体算法的示意图
  • 6. TCP超时重传时间的选择
  • 7. TCP可靠传输的实现
  • 8. TCP的运输连接管理
    • 8.1 概念
    • 8.2 TCP的连接建立
      • 8.2.1 TCP的连接建立要解决以下三个问题
      • 8.2.2 TCP使用“三报文握手”建立连接
      • 8.2.3 总结
    • 8.3 TCP的连接释放
      • 8.3.1 TCP通过“四报文挥手”来释放连接
      • 8.3.2 TCP保活计时器的作用
  • 9. TCP报文段的首部格式


1. 概述

1.1 概念

进程之间的通信

在这里插入图片描述

  • 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层
  • 当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到三层(到网络层)的功能。

在这里插入图片描述

进程之间通信流程

在这里插入图片描述

“逻辑通信”是指运输层之间的通信好像是沿水平方向传送数据,但事实上,这两条数据并没有一条水平方向的物理连接,要传送的数据是沿着图中上下多次的虚线方向传送的

进程Ap1与Ap4之间进行基于网络的通信,进程Ap2与Ap3之间进行基于网络的通信

在运输层使用不同的端口,来对应不同的应用进程

然后通过网络层及其下层来传输应用层报文

接收方的运输层通过不同的端口,将收到的应用层报文,交付给应用层中相应的应用进程

这里端口并不是指看得见、摸得着的物理端口,而是指用来区分不同应用进程的标识符

在这里插入图片描述

1.2 总结

在这里插入图片描述

在这里插入图片描述

2. 运输层端口号、复用与分用的概念

2.1 为什么用端口号

在这里插入图片描述

2.2 发送方的复用和接收方的分用

在这里插入图片描述

多个进程(这里一个端口表示一个进程) 利用一个运输层协议(或者称为运输层接口)发送数据称为 复用

多个进程(这里一个端口表示一个进程) 利用一个运输层协议(或者称为运输层接口)接收时叫做 分用

2.3 TCP/IP体系的应用层常用协议所使用的运输层熟知端口号

在这里插入图片描述

2.4 运输层传输流程

举例

在这里插入图片描述

在浏览器输入域名,回车浏览

然后用户PC中的DNS客户端进程会发送一个DNS查询请求报文

DNS查询请求报文需要使用运输层的UDP协议

首部中的源端口字段的值,在短暂端口号49151~65535中挑选一个未被占用的,用来表示DNS客户端进程

首部中的目的端口字段的值:53,是DNS服务器端进程所使用的熟知端口号

在这里插入图片描述

之后,将UDP用户数据报封装在IP数据报中,通过以太网发送给DNS服务器

在这里插入图片描述

DNS服务器收到该IP数据报后,从中解封出UDP用户数据报

UDP首部中的目的端口号为53,这表明应将该UDP用户数据报的数据载荷部分,也就是DNS查询请求报文,交付给本服务器中的DNS服务器端进程

DNS服务器端进程解析DNS查询请求报文的内容,然后按其要求查找对应的IP地址

之后,会给用户PC发送DNS响应报文,DNS响应报文需要使用运输层的UDP协议封装成UDP用户数据报

其首部中的源端口字段的值设置为熟知端口号53,表明这是DNS服务器端进程所发送的UDP用户数据报,目的端口的值设置为49152,这是之前用户PC中发送DNS查询请求报文的DNS客户端进程所使用的短暂端口号

在这里插入图片描述

将UDP用户数据报封装在IP数据报中,通过以太网发送给用户PC

在这里插入图片描述

用户PC收到该数据报后,从中解封出UDP用户数据报

UDP首部中的目的端口号为49152,这表明应将该UDP用户数据报的数据载荷部分,也就是DNS响应报文,交付给用户PC中的DNS客户端进程

DNS客户端进程解析DNS响应报文的内容,就可知道自己之前所请求的Web服务器的域名对应的IP地址

现在用户PC中的HTTP客户端进程可以向Web服务器发送HTTP请求报文(和DNS发送和接收流程差不多)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3. UDP和TCP的对比

3.1 概念

  • UDP 和 TCP 是TCP/IP体系结构运输层中的两个重要协议
  • 当运输层采用面向连接的 TCP 协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道
  • 当运输层采用无连接的 UDP 协议时,这种逻辑通信信道是一条不可靠信道

可靠信道与不可靠信道

在这里插入图片描述

  • 两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元 TPDU (Transport Protocol Data Unit)。
  • TCP 传送的数据单位协议是 TCP 报文段(segment)。
  • UDP 传送的数据单位协议是 UDP 报文用户数据报

在这里插入图片描述

UDP的通信是无连接的,不需要套接字(Socket)

TCP是面向连接的,TCP之间的通信必须要在两个套接字(Socket)之间建立连接

3.2 用户数据报协议UDP(User Datagram Protocol)

可以发送广播

在这里插入图片描述

可以向某个多播组发送多播

在这里插入图片描述

还可以发送单播

在这里插入图片描述

UDP 支持单播、多播以及广播

换句话说,UDP支持一对一,一对多,以及一对全的通信

运输过程:

在这里插入图片描述

UDP对应用进程交下来的报文既不合并也不拆分,而是保留这些报文的边界

换句话说,UDP是面向应用报文的

UDP向上层提供无连接不可靠传输服务

在这里插入图片描述

UDP结构

在这里插入图片描述

3.3 传输控制协议TCP(Transmission Control Protocol)

使用TCP协议的通信双方,在进行数据传输之前,必须使用“三报文握手”建立TCP连接

在这里插入图片描述

TCP连接建立成功后,通信双方之间就好像有一条可靠的通信信道,通信双方使用这条基于TCP连接的可靠信道进行通信

在这里插入图片描述

很显然,TCP仅支持单播,也就是一对一的通信

运输过程

在这里插入图片描述

发送方:

  • TCP会把应用进程交付下来的数据块看作是一连串无结构的字节流,TCP并不知道这些待传送的字节流的含义
  • 并将他们编号,并存储在自己发送缓存中
  • TCP会根据发送策略,提取一定量的字节构建TCP报文并发送

接收方:

  • 一方面从所接受到的TCP报文段中,取出数据载荷部分并存储在接收缓存中;一方面将接收缓存中的一些字节交付给应用进程
  • TCP不保证接收方应用进程所收到的数据块与发送方发送的数据块,具有对应大小的关系(例如,发送方应用进程交给发送方的TCP共10个数据块,但接收方的TCP可能只用了4个数据块,就把收到的字节流交付给了上层的应用进程,但接收方收到的字节流必须和发送方应用进程发出的字节流完全一样)
  • 接收方的应用进程必须有能力识别收到的字节流,把它还原成有意义的应用层数据

TCP是面向字节流的,这正是TCP实现可靠传输、流量控制、以及拥塞控制的基础

本图只画了一个方向的数据流,在实际网络中,基于TCP连接的两端,可以同时进行TCP报文段的发送和接收

TCP向上层提供面向连接的可靠传输服务

在这里插入图片描述

TCP结构

在这里插入图片描述

3.4 总结

在这里插入图片描述

4. TCP的流量控制

4.1 概念

在这里插入图片描述
举例

在这里插入图片描述

上图主机A现在可将发送缓存中序号1~200的字节数据全部删除,因为已经收到了主机B对它们的累计确认

在这里插入图片描述

上图主机A现在可将发送缓存中序号201~500的字节数据全部删除,因为已经收到了主机B对它们的累计确认

在这里插入图片描述

在这里插入图片描述

上图主机A现在可将发送缓存中序号501~600的字节数据全部删除,因为已经收到了主机B对它们的累计确认

在这里插入图片描述

在这里插入图片描述

上图如果零窗口探测报文在发送过程中如果丢失,还是能打破死锁局面

因为零窗口探测报文段也有重传计时器,重传计时器超时后,零窗口探测报文段会被重传

4.2 总结

在这里插入图片描述

5. TCP的拥塞控制

5.1 概念

在这里插入图片描述

网络拥塞往往是由许多因素引起的。例如:

  • 点缓存的容量太小;
  • 链路的容量不足;
  • 处理机处理的速率太慢;
  • 拥塞本身会进一步加剧拥塞;

拥塞控制的一般原理

  • 拥塞控制的前提:网络能够承受现有的网络负荷。
  • 实践证明,拥塞控制是很难设计的,因为它是一个动态问题
  • 分组的丢失是网络发生拥塞的征兆而不是原因。
  • 在许多情况下,甚至正是拥塞控制本身成为引起网络性能恶化、甚至发生死锁的原因。

开环控制和闭环控制

在这里插入图片描述

监测网络的拥塞

主要指标有:

  • 由于缺少缓存空间而被丢弃的分组的百分数;
  • 平均队列长度;
  • 超时重传的分组数;
  • 平均分组时延;
  • 分组时延的标准差,等等。

上述这些指标的上升都标志着拥塞的增长。

5.2 拥塞控制的算法

在这里插入图片描述

在这里插入图片描述

真正的发送窗口值 = Min (接收方窗口值,拥塞窗口值)

下图的实例横纵坐标的意思

传输轮次:

  • 发送方给接收方发送数据报文段后,接收方给发送方发发回相应的确认报文段
  • 一个传输轮次所经历的时间其实就是往返时间,往返时间并非是恒定的数值
  • 使用传输轮次是为了强调把拥塞窗口所允许发送的报文段都连续发送出去,并受到了对已发送的最后一个报文段的确认

拥塞窗口:

  • 它会随网络拥塞程度,以及所使用的拥塞控制算法动态变化

5.2.1 慢开始和拥塞避免

5.2.1.1 慢开始(slow-start)
  • 目的:用来确定网络的负载能力或拥塞程度。
  • 算法的思路:由小到大逐渐增大拥塞窗口数值。
  • 两个变量:

拥塞窗口(cwnd):初始拥塞窗口值:2 种设置方法。窗口值逐渐增大。
(1)1 至 2 个最大报文段 (旧标准)
(2)2 至 4 个最大报文段 (RFC 5681)

慢开始门限(ssthresh):防止拥塞窗口增长过大引起网络拥塞。

在这里插入图片描述

在这里插入图片描述

图中swnd是发送窗口

每经过一个传输轮次,拥塞窗口就加倍

窗口大小按指数增加,2的n-1次方

5.2.1.2 拥塞避免(congestion avoidance)
  • 思路:让拥塞窗口 cwnd 缓慢地增大,避免出现拥塞。
  • 每经过一个传输轮次,拥塞窗口 cwnd = cwnd + 1。
  • 使拥塞窗口 cwnd 按线性规律缓慢增长。
  • 在拥塞避免阶段,具有 “加法增大” (Additive Increase) 的特点。

在这里插入图片描述

如果在发送过程中出现部分报文段丢失,这必然会造成发送方对这些丢失报文段的超时重传

在这里插入图片描述

这个时候又回到了慢开始

在这里插入图片描述

在这里插入图片描述

5.2.1.3 两个算法完整示意图

在这里插入图片描述

5.2.2 快重传和快恢复

在这里插入图片描述

5.2.2.1 快重传(fast retrasmit)

在这里插入图片描述

5.2.2.2 快恢复(fast recovery)

在这里插入图片描述

5.2.2.3 改进后的整体算法的示意图

在这里插入图片描述

6. TCP超时重传时间的选择

在这里插入图片描述

如果超时重传时间RTO的值设置得比RTT0的值小很多,这会引起报文段不必要的重传,使网络负荷增大

在这里插入图片描述

如果超时重传时间RTO的值设置得远大于RTT0的值,这会使重传时间推迟的太长,使网络的空闲时间增大,降低传输效率

在这里插入图片描述

在这里插入图片描述

RFC6298建议使用下式计算超时重传时间RTO

在这里插入图片描述

往返时间RTT的测量比较复杂

在这里插入图片描述

在这里插入图片描述

TCP超时重传的计算

举例

在这里插入图片描述

总结

在这里插入图片描述

7. TCP可靠传输的实现

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

8. TCP的运输连接管理

8.1 概念

在这里插入图片描述

8.2 TCP的连接建立

  • TCP 建立连接的过程叫做握手
  • 握手需要在客户和服务器之间交换三个 TCP 报文段。称之为三报文握手
  • 采用三报文握手主要是为了防止已失效的连接请求报文段突然又传送到了,因而产生错误。

8.2.1 TCP的连接建立要解决以下三个问题

在这里插入图片描述

8.2.2 TCP使用“三报文握手”建立连接

  • TCP 连接的建立采用客户服务器方式
  • 主动发起连接建立的应用进程叫做TCP客户 (client)。
  • 被动等待连接建立的应用进程叫做TCP服务器 (server)。

“握手”需要在TCP客户端和服务器之间交换三个TCP报文段

过程

在这里插入图片描述

最初两端的TCP进程都处于关闭状态

在这里插入图片描述

一开始,TCP服务器进程首先创建传输控制块,用来存储TCP连接中的一些重要信息。例如TCP连接表、指向发送和接收缓存的指针、指向重传队列的指针,当前的发送和接收序号等

之后,就准备接受TCP客户端进程的连接请求

此时,TCP服务器进程就进入监听状态,等待TCP客户端进程的连接请求

TCP服务器进程是被动等待来自TCP客户端进程的连接请求,因此成为被动打开连接

在这里插入图片描述

TCP客户进程也是首先创建传输控制块

由于TCP连接建立是由TCP客户端主动发起的,因此称为主动打开连接

在这里插入图片描述

然后,在打算建立TCP连接时,向TCP服务器进程发送TCP连接请求报文段,并进入同步已发送状态

TCP连接请求报文段首部中

  • 同步位SYN被设置为1,表明这是一个TCP连接请求报文段
  • 序号字段seq被设置了一个初始值x,作为TCP客户端进程所选择的初始序号

请注意:TCP规定SYN被设置为1的报文段不能携带数据,但要消耗掉一个序号

在这里插入图片描述

TCP服务器进程收到TCP连接请求报文段后,如果同意建立连接,则向TCP客户进程发送TCP连接请求确认报文段,并进入同步已接收状态

TCP连接请求确认报文段首部中

  • 同步位SYN和确认为ACK都设置为1,表明这是一个TCP连接请求确认报文段
  • 序号字段seq被设置了一个初始值y,作为TCP服务器进程所选择的初始序号,
  • 确认号字段ack的值被设置成了x+1,这是对TCP客户进程所选择的初始序号(seq)的确认

请注意:这个报文段也不能携带数据,因为它是SYN被设置为1的报文段,但同样要消耗掉一个序号

在这里插入图片描述

TCP客户进程收到TCP连接请求确认报文段后,还要向TCP服务器进程发送一个普通的TCP确认报文段,并进入连接已连接状态

普通的TCP确认报文段首部中

  • 确认位ACK被设置为1,表明这是一个普通的TCP确认报文段
  • 序号字段seq被设置为x+1,这是因为TCP客户进程发送的第一个TCP报文段的序号为x,所以TCP客户进程发送的第二个报文段的序号为x+1
  • 确认号字段ack被设置为y+1,这是对TCP服务器进程所选择的初始序号的确认

请注意:TCP规定普通的TCP确认报文段可以携带数据,但如果不携带数据,则不消耗序号

在这里插入图片描述

TCP服务器进程收到该确认报文段后也进入连接已建立状态

现在,TCP双方都进入了连接已建立状态,它们可以基于已建立好的TCP连接,进行可靠的数据传输

为什么TCP客户进程最后还要发送一个普通的TCP确认报文段?能否使用“两报文握手”建立连接?

下图实例是“两报文握手”

在这里插入图片描述

为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误”,这种情况是:一端(client)A发出去的第一个连接请求报文并没有> 丢失,而是因为某些未知的原因在某个网络节点上发生滞留,导致延迟到连接释放以后的某个时间才到达另一端(server)B。本来这是一个> 早已失效的报文段,但是B收到此失效的报文之后,会误认为是A再次发出的一个新的连接请求,于是B端就向A又发出确认报文,表示同> 意建立连接。如果不采用“三次握手”,那么只要B端发出确认报文就会认为新的连接已经建立了,但是A端并没有发出建立连接的请求,因> 此不会去向B端发送数据,B端没有收到数据就会一直等待,这样B端就会白白浪费掉很多资源。

所以并不多余,这是为了防止已失效的连接请求报文段突然又传送到了TCP服务器,因而导致错误

8.2.3 总结

在这里插入图片描述

8.3 TCP的连接释放

  • TCP 连接释放过程比较复杂。
  • 数据传输结束后,通信的双方都可释放连接。
  • TCP 连接释放过程是四报文握手

8.3.1 TCP通过“四报文挥手”来释放连接

  • TCP 连接的建立采用客户服务器方式
  • 主动发起连接建立的应用进程叫做TCP客户 (client)。
  • 被动等待连接建立的应用进程叫做TCP服务器 (server)。
  • 任何一方都可以在数据传送结束后发出连接释放的通知

过程

在这里插入图片描述

现在TCP客户进程和TCP服务器进程都处于连接已建立状态

TCP客户进程的应用进程通知其主动关闭TCP连接

TCP客户进程会发送TCP连接释放报文段,并进入终止等待1状态

TCP连接释放报文段首部中

  • 终止位FIN和确认为ACK的值都被设置为1,表明这是一个TCP连接释放报文段,同时也对之前收到的报文段进行确认
  • 序号seq字段的值设置为u,它等于TCP客户进程之前已传送过的数据的最后一个字节的序号加1
  • 确认号ack字段的值设置为v,它等于TCP客户进程之前已收到的、数据的最后一个字节的序号加1

请注意:TCP规定终止位FIN等于1的报文段即使不携带数据,也要消耗掉一个序号

在这里插入图片描述

TCP服务器进程收到TCP连接释放报文段后,会发送一个普通的TCP确认报文段并进入关闭等待状态

普通的TCP确认报文段首部中

  • 确认位ACK的值被设置为1,表明这是一个普通的TCP确认报文段
  • 序号seq字段的值设置为v,它等于TCP服务器进程之前已传送过的数据的最后一个字节的序号加1,这也与之前收到的TCP连接释放报文段中的确认号匹配
  • 确认号ack字段的值设置为u+1,这是对TCP连接释放报文段的确认

在这里插入图片描述

  • TCP服务器进程应该通知高层应用进程,TCP客户进程要断开与自己的TCP连接
  • 此时,从TCP客户进程到TCP服务器进程这个方向的连接就释放了
  • 这时的TCP连接属于半关闭状态,也就是TCP客户进程已经没有数据要发送了
  • 但如果TCP服务器进程还有数据要发送,TCP客户进程仍要接收,也就是说从TCP服务器进程到TCP客户进程这个方向的连接并未关闭

在这里插入图片描述

  • TCP客户进程收到TCP确认报文段后就进入终止等待2状态,等待TCP服务器进程发出的TCP连接释放报文段
  • 若使用TCP服务器进程的应用进程已经没有数据要发送了,应用进程就通知其TCP服务器进程释放连接
  • 由于TCP连接释放是由TCP客户进程主动发起的,因此TCP服务器进程对TCP连接的释放称为被动关闭连接

在这里插入图片描述

TCP服务器进程发送TCP连接释放报文段并进入最后确认状态

该报文段首部中

  • 终止位FIN和确认位ACK的值都被设置为1,表明这是一个TCP连接释放报文段,同时也对之前收到的报文段进行确认
  • 序号seq字段的值为w,这是因为在半关闭状态下,TCP服务器进程可能又发送
  • 确认号ack字段的值为u+1,这是对之前收到的TCP连接释放报文段的重复确认

在这里插入图片描述

TCP客户进程收到TCP连接释放报文段后,必须针对该报文段发送普通的TCP确认报文段,之后进入时间等待状态

该报文段首部中

  • 确认为ACK的值被设置为1,表明这是一个普通的TCP确认报文段
  • 序号seq字段的值设置为u+1,这是因为TCP客户进程之前发送的TCP连接释放报文段虽然不携带数据,但要消耗掉一个序号
  • 确认号ack字段的值设置为w+1,这是对所收到的TCP连接释放报文段的确认

TCP服务器进程收到该报文段后就进入关闭状态,而TCP客户进程还要进过2MSL后才能进入关闭状态

TCP客户进程在发送完最后一个确认报文后,为什么不直接进入关闭状态?而是要进入时间等待状态?

在这里插入图片描述

因为时间等待状态以及处于该状态2MSL时长,可以确保TCP服务器进程可以收到最后一个TCP确认报文段而进入关闭状态

另外,TCP客户进程在发送完最后一个TCP确认报文段后,在经过2MSL时长,就可以使本次连接持续时间内所产生的所有报文段都从网络中消失,这样就可以使下一个新的TCP连接中,不会出现旧连接中的报文段

8.3.2 TCP保活计时器的作用

TCP双方已经建立了连接,后来,TCP客户进程所在的主机突然出现了故障

TCP服务器进程以后就不能再收到TCP客户进程发来的数据

因此,应当有措施使TCP服务器进程不要再白白等待下去

在这里插入图片描述

9. TCP报文段的首部格式

在这里插入图片描述

各字段的作用

源端口和目的端口

在这里插入图片描述

序号、确认号和确认标志位

在这里插入图片描述

数据偏移、保留、窗口和校验和

在这里插入图片描述

同步标志位、终止标志位、复位标志位、推送标志位、紧急标志位和紧急指针

在这里插入图片描述

选项和填充

在这里插入图片描述

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

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

相关文章

基于SpringBoot微信小程序的宠物美容预约系统设计与实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作✌ 主要内容:SpringBoot、Vue、SSM、HLM…

javaweb-js-vue基础知识(持续更新中)

sshu 双向数据绑定 ---------------------------------------------------------- 注意淘宝镜像最新网址发生变化,记得改,不是老师现在用的那个,不然会下载出错!!! 没有的:ctrlshiftp&#xff…

MySQL中的行锁、临建锁、间隙锁和表锁中的意向锁

文章目录 一、行锁Q:MySQL行锁有哪些使用场景Q:MySQL那些命令会导致发生行锁? 二、间隙锁(Gap Lock)间隙锁有哪些使用场景 三、临建锁(Next-Key Lock)四、表锁意向锁(Intention Lock…

【Spring 篇】MyBatis多表操作:编织数据的交响乐

欢迎来到MyBatis的多表操作世界!在这个充满交响乐的舞台上,我们将探索如何巧妙地编织多个数据表的数据,创造出一场旋律动听的数据交响曲。无需繁琐的SQL拼接,MyBatis让多表操作变得优雅而简单。让我们一起进入这个音乐殿堂&#x…

全卷积网络:革新图像分析

一、介绍 全卷积网络(FCN)的出现标志着计算机视觉领域的一个重要里程碑,特别是在涉及图像分析的任务中。本文深入探讨了 FCN 的概念、它们的架构、它们与传统卷积神经网络 (CNN) 的区别以及它们在各个领域的应用。 就像…

DualSPHysics源码结构解读,新手入门

DualSPHysics代码下载,进入官网:https://dual.sphysics.org/ 可以看到下载的地方有①Full package ②Source code,官方的解读是:如果你只是想运行案例的话就下载Full package,如果想要自己进行修改构建的话&#xff0…

【modelsim使用】数据显示设置

本文介绍modelsim使用中数据的显示设置,定点小数的显示、模拟波形的显示、数据截位查看、信号颜色和行高设置的操作。 文章目录 定点小数显示模拟波形的显示选取信号的某几位组合查看信号颜色与行高设置 定点小数显示 使用modelsim进行仿真时,涉及到定点…

ICSpector:一款功能强大的微软开源工业PLC安全取证框架

关于ICSpector ICSpector是一款功能强大的开源工业PLC安全取证框架,该工具由微软的研究人员负责开发和维护,可以帮助广大研究人员轻松分析工业PLC元数据和项目文件。 ICSpector提供了方便的方式来扫描PLC并识别ICS环境中的可疑痕迹,可以用于…

PHP - Yii2 异步队列

1. 前言使用场景 在 PHP Yii2 中,队列是一种特殊的数据结构,用于处理和管理后台任务。队列允许我们将耗时的任务(如发送电子邮件、push通知等)放入队列中,然后在后台异步执行。这样可以避免在处理大量请求时阻塞主应用…

HTML-表格

表格 1.基本结构 一个完整的表格由:表格标题、表格头部、表格主体、表格脚注,四部分组成 表格涉及到的标签: table:表格 caption:标题 thead:表格头部 tbody:表格主体 tfoot:表格注…

精酿啤酒的原料供应链:质量控制的重要性

对于啤酒的品质和口感,原料供应链的质量控制是重要的。特别是对于Fendi Club这样品质的啤酒,其原料供应链的管理更是重中之重。下面,我们将深入探讨Fendi Club啤酒如何对其原料供应链进行质量控制,以确保啤酒的品质和口感。 首先&…

Matlab|含风电-光伏-光热电站电力系统N-k安全优化调度模型

目录 1 主要内容 程序算例 程序模型 程序亮点 2 部分程序 3 部分结果 4 下载链接 1 主要内容 该程序参考《光热电站促进风电消纳的电力系统优化调度》光热电站模型,主要做的是考虑N-k安全约束的含义风电-光伏-光热电站的电力系统优化调度模型,从而…

OllyDbg动态调试检测方案

据游戏工委数据统计,2023年国内客户端游戏市场实际销售收入达662.83亿元,同比增长8%。PC端游戏实际收入已连续4年实现增长,主要得益于现有的游戏收入持续增长以及更多新品在PC端同步发行等因素。 2023 PC端游戏市场实际销售收入 随着PC端游戏…

【JS】事件汇总(方便查找)

文章目录 一、鼠标事件二、键盘事件2.1、按下键盘键(keydown)2.2、抬起键盘键(keyup)2.3、按下有效键(keypress)2.4、常见键盘码(了解) 三、焦点事件3.1、聚焦(focus&…

LC每日一题 2024/1/25 2859. 计算 K 置位下标对应元素的和

目录 题干 思路 代码 题干 思路 简单的位运算,就是寻找这个数对应的二进制中的1的个数是否与k相同,如果相同,就把这个数加到结果当中 可能涉及到的方法:Integer.bitCount() -->计算出二进制中包含的1的个数 代码 调用Java…

AI新工具(20240124) ComfyUI-InstantID-ComfyUI下的非官方InstantID实现;Lumiere是由谷歌时空扩散模型

ComfyUI-InstantID-ComfyUI下的非官方InstantID实现 ComfyUI InstantID是对InstantID的非官方实现,支持本地和huggingface hub模型,同时支持通用styler。它包括基础模型加载、InsightFace模型加载、ID ControlNet模型加载、Ipadapter_instantid模型加载…

银行数据仓库体系实践(6)--调度系统

调度系统是数据仓库的重要组成部分,也是每个银行或公司一个基础软件或服务,需要在全行或全公司层面进行规划,在全行层面统一调度工具和规范,由于数据类系统调度作业较多,交易类系统批量优先级高,为不互相影…

【算法分析与设计】二叉树的层序遍历

📝个人主页:五敷有你 🔥系列专栏:算法分析与设计 ⛺️稳中求进,晒太阳 题目 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点&#xf…

互联网泛人才流动报告:大厂扩张按下暂停键,这家公司逆势给出5w月薪招人

前段时间,脉脉高聘人才智库发布了《2023年互联网泛人才流动报告》,似乎佐证了23年是互联网真正的寒冬…… 卷生卷死!5个人竞争2个岗位 2023年,互联网行业的求职难度可以说是地狱级别,人才供需比持续上升,…

【vue】Vue2和Vue3中的代码逻辑复用对比(mixins、自定义hook):

文章目录 一、前言:二、mixins:【1】mixins是什么?【2】mixins如何使用?【3】mixins的一些特性:【4】mixins的缺点: 三、hook:【1】Vue3.x中的自定义hook函数是什么?【2】mixins和Co…