计算机网络-运输层
运输层
网络层在两个端系统之间的交付服务拓展到运行在两个不同端系统上的应用层进程之间的交付服务。
概述和运输层服务
运输层协议为运行在不同主机上的引用进程之间提供了逻辑通信功能。通过逻辑通信,运行在不同进程之间的主机好像直接连接一样。
运输层协议是在端系统而不是在服务器中实现的,在发送端,运输层将发送引用程序进程接受到的报文[运输层报文端]转换为运输层分组。实现的方法是将应用报文划分为小块,并且为每块加上一个运输层首部以生成运输层报文段。在发送端系统中,运输层将这些报文段传输给网络层,网络层对这些字段进行封装,变为网络层分组,并且向目的地发送。网络路由器作用域该数据报的网络层字段,不检查封装在该数据爆的运输层报文端的字段。在接收端,网络层从数据报中提取运输层报文段。并且为报文段向上交运输层。运输层处理接受到的报文段。使得该报文段中的数据为接受应用进程使用
运输层和网络层的关系
网络层为运输层提供最基本的数据传送服务,而运输层则在网络层的基础上提供更高层次的、更可靠的通信服务。
因特网运输层概述
应用开发人员在生成套接字的时候必须选定是udp还是tcp。将运输层分组称为报文段。也可以将tcp的运输层分组称为报文段,将udp的分组称为数据报文。将TCP和UDP的分组统称为报文段,而将数据报名称保留给网络层分组
多路复用和多路分解
网络层提供的主机到主机交付服务延伸到运行在主机上的应用程序提供进程到进程的交付服务。多路复用和多路分解服务是所有计算机网络都需要的
在目的主机,运输层从网络层接受报文段,运输层将这些报文中的数据交付给主机上运行的应用程序进程。
多路分解: 每个运输层报文段中具有几个字段,在接收端,运输层会检查这些字段,标识出接收套接字。从而将报文段定向到该套接字。将运输层报文段中的数据交付到正确的套接字的工作叫做多路分解
多路复用: 在源主机从不同的套接字中收集数据块,并为每个数据封装上首部信息,从而生成报文段。然后将报文段传递到网络层,这种工作叫做多路复用
在主机上的每个套接字能够分配一个端口号,当报文段到达主机时,运输层检查报文段中的目的端口号,并将其定向到相应的套接字。然后报文段中的数据通过套接字进入其所连接的进程。如我们将看到的那样,UDP大体上是这样做的
无连接的多路复用和多路分解
一个udp是由一个二元组全面标识的,该二元组包含一个目的的ip地址和一个目的的端口号,因此,如果两个udp报文段有不同源ip地址和源端口号,但是具有相同的目的ip地址和目的端口号,那么这两个报文段通过相同的目的套接字被定向到相同的目的进程。
面向连接的多路复用和多路分解
TCP套接字和 UDP套接字之间的一个细微差别是,TCP套接字是由一个四元组(源IP地址源端口号,目的IP地址,目的端口号)来标识的。当一个TCP报文段从网络到达一台主机时,该主机使用全部4个值来将报文段定向(分解)到相应的套接字。两个具有不同源里地址或源端口号的到达TCP报文段将被定向到两个不同的套接字,除非TCP报文段携带了初始创建连接的请求。
web服务器与TCP
连接套接字与进程之间并非总是有着一一对应的关系。事实上,当今的高性能Web服务器通常只使用一个进程,但是为每个新的客户连接创建一个具有新连接套接字的新线程。(线程可被看作是一个轻量级的子进程)
如果客户与服务器使用持续HTTP,则在整条连接持续期间,客户与服务器之间经由同一个服务器套接字交换HTTP报文。然而,如果客户与服务器使用非持续HTTP,则对每一对请求/响应都创建一个新的TCP连接并在随后关闭,因此对每一对请求/响应创建一个新的套接字并在随后关闭。
无连接运输:UDP
UDP报文段结构
应用层数据占用UDP报文段的数据字段。通过端口号可以使得目的主机将应用数据交给运行在目的端系统的主机中的相应进程。
长度字段指示了在udp报文段中的字节数。
UDP检验和
在数据接收端,接收端会按照相同的规则对接收端的udp数据包进行计算,得到一个新的校验和值,然后接收方会将这个新的校验和值和数据包中携带的原始校验和值进行比较,如果相等,则说明在传输过程中没有发生错误。
udp校验和只能提供一定程度的错误检测功能,并不能保证数据的可靠性传输。udp协议不存在重传机制。在使用udp协议进行数据传输的时候,需要应用层来负责处理可能出现的错误和丢包的数据包。
可靠数据连接运输原理
可靠数据传输的实现问题不仅在运输层中出现,也会在链路层以及应用层中出现。数据可以通过一条可靠的信道进行传输,借助于可靠信道,传输数据比特不会受到损坏或者丢失。
实现这种服务抽象的是可靠数据运输协议。
构造可靠数据传输协议
经完全可靠信道数据传输: rdt1.0
它主要基于完全可靠的信道进行数据传输。在这个协议中,主要有传输端和接收端两个部分。传输端等待上层传递数据,一旦收到数据,就将其打包成封包并发送出去。接收端在收到封包后,会将其解开,然后将数据发送到上层应用。
RDT1.0假设底层的信道是完全可靠的,即没有比特错误和分组丢失,数据分组会按照顺序到达。发送方和接收方都有各自的有限状态机(FSM)来控制数据的传输和接收。
经具有比特差错信造的可靠数据传输: rdt2.0
ARQ[自动重传请求协议]: 当传输介质不能保证数据的通信质量时(例如,在无线通信中),就需要采用错误控制方法来纠正传输过程中可能产生的错误。ARQ 就是一种广泛使用的错误控制方法。
差错检测: 使接收方检测到何时出现了比特差错
接收方反馈: 让接收方提供明确的反馈信息给发送方
重传: 接收方收到有差错的分组时,发送方将重传该分组文
停等协议: 发送方每发送一个数据分组后,就会进入等待状态,直到收到接收方的确认消息。如果收到 NAK 消息,发送方会重传上一个数据分组。该方法简单但效率较低,因为发送方在等待确认消息时不能发送新的数据分组。
考虑到 ACK 或 NAK 分组受损的可能性
经具有比特差错的丢包信道的可靠数据传输: rdt3.0
超时重传:为了处理数据丢失的情况,RDT3.0使用了超时重传机制。如果在预定的时间内没有收到确认信息,发送方会重新发送数据包。
状态机:RDT3.0的操作可以通过发送方和接收方的状态机来描述。状态机定义了在不同情况下应该采取的动作,比如发送数据、等待确认或者重传数据包。
流水线可靠数据传输协议
必须增加序号范围,因为每个输送中的分组(不计算重传的)必须有一个唯一的序号,而且也许有多个在输送中的未确认报文。
协议的发送方和接收方两端也许不得不缓存多个分组。发送方最低限度应当能缓冲那些已发送但没有确认的分组。接收方或许也需要缓存那些已正确接收的分组。
所需序号范围和对缓冲的要求取决于数据传输协议如何处理丢失、损坏及延时过大的分组。解决流水线的差错恢复有两种基本方法是:回退N步(Go-Back-N,CBN)和选择重传(SelectiveRepeat,SR)。
回退N步
将基序号(base)定义为最早未确认分组的序号,将下一个序号(nextseqmum)定义为最小的未使用序号(即下一个待发分组的序号),则可将序号范围分割成4段。在[0,base-1]段内的序号对应于已经发送并被确认的分组。[base,nextseqnum-1]段内对应已经发送但未被确认的分组。[nextseqnum,base+N-1]段内的序号能用于那些要被立即发送的分组,如果有数据来自上层的话。最后,大于或等于base+N的序号是不能使用的,直到当前流水线中未被确认的分组(特别是序号为base的分组)已得到确认为止。
随着协议的运行,该窗口在序号空间向前滑动。因此,N常被称为窗口长度, GBN协议也常被称为滑动窗口协议
数据必须按序交付,接收方可能缓存(保存)分组n+1 ,然后,在它收到并交付分组 n 后,再将该分组交付到上层 。 然
而,如果分组 n 丢失,则该分组及分组 n + 1 最终将在发送方根据GBN重传规则而被重传。接收方只需丢弃分组[n + 1]即可。这种方法的优点是接收缓存简单,即接收方不需要缓存任何失序分组。
选择重传
选择 重传 (SR) 协议通过让发送方仅重传那些它怀疑在接收方出错(即丢失或受损)的分组而避免了不必要的重传
面向连接的运输: TCP
TCP 连接
客户端先服务端发起请求,客户端通知客户运输层,和服务器上的一个进程建立一个连接。客户上的tcp开始向服务器上的tcp简历一条tcp连接,客户首先发送一个特殊的tcp报文作为响应,前两个文段不承载有效载荷,不包含应用层数据,而第三个报文可以承载有效载荷,在这两台主机之间发送了3个报文段,这种连接被称为三次握手
一旦建立起tcp连接,两个应用进程之间就可以相互发送数据了,客户进程向服务器进程发送数据的情况。客户进程通过套接字传递数据流,数据一旦通过该门,就被客户中运行的tcp控制了,tcp将这些数据引导到改连接的发送缓存中,发送缓存是发起三次握手期间设置的缓存之一,接下来tcp机会时不时从发送缓存中取出一块数据,将数据发送到网络层。TCP 可从缓存中取出并放入报文段中的数据数量受限于最大报文段长度
TCP为每块客户数据配上一个tcp首部,从而形成多个tcp报文段,这些报文段被下传道网络中,网络层将其封装在网络ip数据报中,然后这些ip数据报被发送到网络层,当tcp在另一端接收到一个报文段的时候,该报文段中的数据被放入到tcp连接的接收缓存中,
面向连接的运输: TCP
TCP 连接
客户端先服务端发起请求,客户端通知客户运输层,和服务器上的一个进程建立一个连接。客户上的tcp开始向服务器上的tcp简历一条tcp连接,客户首先发送一个特殊的tcp报文作为响应,前两个文段不承载有效载荷,不包含应用层数据,而第三个报文可以承载有效载荷,在这两台主机之间发送了3个报文段,这种连接被称为三次握手
一旦建立起tcp连接,两个应用进程之间就可以相互发送数据了,客户进程向服务器进程发送数据的情况。客户进程通过套接字传递数据流,数据一旦通过该门,就被客户中运行的tcp控制了,tcp将这些数据引导到改连接的发送缓存中,发送缓存是发起三次握手期间设置的缓存之一,接下来tcp机会时不时从发送缓存中取出一块数据,将数据发送到网络层。TCP 可从缓存中取出并放入报文段中的数据数量受限于最大报文段长度
TCP为每块客户数据配上一个tcp首部,从而形成多个tcp报文段,这些报文段被下传道网络中,网络层将其封装在网络ip数据报中,然后这些ip数据报被发送到网络层,当tcp在另一端接收到一个报文段的时候,该报文段中的数据被放入到tcp连接的接收缓存中,
TCP 报文段结构
tcp报文段是由首部字段和一个数据字段组成的,数据字段包含一块应用数据,mss限制了报文段数据字段的最大程度,当tcp发送一块大文件,tcp通常是该文件划分为长度为mss的若干块,交互式引用通常传递长度小于mss的数据块
32bit的序号字段和32bit的确认号字段,这些字段被tcp发送方和接受方用来实现可靠数据传输服务
16bit的接受窗口字段用于流量控制,字段用于只是接收方愿意接受的字节数量
4bit的首部长度字段指示了32bit的字为单位的tcp首部长度,由于tcp选项字段的原因,tcp首部的长度是可以变化的。通常选项字段为空,所以tcp的首部的典型长度为20字节。
可选与边长的选项字段,该字段用于发送方与接收方协商最大报文段长度时,或在高速网络环境下用作窗口调节因子的时候使用,首部字段中还定义了一个时间戳选项。
6bit的标志字段,ACKbit用于指示确认字段中的值是有效的,即该报文段中包括一个已被成功接收的报文段的确认。RST, SYN, FINbit是用于连接建立和拆除,在明确拥塞通告中使用了CWR和ECEbit,当PSH被闲置的时候,就只是接受方应该将数据交给上层,最后URGbit用来只是报文段中的发送端的上层实体职位紧急的数据,紧急数据存在并在给出指向紧急数据尾指针的时候,tcp必须通知接收端的上层实体
序号和确认号
tcp报文段首部中最重要的字段就是序号字段和确认号字段。
tcp把数据看场一个无结构的,有序的字节流,从tcp对序号的使用上,可以看出。序号是建立在传输的字节流之上,而不是建立在传输的报文段之上。一个报文段的序号是该报文段首字节的字节流编号。
tcp是全双公的,主机a在向主机b发送数据的同时,也可能会接受到来自主机b的数据,从主机b到达的报文段中都有一个序号用于b流向a的数据。主机a填充进报文段的确认好是主机a期望从主机b中受到的下一字节的序号 TCP累计确认是指当TCP接收方收到连续的有序数据包时,它只发送一个确认段(ACK)来确认收到的数据包。这个确认段中包含了已收到的连续数据包中最后一个数据包的序列号,表示序列号之前的所有数据包都已成功接收。
ack: 表示确认号,在tcp中,接收方使用确认好来告知发送方已经成功接收到了数据字节的序列号,表示已经成功接收到的数据的下一个字节的序列号。
seq: 表示序列号,在tcp中,每个tcp报文段都有一个序列号,用于表示在文件传输过程中的顺序, 发送方使用序列号来对报文段进行编号,接收方可以利用序列号来重新排列报文段。seq字段表示该tcp报文段中第一个字节的数据序列表示,也是在一个tcp连接中,该报文段所携带的数据的开始位置。
往返时间的估计与超时
tcp使用超时重传机制来处理报文段的丢失问题。
可靠的数据传输
因特网中的网络服务ip服务是不可靠的,ip不能保证数据报的交付,不能保证数据包的按序交付,不能保证数据包中的数据的完整性,对于ip服务,数据报中的bit可能会损坏。
tcp的可靠数据传输服务确保了一个进程从其接受缓存中读出的数据流是无损坏,无间隙,非冗余和按序的数据流。
超时间隔加倍
在定时器时限过期后超时间隔的长度,在这种修改中,每当超时事件发生的时候,tcp重传具有最小序号的时候还未被确认的报文段。每次tcp重传的时候都会将下一次的超时间间隔设置为先前值的两倍。
快速重传
冗余ack就是再次确认某个报文段的ack。因为发送方经常一个接一个的发送大量的报文段,如果一个报文段丢失,就可能引起去多一个接一个的冗余ack,如果tcp发送方接收到对相同数据的三个冗余ack,一旦受到三个冗余ack,tcp就进行快速重传。
TCP(传输控制协议)的选择确认(Selective Acknowledgment,简称SACK)是一种机制,用于提高TCP在丢失数据包时的传输效率。在传统的TCP确认机制中,接收方会针对每个收到的数据包发送一个确认包,但SACK允许接收方在单个确认包中同时确认多个不连续的数据包,并告知发送方哪些数据包已经丢失
流量控制
消除发送方使接收方缓存溢出的可能性。流量控制是一个速度匹配服务,即发送方的发送速率和接收方的应用程序的读取熟读相匹配,tcp发送方可能因为ip网络的拥塞而被遏制,这个称为拥塞控制。
tcp通过让发送方维护一个称为接受窗口的变量来提供流量控制。接收窗口用于给发送发一个指示–该接收方还有多少可用的缓存空间,因为tcp是全双工同行。在连接两端的发送方各自维护一个接收窗口。
rwnd:用来提供流量控制服务,主机b把当前的rwnd值放入报文段接收窗口中。通知主机a他当前的缓存窗口中还有多少可用的空间。
当主机B的接收窗口为0时,主机A继续发送只有一个字节数据的报文段。这些报文段将会被接收方确认。最终缓存将开始清空,并且确认报文里将包含一个非0的rwnd值
TCP连接管理
客户端的tcp首先向服务器端的tcp发送一个特殊的tcp报文段,该报文段中不包含应用层数据,报文段的首部中的一个标志位被置为1。客户端会随机选择一个初始序号,将该编号放置于起始的tcp syn报文段的序号字段中,该报文段会被封装在一个ip数据包中,发送给服务器。
一旦包含tcp syn报文段的ip数据报到达服务器主机,服务器会根据该数据包提取出tcp和syn报文段。为该tcp连接分配tcp缓存和变量,并且会向该客户tcp发送允许连接的报文段。这个允许连接的报文段不包含应用层数据,但是在报文段中包含3个重要的信息,syn被置为1。该允许连接的报文段成为isynack报文段。
在受到synack报文段之后,客户端也要给该连接分配缓存和变量,客户主机则向服务器发送另外一个报文段,最后这个报文段对服务器的允许连接的报文段来进行确认。
一旦完成了这三个不走,客户和服务器主机就都可以相互发送包括数据的报文段了,以后每一个报文段中,syn比特都被置为0
客户应用进程发出一个关闭连接命令。这会引起客户tcp向服务器进程发送一个特殊的tcp报文段,这个特殊的报文段让器首部的一个标志位FIN标志位被指为1,当服务器受到该报文之后,就像发送方返回一个确认报文段,然后服务器发送自己的终止报文段。其中的finbit被只为1,最后,客户对服务器的终止报文段进行确认。这个时候,两台主机上的所有资源就都被释放了。
tcp状态序列如下
拥塞控制原理
拥塞控制方法
端到端拥塞控制
在端到端拥塞控制方法中,网络层中没有为运输层控制提供显示支持,即使网络中存在拥塞,端系统也必须对网络行为的观察来推断。tcp采用端到端的方法解决拥塞控制,因为ip层不会向端系统中提供有关网络拥塞的反馈星系。tcp报文段的丢失(通过超时或冗余三次以上)被认为是网络拥塞的一个迹象。tcp会减少其窗口长度。
网络辅助的拥塞控制
在网络辅助的拥塞控制中,路由器向发送方提供关于网络中拥塞状态的显示反馈信息。这种反馈可以简单的用一个比特来显示链路中的拥塞清况
直接反馈信息可以有网络路由器发送给发送方,这种放肆的通知采用了一种阻塞分组的形式。路由器标记从发送方流向接收方的分组的某个字段来指示拥塞的产生,一旦收到一个标记的分组后,接受方就会像发送方通过该网络拥塞指示, 后一种形式的通知至少要经过一个完整的往返时间。
TCP拥塞控制
tcp必须采用端到端的拥塞控制而不是网络辅助的拥塞控制,因为ip层不会像端系统提供显式的网络拥塞反馈。
tcp采用的方法是让每个发送方根据所感知到的网络拥塞程度来限制其能想发送方流量的速率。如果一个tcp发送方感知到它到目的地之间的路劲没有什么拥塞,则tcp发送方增加其发送速率,如果发送方感知到该路径上有拥塞,则发送方就会降低发送速率。
tcp连接的每一段都是一个接受缓存,一个发送缓存和几个变量组成,运行在发送方的tcp拥塞控制机制跟踪一个额外的变量,即拥塞窗口,拥塞窗口表示为cwnd, 对一个tcp发送方能向网络中发送流量的速率进行了限制。
tcp发送方的"丢包事件": 要么出现超时,要么接收到来自接收方的三个冗余ack,当出现过度的拥塞的时候,在沿着这条路径上的一台或者多台路由器的缓存会溢出,引起一个数据包被丢弃。丢弃的数据报会引起发送方的丢包事件,要么超时或者收到3个ack,发送方就认为在发送方到接收方的路径上出现了拥塞的指示。
没有出现丢包事件的时候,tcp的发送方会受到以前从未确认的报文段的确认,tcp将受到的确认作为一切正常的指示,即在网络上传输的报文端端杯成功的交付给目的地,并且使用确认来增加窗口的长度。如果确认相当慢的速度到达,拥塞窗口会以相当慢点速率增加,如果确认以高速率到达,则该拥塞窗口将会更为高效的增加。因此tcp使用确认来出发增大它的拥塞窗口的长度,tcp被说成是自计时的。
一个丢失的报文段表意味着拥塞,因此当丢失报文段时应当降低 TCP 发送方的速率
一个确认报文段指示该网络正在向接收方交付发送方的报文段
带宽检测,给定的ack指示源到目的地路径无拥塞,而丢包事件指示路径拥塞,TCP 调节其传输速率的策略是增加其速率以响应到达的 ACK,除非出现丢包事件,此时才减小传输速率。
慢启动
在一条tcp连接开始的时候,cwnd通常被设置为一个mss的较小值,使得初始发送速率大约只有mss/rtt,对于tcp发送方来说,可用带宽可能比mss/rtt大得多,tcp发送方希望找到可用的带宽的数量,在慢启动状态,cwnd以一个mss开始并且当传输的报文段首次被确认就加一个mss,tcp向网络发送一个报文段并等待一个确认,当确认到达的时候,tcp发送方将拥塞窗口增加一个mss,并发出两个最大长度的报文段。这两个报文段被确认,则发送方对每个确认的报文段的拥塞窗口增加一个mss,这样下去,经过一个rtt,发送速率就翻倍。
如果存在由超市指示的丢包事件,tcp发送方将cwnd设置为1并重新开始慢启动的过程。将第二个状态设置为ssthresh(慢启动阈值),设置为cwnd/2,当检测到拥塞时候将ssthresh置为拥塞窗口值的一半,慢启动结束的第二种方法就是直接和ssthresh的值相关联,当cwnd的值等于ssthresh时,结束慢启动并且TCP转移到拥塞避免模式,当cwnd的值等于ssthresh时,结束慢启动并且TCP转移到拥塞避免模式。最后一种结束慢启动的方式: 如果检测到3个冗余ack,这个时候tcp就会执行一个快速重传,进入快速修复状态。
拥塞避免
一旦进入到拥塞避免状态,cwnd的值是上次拥塞的一半,tcp无法通过一个rtt在将cwnd的值翻倍,而是将cwnd的值增加一个mss
当丢包的事件出现,ssthresh的值被设置为cwnd的一半
丢包事件由一个三个冗余ack事件触发,在这种情况下,网络继续从发送方向交付报文段。tcp将cwnd的值减半,将三个冗余的ack加上3个mss,当受到3个冗余的ack,将ssthresh的值记录为cwnd的值的一半,进入快速修复状态
快速修复
在快速修复中,对于引起tcp进入快速修复状态的缺失报文段,对于受到的每个冗余的ack,cwnd的值增加一个mss,当对丢失报文的一个ack到达的时候,tcp在降低cwnd后进入拥塞避免状态,如果出现超时事件,快速修复在执行如同在慢启动和拥塞避免种相同的动作后,迁移到慢启动状态,当丢包事件出现的时候,cwnd的值被设置为一个mss,ssthresh的值被设置为cwnd的一半。
明确拥塞通告: 网络辅助拥塞控制
ECN标记:在IP数据报首部的服务类型字段中,使用两个比特位来表示ECN。这两个比特位由路由器在检测到拥塞时设置。
ECE和CWR标志:当接收方TCP收到带有ECN标记的数据包时,它会在后续的TCP ACK报文段中设置ECE比特,通知发送方TCP收到拥塞指示。发送方TCP在收到带有ECE的ACK后,会减半其拥塞窗口,并在下一个TCP报文段中设置CWR比特,以确认已经收到并处理了拥塞通知。
相关文章:

