TCP/IP详解 卷1:协议 学习笔记 第二十一章 TCP的超时与重传

2023-11-04

TCP发送的数据和确认都可能丢失,TCP通过在发送时设置一个定时器来解决这种问题,当定时器溢出时还没收到确认,它就重传该数据。

对于每个连接,TCP管理4个不同定时器:
1.重传定时器用于希望收到另一端的确认。
2.坚持定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。
3.保活定时器可检测到一个空闲连接的另一端何时崩溃或重启。
4.2MSL定时器测量一个处于TIME_WAIT状态的时间。

观察TCP的重传机制,先建立一个连接,发送一些分组证明一切正常,然后拔掉电缆,发送更多数据,再观察TCP的行为:
在这里插入图片描述
以下是发送端tcpdump的结果:
在这里插入图片描述
前三行是TCP连接的正常建立过程,第四行是发送方发送的hello, world\n\r(12个字符+回车+换行),第五行是其确认。之后拔掉接收方以太网电缆,第六行表示and hi\n\r被发送,之后第7~18行是这个报文段的12次重传过程。第十九行是发送方TCP最终放弃并发送一个复位信号的过程。

检查连续重传之间的时间差,它们取整后分别为1、3、6、12、24、48和多个64秒。实际上第一次发送后设置的超时时间实际为1.5秒,但实际发送却是在1.0136秒后,原理就是定时器在固定时间溢出而等待却是随机的,即第一次发送后的超时时间为随机的0~1.5秒之间的某值,此后,该重传时间每次增加1倍直到64秒,这个倍乘关系称为指数退避。

拔掉接收方以太网电缆后,首次分组传输与复位信号传输之间的时间差约为9分钟,该时间在目前的TCP实现中是不可变的。但Solaris 2.2允许管理者改变这个时间,且其默认值为2分钟而非常用的9分钟。

一个给定连接的RTT由于路由器和网络流量的变化,这个值也是会不断变化的,TCP应该追踪这些变化并相应地改变其超时时间。

TCP必须测量发送一个特定序号的字节到收到包含此字节的确认之间的RTT,可用M表示所测量到的RTT,最初的TCP规范使用低通过滤器来更新一个被平滑的RTT估计器:
在这里插入图片描述
以上公式中,α是一个推荐值为0.9的平滑因子。每次新测量的时候,这个被平滑的RTT将得到更新,每个新估计的90%来自前一个估计,而10%取自新的测量。

RFC 793推荐的重传超时时间RTO(Retransmission TimeOut)的值应设为:
在这里插入图片描述
以上公式中,β是一个推荐值为2的时延离散因子。

[Jacobson 1988]分析指出在RTT变化范围很大时,以上方法无法跟上这个变化,从而引起不必要的重传,当网络已经处于饱和状态时,不必要的重传会增加网络的负载,对网络而言是在火上浇油。

除了被平滑的RTT估计器,需要做的还有跟踪RTT的方差,在往返时间变化起伏很大时,基于均值和方差来计算RTO比以上方法能提供更好的响应。以下是Jacobson描述的RTO计算公式:
在这里插入图片描述
以上公式中,M是测量到的RTT,A是被平滑的RTT,D是被平滑的均值偏差,Err是刚得到的测量结果与当前RTT估计器之差,增量g起平均作用,取为1/8,偏差的增益是h,取值为0.25,当RTT变化时,较大的偏差增益使RTO快速上升。

Jacobson指明了一种使用整数运算来计算这些公式的方法,并被许多实现所采用,这也是h、g、倍数4均是2的乘方的一个原因,这样计算只通过移位而不需要乘除即可完成。

假定一个分组被发送,超时发生时,该分组被重传,然后收到一个确认,这个ACK是针对第一个分组还是第二个分组是不知道的,这是重传多义性问题。[Karn and Partridge 1987]规定,当超时和重传发生时,不能更新RTT估计器,因为我们不知道ACK对应哪次传输,由于数据被重传,RTO已经会加上一个指数退避的时间,距离下一次传输会等待这个退避后的RTO时间。对于之后没有被重传的报文段而言,收到了确认后再次计算RTO。这称为Karn算法。

