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

网络营销计划书范例/福州seo管理

网络营销计划书范例,福州seo管理,淘宝网页打不开是什么原因,武汉光谷做网站多少钱UDP 协议 UDP 协议端格式 16 位 UDP 长度, 表示整个数据报(UDP 首部UDP 数据)的最大长度如果校验和出错, 就会直接丢弃 UDP 的特点 UDP 传输的过程类似于寄信 . 无连接: 知道对端的 IP 和端口号就直接进行传输, 不需要建立连接不可靠: 没有确认机制, 没有重传机制; 如果因…

UDP 协议

UDP 协议端格式

  • 16 UDP 长度, 表示整个数据报(UDP 首部+UDP 数据)的最大长度
  • 如果校验和出错, 就会直接丢弃

UDP 的特点

UDP 传输的过程类似于寄信 .
  • 无连接: 知道对端的 IP 和端口号就直接进行传输, 不需要建立连接
  • 不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方,UDP 协议层也不会给应用层返回任何错误信息
  • 面向数据报: 不能够灵活的控制读写数据的次数和数量,即应用层交给 UDP 多长的报文,UDP原样发送,既不会拆分,也不会合并

UDP 的缓冲区

UDP 没有真正意义上的 发送缓冲区, 调用 sendto 会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作。UDP 具有接收缓冲区. 但是这个接收缓冲区不能保证收到的 UDP 报的顺序和发送 UDP 报的顺序一致; 如果缓冲区满了 , 再到达的 UDP 数据就会被丢弃。
UDP socket 既能读 , 也能写 , 这个概念叫做 全双工。

UDP 使用注意事项

我们注意到, UDP 协议首部中有一个 16 位的最大长度, 也就是说一个 UDP 能传输的数据最大长度是 64K( 包含 UDP 首部 )。然而 64K 在当今的互联网环境下 , 是一个非常小的数字, 如果我们需要传输的数据超过 64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装。

TCP 协议

TCP 协议段格式

  • 源端口(16位):标识发送方的端口号,范围是0到65535。
  • 目的端口(16位):标识接收方的端口号,范围是0到65535。
  • 序列号(32位):用于标识每个报文段,使目的主机可确认已收到指定报文段中的数据。在SYN标志未置位时,该字段指示了用户数据区中第一个字节的序号;在SYN标志置位时,该字段指示的是初始发送的序列号。
  • 确认号(32位):目的主机返回确认号,使源主机知道某个或几个报文段已被接收。如果ACK控制位被设置为1,则该字段有效。确认号等于顺序接收到的最后一个报文段的序号加1,这也是目的主机希望下次接收的报文段的序号值。
  • 数据偏移(首部长度,4位):指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,即首部长度。由于TCP报头的长度随TCP选项字段内容的不同而变化,因此报头中包含一个指定报头字段的字段。该字段以32比特为单位,所以报头长度一定是32比特的整数倍,有时需要在报头末尾补0。如果报头没有TCP选项字段,则报头长度值为5,表示报头一个有160比特,即20字节。
  • 保留位(6位):由跟在数据偏移字段后的6位构成,全部为0。
  • 控制位(6位)
    • URG(紧急比特,1位):当URG=1时,表明紧急指针字段有效,它告诉系统此报文段中有紧急数据,应尽快传送。
    • ACK(确认比特,1位):仅当ACK=1时确认号字段才有效,TCP规定,在连接建立后所有传达的报文段都必须把ACK置1。
    • PSH(推送比特,1位):当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。在这种情况下,TCP就可以使用推送(push)操作,这时,发送方TCP把PSH置1,并立即创建一个报文段发送出去,接收方收到PSH=1的报文段,就尽快地(即“推送”向前)交付给接收应用进程,而不再等到整个缓存都填满后再向上交付。
    • RST(复位比特,1位):用于复位相应的TCP连接。
    • SYN(同步比特,1位):仅在三次握手建立TCP连接时有效。当SYN=1而ACK=0时,表明这是一个连接请求报文段,对方若同意建立连接,则应在相应的报文段中使用SYN=1和ACK=1。因此,SYN置1就表示这是一个连接请求或连接接受报文。
    • FIN(终止比特,1位):用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已经发送完毕,并要求释放运输连接。
  • 窗口(16位):此字段用来进行流量控制,这个值是本机期望一次接收的字节数,即发送数据的窗口大小。告诉对方在不等待确认的情况下,可以发来多大的数据。这里表示的最大长度是2^16-1=65535,如需要使用更大的窗口大小,需要使用选项中的窗口扩大因子选项。指发送本报文段的一方的接收窗口(而不是自己的发送窗口)。
  • 校验和(16位):源主机和目的主机根据TCP报文段以及伪报头的内容计算校验和。在伪报头中存放着来自IP报头以及TCP报文段长度信息。与UDP一样,伪报头并不在网络中传输,并且在校验和中包含伪报头的目的是为了防止目的主机错误地接收存在路由的错误数据报。
  • 紧急指针(16位):仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据),即指出了紧急数据的末尾在报文中的位置,注意:即使窗口为零时也可发送紧急数据。如果URG为1,则紧急指针标志着紧急数据的结束。其值是紧急数据最后1字节的序号,表示报文段序号的偏移量。