计算机网络-运输层
运输层 网络层在两个端系统之间的交付服务拓展到运行在两个不同端系统上的应用层进程之间的交付服务。 概述和运输层服务 运输层协议为运行在不同主机上的引用进程之间提供了逻辑通信功能。通过逻辑通信,运行在不同进程之间的主机好像直接连接一样。 运输层协议…...
网络通信(一)
网络编程 1.网络编程概念及相关名词 : 网络编程是计算机科学中一个重要的领域,它涉及到在不同计算机之间通过计算机网络进行通信和数据交换的程序设计。网络编程的核心是实现网络通信协议,这些协议定义了数据如何在网络上发送、接收和解释。…...

Linux环境中部署docker私有仓库Registry与远程访问详细流程
目录 前言 1. 部署Docker Registry 2. 本地测试推送镜像 3. Linux 安装cpolar 4. 配置Docker Registry公网访问地址 5. 公网远程推送Docker Registry 6. 固定Docker Registry公网地址 前言 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊…...
springboot项目使用validated参数校验框架
目录 前言 一、validated是什么? 二、使用步骤 1.引入maven依赖 2.使用实现 总结 前言 当谈到Spring的参数校验功能时,Validated注解无疑是一个重要的利器。它为我们提供了一种简单而又强大的方式来验证请求参数的合法性,保证了系统的稳…...
Azure Chatgpt demo部署——本地CentOS Docker
参见上一篇 http://t.csdnimg.cn/JcyfM 由于本地部署环境,与之前系统、网络、配置等环境不同,可能会遇见一些新的问题。 取2023年8月27日代码 git checkout -b a02796b063381c10ca9ca8189590b289a4d09129 由于本地情况的网络等环境不太一样,…...