使用sock程序将32768字节的数据从主机slip发送到主机vangogh.cs.berkeley.edu上的丢弃服务:
在这里插入图片描述
该命令执行32个写1024字节的操作,由于以上连接的链路MTU为296字节,因此这些操作会产生128个报文段,每个报文段包含256字节的用户数据,整个传输过程的时间为45秒,以下是前5秒钟数据和确认的传输:
在这里插入图片描述
上图中左边显示计算了三次RTT,大括号表示对哪些报文段进行了计时,并不是所有报文段都被计时。

大多源于伯克利的TCP实现对每个连接同一时间只有一次RTT值的测量在进行,发送一个报文段时,如果给定连接已经在计算一个报文段的RTT值,则此次发送不进行RTT的测量。

每次调用500ms的TCP定时器例程时,才给计时器增加一次计数,这意味着,如果一个报文段的确认在它发送550ms后到达,则该报文段的往返时间将是1个滴答(500ms,往返时间内只调用了一次TCP定时器例程)或2个滴答(1000ms,往返时间内调用了两次TCP定时器例程)。

报文段中的起始序号会被记录下来,当收到一个包含这个序号的确认后,该定时器就被关闭,如果ACK到达时该数据没有被重传,则被平滑的RTT和被平滑的均值偏差基于这个新测量进行更新。

如上图,第一个RTT虽然tcpdump显示是1.061秒,但实际取的是1500ms,第二个RTT实际取的是500ms,第三个RTT实际取的是1000ms,实际RTT与时钟滴答计数之间的关系:
在这里插入图片描述
在上例中,128个报文段被传送,并收集了18个RTT采样,下图是测量的RTT(取自tcpdump的输出)和TCP为超时所使用的RTO,在下图中,x轴从0开始,表示传输报文段1的时刻,而不是传输第一个SYN的时刻:
在这里插入图片描述
在上图中,时间10、14、21处的间隔是由在这些时刻附近发生的重传引起的,Karn算法在除超时报文外的另一个报文段被发送和确认前阻止我们更新估计器。这个实现中,TCP计算的RTO总是500ms的倍数。

传输过程中有数据报文段丢失的情况:
在这里插入图片描述
报文段45丢失或损坏了,之后发送端连续发送了8个后续的256字节报文段,直到发送端接收到第3个对6657字节之前数据的ACK,才开始重新发送报文段45的内容,源于伯克利的TCP实现对收到的重复ACK进行计数,当收到第3个重复ACK时,就假定这个报文段已经丢失并重传这个报文段,这就是Jacobson的快速重传算法。

我们可以看到在重传后(报文段63),发送方继续正常地进行数据传输,TCP不需等待对方确认重传的报文段。

接收端收到正常数据(报文段43)后,接收TCP将255个字节交给用户进程,但下一个收到的报文段(报文段46)是失序的,数据的开始序号是6913而非6657,TCP保存这失序的256字节,并返回一个已成功接收数据的最大序号加1(6657)的ACK,后面收到的7个报文段也都是失序的,接收方TCP保存这些数据并产生重复ACK。当缺少的报文段到达时,接收方TCP在其缓存中保存着第6657~8960字节的数据, 并将这2304字节的数据交给用户进程,所有这些数据在报文段72中进行确认,此时ACK的通告窗口大小为5888(接收缓冲区大小8192减去已存到接收缓存中的数据大小2304),这是因为用户进程没有机会读取这些已准备好的2304字节数据。

慢启动算法是在一个连接上发起数据流的方法,有时我们会到达中间路由器的极限,此时分组被丢弃。拥塞避免算法是处理丢失分组的方法,该算法假定由于分组受到损坏引起的丢失是非常少的(远小于1%),因此分组丢失就意味着在源主机和目的主机之间的某处网络上发生了拥塞,有两种分组丢失的表现:发生超时和接收到重复的确认。