首部可变部分

  • 选项字段:长度可变,最长可达40字节,当没有使用选项时,TCP首部长度是20字节。可能包括“窗口扩大因子”、“时间戳”等选项。
  • 填充字段:用于保证任选项为32bit的整数倍。

数据部分

  • 数据(长度可变):TCP首部结束之后的部分,其长度由IP包的长度减去IP头部长度和TCP头部长度得出。

确认应答(ACK)机制

  • 数据发送:发送方将数据分割成较小的单元,称为TCP段,并为每个段分配一个唯一的序列号,实际上一个字节的数据对应一个序列号。然后将这些TCP段发送给接收方,并启动一个定时器来跟踪每个已发送段的确认。

  • 数据接收与确认:接收方收到TCP段后,将按序将它们重新组装成完整的数据流。一旦接收方成功接收并处理了数据,它会发送一个确认(ACK)给发送方。确认中包含接收到的最高序列号,表示该序列号之前的所有数据都已正确接收。

  • 发送方处理确认:发送方在接收到确认后,会停止相应定时器,并继续发送下一个序列号的TCP段。如果发送方在定时器超时之前未收到确认,它将重新发送未确认的TCP段。

超时重传机制

主机 A 发送数据给 B 之后 , 可能因为网络拥堵等原因 , 数据无法到达主机 B,如果主机 A 在一个特定时间间隔内没有收到 B 发来的确认应答 , 就会进行重发。

但是 , 主机 A 未收到 B 发来的确认应答 , 也可能是因为 ACK 丢失了
因此主机 B 会收到很多重复数据 . 那么 TCP 协议需要能够识别出那些包是重复的包 , 并且把重复的丢弃掉。这时候我们可以利用前面提到的序列号, 就可以很容易做到去重的效果 .

连接管理机制

在正常情况下, TCP 要经过三次握手建立连接 , 四次挥手断开连接。
服务端状态转化 :
  1. [CLOSED -> LISTEN] 服务器端调用 listen 后进入 LISTEN 状态, 等待客户端连接
  2. [LISTEN -> SYN_RCVD] 一旦监听到连接请求(同步报文段), 就将该连接放入内核等待队列中, 并向客户端发送 SYN 确认报文
  3. [SYN_RCVD -> ESTABLISHED] 服务端一旦收到客户端的确认报文, 就进入 ESTABLISHED 状态, 可以进行读写数据了
  4. [ESTABLISHED -> CLOSE_WAIT] 当客户端主动关闭连接(调用 close), 服务器会收到结束报文段, 服务器返回确认报文段并进入 CLOSE_WAIT
  5. [CLOSE_WAIT -> LAST_ACK] 进入 CLOSE_WAIT 后说明服务器准备关闭连接(需要处理完之前的数据); 当服务器真正调用 close 关闭连接时, 会向客户端发送 FIN, 此时服务器进入 LAST_ACK 状态, 等待最后一个 ACK 到来(这个 ACK 是客户端确认收到了 FIN)
  6. [LAST_ACK -> CLOSED] 服务器收到了对 FIN ACK, 彻底关闭连接