MybatisPlus中自定义sql
背景 在开发过程中,可能会出现除了where条件,其它sql比较复杂,这时候就需要用到自定义sql了。 问题 如:用户状态为正常的数据年龄加一(所有用户年龄加一) 数据库中sql: UPDATE USER SET…...

HCIA--DHCP: 动态主机配置协议 (复习)
DHCP: 动态主机配置协议 -- 同一分发管理ip地址 基于UDP 67/68端口工作 网络中存在DHCP的服务器为需要自动生成ip地址的设备分配ip地址;--C/S模型 成为DHCP服务器的条件: 该设备存在接口或网卡连接到所要分发ip地址的广播域内该接口或网卡必须已经配置…...

MySQL select for update 加锁
背景 当多人操作同一个客户下账号的时候,希望顺序执行,某个时刻只有一个人在操作;当然可以通过引入redis这种中间件实现,但考虑到并发不会很多,所以不想再引入别的中间件。 表结构 create table jiankunking_accoun…...
MongoDB CRUD操作:投影Project详解
MongoDB CRUD操作:投影Project详解 文章目录 MongoDB CRUD操作:投影Project详解返回文档的全部字段返回指定的字段和_id字段不输出_id字段指定排除的字段返回内嵌文档中的指定字段禁止内嵌文档中的特定字段数组中内嵌文档的投影聚合表达式的投影字段 默认…...