拥塞避免算法和慢启动算法是两个目的不同、独立的算法,但当拥塞发生时,我们希望降低分组进入网络的传输速率,于是可以调用慢启动来做到这一点,实际中这两个算法通常在一起实现。

拥塞避免算法和慢启动算法需要对每个连接维持两个变量:一个拥塞窗口cwnd和一个慢启动门限ssthresh,算法工作过程如下:
1.对一个给定连接,初始化cwnd为1个报文段,ssthresh为65535字节。
2.TCP输出例程的输出不能超过cwnd和接收方通告的窗口大小。拥塞避免是发送方使用的流量控制,而通告窗口是接收方进行的流量控制,前者是发送方感受到的网络拥塞的估计,后者与接收方在该连接上的可用缓存大小有关。
3.当拥塞发生时(超时或收到重复确认),ssthresh被设置为当前窗口大小的一半,但最少为2个报文段;如果是超时而不是收到重复确认,则cwnd被设置为1个报文段(这就是慢启动)。
4.当新的数据被对方确认时,就增加cwnd,但增加的方式依赖于我们在进行慢启动还是拥塞避免,如果cwnd小于等于ssthresh,则正在进行慢启动,否则正在进行拥塞避免。慢启动一直持续到拥塞发生时所处位置的一半才停止。

拥塞避免算法的增加方式是每次收到一个确认将cwnd增加1/cwnd,这是一种加性增长,我们希望在一个往返时间内最多为cwnd增加1个报文段(如果发送不需要时间,则我们一瞬间只能发cwnd个报文段,因此接收到一个报文段的ACK时,cwnd只增加1/cwnd个报文段长度),不管在这个RTT中收到了多少个ACK。而慢启动的增加方式是根据这个往返时间中所收到的确认的个数增加cwnd。

所有4.3 BSD和4.4 BSD都在拥塞避免中将增加值不正确地多增加1个报文段大小除以8,这是错误的,并在以后的版本中不再使用。
在这里插入图片描述
上图中,假设当cwnd为32个报文段时发生拥塞,于是设置ssthresh为16个报文段。

正如上图,术语慢启动并不完全正确,它只是采用了比引起拥塞更慢的分组传输速率。

在收到一个失序的报文段时,TCP需要产生一个重复的ACK,这个ACK不应被迟延,该ACK的目的在于让对方知道收到一个失序的报文段,并告诉对方自己希望收到的序号。

由于我们不知道一个重复的ACK是由一个丢失的报文段引起的,还是由于仅仅出现了几个报文段的重新排序,因此我们等待少量重复的ACK到来,假如只是一些报文段的重新排序,则可能只会产生1~2个重复的ACK,如果一连串收到3个或3个以上的重复ACK,就非常可能是一个报文段丢失了,于是我们就重传丢失的数据报文段,而无需等待超时定时器溢出,这就是快速重传算法,接下来执行拥塞避免算法(而非慢启动算法),结合起来就是快速恢复算法。

快速恢复算法中不使用慢启动算法的原因是,接收方只有收到另一个报文段时才会产生重复的ACK,这说明收发两端之间仍然有流动的数据,而我们不想突然减少数据流。

快速恢复算法通常按如下过程进行实现:
1.当收到第3个重复的ACK时,将ssthresh设置为当前拥塞窗口cwnd的一半,立即重传丢失的报文段,将cwnd设为ssthresh加上3个报文段大小。
2.每次收到另一个重复的ACK,cwnd增加1个报文段大小并发送1个分组(如果新的cwnd允许发送)。
3.当下一个确认新数据的ACK到达时,设置cwnd为ssthresh(第1步中设置的值),这个ACK应该是对丢失的分组和接收方收到的最新的数据之间的所有中间报文段的确认。之后使用拥塞避免算法。

快速重传算法最早出现在4.3 BSD Tahoe版本中,但它随后错误地使用了慢启动。快速恢复算法出现在4.3 Reno版本中。

cwnd开始时被初始化为1,单位为报文段长度,如果MSS为256字节,则cwnd被初始化为256字节。