客户端状态转化 :
  1. [CLOSED -> SYN_SENT] 客户端调用 connect, 发送同步报文段
  2. [SYN_SENT -> ESTABLISHED] connect 调用成功, 则进入 ESTABLISHED 状态, 开始读写数据
  3. [ESTABLISHED -> FIN_WAIT_1] 客户端主动调用 close , 向服务器发送结束报文段, 同时进入 FIN_WAIT_1
  4. [FIN_WAIT_1 -> FIN_WAIT_2] 客户端收到服务器对结束报文段的确认, 则进入 FIN_WAIT_2, 开始等待服务器的结束报文段
  5. [FIN_WAIT_2 -> TIME_WAIT] 客户端收到服务器发来的结束报文段, 进入TIME_WAIT, 并发出 LAST_ACK
  6. [TIME_WAIT -> CLOSED] 客户端要等待一个 2MSL(Max Segment Life, 报文最大生存时间)的时间, 才会进入 CLOSED 状态.
下图是 TCP 状态转换的一个汇总 :
  • 较粗的虚线表示服务端的状态变化情况
  • 较粗的实线表示客户端的状态变化情况
  • CLOSED 是一个假想的起始点, 不是真实状态

三次握手建立连接

  • 第一次握手:客户端向服务器发送一个带有SYN(Synchronize Sequence Numbers,同步序列号)标志位的TCP数据包,请求建立连接。这个数据包中包含了客户端的初始序列号(ISN,Initial Sequence Number)。
  • 第二次握手:服务器收到客户端的SYN请求后,会回复一个带有SYN和ACK(Acknowledgment,确认)标志位的数据包,称为SYN-ACK响应。这个响应中,服务器确认了客户端的SYN请求,并指定了服务器的初始序列号(ISN)。同时,服务器还会对客户端的初始序列号进行确认,即发送一个确认号(ACK号),表示已经收到客户端发送的序列号加1的数据。
  • 第三次握手:客户端收到服务器的SYN-ACK响应后,会发送一个带有ACK标志位的数据包,表示确认了服务器的响应。这个ACK数据包中,客户端会确认收到了服务器的SYN响应,并指定了下一个要发送的序列号(即服务器的初始序列号加1)。至此,三次握手完成,TCP连接建立成功,双方可以开始进行数据传输。

四次挥手断开连接

  • 第一次挥手:客户端发送一个FIN(Finish,结束)标志位的数据包,表示自己的数据已经发送完毕,请求关闭连接。此时客户端进入FIN_WAIT_1状态。
  • 第二次挥手:服务器收到客户端的FIN包后,会发送一个ACK包进行确认,表示已经收到客户端的关闭请求。此时服务器进入CLOSE_WAIT状态,客户端进入FIN_WAIT_2状态。
  • 第三次挥手:服务器在确认自己的数据也发送完毕后,会发送一个FIN包给客户端,表示自己也准备关闭连接。此时服务器进入LAST_ACK状态。
  • 第四次挥手:客户端收到服务器的FIN包后,会发送一个ACK包进行确认。此时客户端进入TIME_WAIT状态,经过一段时间(通常为2MSL,Maximum Segment Lifetime,最大报文段生存时间)后,客户端进入CLOSED状态,服务器在收到客户端的ACK包后也进入CLOSED状态,连接彻底关闭。

理解 TIME_WAIT 状态