redis 集群 底层原理以及实操
前言 上篇我们讲解了哨兵集群是怎么回事 也说了对应的leader选举raft算法 也说了对应的slave节点是怎么被leader提拔的 主要是比较优先级 比较同步偏移量 比较runid等等 今天我们再说说,其实哨兵也有很多缺点 虽然在master挂了之后能很快帮我们选举出新的master 但是对于单个ma…...

MVC架构中的servlet层重定向404小坑
servlet层中的UserLoginServlet.java package com.mhys.servlet; /*** ClassName: ${NAME}* Description:** Author 数开_11* Create 2024-05-29 20:32* Version 1.0*/import com.mhys.pojo.User; import com.mhys.service.UserService; import com.mhys.service.impl.UserSer…...
Java-RabbitMQ
RabbitMQ使用场景 1、跨系统异步通信 2、多应用之间解耦 3、应用内流程同步变异步 4、整体架构即采用消息驱动 5、应用内部解耦 RabbitMQ内部角色 角色简介生产者消息创建者消费者消息接收者代理RabbitMQ本身,用于存储转发消息,快递功能 RabbitMQ有哪…...

ABAP 在增强中COMMIT
前言 呃,又是很磨人的需求,正常情况下是不允许在增强中COMMIT的,会影响源程序本身的逻辑,但是这个需求就得这么干… 就是在交货单增强里面要再调用一次交货单BAPI,通过SO的交货单自动创建STO的交货单,如果…...

