计算机网络(2)

【计算机网络基础】第2章 习题 将1路模拟信号分别编码为数字信号后,与另外7路数字信号采用同步TDM方式复用到一条通信线路上,1路模拟信号的频率变化范围为0-1kHz,每个采样点采用PCM式编码为4位的二进制数,另外7路数字信号的数据率均为7.2kb/s.复用线路需要的最小通信能力是([2009 年联考真题]在无噪声的情况下,若某通信链路的带宽为3kHz,采用4个相位,每个相位具有4种振幅的QAM调制技术,则该通信链路的最大数据传输率是(有一条无噪声的8kHz信道, 每个信号包含8级,每秒采样24k次,那么可以获得的最大传輸速率是( 阅读详情

2023.01.05

传输层

传输层服务和协议

  • 作用:传输层为应用程序提供逻辑通信(网络层实现主机的逻辑通信)
  • 位置:应用层与网络层之间,发送方将应用程序报文(message)分成传输层分组(segment)传递给网络层,接收方将数据段重组成报文传递到应用层。

    例: 两个家庭的14 (Ann)-14(Bill)个孩子传递信件
    应用层报文 = 信封上的字符
    进程 = 堂兄弟姐妹
    主机 = 家庭
    网络层协议 = 邮递员(邮政服务)
    传输层协议 = Ann 和 Bill

  • 协议:传输层协议运行在端系统中(不是在路由器中实现,路由器最多3层);

    TCP :面向字节流
    ①可靠数据传输(reliable data transfer):通过流量控制、序号、确认、定时器,确保TCP正确地、按序地将数据从发送进程交付给接收进程。使主机间不可靠的IP 变成 进程间可靠的数据传输服务。
    ②拥塞控制(congestion):防止任何一条TCP连接的流量过多
    ③流量控制( traffic control):可以调节TCP连接的发送端的发送速率
    ④建立连接
    UDP:面向数据报
    ①不可靠的无序交付、“尽力而为”的服务,不保证延迟、带宽
    ②只能提供数据交付和差错检查

2023.01.17

多路复用与多路分解

例如:1个HTTP进程,1个FTP进程,2个Telnet进程
在这里插入图片描述

  • 报文格式
    在这里插入图片描述
无连接的多路复用和多路分解
  • 端口号:
    ①创建UDP套接字时,可以由运输层自动地分配1024~65535的端口号,也可以自己指定特定的端口号(必须是唯一的可被使用的)
    ②若开发“周知协议”的服务器端,则必须分配对应的“周知协议”端口号。
  • UDP套接字:
    ①每个进程都有UDP套接字和对应的端口号
    ②由二元组标识——目的IP,目的端口号
  • UDP报文格式:源端口号、目的端口号、其他首部字段、应用数据

    问:为什么创建UDP套接字不需要源端口号,报文段又会自动添加源端口号?
    答:报文段中的源端口号用作“返回地址”的一部分,当主机B返回给主机A信息时,通过在A到B的源端口号作为B到A的目的端口号。

  • 工作原理:

    假定在主机A中的一个进程具有UDP端口号19157,它发送数据给主机B的另一个端口号为46428的进程。
    主机A的运输层创建一个segment,其中包括:源端口号(19157)、目的端口号(46428)、2个其他值、应用程序数据。
    运输层将该segment传递到网络层,网络层将添加头部信息封装程IP数据报,然后尽力交付给主机B。
    主机B接受该报文段,由接受主机运输层检查该报文段的目的端口号(46428),然后将该segment交给端口号46428标识的套接字。
    若接受方UDP发现接收到的目的端口号不正确(应用进程不存在),则直接丢弃该报文,并由ICMP发送“端口不可达”的反馈报文

面向连接的多路复用与多路分解
  • TCP套接字:
    ①由四元组标识——(源IP,源端口号,目的IP地址,目的端口号)
    ②与UDP区别:
    • UDP只需2个参数确定接受进程,TCP必须4个参数
    • 在UDP中:尽管两个UDP报文段有不同的源IP地址和/或源端口号,但是相同的目的IP和目的端口号,那么这两个UDP报文段将通过相同的目的套接字被定向到相同的目的进程。
    • 在TCP中:两个TCP报文段具有不同的源IP地址或源端口号,那么定向到两个不同的套节字。

      问:为什么要区分 不同源IP相同源端口号、相同源IP不同源端口号、不同源IP不同源端口号
      IP标识主机,端口号标识进程;所以当端口号号相同但IP不同,仍可以确定目的套接字

  • web服务器与TCP
    • 连接套接字和进程之间并不总是一 一的关系
    • 高性能web服务器只使用一个进程,但是创建多个线程处理多个连接套接字
    • 持久HTTP,在整条连接持续期间,客户与服务器之间由同一个服务器套接字交换HTTP报文。
    • 非持久连接,每一对请求/响应都创建一个新的TCP连接并在随后关闭,影响服务器性能 !

无连接UDP

  • 特点:
    ① 只提供数据交付和差错检测,几乎直接等同于IP数据报
    ② 丢失报文、无序报文,在传输层不可靠(但是UDP可能实现可靠传输,通过在应用程序自身中建立可靠性机制完成)
    ③ 无连接,每个UDP数据段的处理独立于其他数据段

  • 优点:
    ①关于发送什么数据以及何时发送的应用层的控制更为精细

    采用UDP时,只要进程传递数据给UDP,那么UDP立即打包成UDP报文段,并立即将其传递给网络层。
    而TCP建立连接、拥塞控制、出错重传等机制使得交付时间不可靠。
    所以在实时应用程序中,要求最小的发送速率,不希望过分的延迟数据报的传送,能适当容忍数据报的丢失,不适合TCP,采用UDP。

    ②无需建立连接

    TCP3次握手才能开始传输数据,UDP直接开始,所以不存在建立连接的时延。(DNS使用UDP减少时延,HTTP使用TCP保证文本数据的安全可靠)

    ③无连接状态

    TCP需要维护端系统的连接状态,包括接受和发送缓存、拥塞控制参数以及序号与确认号参数。UDP不维护状态信息,不跟踪参数,所以某些特定应用的服务器运行在UDP时,支持更多的活跃用户。

    ④分组首部开销小

    每个TCP报文段都有20字节的首部开销,而UDP只有8字节

  • 应用:远程文件服务器、流媒体、实时视频会议互联网电话、网络管理、DNS

  • UDP首部:源端口号(2B)、目的端口号(2B)、长度(2B)、检验和(2B),共8字节

    • 长度:整个UDP报文的字节数,单位为 B字节,
    • 检验和:接收方使用检验和判断传输是否有差错,但是无法实现纠正差错!
  • UDP检验和

    • 伪首部:不是真正的物理存在,不向下传送也不向上递交,只是方便计算校验和
      在这里插入图片描述 在这里插入图片描述

    • 发送方的UDP对报文段中伪首部、首部(初始化检验和字段全为0)、数据,按16bit求和(高位溢出,回卷加到最低位),最后取反码。得到16bit的检验和。

    • 接收方的UDP计算报文段中的伪首部、首部、数据(不足一字节的补0)全部按16bit求和,并取反码。若反码结果最后为0,则正确;反之,传输出错。

    • 端到端原则:某些功能必须基于端到端实现,与在较高级别提高这些功能相比,在较低级别实现可能时多余的或没有价值的。UDP通过校验和实现差错检测;而许多链路层协议通过奇偶校验、循环冗余校验等,但不能确保所有经过的链路都提供了差错检测协议且即使报文在链路正确传输,在路由器内存中也可能引入比特差错。

2023.01.18

可靠数据传输原理

  • 可靠数据传输协议(reliable data transfer protocol,rdt):数据通过一条可靠的信道进行传输,其下层协议可能不可靠(IP、链路)
  • 服务框架:
    在这里插入图片描述
  • 四个接口:
    在这里插入图片描述

构造可靠数据传输协议

完全可靠信道的可靠数据传输—rdt1.0
  • 特点:
    ①底层信道已经是完全可靠的,不存在bit错误,不存在分组丢失
    ②发送方和接收方的FSM独立,都只有一个状态,事件发生后状态回到自身
    ③由于可靠传输,接收方不需要发送反馈信息给接收方
  • 有限状态机(Finite-State Machine,FSM):
    • 箭头:指示协议从一个状态变迁到另一状态
    • 横线上方:触发事件,若无则用 ‘∧’
    • 横线下方:事件发生时所采取的动作,若无则用 ‘∧’
    • 初始状态:用虚线标识
  • rdt1.0有限状态机
    • 发送方:应用层的过程调用产生rdt_send(data),传输层发送方通过rdt_send(data)事件接受应用层的数据,然后使用make_pkt(data)动作产生一个包含该数据的分组(packet),最后使用udt_send(packet)动作将分组发送到信道。
    • 接收方:rdt通过rdt_rcv(packet)事件从底层信道接收到分组,然后使用extract(packet,data)动作从分组中取出数据,最后使用deliver_data(data)动作将数据向上递交给应用层。
      在这里插入图片描述
具有bit差错信道的可靠数据传输—rdt2.0
  • 特点:
    ①下层信道可能让传输分组中的bit受损,常出现在网络的物理部件中
    ②提供新机制处理bit差错:差错检测、接收方反馈、重传
  • 自动重传请求协议(Automatic Repeat reQuest,ARQ)
    ①基于重传机制的可靠数据传输协议,使用肯定确认、否定确认的控制报文
    ②差错检测:接收方需要检测何时出现了bit差错(UDP的校验和),并可能纠正分组中的bit差错;rdt2.0分组检验和字段
    ③接收方反馈:发送方想确定接收方的分组情况是否被正确接收,接收方使用“肯定确认(positive ackowledgment,ACK)”或“否定确认(negative ackowledement,NAK)”的分组,理论上这些分组只需1bit,0表示NAK,1表示ACK
    ④重传:发送方直到接收方的NAK后,重传该分组
  • rdt2.0有限状态机
    • 发送方:两个状态;左边状态表示rdt等待rdt_send(data)事件接受数据,然后用make_pkt(data,checksum)动作产生分组,最后通过udt_send(sndpkt)动作将分组交给底层。当状态不是“等待来自上层的调用”时,rdt不会接受新的数据,即此时不可能再发生rdt_send(data)。右边的状态存在两个事件;发送方若收到ACK分组的rdt_rcv(rcvpkt) && isACK(rcvpkt)事件,则返回到“等待来自上层的调用”的状态。若收到NAK分组rdt_rcv(rcvpkt) && isNAK(rcvpkt)事件,则重新产生udt_sed(sndpkt)动作,继续停留在该等待状态。

    • 接收方:单一状态;两种事件,若接收方接受分组并判断出无差错则触发rdt_rcv(rcvpkt) && corrupt(rcvpkt)事件,则产生udt_send(NAK)动作将NAK分组反馈给发送方;反之触发rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)事件,产生extract(rcvpkt,data)动作取出数据,然后产生deliver_data(data)动作将数据递交给应用层,最后使用udt_send(ACK)动作将ACK分组反馈。
      在这里插入图片描述

    • 停等协议:发送方将不会发送一块新数据,除非发送方确信接受已正确收到当前分组。

    • 问题:ACK/NAK分组也存在着受损

      • 第一种可能:以口述报文为例,如果发送方不理解接收方的“OK”或“请再说一遍”,发送方可能会问“你在说什么?”(引入一种新分组)。而接收方可能复述“你在说什么?”,也可能因为“你在说什么?”分组出错而不知道这个分组是原本口述内容的一部分还是一个要求接收方再次重复上次回答的请求。显然,问题将会越来越复杂
      • 第二种可能:增加足够的检验和bit,使得发送方可以检测差错,恢复差错!以便确认ACK/NAK分组
      • 第三种可能:只要发送方收到不清楚的ACK/NAK分组时,就重传当前数据分组,由此引入冗余分组

        duplicate packet,根本困难在于接收方不知道它上次发送的ACK/NAK分组是否被接收方正确接受。所以它无法事先知道收到的分组是新的还是一次重传!

    • 冗余分组解决方案:发送方在数据分组中添加一个新字段进行编号;接收方通过编号判断收到的分组是否是一次重传。若是重传,则接受方丢弃冗余分组。(几乎所有现有的数据传输协议中,包括TCP都采用了这种方法)

2023.01.19

具有数据分组序号的改进版2.0—rdt2.1
  • 特点:
    ①发送方为数据分组增加编号,1bit的(0/1)即可
    ②发送方必须检查是否收到混淆的ACK/NAK
    ③发送方和接收方的状态数量都加倍
    ④接受方必须检查是否收到重复报文
    ⑤接受方不知道它发出的上一个ACK/NAK是否被正确接收

  • rdt2.1发送方FSM:四个状态;

    • 首先rdt2.1处于状态“等待来自上层的调用 0”,触发rdt_send(data)事件,产生make_pkt(0,data,checksum)动作对数据分组,然后使用udt_send(sndpkt)动作将分组向下传递给网络层。状态转向 “等待ACK/NAK 0”
    • 发送方判断接收方的ACK/NAK分组。首先使用rdt_rcv(rcvpkt)动作接收分组并使用corrupt(rcvpkt)动作和isNAK(rcvpkt)动作判断(该数据是否损坏或为NAK分组两者之一),然后产生udt_send(sndpkt)动作重传发送方上次发出的数据分组。“状态保持不变”;若发送方根据notcorrupt(rcvpkt)动作和isACK(rcvpkt)动作判断出(数据没有损坏并且为ACK分组),则直接转向 “等待来自上层的调用 1”
    • 产生rdt_send(data)动作后,产生make_pkt(1,data,checksum)动作对数据分组,然后用udt_send(sndpkt)动作将分组向下传递给网络层。状态转向 “等待ACK/NAK 1”
    • 发送方判断接收方的ACK/NAK分组。首先使用rdt_rcv(rcvpkt)动作接受分组,使用corrupt(rcvpkt)动作和isNAK(rcvpkt)动作判断(该数据是否损坏或者是NAK分组两者之一),然后产生rdt_send(sndpkt)动作重传发送方上次发出的数据分组。“状态保持不变”;若发送方根据notcorrupt(rcvpkt)动作和isACK(rcvpkt)动作判断出(数据没有损坏并且为ACK分组),则直接转向 “等待来自上层的调用 0”。
      在这里插入图片描述
  • rdt2.1接收方FSM:两个状态;

    • 接收方处于 “等待来自下层的 0”状态,该状态处理三种事件。
      • 第一:使用rdt_rcv(rcvpkt)动作接收分组,再使用notcorrupt(rcvpkt)动作和has_seq0(rcvpkt)动作判断(分组0没损坏且为预期0号分组),则数据分组正确无误,使用extract(rcvpkt,data)动作取出数据,使用deliver_data(data)动作将数据递交给应用层,然后接收方还要使用make_pkt(ACK,chksum)动作打包一个ACK分组,最后使用udt_send(sndpkt)动作将ACK分组返回给发送方;状态转向 “等待来自下层的 1”
      • 第二:使用rdt_rcv(rcvpkt)动作接收分组,再使用corrupt(rcvpkt)动作判断(数据损坏),则产生make_pkt(NAK,chksum)动作打包一个NAK分组,最后用udt_send(sndpkt)动作将NAK分组返回给发送方;“状态保持不变”
      • 第三:使用rdt_rcv(rcvpkt)动作接收分组,再用not_corrupt(rcvpkt)动作和has_seq1(rcvpkt)动作判断(数据分组0没有损坏但收到1号分组),则产生make_pkt(ACK,chksum)动作打包ACK分组,最后使用udt_send(sndpkt)动作将ACK分组返回给发送方。“状态保持不变”
    • 接受方处于 “等待来在下层的 1”状态,该状态也处理三种事件。
      • 第一: 使用rdt_rcv(rcvpkt)动作接收分组,并使用corrupt(rcvpkt)动作判断(分组1损坏),则产生make_pkt(NAK,checksum)动作打包一个NAK分组,最后使用udt_send(sndpkkt)动作将NAK分组返回给发送方。“状态保持不变”
      • 第二: 使用rdt_rcv(rcvpkt)动作接收分组,并使用notcorrupt(rcvpkt)动作和has_seq0(rcvpkt)动作判断(分组1没损坏但是收到与预期不符的0号分组),则产生make_pkt(ACK,chksum)动作打包一个ACK分组,最后使用udt_send(sndpkt)动作将ACK分组返回给发送方。“状态保持不变”
      • 第三:使用rdt_rcv(rcvpkt)动作接收分组,并使用notcorrupt(rcvpkt)动作和has_seq1(rcvpkt)动作判断(分组1没损坏且收到预期的1号分组),则产生extract(rcvpkt,data)动作取出数据,再使用deliver_data(data)动作将数据递交给应用层,然后接收方还要产生make_pkt(ACK,chesum)动作打包ACK分组,最后使用udt_send(sndpkt)动作将ACK分组返回给发送方,状态转向 “等待来自下层的 0”
        在这里插入图片描述
有bit错误的信道上无NAK的可靠传输协议—rdt2.2
  • 特点:
    ①功能和rdt2.1相同,但只有ACK
    ②接收方的make_pkt(ACK,0|1,checksum)中增加了此次被确认的报文序号
    ③发送方收到重复ACK 时和原来的NAK一样,重传上次数据分组
  • rdt2.2FSM
    • 发送方:在这里插入图片描述
    • 接收方:
      在这里插入图片描述
具有bit差错和丢包的信道的可靠数据传输(比特交替协议alter-nating-bit protocal)—rdt3.0
  • 引入:假设底层信道存在 bit差错和报文丢失(数据或ACKs)

  • 新问题:怎么检测丢包、丢包后的处理

  • 解决方案:

    • 检测丢包:倒计时定时器
    • 丢包后的处理:检验和、序号、ACK分组、重传等
  • 理解:发送方等待“合理的”确认时间,即至少等待:一个分组的往返时延RTT + 接收方处理一个分组的时间。如果在这个时间段内发送没有收到ACK(数据分组丢失、ACK丢失、都没有丢失),都是重传该分组。

  • 倒计时定时器(countdown timer):实现基于时间的重传机制,在给定的时间到期后,中断发送方。所发送方应该具有3种功能:①每发送一个分组时,启动定时器②响应定时器中断③终止定时器

  • rdt3.0FSM

    • 发送方: 在这里插入图片描述
    • 接收方: 在这里插入图片描述
  • rdt3.0的操作

    • 无丢包操作:
      发送方发送分组0,接收方接收分组0并发送ACK分组0,发送方接收ACK分组0,至此分组0传输完毕,依此类推。

    • 分组丢失(丢包):
      发送方发送分组1但中途丢失,在适当时间内发送方没能收到接收方的ACK1,触发超时重传。发送方重新发送分组1,接收方接收分组1并发送ACK分组1,发送方接收到ACK分组1,至此丢失后的分组1重传成功。
      在这里插入图片描述

    • 丢失ACK:
      发送方发送分组1,接收方接收分组1但接收方发出的ACK1中途丢失,导致发送方在适当的时间内没能收到ACK1,触发超时重传(产生冗余分组1,删除多余的只保留一个分组1)。发送方重发分组1……

    • 过早超时:
      发送方发送分组1,接收方接收分组1并发送ACK1,但是ACK1时间太长超过适当的时间,触发重传,发送方立即重发分组1。当第一个ACK1到达发送方,发送方发送分组0,接受方接收分组0并发送ACK0。当第二个因为重发分组1产生的ACK1到达时,发送方什么也不做。 等待真正的ACK0。
      在这里插入图片描述

  • 性能评价:rdt3.0是正确的协议,但性能不足,由于停等协议。

    例如:1Gbps链路,30msRTT,1KB的报文,计算网络利用率
    发送时间:(1000*8)bit/pkt ➗ 10^9 bit/s = 0.008ms/pkt
    总时间:0.008+30 =30.008ms
    利用率:0.008 ➗ 30.008 =0.27 %
    理解:发送方实际将分组送入信道的那部分时间占发送时间的非常非常小,利用率极低。若实际中考虑其他额外时延,将会更为严重!


2023.01.26

流水线可靠数据传输协议

  • 定义:不以停等方式进行分组传送,允许发送方向接收方连续发送多个分组而无需等待确认。
  • 技术支持:
    • 增加序号范围:因为每个分组都必须有一个唯一序号,用于ACK确认
    • 缓冲分组:发送方和接收方都需要设置缓冲,以便分组的发送和确认
    • 差错恢复:回退N步(GO-Back-N,GBN)、选择重传(Selective Repeat,SR)
回退N步(GBN)——滑动窗口协议
  • 理解:允许发送方发送多个分组而不需等待确认,但它受限于在流水线中未确认的分组数不能超多某个最大允许数N
  • 滑动窗口:在一个长度为N的序号范围内的窗口,表示已经发送但还未被确认的分组的许可范围

    问:为什么限制窗口大小N?
    答:流量控制、拥塞控制等。
    问:GBN的滑动窗口的大小是固定的吗?
    答:错误,不固定大小,但 ≤(2^N)-1
    问:假设发送方已经发送了0~7的帧,当计时器超时时,若发送方只收到0、2、3号帧的确认,则发送方需要重发的帧数是多少?分别是哪几个帧?
    答:根据最大接收的ACK3,可知窗口大小为4,GBN协议的确认是累积确认,所以需要重发的帧数是4个,依次为4、5、6、7号帧。

  • GBN的序号范围:

    基序号base:最早未确认分组的序号 &nbsp&nbsp&nbsp下一个序号nextseqnum:最小的未被使用序号
    [0 ~ base-1]:表示已经发送并收到ACK确认的分组
    [base ~ nextseqnum-1]:表示已经发送但未收到ACK确认的分组
    [nextseqnum ~ base+N-1]:表示如果还有上层数据,还可以用于发送分组的序号
    [base+N ~  >>>]:不能使用,直到序号为base的分组已经完成确认
    在这里插入图片描述

  • 使用原则:分组的序号在分组首部的固定长度为K的字段,表示有限的序号范围,所有涉及序号的运算都必须使用模2^k运算。
  • GBN发送方:
    • 响应上层调用:响应上层的rdt_send()并检查窗口n是否满足分组序号
    • 接收ACK(n):确认所有n以前的分组及序号为n的分组——累积确认ACK
    • 超时事件:使用定时器用于恢复数据或确认分组的丢失。只有一个定时器记录序号为base的时间。如果出现超时,发送方将重传所有已发送但还未被确认的分组(base~base+N-1)。
  • GBN接收方:
    • 维护的预期n号分组并正确接收:若上次接收到n-1号,此次接收到n号,则接收方发送ACKn,并将数据递交给应用层。所以一旦分组n被接收并递交,则所有序号比k小的分组都也已经交付。
    • 其他所有情况:接收方丢弃当前分组,并对最近按序接收的分组重新发送ACK。
  • GBN协议运行图:

    窗口大小为4,首先发送分组0~3,然后由于窗口限制,必须等待一个或多个分组被确认。接收方接收到连续分组0、1后,窗口便向前滑动,发送方继续发送4、5。但是接收方发现分组2丢失,此时窗口内的3、4、5分组失序到达,分组3、4、5被丢弃并发送最后一个正确接收分组1的ACK1。直到达到适当的时间,触发超时重传,重新发送分组2、3、4、5,并依次反馈ACK2、ACK3…
    在这里插入图片描述

  • GBN缺陷:分组丢失时,存在着不必要的重传,导致性能较差
选择重传协议(SR)
  • 定义:选择性重传在接收方丢失或受损的分组,不再重传不必要的(尽管失序)的正确分组,失序的分组将被缓存直到所有所有丢失的分组被重新接收。

  • 发送方:

    • 响应上层调用:接收上层的rdt_send()调用,并检查分组序号是否位于窗口内。若在,则打包;否则,缓存数据
    • 超时(n):每个分组都必须有自己的逻辑定时器,重发分组n,重启定时器
    • 收到ACK(n):若n在窗口内,则标记该分组n为已接受。若分组n刚好等于send_base,则窗口base向前移动,并且在窗口内的未发送分组将发送。
  • 接受方:

    • 序号在[rcv_base ~ rcv_base+N-1]内的分组被正确接收:正确接收,反馈ACKn。其中若该分组n为失序分组,则缓存该分组;若该分组n刚好等于rcv_base,则说明该分组及以前缓存的序号连续,都将被接收并向上递交。
    • 序号在[rcv_base-N,rcv_base- 1]内的分组被正确接收:反馈ACKn,即使该分组曾接收过。
    • 其他:忽略该分组。
  • SR窗口序号:SR的发送方和接收方的窗口不总是同步一致的
    在这里插入图片描述

  • SR协议运行图:

发送方和接收方窗口大小都为4。发送方发送0、1分组,接收方接收分组0、1并反馈ACK0、ACK1,向上递交分组0、1的数据,接收方窗口向前滑动。发送方发送分组2、3,接收方发现分组2丢失,但接收方接收到分组3,接收方缓存分组3,反馈ACK3。当发送方已知分组0、1已被接收后,窗口才向前滑动,发送分组4、5,接收方接受到分组4、5后,缓存并反馈ACK4、ACK5。当分组2的计时器超时后,重发分组2,此时分组2、3、4、 5在接收方都被缓存,可以直接向上递交给应用层,接收方窗口向前滑动。
注意:
①发送方的窗口移动时机:在收到接收方的ACK时
②接收方的窗口移动时机:在收到预期分组或连续缓存的分组时
在这里插入图片描述

  • SR缺陷:不能区分一个新分组和一次重传
    序号空间大小:4,K = 2
    窗口大小:3
    问题:当窗口大小比序号空间大小小1时,SR协议不能正确工作
    限制:窗口长度必须 ≤ 序号空间大小的一半 (或者 Ns +Nr ≤ 2^K)

可靠数据传输机制总结

在这里插入图片描述

(遇到问题)(已解决)word敲入的公式转化为mathtype https://www.mathtype.cn/wenti/wordgongshi-zhuanhuan.html 现在越来越多的人在文档中编辑公式的时候会选择MathType来编辑,因为它包含有众多的数学符号和模板,编辑公式时非常方便。但是也有一些人在编辑公式时没有使用MathType公式编辑器,直接使用Word中自带的公式编辑器来编辑的。当我们需要要共享一份文件的时候,这种用自带公式编辑器编辑出来的文件,在我们安装有MathType公式编辑器的电脑里打开时,双击公式没有反应,是无法对它们进行修改的. 阅读详情

相关推荐

ESP32 Arduino学习篇 (一) 引脚和串口的基本使用

简单来讲arduino就是通过源代码控制开发板的信号输入输出从而实现对一些电子元件的控制,例如LED灯,蜂鸣器,按键arduino程序首先来讲arduino程序是基于C语言,而实现类似对于LED灯和蜂鸣器的简单控制只需简单C语言知识即可实现。arduino程序是基于函数的,而在arduino的库有很多函数,我们只需要调用即可。arduino的程序主体是**setup()函数和loop()**函数以及其它在使用过程中需要构建的函数:setup()函数。

DOF526570的博客 1万+

UDP和端口的原理

参考 客户端和服务器都有一个港口DatagramPacket和一个集装箱DatagramSocket 发送端的DatagramPacket要指明地址和端口 接收端的DatagramPacket不用指明地址和端口,接收数据就可以了 发送端的DatagramSocket可以不用指明端口号 接收端的DatagramSocket要指明端口号,才能监听这个指定的端口 客户端想发送消息给服务器,那就需要指导服务器的IP号和端口号,如果端口号不正确,那就不能发送成功。 ...

weixin_44911775的博客 2184

手把手教你修改miniwiggler配置信息,解决UDE连接问题(附FT_PROG工具下载)

本文详细介绍了如何使用FT_PROG工具修改miniwiggler配置信息,解决UDE连接问题。通过分析FT2232芯片的EEPROM结构,提供从驱动安装到配置烧写的完整流程,帮助开发者实现无缝连接英飞凌TriBoard开发板。文章还包含常见错误解决方案和高级批量配置技巧。

weixin_30919429的博客 373

认识UDP、TCP协议

实现一个UDP客户端&服务端

weixin_56738054的博客 2780

高通9008模式隐藏技巧:不拆机用ADB命令+Diag协议进入EDL

本文深入解析高通EDL模式(紧急下载模式)的技术原理与实战应用,详细介绍了通过ADB命令和Diag协议无需拆机进入EDL的方法。涵盖硬件/软件触发方案、跨平台工具配置、Firehose协议解析及设备救砖流程,为开发者提供从基础到进阶的完整指南。

weixin_29191761的博客 1123

蓝牙Channel Sounding为真正的距离感知赋能

1:工作原理蓝牙™信道探测使用两种经过验证的测距方法——PBR(PBR)和RTT(RTT),实现蓝牙设备之间的安全精密测距。

weixin_43720159的博客 807

传输层协议----UDP/TCP

传输层的作用就是负责数据能够从发送端传输到接收端.正文开始!(本章完!

拾至名瑰的博客 1160

PCL点云DBSCAN聚类算法:基于密度的点云聚类

核心点是在给定半径内拥有足够多邻居点的点,边界点是在给定半径内没有足够多邻居点但是位于核心点的邻域内的点,噪声点是既不是核心点也不是边界点的点。本文将介绍PCL中的DBSCAN(基于密度的空间聚类应用噪声)算法,用于点云数据的聚类。上述示例代码首先从PCD文件中读取点云数据,并设置了DBSCAN聚类的参数,包括邻域搜索半径(epsilon)和邻域内最小点数(min_points)。需要注意的是,示例代码中的点云数据格式为pcl::PointXYZ,如果使用其他类型的点云数据,需要相应地修改代码。

LpmShell的博客 1237

UDP网络编程

建socket只用填自己的端口号,然后建个缓存封装成数据包,等待接收即可。建socket只用填自己的端口号,发送数据包才填对方的ip和端口。只需要指定发送的目标IP和端口号即可。UDP不需要连接服务器。

cyming_的博客 825

从零搭建实时数仓:基于Flink+ClickHouse的实践

实时数据处理和实时数据查询。市场上的技术方案众多,为何选择Flink+ClickHouse?

AIGC应用创新大全的博客 1320

YOLOv8改进策略【独家融合改进】| StarNet + 小目标检测头,加强跨尺度的上下文特征融合,提高小目标检测能力

P3/8 - small检测头原始模型中的P3/8特征层对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。适合检测尺寸大概在8x8到32x32像素左右的目标。P4/16 - medium检测头这个检测头对应的P4/16特征层经过了更多的下采样操作,相比P3/8特征图空间分辨率降低,但通道数增加,特征更抽象且有语义信息。它主要用于检测中等大小的目标,尺寸范围大概在32x32到64x64像素左右。P5/32 - large检测头P5/32。

Limiiiing的博客 635

UDP协议

发送方,首先是把全零放入校验和字段并且添加伪首部,然后把UDP数据报看成是由许多16位的子串连接起来,若UDP数据报的数据部分不是偶数个字节,则要在数据部分末尾增加一个全零字节(此字节不发送),接下来就按照二进制反码计算出这些16位字的和。在接收方,把收到得UDP数据报加上伪首部(如果不为偶数个字节,还需要补上全零字节)后,按二进制反码计算出这些16位字的和。所有在整个过程中,报文是不可分割的最小单位,故UDP面向数据报。: 占16位、UDP用户数据报的长度,其最小值是8字节(仅有首部,没有数据)。

weixin_73530513的博客 505

一次携程酒店 phantom-token 逆向实战复盘(附python纯算)

摘要 本文介绍了通过分析携程酒店列表页面的数据接口,使用Python实现抓取的方法。主要内容包括: 目标站点为携程酒店列表页,通过开发者工具发现关键接口fetchHotelList 将浏览器请求转换为Python代码,包含请求头(headers)、Cookies和POST数据 提供完整的请求示例代码,包含日期参数、城市ID等必要信息 特别声明仅供学习交流使用,禁止商业用途 展示了如何获取酒店列表数据,包括排序筛选等参数设置 该方法可用于研究酒店数据采集,但需要注意遵守网站使用条款。

自成背后的博客 3022

计算机网络:因特网2/3/2特点

文章目录计算机网络概念2/3/2特点2/3/2的第一个22/3/2的32/3/2的第二个2端到端原则 又到了学期末的时间,从今天开始复习计算机网络,下面把学习总结分享给大家,希望对大家有所帮助。 计算机网络概念 由通信信道连接的主机和网络设备的集合,以方便用户共享资源和相互通信。 根据这个概念,可以分析出,我们计算机网络的物理结构是又上面的前半句给出,计算机网络的目的也就是上面所说的后半句。 2/3/2特点 2/3/2的第一个2 指的是网络的两种构建,分别为: 结点: 计算设备。包括我们日常使用的手机、电脑

pengmingjv的博客 792

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

计算机网络安全教程 - 2

计算机网络安全教程(第2版)

francojj的博客 859

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

思科《计算机网络》第 2 章考试答案

思科《计算机网络》第 2 章考试 1.请评价您自己学好本课程的动力(不会影响您的得分): • (3) 有动力 • (4) 很有动力 • (2) 有一点动力 • (5) 充满动力 • (1) 毫无动力 2.请评价您自己对本课程内容以及所学(或已学到)知识的热情程度(不会影响您的得分): • (4) 很有热情 • (5) 充满热情 • (1) 毫无热情 • (3) 比较有热情 • ...

weixin_43233174的博客 4万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

《计算机网络技术与应用(第2版)》课程教学(2)——第2章 计算机网络模型

qq_34573534的博客 203

哈工大计算机网络2实验报告

哈工大计算机网络2实验报告 【下载地址】哈工大计算机网络2实验报告 探索计算机网络的奥秘,哈工大计算机网络2实验报告为你提供详尽的学习指南。这份报告不仅记录了实验的全过程,还深入解析了网络通信的原理与应用,助你从实践中深化理论理解。无论是网络协议的实现,还是数据传输的优化,报告都提供了清晰的思路和方法。对于渴望在计算机网...

gitblog_06781的博客 455

计算机网络基础教程第二版答案,计算机网络技术实用教程(第2版)课后习题答案...

计算机网络技术实用教程(第2版)课后习题答案习题一一.名词解释计算机网络 IP地址 网络掩码二.填空 1.在选用集线器时一般要考虑三个因素,即 、 , 。2.IP地址以位二进制位的形式存储于计算机中。IP地址结构由和两部分组成。通常IP地址被分为 类,分别是 。它有 个金属接触片用于与双绞线芯线接3. ...

weixin_39611725的博客 2130

2023-2024-2 山东大学《计算机网络》期末(回忆版)

2023-2024-2 山东大学《计算机网络》期末(回忆版)

前人栽树,后人乘凉。 2928

哈工大计算机网络2实验报告:助你深入理解计算机网络奥秘

哈工大计算机网络2实验报告:助你深入理解计算机网络奥秘 【下载地址】哈工大计算机网络2实验报告 探索计算机网络的奥秘,哈工大计算机网络2实验报告为你提供详尽的学习指南。这份报告不仅记录了实验的全过程,还深入解析了网络通信的原理与应用,助你从实践中深化理论理解。无论是网络协议的实现,还是数据传输的优化,报告都提供了清晰的思...

gitblog_06782的博客 319

计算机网络基础 - 链路层(2)

大家好呀!我是小笙,本章我主要分享计算机网络基础-链路层(2)学习总结,希望内容对你有所帮助!!

Al_tair的博客 1891

2小时看完,一篇搞定计算机网络基础!

如:00-16-EA-AE-3C-40就是一个MAC地址,其中前3个字节,16进制数00-16-EA代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后3个字节,16进制数AE-3C-40代表该制造商所制造的某个网络产品(如网卡)的系列号。在实际上网应用中,我们接入宽带网络时,速率却相差甚远,这主要是因为ISP提供的线路带宽使用的单位是比特,而一般下载软件显示的是字节(1字节=8比特),所以要通过换算,才能得实际值。优点:多路复用,网络利用率高,缺点:延迟大,实时性差,设备功能复杂。

2301_80002260的博客 1223

计算机网络与互联网(10.2 TCP/IP)--第10章

计算机网络与互联网(10.2 TCP/IP)–第10章

weixin_44723534的博客 100

计算机网络2

计算机网络1.1.3速率有关的性能指标带宽(理想状态) 速率有关的性能指标 速率的定义:即数据率或称数据传输率或比特率。单位是比特 1/0位 连接在计算机网络上的主机在数字通道上传送数据位数的速率。 单位 B/S KB/S MB/S GB/S TB/S 发送端————>接收端 带宽(理想状态) 计算机网络中,带宽用来表示网络的通信线路传输数据的能力,单位时间内从网络中的某一点到零一点所通过的 “最高数据率” 单位是“比特每秒” 网络设备所支持的最高速度 ...

qq_51526974的博客 1582

大工19秋计算机网络技术在线作业2,大工19秋《计算机网络技术》在线作业2答案...

大工19秋计算机网络技术在线作业2试卷总分:100 得分:100一、单选题 (共 10 道试题,共 50 分)1.数据链路层的中继系统为( )。A.转发器B.路由器C.网桥D.网关答案:C2.网络层的中继系统为( )。A.转发器B.路由器C.网桥D.网关答案:B3.IPv4的地址是一个32位的二进制,它通常采用点分( )。A.十进制数表示B.十六进制数表示C.八进制数表示D.二进制数表示答案:A4...

weixin_29735819的博客 249
上一篇: 程序设计C语言(6)
下一篇: 周知端口号
Valois
博客等级 码龄8年 74粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值