以下是图21-2中,发送方首个SYN重传并接着发送了前7个数据报文段时cwnd和ssthresh的值(MSS为256字节):
在这里插入图片描述
当SYN的超时发生时,ssthresh被设为其最小取值(512字节,本例中表示2个报文段),为进入慢启动阶段,cwnd被置为1个报文段长度(还是256字节,没有改变)。

当收到SYN和ACK时,没有对ssthresh和cwnd做任何修改,因为新数据还没有被确认。

当ACK 257到达时,因为当前cwnd为256字节,小于等于值为512字节的ssthresh,因此仍然处于慢启动阶段,于是将cwnd增加一个报文段长度到512字节;当收到ACK 513时,因为当前cwnd为512字节,小于等于值为512字节的ssthresh,因此仍然处于慢启动阶段,于是将cwnd增加一个报文段长度到768字节。

当ACK 769到达时,不再处于慢启动状态,而是进入了拥塞避免状态,新的cwnd按以下方法计算,结果为885字节:
在这里插入图片描述
即:
在这里插入图片描述
cwnd实际以字节数而非报文段数来维护,因此这就是前面提到的增加1/cwnd,上图增加了1/3个报文段大小。上式中还增加了1/8报文段大小的错误项,正如之前所标注的那样。
在这里插入图片描述
在这里插入图片描述
如上图,当最初的2个重复ACK(报文段60和61)到达时,开始计数收到的重复ACK数量,而cwnd不变,当第三个ACK到达时,ssthresh被设为cwnd的一半(四舍五入到报文段大小的倍数),而cwnd被设为ssthresh加上所收到的重复的ACK数乘报文段大小(即1024+3*256=1792),然后立即发送重传数据。

之后又有5个重复ACK到达,每次cwnd增加1个报文段长度,最后一个新的ACK到达时,cwnd被设为ssthresh并进入正常的拥塞避免过程,在拥塞避免过程中,由于一次收到了多个报文段的累计ACK,且一个RTT内只增加一个报文段大小,因此cwnd被设为1280字节(进入拥塞避免时的cwnd为1024+一个报文段大小256=1280)。

在快速重传阶段,我们分别在收到报文段66、68、70中的重复ACK后才各发送一个新的数据报文段,而不是收到报文段64、65中的重复的ACK后就立即发送新数据,这是cwnd的取值与未被确认的数据大小比较的结果,报文段65到达前,cwnd为2048,但此时未被确认的数据有2304字节(报文段67发送的首数据序号8961-收到的重复确认6657=2304,9个报文段大小),因此不能发送任何数据,而当报文段65到达后,cwnd被设为2304,此时我们仍不能发送,而当报文段66到达时,cwnd等于2816,大于未被确认的2560字节,因此可以发送一个新的数据报文段。

较新的TCP实现中维护许多有关链路的值。当一个TCP连接关闭时,如果已经发送了足够多的数据,且目的节点的路由表项不是默认表项,则以下信息保存在路由表中备用:被平滑的RTT、被平滑的均值偏差和慢启动门限。足够多的数据指16个窗口的数据,这样可得到16个RTT采样,从而使被平滑的RTT过滤器能集中在正确结果的5%以内。

管理员可以用route命令设置给定路由的以下度量:被平滑的RTT、被平滑的均值偏差、慢启动门限、输出的带宽时延积、输入的带宽时延积。

基于伯克利的实现对ICMP差错的处理:
1.接收到源站抑制差错报文时(一个系统(路由器或主机)接收数据报的速度比其处理速度快时,可能产生这个差错,用可能是因为不要求必须发送此差错报文),将拥塞窗口cwnd置为1个报文段大小来发起慢启动,但慢启动门限不变。
2.接收到主机不可达或网络不可达时忽略,因为这些是短暂现象。这可能是由于中间路由器被关闭导致的,选路协议需要花费数分钟才能稳定到另一个替换路由。

早期的BSD实现在任何时候收到一个主机不可达或网络不可达的ICMP差错时会不正确地放弃连接。