现在做一个测试 , 首先启动 server, 然后启动 client, 然后用 Ctrl-C 使 server 终止 , 这时马上再运行 server, 结果是 :
这是因为 虽然 server 的应用程序终止了, TCP 协议层的连接并没有完全断开, 因此不能再次监听同样的 server 端口。 我们用 netstat 命令查看一下 :
TCP 协议规定 , 主动关闭连接的一方要处于 TIME_ WAIT 状态 , 等待两个MSL(maximum segment lifetime)的时间后才能回到 CLOSED 状态。我们使用 Ctrl-C 终止了 server, 所以 server 是主动关闭连接的一方 , 在 TIME_WAIT 期间仍然不能再次监听同样的 server 端口。MSL 在 RFC1122 中规定为两分钟 , 但是各操作系统的实现不同可以通过 cat /proc/sys/net/ipv4/tcp_fin_timeout 查看 msl 的值,  Centos7/Ubuntu  上默认配置的值是 60s。
对于为什么处于 TIME_ WAIT 状态的一方 ,需要等待两个MSL的时间后才能回到 CLOSED 状态。这是因为MSL 是 TCP 报文的最大生存时间 , 因此 TIME_WAIT 持续存在 2MSL 的话,就能保证在两个传输方向上的尚未被接收或迟到的报文段都已经消失(否则服务器立刻重启, 可能会收到来自上一个进程的迟到的数据 , 但是这种数据很可能是错误的),同时也是在理论上保证最后一个报文可靠到达(假设最后一个 ACK 丢失 , 那么服务器会再重发一个 FIN. 这时虽然客户端的进程不在了 , 但是 TCP 连接还在 , 仍然可以重发 LAST_ACK)

setsockopt()

要解决 TIME_WAIT 状态引起的 bind 失败的方法,我们可以使用 setsockopt 函数

int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen);

参数说明:

  • sock:将要被设置选项的套接字描述符。
  • level:选项所在的协议层,常见的取值有SOL_SOCKET(通用套接字选项)、IPPROTO_IP(IP选项)、IPPROTO_TCP(TCP选项)等,使用 SOL_SOCKET 即可。
  • optname:需要设置的选项名,如SO_BROADCAST、SO_REUSEADDR、TCP_NODELAY等,设置为 SO_REUSEADDR , 表示允许创建端口号相同但 IP 地址不同的多个 socket 描述符
  • optval:指向包含新选项值的缓冲区,根据选项名称的数据类型进行转换。
  • optlen:现选项的长度。

返回值:

  • 成功执行时,返回0。
  • 失败返回-1,errno被设为以下的某个值:
    • EBADF:sock不是有效的文件描述词。
    • EFAULT:optval指向的内存并非有效的进程空间。
    • EINVAL:在调用setsockopt()时,optlen无效。
    • ENOPROTOOPT:指定的协议层不能识别选项。
    • ENOTSOCK:sock描述的不是套接字。

使用如下:

int opt = 1;
setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));

滑动窗口

刚才我们讨论了确认应答策略, 对每一个发送的数据段, 都要给一个 ACK 确认应答。 收到 ACK 后再发送下一个数据段。 这样做有一个比较大的缺点, 就是性能较差, 尤其是数据往返的时间较长的时候。
既然这样一发一收的方式性能较低, 那么我们一次发送多条数据, 就可以大大的提高性能( 其实是将多个段的等待时间重叠在一起了 )。
窗口大小指的是无需等待确认应答而可以继续发送数据的最大值, 上图的窗口大小就是 4000 个字节 ( 四个段 )。
发送前四个段的时候, 不需要等待任何 ACK, 直接发送。收到第一个 ACK 后 , 滑动窗口向后移动 , 继续发送第五个段的数据, 依次类推。操作系统内核为了维护这个滑动窗口, 需要开辟 发送缓冲区 来记录当前还有哪些数据没有应答, 只有确认应答过的数据 , 才能从缓冲区删掉。窗口越大, 则网络的吞吐率就越高。
那么如果出现了丢包 , 如何进行重传 ? 这里分两种情况讨论
情况一 : 数据包已经抵达 , ACK 被丢了
这种情况下 , 部分 ACK 丢了并不要紧 , 因为可以通过后续的 ACK 进行确认
情况二 : 数据包就直接丢了
当某一段报文段丢失之后 , 发送端会一直收到 1001 这样的 ACK, 就像是在提醒发送端 " 我想要的是 1001" 一样。如果发送端主机连续三次收到了同样一个 "1001" 这样的应答 , 就会将对应的数据 1001 - 2000 重新发送。这个时候接收端收到了 1001 之后 , 再次返回的 ACK 就是 7001 ( 因为 2001 - 7000)接收端其实之前就已经收到了 , 被放到了接收端操作系统内核的 接收缓冲区 中。 这种机制被称为 " 高速重发控制 "( 也叫 " 快重传 ")。