【UML用户指南】-02-UML的14种图
1、结构图 1、类图(class diagram) 展现了一组类、接口、协作和它们之间的关系。 在面向对象系统的建模中所建立的最常见的图就是类图。类图给出系统的静态设计视图。 包含主动类的类图给出系统的静态进程视图。构件图是类图的变体。 2、对象图&a…...

Linux驱动开发笔记(二) 基于字符设备驱动的I/O操作
文章目录 前言一、设备驱动的作用与本质1. 驱动的作用2. 有无操作系统的区别 二、内存管理单元MMU三、相关函数1. ioremap( )2. iounmap( )3. class_create( )4. class_destroy( ) 四、GPIO的基本知识1. GPIO的寄存器进行读写操作流程2. 引脚复用2. 定义GPIO寄存器物理地址 五、…...

三品软件:打造高效安全的图文档管理体系
在数字化转型的浪潮中,工程设计单位和企业设计部门面临着电子图文档管理的巨大挑战。随着电子图纸和文档数量的激增,如何有效组织、管理和共享这些资源,成为提升工作效率和保障信息安全的关键。本文将探讨当前图文档管理面临的问题࿰…...
N1 one-hot编码
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊# 前言 前言 onehot编码在机器学习比较常见,例如推荐系统中类别变量的处理等。 onehot 编码简介 One-hot编码(one-hot encoding&…...
数据库基础+增删查改初阶
数据库基础增删查改初阶 一。数据库操作 1.概念: 一个mysql服务器上有很多的表,把有关系的表放在一起就构成了一个数据集合,此时称为“数据库”,一个mysql1服务器上可以有多个这样的数据库 2.创建数据库: create …...
大模型日报2024-05-29
大模型日报 2024-05-29 大模型资讯 大型语言模型在金融预测中将超越人类分析师 摘要: 新研究表明,大型语言模型如ChatGPT在金融预测方面表现优于人类专家,为交易策略提供了宝贵的见解。这意味着未来这些模型将在金融领域发挥更重要的作用,提升…...
如何摆脱打工人任人宰割的命运
那就是为自己打工。 要有自己的思想,自己的目标,有自己的方向,坚决的非常自信的去执行它。 这样才是活出属于自己的人生,活出自己的精彩。 当然,这是在你已经比周围人优秀的情况下,至少是你觉得你比他们…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...