当TCP超时并重传时,它不一定要重传相同的报文段,TCP允许重新分组而发送一个较大的报文段。如电缆拔掉后,报文段超时,之后接上电缆,可能会发送一个包含超时报文段的更大的报文段。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP/IP详解 卷1:协议 学习笔记 第二十一章 TCP的超时与重传 的相关文章

  • Metasploit安装及使用教程(非常详细)从零基础入门到精通,看完这一篇就够了。

    通过本篇文章 我们将会学习以下内容 1 在Windows上安装Metasploit 2 在Linux和MacOS上安装Metasploit 3 在Kali Linux中使用 Metasploit 4 升级Kali Linux 5 使用虚拟化
  • 成为一个黑客,就按照这个路线来!

    前几天一个同学在聊天中提到毕业后想要从事网络安全方向的工作 虽然他本身也是学计算机的 但是又怕心有余而力不足 因为 从事网络安全方面的工作向来起点都比较高 大学里少有开设这类课程的 在学校能够学到的知识比较有限 网上的关于这方面课程的质量又
  • 这些专利知识你知道吗?

    专利作为一种重要的知识产权保护形式 专利不仅成为了企业核心竞争力的重要组成部分 也成为了国家创新发展的重要支撑 专利是指国家专利主管机关授予发明创造申请人的一种专有权 这种专有权具有独占性 排他性和法律强制性 能够为持有者带来经济利益和竞争
  • 【信道估计】【MIMO】【FBMC】未来移动通信的滤波器组多载波调制方案(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 线程安全(中)--彻底搞懂synchronized(从偏向锁到重量级锁)

    接触过线程安全的同学想必都使用过synchronized这个关键字 在java同步代码快中 synchronized的使用方式无非有两个 通过对一个对象进行加锁来实现同步 如下面代码 synchronized lockObject 代码 对
  • 前端必备的 web 安全知识手记

    前言 安全这种东西就是不发生则已 一发生则惊人 作为前端 平时对这方面的知识没啥研究 最近了解了下 特此沉淀 文章内容包括以下几个典型的 web 安全知识点 XSS CSRF 点击劫持 SQL 注入和上传问题等 下文以小王代指攻击者 话不多
  • Python爬虫实战:IP代理池助你突破限制,高效采集数据

    当今互联网环境中 为了应对反爬虫 匿名访问或绕过某些地域限制等需求 IP代理池成为了一种常用的解决方案 IP代理池是一个包含多个可用代理IP地址的集合 可以通过该代理池随机选择可用IP地址来进行网络请求 IP代理池是一组可用的代理IP地址
  • 如何使用Imagewheel搭建一个简单的的私人图床无公网ip也能访问

    文章目录 1 前言 2 Imagewheel网站搭建 2 1 Imagewheel下载和安装 2 2 Imagewheel网页测试 2 3 cpolar的安装和注册 3 本地网页发布 3 1 Cpolar临时数据隧道
  • socket网络编程几大模型?看看CHAT是如何回复的?

    CHAT回复 网络编程中常见的有以下几种模型 1 阻塞I O模型 Blocking I O 传统的同步I O模型 一次只处理一个请求 2 非阻塞I O模型 Non blocking I O 应用程序轮询调用socket相关函数检查请求 不需
  • 基于java的物业管理系统设计与实现

    基于java的物业管理系统设计与实现 I 引言 A 研究背景和动机 物业管理系统是指对物业进行管理和服务的系统 该系统需要具备对物业信息 人员信息 财务信息等进行管理的能力 基于Java的物业管理系统设计与实现的研究背景和动机主要体现在以下
  • 国外拨号VPS指南:开启你的全球网络之旅

    在当今数字化时代 互联网已经成为了我们生活的一部分 而要在全球范围内畅通无阻地访问互联网 拥有一个可靠的国外拨号VPS是非常重要的 无论您是为了工作 学习还是娱乐 国外拨号VPS都可以为您提供更广泛的网络体验 本文将为您提供国外拨号VPS的
  • 计算机Java项目|基于SSM的微课学习系统

    作者主页 编程指南针 作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智
  • 短信系统搭建主要因素|网页短信平台开发源码

    短信系统搭建主要因素 网页短信平台开发源码 随着移动互联网的快速发展 短信系统已成为企业和个人进行信息传递的重要工具 建立一个高效可靠的短信系统对于企业来说非常重要 下面我们将介绍一些影响短信系统搭建的主要因素 1 平台选择 在搭建短信系统
  • 【GRNN-RBFNN-ILC算法】【轨迹跟踪】基于神经网络的迭代学习控制用于未知SISO非线性系统的轨迹跟踪(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 第1部分 2 2 第2部分
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • ESP10B 锁定连接器

    ESP10B 锁定连接器 ESP10B 电机新增内容包括双极型号标准 NEMA 尺寸 17 23 和 34 的步进电机现在包括输出扭矩范围从 61 盎司英寸到 1291 盎司英寸的双极型号 该电机配有带锁定连接器的尾缆 可轻松连接 每转可步
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作
  • 【学习分享】全志平台TWI子系统源码分析(1)从设备树到寄存器

    全志平台TWI子系统源码分析 1 从设备树到寄存器 前言 一 名词解释 二 从设备树入手看源码 1 TWI设备树 2 TWI源码位置 3 TWI总线相关寄存器 总结 前言 这次开坑主要是想把全志平台TWI子系统在源
  • 2023下半年软考「单独划线」合格标准公布

    中国计算机技术职业资格网发布了 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告 2023下半年软考单独划线地区合格标准各科目均为42分 01 官方通告 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告
  • 【安全】网络安全态势感知

    文章目录 一 态势感知简介 1 概念 2 形象举例 3 应具备的能力 二 为什么要态势感知 为什么网络安全态势感知很重要 三 态势感知系统的功能 四 如何评估态势感知的建设结果 五 什么是态势感知的三个层级 四 业界的态势感知产品 1 安全

随机推荐

  • Qt编写的遮罩层窗体

    PS 亲测有效 转 http www qtcn org bbs read htm tid 62394 html 最近接了个私活 需要在弹框的窗体背后遮罩原有主窗体 使得突出显示弹窗窗体 突然想到之前写过一个全局截屏的东东 原理一致 拿来改改
  • 转 C++输入输出文件流

    https blog csdn net qq 29924041 article details 74360461 C 学习 在C 中的文件输入和文件输出 简介 在C语言中 我们有fread和fwrite用于文件的输入和输出 在java中我们
  • Hands-On Hyperledger Fabric——Raft共识算法

    文章目录 分布式系统的Raft算法 选举阶段 选举规则与过程 选举的特殊情况 网络分区情况的处理 成员变更 数据同步阶段 日志与状态机 提交阶段的事务一致性问题 租约解决脑裂 总结 本文参考Raft算法实现动画 在fabric1 4 1的版
  • python爬虫之爬取微信公众号文章中的图片

    python爬虫之爬取微信公众号文章中的图片 实现的功能 需要用到的库 需要对html一些标签有一定的了解 代码设计思想 源代码 提示 实现的功能 输入想要爬取微信公众号文章的链接 爬取成功后会输出文件夹已经创建 代码创建位置在D test
  • H3C 三层交换机 设置俩vlan不能相互通讯,只能访问某个端口,且其中一个vlan不能上网...

    三层交换机 S5500与 路由器ER5200G2 相关配置 设定3个VLAN VLAN10 VLAN20 VLAN30 VLAN10与VLAN30相互互通 但是与VLAN20不通 项目需求三层交换机 创建三个VLAN vlan 10 192
  • matlab求系统稳定时k的范围,Matlab大作业

    一 通过举例说明运用MATLAB 判别控制系统稳定的所有方法 稳定是控制系统是否能进行工作的首要条件 一般来说 稳定性成为区分系统是否有用的标志 从实际应用的角度来看 可以认为只有稳定的系统才有用 而线性系统稳定的充分必要条件是 特征方程的
  • vscode配置远程ssh环境

    安装 Oracle VM VirtualBox 安装ubuntu ubuntu上安装ssh sever 百度搜索 ubuntu 18 04上安装ssh sever 58条消息 安装Ubuntu18 04并配置ssh服务 ubuntu18 0
  • WIN7 64位 VS2013下载

    下载网址 https msdn itellyou cn 复制到迅雷进行下载
  • SVG脚本编程介绍

    SVG脚本编程介绍 一 人气 13720 Svg脚本编程简介 一 本文主要介绍SVG的脚本编程 并分别给出放大 缩小 查询 鼠标事件等实例 一 SVG简介 SVG 全称为Scalable Vector Graphics 可伸缩矢量图形 它是
  • stm32之DS18B20

    DS18B20与stm32之间也是通过单总线进行数据的传输的 单总线协议在DHT11中已经介绍过 虽说这两者外设都是单总线 但时序电路却很不一样 DS18B20是更为麻烦一点的 DS18B20 举例 原码补码反码转换 原码反码补码转换 王小
  • 调试最长的一帧(第12天)

    先看看总体 流程走到了更新分页数据库 分页数据库的数据流图 先找上图的4个成员变量 上图中 左侧的图框表示数据的检索和输入 中间的白色图框表示用于数据存储的内存空间 而右边的图框表示存储数据的输出 此外 蓝绿色图框表示可以在DataBase
  • Qt版本企业级界面

    百度云盘 链接 https pan baidu com s 11b634VvKMIsGdahyBLpZ3Q 提取码 6666
  • 用python语言画一个动态爱心

    使用 Python 语言画一个动态爱心可以使用多种库 如 Matplotlib pygame 等 具体步骤如下 安装相应库 如 Matplotlib pipinstall matplotlib 使用 Matplotlib 的函数绘制爱心形状
  • LINUX开机和关机

    本节将主要讲解LINUX开机和关机 希望通过本书的内容能帮助读者建立正确的开机和关机概念 并且一睹LINUX的风彩 本章的主要内容 1 系统开机 2 系统关机 3 系统登录 4 系统注销 5 编辑器长青树 系统开机 开机信息相当重要 因为它
  • 信息系统开发与管理(自考)往届题目复习

    信息系统开发与管理 信息系统开发与管理 简答题 选择题解析 day2 名词解释 day3 day4 信息系统开发与管理 简答题 战略型管理信息系统 主要服务于高层管理者 主要目的是为了战略计划的制订和调整提供辅助决策的功能 简述管理信息系统
  • Java Thread.yield()方法具有什么功能呢?

    转自 Java Thread yield 方法具有什么功能呢 下文讲述Thread yield 方法的功能简介说明 如下所示 Thread yield 方法的功能 暂停当前线程 将当前线程重新放回CPU的调度中心 yield 方法注意事项
  • Leetcode 刷题笔记:哈希表篇

    基本概念 哈希表 根据关键码的值而直接进行访问的数据结构 那么哈希表能解决什么问题呢 一般哈希表都是用来快速判断一个元素是否出现集合里 哈希函数 哈希碰撞 一般哈希碰撞有两种解决方法 拉链法和线性探测法 常见的三种哈希结构 数组array
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • 计操理论课10 -- openEuler实验第九章内核虚拟化

    文章目录 任务一 搭建openEuler系统的qemu虚拟机 知识点 实验过程 任务二 搭建使用docker 知识点 1 Docker Engine 2 Docker对象 3 Dockerfile 知识点 删除容器 创建自定义镜像并以此为基
  • TCP/IP详解 卷1:协议 学习笔记 第二十一章 TCP的超时与重传

    TCP发送的数据和确认都可能丢失 TCP通过在发送时设置一个定时器来解决这种问题 当定时器溢出时还没收到确认 它就重传该数据 对于每个连接 TCP管理4个不同定时器 1 重传定时器用于希望收到另一端的确认 2 坚持定时器使窗口大小信息保持不