流量控制

接收端处理数据的速度是有限的。 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送, 就会造成丢包, 继而引起丢包重传等等一系列连锁反应。因此 TCP 支持根据接收端的处理能力, 来决定发送端的发送速度, 这个机制就叫做 流量 控制。
接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 " 窗口大小 " 字段 , 通过 ACK 端通知发送端。接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端,发送端接受到这个窗口之后, 就会减慢自己的发送速度。如果接收端缓冲区满了, 就会将窗口置为 0, 这时发送方不再发送数据 , 但是需要定期发送一个窗口探测数据段, 使接收端把窗口大小告诉发送端。

拥塞控制

虽然 TCP 有了滑动窗口这个大杀器 , 能够高效可靠的发送大量的数据, 但是如果在刚开始阶段就发送大量的数据, 仍然可能引发问题。因为网络上有很多的计算机, 可能当前的网络状态就已经比较拥堵。 在不清楚当前网络状态下, 贸然发送大量的数据, 是很有可能引起雪上加霜的。TCP 引入 慢启动 机制, 先发少量的数据, 摸清当前的网络拥堵状态, 再决定按照多大的速度传输数据。
此处引入一个概念称为 拥塞窗口,发送开始的时候, 定义拥塞窗口大小为 1,每次收到一个 ACK 应答, 拥塞窗口加 1。每次发送数据包的时候,将拥塞窗口和接收端主机反馈的窗口大小做比较, 取较小的值作为实际发送的窗口。
像上面的拥塞窗口增长速度, 是指数级别的, " 慢启动 " 只是指初使时慢, 但是增长速度非常快。 为了不增长的那么快, 因此不能使拥塞窗口单纯的加倍引入一个叫做慢启动的阈值,当拥塞窗口超过这个阈值的时候, 不再按照指数方式增长 , 而是按照线性方式增长。
TCP 开始启动的时候 , 慢启动阈值等于窗口最大值,在每次超时重发的时候, 慢启动阈值会变成原来的一半 , 同时拥塞窗口置回 1。少量的丢包, 我们仅仅是触发超时重传; 大量的丢包 , 我们就认为网络拥塞。当 TCP 通信开始后 , 网络吞吐量会逐渐上升 ; 随着网络发生拥堵 , 吞吐量会立刻下降 ;
拥塞控制 , 归根结底是 TCP 协议想尽可能快的把数据传输给对方 , 但是又要避免给网络造成太大压力的折中方案。

延迟应答

如果接收数据的主机立刻返回 ACK 应答 , 这时候返回的窗口可能比较小。 假设接收端缓冲区为 1M. 一次收到了 500K 的数据 ; 如果立刻应答 , 返回的窗口就是 500K。但实际上可能处理端处理的速度很快, 10ms 之内就把 500K 数据从缓冲区消费掉了。 在这种情况下, 接收端处理还远没有达到自己的极限 , 即使窗口再放大一些 , 也能处理过来, 如果接收端稍微等一会再应答, 比如等待 200ms 再应答 , 那么这个时候返回的窗口大小就是 1M。
  • 数量限制: 每隔 N 个包就应答一次
  • 时间限制: 超过最大延迟时间就应答一次
具体的数量和超时时间, 依操作系统不同也有差异。 一般 N 2, 超时时间取 200ms。

TCP/UDP 对比

TCP与UDP的对比

对比维度TCPUDP
连接性面向连接,需要建立连接(3次握手)和断开连接(4次挥手)无连接,不需要建立连接
可靠性可靠交付,通过编号与确认、流量控制、计时器等机制保证数据无差错、不丢失、不重复且按序到达不可靠交付,尽最大努力交付,但不保证可靠
报文首部20字节,开销大8字节,开销小
吞吐量控制有拥塞控制、流量控制、重传机制、滑动窗口等机制
双工性点对点全双工通信支持一对一、一对多、多对一和多对多的交互通信
编程步骤复杂,需要监听、接收、连接等步骤简单,不需要监听和接收连接
使用场景对传输效率要求低,但准确率要求高的场景,如HTTP、FTP、SMTP等对传输效率要求高,但准确率要求低的场景,如DNS、NFS等

结论

  • TCP:适用于需要可靠传输的场景,如文件传输、电子邮件等。
  • UDP:适用于对实时性要求高,对可靠性要求不高的场景,如视频会议、直播等。

    相关文章:

    Linux 传输层协议 UDP 和 TCP

    UDP 协议 UDP 协议端格式 16 位 UDP 长度, 表示整个数据报(UDP 首部UDP 数据)的最大长度如果校验和出错, 就会直接丢弃 UDP 的特点 UDP 传输的过程类似于寄信 . 无连接: 知道对端的 IP 和端口号就直接进行传输, 不需要建立连接不可靠: 没有确认机制, 没有重传机制; 如果因…...

    springCload快速入门

    原作者:3. SpringCloud - 快速通关 前置知识: Java17及以上、MavenSpringBoot、SpringMVC、MyBatisLinux、Docker 1. 分布式基础 1.1. 微服务 微服务架构风格,就像是把一个单独的应用程序开发为一套小服务,每个小服务运行在自…...

    从 HTTP/1.1 到 HTTP/3:如何影响网页加载速度与性能

    一、前言 在最近使用Apipost时,突然注意到了http/1.1和http/2,如下图: 在我根深蒂固的记忆中,对于http的理解还停留在TCP协议、三次握手。由于我的好奇心,于是触发了我被动“开卷”,所以有了这篇文章&…...

    人工智能导论-第3章-知识点与学习笔记

    参考教材3.2节的内容,介绍什么是自然演绎推理;解释“肯定后件”与“否定前件”两类错误的演绎推理是什么意义,给出具体例子加以阐述。参考教材3.3节的内容,介绍什么是文字(literal);介绍什么是子…...

    游戏引擎 Unity - Unity 下载与安装

    Unity Unity 首次发布于 2005 年,属于 Unity Technologies Unity 使用的开发技术有:C# Unity 的适用平台:PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域:开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…...

    鼠标拖尾特效

    文章目录 鼠标拖尾特效一、引言二、实现原理1、监听鼠标移动事件2、生成拖尾元素3、控制元素生命周期 三、代码实现四、使用示例五、总结 鼠标拖尾特效 一、引言 鼠标拖尾特效是一种非常酷炫的前端交互效果,能够为网页增添独特的视觉体验。它通常通过JavaScript和C…...

    4 前置技术(下):git使用

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 前言...

    从零开始:用Qt开发一个功能强大的文本编辑器——WPS项目全解析

    文章目录 引言项目功能介绍1. **文件操作**2. **文本编辑功能**3. **撤销与重做**4. **剪切、复制与粘贴**5. **文本查找与替换**6. **打印功能**7. **打印预览**8. **设置字体颜色**9. **设置字号**10. **设置字体**11. **左对齐**12. **右对齐**13. **居中对齐**14. **两侧对…...

    解决国内服务器 npm install 卡住的问题

    在使用国内云服务器时,经常会遇到 npm install 命令执行卡住的情况。本文将分享一个典型案例以及常见的解决方案。 问题描述 在执行以下命令时: mkdir test-npm cd test-npm npm init -y npm install lodash --verbose安装过程会卡在这个状态&#xf…...

    DeepSeek 的含金量还在上升

    大家好啊,我是董董灿。 最近 DeepSeek 越来越火了。 网上有很多针对 DeepSeek 的推理测评,除此之外,也有很多人从技术的角度来探讨 DeepSeek 带给行业的影响。 比如今天就看到了一篇文章,探讨 DeepSeek 在使用 GPU 进行模型训练…...

    使用 Docker(Podman) 部署 MongoDB 数据库及使用详解

    在现代开发环境中,容器化技术(如 Docker 和 Podman)已成为部署和管理应用程序的标准方式。本文将详细介绍如何使用 Podman/Docker 部署 MongoDB 数据库,并确保其他应用程序容器能够通过 Docker 网络成功连接到 MongoDB。我们将逐步…...

    大模型训练(6):张量并行

    0 英文缩写 Pipeline Parallelism(PP)流水线并行Tensor Parallel(TP)张量并行Data Parallelism(DP)数据并行Distributed Data Parallelism(DDP)分布式数据并行Zero Redundancy Opti…...

    【力扣】238.除自身以外数组的乘积

    AC截图 题目 思路 前缀积 前缀积指的是对于一个给定的数组arr,构建一个新的数组prefixProduct,其中prefixProduct[i]表示原数组从第一个元素到第i个元素(包括i)的所有元素的乘积。形式化来说: prefixProduct[0] ar…...

    Nacos 的介绍和使用

    1. Nacos 的介绍和安装 与 Eureka 一样,Nacos 也提供服务注册和服务发现的功能,Nacos 还支持更多元数据的管理, 同时具备配置管理功能,功能更丰富。 1.1. windows 下的安装和启动方式 下载地址:Release 2.2.3 (May …...

    DeepSeek最新图像模型Janus-Pro论文阅读

    目录 论文总结 摘要 1. 引言 2. 方法 2.1 架构 2.2 优化的训练策略 2.4 模型扩展 3. 实验 3.1 实施细节 3.2 评估设置 3.3 与最新技术的比较 3.4 定性结果 4. 结论 论文总结 Janus-Pro是DeepSeek最新开源的图像理解生成模型,Janus-Pro在多模态理解和文…...

    【仿12306项目】基于SpringCloud,使用Sentinal对抢票业务进行限流

    文章目录 一. 常见的限流算法1. 静态窗口限流2. 动态窗口限流3. 漏桶限流4. 令牌桶限流5. 令牌大闸 二. Sentinal简介三. 代码演示0. 限流场景1. 引入依赖2. 定义资源3. 定义规则4. 启动测试 四. 使用Sentinel控台监控流量1. Sentinel控台1.8.6版本下载地址2. 文档说明&#xf…...

    【赵渝强老师】Spark RDD的依赖关系和任务阶段

    Spark RDD彼此之间会存在一定的依赖关系。依赖关系有两种不同的类型:窄依赖和宽依赖。 窄依赖:如果父RDD的每一个分区最多只被一个子RDD的分区使用,这样的依赖关系就是窄依赖;宽依赖:如果父RDD的每一个分区被多个子RD…...

    【B站保姆级视频教程:Jetson配置YOLOv11环境(六)PyTorchTorchvision安装】

    Jetson配置YOLOv11环境(6)PyTorch&Torchvision安装 文章目录 1. 安装PyTorch1.1安装依赖项1.2 下载torch wheel 安装包1.3 安装 2. 安装torchvisiion2.1 安装依赖2.2 编译安装torchvision2.2.1 Torchvisiion版本选择2.2.2 下载torchvisiion到Downloa…...

    Verilog语言学习总结

    Verilog语言学习! 目录 文章目录 前言 一、Verilog语言是什么? 1.1 Verilog简介 1.2 Verilog 和 C 的区别 1.3 Verilog 学习 二、Verilog基础知识 2.1 Verilog 的逻辑值 2.2 数字进制 2.3 Verilog标识符 2.4 Verilog 的数据类型 2.4.1 寄存器类型 2.4.2 …...

    【阅读笔记】LED显示屏非均匀度校正

    一、背景 发光二极管(LED)显示屏具有色彩鲜艳、图像清晰、亮度高、驱动电压低、功耗小、耐震动、价格低廉和使用寿命长等优势。LED显示图像的非均匀度是衡量LED显示屏显示质量的指标,非均匀度过高,会导致LED显示图像出现明暗不均…...

    【Java异步编程】CompletableFuture基础(1):创建不同线程的子任务、子任务链式调用与异常处理

    文章目录 1. 三种实现接口2. 链式调用:保证链的顺序性与异步性3. CompletableFuture创建CompletionStage子任务4. 处理异常a. 创建回调钩子b. 调用handle()方法统一处理异常和结果 5. 如何选择线程池:不同的业务选择不同的线程池 CompletableFuture是JDK…...

    ESXI虚拟机中部署docker会降低服务器性能

    在 8 核 16GB 的 ESXi 虚拟机中部署 Docker 的性能影响分析 在 ESXi 虚拟机中运行 Docker 容器时,性能影响主要来自以下几个方面: 虚拟化开销:ESXi 虚拟化层和 Docker 容器化层的叠加。资源竞争:虚拟机与容器之间对 CPU、内存、…...

    ASP.NET Core与配置系统的集成

    目录 配置系统 默认添加的配置提供者 加载命令行中的配置。 运行环境 读取方法 User Secrets 注意事项 Zack.AnyDBConfigProvider 案例 配置系统 默认添加的配置提供者 加载现有的IConfiguration。加载项目根目录下的appsettings.json。加载项目根目录下的appsettin…...

    中间件的概念及基本使用

    什么是中间件 中间件是ASP.NET Core的核心组件,MVC框架、响应缓存、身份验证、CORS、Swagger等都是内置中间件。 广义上来讲:Tomcat、WebLogic、Redis、IIS;狭义上来讲,ASP.NET Core中的中间件指ASP.NET Core中的一个组件。中间件…...

    SpringBoot 整合 Mybatis:注解版

    第一章&#xff1a;注解版 导入配置&#xff1a; <groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.1</version> </dependency> 步骤&#xff1a; 配置数据源见 Druid…...

    18.[前端开发]Day18-王者荣耀项目实战(一)

    01-06 项目实战 1 代码规范 2 CSS编写顺序 3 组件化开发思想 组件化开发思路 项目整体思路 – 各个击破 07_(掌握)王者荣耀-top-整体布局完成 完整代码 01_page_top1.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8…...

    Kafka 使用说明(kafka官方文档中文)

    文章来源:kafka -- 南京筱麦软件有限公司 第 1 步:获取 KAFKA 下载最新的 Kafka 版本并提取它: $ tar -xzf kafka_{{scalaVersion}}-{{fullDotVersion}}.tgz $ cd kafka_{{scalaVersion}}-{{fullDotVersion}} 第 2 步:启动 KAFKA 环境 注意:您的本地环境必须安装 Java 8+。…...

    基于多智能体强化学习的医疗AI中RAG系统程序架构优化研究

    一、引言 1.1 研究背景与意义 在数智化医疗飞速发展的当下,医疗人工智能(AI)已成为提升医疗服务质量、优化医疗流程以及推动医学研究进步的关键力量。医疗 AI 借助机器学习、深度学习等先进技术,能够处理和分析海量的医疗数据,从而辅助医生进行疾病诊断、制定治疗方案以…...

    Airflow:深入理解Apache Airflow Task

    Apache Airflow是一个开源工作流管理平台&#xff0c;支持以编程方式编写、调度和监控工作流。由于其灵活性、可扩展性和强大的社区支持&#xff0c;它已迅速成为编排复杂数据管道的首选工具。在这篇博文中&#xff0c;我们将深入研究Apache Airflow 中的任务概念&#xff0c;探…...

    multisim入门学习设计电路

    文章目录 1.软件的安装2.电路基本设计2.1二极管的简介2.2最终的设计效果2.3设计流程介绍 3.如何测试电路 1.软件的安装 我是参考的下面的这个文章&#xff0c;文章的链接放在下面&#xff0c;亲测是有效的&#xff0c;如果是小白的话&#xff0c;可以参考一下&#xff1a; 【…...