【计算机网络详解】——运输层(学习笔记)

📖 前言:两台主机的通信,实际上两台主机中的应用进程进行通信,而在一台计算机中,用不同的端口号标识不同的应用进程。本节将介绍传输层的相关内容,包括端口号的分配方法、端口号的复用与分用、以及传输层的典型协议TCP与UDP。

在这里插入图片描述


目录

  • 🕒 0. 思维导图
  • 🕒 1. 概述
    • 🕘 1.1 端口号
    • 🕘 1.2 发送方的复用和接收方的分用
  • 🕒 2. UDP与TCP
  • 🕒 3. TCP的流量控制
  • 🕒 4. TCP的拥塞控制
    • 🕘 4.1 慢启动
    • 🕘 4.2 拥塞避免
    • 🕘 4.3 快速重传
    • 🕘 4.4 快速恢复
  • 🕒 5. TCP超时重传时间(RTO)的选择
  • 🕒 6. TCP可靠传输的实现
  • 🕒 7. TCP的运输管理
    • 🕘 7.1 连接建立(握手)
    • 🕘 7.2 连接释放(挥手)
  • 🕒 8. TCP报文段的首部格式
  • 🕒 9. 课后习题

🕒 0. 思维导图

🕒 1. 概述

计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信

但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程

如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议

根据应用需求的不同,因特网的运输层为应用层提供了两种不同的运输协议,即面向连接的TCP和无连接的UDP

在这里插入图片描述

🕘 1.1 端口号

  • 运行在计算机上的进程使用进程标识符PID来标志。
  • 因特网上的计算机并不是使用统一的操作系统,不同的操作系统又使用不同格式的进程标识符
  • 为了使运行不同操作系统的计算机的应用进程之间能够进行网络通信,就必须使用统一的方法对TCP/IP体系的应用进程进行标识
  • TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程
    • 端口号使用16比特表示,取值范围0~65535
      • 熟知端口号0~1023,IANA把这些端口号指派给了TCP/IP体系中最重要的一些应用协议,例如:FTP使用21/20HTTP使用80DNS使用53
      • 登记端口号1024~49151,为没有熟知端口号的应用程序使用。使用这类端口号必须在IANA按照规定的手续登记,以防止重复。例如:Microsoft RDP微软远程桌面使用的端口是3389。
      • 短暂端口号49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
  • 端口号只具有本地意义,即端口号只是为了标识本计算机应用层中的各进程,在因特网中,不同计算机中的相同端口号是没有联系的

🕘 1.2 发送方的复用和接收方的分用

在这里插入图片描述

  • 复用:应用进程都可以通过运输层再传送到网络层。
  • 分用:运输层从网络层收到发送给应用进程的数据后,必须分别交付给指明的各应用进程。

TCP/IP体系的应用层常用协议所使用的运输层熟知端口号:
在这里插入图片描述

🕒 2. UDP与TCP

用户数据报协议UDP
(User Datagram Protocol)
传输控制协议TCP
(Transmission Control Protocol)
无连接随时可向目的主机发送报文面向连接,发送数据前需要"三报文握手"建立连接,数据传输结束后需要"四报文挥手"释放连接
支持单播、多播和广播仅支持单播
收到应用层报文后直接为报文添加UDP首部就进行发送,即面向应用报文面向字节流,其将应用进程交付下来的数据块仅仅看作是一连串的字节流,TCP将这些字节流编号并存储在缓冲中;接收方一边接收数据,一边将缓冲中的数据交给应用进程。
UDP向上层提供无连接不可靠传输服务(适用于IP电话、视频会议等实时应用),使用复用和分用、差错检测功能TCP向上层提供面向连接的可靠传输服务(适用于要求可靠传输的应用,例如文件传输),使用流量控制和拥塞控制,不会出现传输差错(误码、丢失、乱序、重复)
首部仅8字节
在这里插入图片描述
最小20字节,最大60字节
在这里插入图片描述

🕒 3. TCP的流量控制

一般来说,我们希望数据传输能快一些,但如果发送方把数据发送得过快,接收方就可能来不及接收,这会造成数据的丢失。

流量控制(flow control)定义:让发送方的发送速率不要太快,要让接收方来得及接收

利用滑动窗口实现流量控制

  • TCP接收方利用自己的接收窗口的大小来限制发送方发送窗口的大小。
  • TCP发送方收到接收方的零窗口通知后,应启动持续计时器。持续计时器超时后,向接收方发送1字节零窗口探测报文(即使窗口为0也可接收)。

工作流程:
在这里插入图片描述
在这里插入图片描述

【2010年题39】主机甲和主机乙之间建立了一个TCP连接,TCP最大段长度为1000字节。若主机甲的当前拥塞窗口为4000字节,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗口大小为2000字节,则此时主机甲还可以向主机乙发送的最大字节数是( )
A.1000
B.2000
C.3000
D.4000
【解析】TCP发送方的发送窗口= min[ 自身拥塞窗口,TCP接收方的接收窗口 ]
题目未给出TCP发送方的发送窗口的初始值,则取拥塞窗口值作为发送窗口值
在这里插入图片描述

🕒 4. TCP的拥塞控制

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。这种情况就叫做拥塞(congestion)。

在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。

出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降

在这里插入图片描述

拥塞控制主要是四个算法:慢启动(慢开始slow-start)、拥塞避免(congestion avoidance)、快速重传(快重传fast retransmit)、快速恢复(快恢复fast recovery)

下面介绍这四种拥塞控制算法的基本原理,假定如下条件:

  • 数据是单方向传送,而另一个方向只传送确认。
  • 接收方总是有足够大的缓存空间,因而发送方发送窗口的大小由网络的拥塞程度来决定。
  • 以最大报文段MSS的个数为讨论问题的单位,而不是以字节为单位。

发送方维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化

  • 拥塞窗口cwnd的维护原则:只要网络没有出现拥塞,拥塞窗口就再增大;但只要网络出现拥塞,拥塞窗口就减少一些。
  • 判断出现网络拥塞的依据:没有按时收到应当到达的确认报文(即发生超时重传)。

发送方将拥塞窗口作为发送窗口swnd,即swnd = cwnd

维护一个叫慢启动门限 ssthresh (slow start threshold)状态变量

  • cwnd < ssthresh 时,使用慢启动算法。
  • cwnd > ssthresh 时,就会使用拥塞避免算法。
  • cwnd = ssthresh 时,既可使用慢启动算法,也可使用拥塞避免算法。

🕘 4.1 慢启动

TCP 在刚建立连接完成后,首先是有个慢启动的过程,这个慢启动的意思就是一点一点的提高发送数据包的数量。

慢启动的算法记住一个规则就行:当发送方每收到一个 ACK,拥塞窗口 cwnd 的大小就会加 1

这里假定拥塞窗口 cwnd 和发送窗口 swnd 相等,下面举个例子:

  • 连接建立完成后,一开始初始化 cwnd = 1,表示可以传一个 MSS 大小的数据。
  • 当收到一个 ACK 确认应答后,cwnd 增加 1,于是一次能够发送 2 个
  • 当收到 2 个的 ACK 确认应答后, cwnd 增加 2,于是就可以比之前多发2 个,所以这一次能够发送 4 个
  • 当这 4 个的 ACK 确认到来的时候,每个确认 cwnd 增加 1, 4 个确认 cwnd 增加 4,于是就可以比之前多发 4 个,所以这一次能够发送 8 个。

在这里插入图片描述

可以看出慢启动算法,发包的个数是指数性的增长。

假定 ssthresh = 8,此时改用拥塞避免算法。

🕘 4.2 拥塞避免

规则:每当收到一个 ACK 时,cwnd 线性+1

在这里插入图片描述

当重传计时器超时,判断网络很可能出现了拥塞,触发超时重传

当发生了超时重传,则就会使用拥塞发生算法

此时sshreshcwnd 的值会发生变化:

  • ssthresh 设为发生拥塞时cwnd值的一半
  • cwnd 重置为 1,并重新开始慢开始算法

在这里插入图片描述

接着,就重新开始慢启动,慢启动是会突然减少数据流的,这种方式太激进了,反应也很强烈,会造成网络卡顿。

参考链接:🔎 TCP 重传、滑动窗口、流量控制、拥塞控制

🕘 4.3 快速重传

  • 慢开始和拥塞避免算法是1988年提出的TCP拥塞控制算法(TCP Tahoe版本)。
  • 1990年又增加了两个新的拥塞控制算法(改进TCP的性能),这就是快重传和快恢复(TCP Reno版本)。
    • 有时,个别报文段会在网络中丢失,但实际上网络并未发生拥塞。这将导致发送方超时重传,并误认为网络发生了拥塞;发送方把拥塞窗口cwnd又设置为最小值1,并错误地启动慢开始算法,因而降低了传输效率
  • 采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失
  • 所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传。
    • 要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认
    • 即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认
    • 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传。
    • 对于个别丢失的报文段,发送方不会出现超时重传,也就不会误认为出现了拥塞(进而降低拥塞窗口cwnd为1)。使用快重传可以使整个网络的吞吐量提高约20%。

在这里插入图片描述

🕘 4.4 快速恢复

后来的“快速恢复”算法是在上述的“快速重传”算法后添加的,当收到3个重复ACK时,TCP最后进入的不是拥塞避免阶段,而是快速恢复阶段。

当收到3个连续重复的ACK,则进入快速恢复算法,如下:

  • cwnd = cwnd/2
  • ssthresh = cwnd
  • cwnd = ssthresh (有的版本是cwnd = ssthresh + 3+ 3 的意思是确认有 3 个数据包被收到了)
  • 重传丢失的数据包
  • 如果再收到重复的 ACK,那么 cwnd + 1
  • 如果收到新数据的 ACK 后,设置 cwnd = ssthresh,接着就进入了拥塞避免算法

在这里插入图片描述

在这里插入图片描述

注:

  • “慢开始”是指一开始向网络注入的报文段少,并不是指拥塞窗口cwnd增长速度慢;
  • “拥塞避免”并非指完全能够避免拥塞,而是指在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易。

【2009年题39】一个TCP连接总是以1KB的最大段长发送TCP段,发送方有足够多的数据要发送。当拥塞窗口为16KB时发生了超时,如果接下来的4个RTT(往返时间)内的TCP段的传输都是成功的,那么当第4个RTT时间内发送的所有TCP段都得到肯定应答时,拥塞窗口大小是()
A.7KB
B.8KB
C.9KB
D.16KB

解析:
在这里插入图片描述

🕒 5. TCP超时重传时间(RTO)的选择

正常情况下,超时重传时间应该设为略大于往返时间。但是由于各区域的速率可能不一致,因此将超时重传时间设置为一个固定值是行不通的。

利用每次测量得到的RTT样本,计算加权平均往返时间 R T T S RTT_S RTTS(平滑的往返时间)。

显然,超时重传时间RTO略大于加权平均往返时间 R T T S RTT_S RTTS

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

R T O = R T T S + 4 × R T T D R T O=R T T_{S}+4 \times R T T_{D} RTO=RTTS+4×RTTD

  • 加权平均往返时间 R T T s RTT_s RTTs
    R T T S 1 = R T T l R T T_{S1}=R T T_{l} RTTS1=RTTl
    新的 R T T S = ( 1 − α ) ×  旧的  R T T S + α × R T T_{S}=(1-\alpha) \times \text { 旧的 } R T T_{S}+\alpha \times RTTS=(1α)× 旧的 RTTS+α×新的RTT样本
    0 ≤ α < 1 0 \leq \alpha<1 0α<1
    已成为建议标准的RFC6298推荐的 α \alpha α值为1/8,即0.125。

  • RTT偏差的加权平均 R T T D RTT_D RTTD
    R T T D 1 = R T T 1 ÷ 2 R T T_{D1}=R T T_{1} \div 2 RTTD1=RTT1÷2
    新的 R T T D = ( 1 − β ) ×  旧的  R T T D + β × ∣ R T T S −  新的  R T T  样本  ∣ R T T_{D}=(1-\beta) \times \text { 旧的 } R T T_{D} +\beta \times \mid R T T_{S}-\text { 新的 } R T T \text { 样本 } \mid RTTD=(1β)× 旧的 RTTD+β×RTTS 新的 RTT 样本 
    0 ≤ β < 1 0 \leq \beta<1 0β<1
    已成为建议标准的RFC6298推荐的 β \beta β值为1/4,即0.25。

往返时间测量问题:
在这里插入图片描述

针对出现超时重传时无法测准往返时间RTT的问题,Karn提出了一个算法:在计算加权平均往返时间RTTs时,只要报文段重传了,就不采用其往返时间RTT样本。也就是出现重传时,不重新计算RTTs,进而超时重传时间RTO也不会重新计算。

这又引起了新的问题。设想出现这样的情况:报文段的时延突然增大了很多,并且之后很长一段时间都会保持这种时延。因此在原来得出的重传时间内,不会收到确认报文段。于是就重传报文段。但根据Karn算法,不考虑重传的报文段的往返时间样本。这样,超时重传时间就无法更新。这会导致报文段反复被重传。

因此,要对Karn算法进行修正。方法是:报文段每重传一次,就把超时重传时间RTO增大一些。典型的做法是将新RTO的值取为旧RTO值的2倍。
在这里插入图片描述

🕒 6. TCP可靠传输的实现

TCP基于以字节为单位的滑动窗口来实现可靠传输。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大。
    • 网络传送窗口值需要经历一定的时间滞后,并且这个时间还是不确定的。
    • 发送方还可能根据网络当时的拥塞情况适当减小自己的发送窗口尺寸。
  • 对于不按序到达的数据应如何处理,TCP并无明确规定。
    • 如果接收方把不按序到达的数据一律丢弃,那么接收窗口的管理将会比较简单,但这样做对网络资源的利用不利,因为发送方会重复传送较多的数据。
    • TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程
  • TCP要求接收方必须有累积确认和捎带确认机制(捎带下一个希望接收的报文),这样可以减小传输开销。接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。
    • 接收方不应过分推迟发送确认,否则会导致发送方不必要的超时重传,这反而浪费了网络的资源。
    • TCP标准规定,确认推迟的时间不应超过0.5秒。若收到一连串具有最大长度的报文段,则必须每隔一个报文段就发送一个确认[RFC 1122]。
    • 捎带确认实际上并不经常发生,因为大多数应用程序很少同时在两个方向上发送数据。
  • TCP的通信是全双工通信。通信中的每一方都在发送和接收报文段。因此,每一方都有自己的发送窗口和接收窗口。在谈到这些窗口时,一定要弄清楚是哪一方的窗口。

🕒 7. TCP的运输管理

  • TCP是面向连接的协议,它基于运输连接来传送TCP报文段。
  • TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。
  • TCP运输连接有以下三个阶段:
    • 建立TCP连接(三报文握手)
    • 数据传送
    • 释放TCP连接(四报文挥手)
  • TCP的运输连接管理就是使运输连接的建立和释放都能正常地进行。

🕘 7.1 连接建立(握手)

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

  • 使TCP双方能够确知对方的存在;
  • 使TCP双方能够协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等);
  • 使TCP双方能够对运输实体资源((如缓存大小、连接表中的项目等)进行分配。

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

在这里插入图片描述

  • 一握手(TCP连接请求报文)
    同步位SYN=1:表明这是一个TCP连接请求报文段。
    seq=x:TCP客户进程所选择的初始序号。
  • 二握手(TCP连接请求确认报文)
    SYN=1ACK=1:表明这是一个TCP连接请求确认报文段。
    seq=y:作为TCP服务器进程选择的初始序号。
    确认号字段ack=x+1:这是对TCP客户进程选择的初始序号的确认。
  • 三握手(普通的TCP确认报文)
    确认位ACK=1:表明这是一个普通的TCP确认报文段。
    seq=x+1,这是因为TCP客户进程发送的第一个TCP报文段的序号为x。(发送的下一份TCP报文序号仍然是x+1)
    ack=y,这是对TCP服务器进程选择的初始序号的确认。

注意:

  • TCP规定SYN=1的报文段不能携带数据,但要消耗掉一个序号。
  • TCP规定普通的TCP确认报文段回以携带数据,但如果不携带数据。则不消耗序号。

Q:为什么TCP客户进程最后还要发送普通的TCP确认报文段呢?是否多余?
A:不多余,这是为了防止已失效的连接请求报文段突然又传送到了TCP服务器,因而导致错误。

🕘 7.2 连接释放(挥手)

在这里插入图片描述

  • 一挥手(TCP连接释放报文)
    • 终止位FIN、确认位ACK设置为1:表明这是一个TCP连接释放报文段,同时也是对之前接收数据的确认。
    • 序号seq=u:等于TCP客户进程之前已传送过的数据的最后一个字节的序号加1。
    • 确认号ack=v:等于TCP客户进程之前已收到的数据的最后一个字节的序号加1。
  • 二挥手(普通的TCP确认报文)
    • ACK=1:表明这是一个普通的TCP确认报文段。
    • seq=v,等于TCP客户进程之前已收到的数据的最后一个字节的序号加1。(发送的下一份TCP报文序号仍然是v)
    • ack=u+1,这是对TCP连接释放报文段的确认。
  • 三挥手(TCP连接释放报文段,最后确认状态)
    • FIN=1ACK=1:表明这是—个TCP连接释放报文段,同时也对之前收到的报文段进行确认。
    • seq=w:在半关闭状态下,TCP进程可能发送一些数据,导致序列号增加;如果没有发送数据则w=v
    • ack=u+1:这是对之前收到的TCP连接释放报文段的重复确认。
  • 四挥手(普通的TCP确认报文)
    • ACK=1:表明这是一个普通的TCP确认报文段。
    • seq=u+1,等于TCP客户进程之前已收到的数据的最后一个字节的序号加1。
    • ack=w+1,这是对TCP连接释放报文段的确认。

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

MSL(Maximum Segment Lifetime)意思是最长报文段寿命,RFC793建议为2分钟。

Q:TIME-WAIT时间等待有必要等待吗?
A:时间等待是为了避免以下这种情况:
在这里插入图片描述

保活计时器

在这里插入图片描述

TCP服务器进程每收到一次TCP客户进程的数据,就重新设置并启动保活计时器(2小时定时)。

若保活计时器定时周期内未收到TCP客户进程发来的数据,则当保活计时器到时后,TCP服务器进程就向TCP客户进程发送一个探测报文段,以后则每隔75秒发送一次。若一连发送10个探测报文段后仍无TCP客户进程的响应,TCP服务器进程就认为TCP客户进程所在主机出了故障,接着就关闭这个连接。

🕒 8. TCP报文段的首部格式

  • 为了实现可靠传输,TCP采用了面向字节流的方式。
  • 但TCP在发送数据时,是从发送缓存取出一部分或全部字节并给其添加一个首部使之成为TCP报文段后进行发送。
    • 一个TCP报文段由首部和数据载荷两部分构成;
    • TCP的全部功能都体现在它首部中各字段的作用。

在这里插入图片描述

  • 源端口:占16比特,写入源端口号,用来标识发送该TCP报文段的应用进程
  • 目的端口:占16比特,写入目的端口号,用来标识接收该TCP报文段的应用进程
  • 序号:占32比特,取值范围 [ 0 , 2 32 − 1 ] [0,2^{32}-1] [0,2321],序号增加到最后一个后,下一个序号就又回到0。作用是指出本TCP报文段数据载荷的第一个字节的序号
  • 确认标志位ACK:取值为1时确认号字段才有效,为0时确认号字段无效
    • TCP规定,在连接建立后所有传送的TCP报文段都必须把ACK置1
  • 确认号:占32比特,取值范围 [ 0 , 2 32 − 1 ] [0,2^{32}-1] [0,2321],序号增加到最后一个后,下一个序号就又回到0。可理解为若确认号=n,则表明到序号n-1为止的所有数据都已正确接收,期望接收序号为n的数据
  • 数据偏移:占4比特,并以4字节为单位
    • 用来指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处。这个字段实际上是指出TCP报文段的首部长度。
    • 首部固定长度为20字节,因此数据偏移字段的最小值 ( 0101 ) 2 (0101)_2 (0101)2 ;首部最大长度为60字节,因此数据偏移字段最大值为 ( 1111 ) 2 (1111)_2 (1111)2
  • 保留字段:占6比特,保留为今后使用,但是目前应置为0
  • 窗口:占16比特,以字节为单位。指出发送本报文段一方的接收窗口
    • 窗口值作为接收方让发送方设置其发送窗口的依据,这是以接收方的接收能力来控制发送方的发送能力,称为流量控制
  • 检验和:占16比特,检测范围包括TCP报文段的首部和数据载荷两部分
    • 在计算校验和时,要在TCP报文段的前面加上12字节的伪首部
  • 同步标志位SYN:在TCP连接建立时用来同步序号
  • 终止标志位FIN:用来释放TCP连接
  • 复位标志位RST:用来复位TCP连接
    • RST=1时,表明TCP连接出现了异常,必须释放连接,然后再重新建立连接;RST置1还用来拒绝一个非法的报文段或拒绝打开一个TCP连接
  • 推送标志位PSH:接收方的TCP收到该标志位为1的报文段会尽快上交应用进程,而不必等到接收缓存都填满后再向上交付
  • 紧急标志位URG:取值为1时紧急指针字段有效;取值为0时紧急指针字段无效。
  • 紧急指针:占16比特,以字节为单位,用来指明紧急数据的长度
    • 当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立刻封装到一个TCP报文段中进行发送。紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是普通数据
  • 选项:增加选项可以增加TCP的功能
    • 最大报文段长度MSS选项:TCP报文段数据载荷部分的最大长度
    • 窗口扩大选项:为了扩大窗口(提高吞吐率)
    • 时间戳选项
      • 用来计算往返时间RTT
      • 用于处理序号超范围的情况,又称为防止序号绕回PAWS
    • 选择确认选项:实现选择确认功能
  • 填充:由于选项长度可变,因此使用填充来保证报文段首部能被4整除

🕒 9. 课后习题

  1. 【2017 题39】若甲向乙发起一个TCP连接,最大段长MSS=1KB,RTT=5ms,乙开辟的接收缓存为64KB,则甲从连接建立成功至发送窗口达到32KB,需经过的时间至少是
    A、25ms
    B、30ms
    C、160ms
    D、165ms

  2. 【2020年 题38】若主机甲与主机乙已建立一条TCP连接,最大段长MSS为1KB,往返时间RTT为2ms,则在不出现拥塞的前提下,拥塞窗口从8KB增长到20KB所需的最长时间是
    A、4ms
    B、8ms
    C、24ms
    D、48ms

  3. 【单选题】在一个TCP连接中,MSS为1KB,当拥塞窗口为28KB时发生了超时事件。如果在接下来的3个RTT内报文段传输都是成功的,那么当这些报文段均得到确认后,拥塞窗口的大小是
    A、4
    B、8
    C、9
    D、16

  4. 【单选题】A和B之间建立了TCP连接,A向B发送了一个报文段,其中序号字段seq=200,确认号字段ack=201,数据部分有2个字节,那么在B对该报文段的确认段中( )
    A、seq=202, ack=200
    B、seq=201, ack=201
    C、seq=201, ack=202
    D、seq=202, ack=201

答案:
1.A(解析:🔎 视频讲解) 2.C(解析:视频讲解)
3.B(解析:当发生超时事件时,TCP拥塞算法变成慢开始,并且发送窗口swnd更新为1,慢开始门限ssthresh更新为28KB/2=14KB。
第1个RTT结束后,发送窗口swnd增长到2;
第2个RTT结束后,发送窗口swnd增长到4;
第3个RTT结束后,发送窗口swnd增长到8。)
4.C(解析:seqB = ackA ackB = ackA + 1)


OK,以上就是本期知识“运输层”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~

❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

编译tolua——3、以pbc为例子,添加第三方库

目录 1、编译工具和环境说明 2、基础编译tolua 3、以pbc为例子&#xff0c;添加第三方库 4、更新luaJit 大家好&#xff0c;我是阿赵。 之前分享过怎样正常编译基础版本的tolua。这次用添加pbc为例&#xff0c;看看怎样往tolua里面添加其他的第三方库。知道了方法之后&#xf…

本地项目托管到 Gitee

本地项目托管到 Gitee 1、创建远程仓库2、Git Bash Here第一步&#xff1a;初始化本地仓库 git init第二步&#xff1a;建立链接git remote add origin xxx第三步&#xff1a;将远程仓库中的文件推送至本地仓库中git pull --rebase origin master第四步&#xff1a;将本地项目放…

【利用AI让知识体系化】简要了解网络七层协议

文章目录 一、前言引言目的和意义 二、网络七层协议简介OSI参考模型七层协议分层结构和各层协议简介 三、物理层 - Layer 1物理层概述物理层的作用物理层标准和协议 四、数据链路层 - Layer 2数据链路层概述常见的协议 五、网络层 - Layer 3网络层概述网络层的作用IP地址的作用…

cool-admin框架后端使用-node版本,线上宝塔部署

版本6.x 宝塔新建一个文件夹和创建好数据库&#xff0c;记录账号和密码&#xff0c;自行创建&#xff0c;不做说明 特别注意&#xff0c;如果用宝塔node管理那里运行&#xff0c;如果按照到有pm2的&#xff0c;要先卸载&#xff0c;不可以共存&#xff0c;会有冲突 cool-vue前端…

爬虫数据采集需要什么样的代理ip以及遇到的反爬措施

随着互联网的快速发展&#xff0c;数据已经成为许多行业中的重要资源。网络爬虫作为一种数据采集工具&#xff0c;在许多领域中得到了广泛应用。但是现在很多网站都有非常多的限制&#xff0c;所以在爬取数据的时候&#xff0c;还需要借助代理ip来助力&#xff0c;才能更好的完…

谁说不可兼得,用scrcpy实现手机免流播放bilibili投屏电脑

目前的手机大额流量卡都是支持设备免流的&#xff0c;但是如何将这个流量用在其他设备&#xff0c;就相当麻烦。于是我查找了些相关Android投屏技术资料&#xff0c;发现了一个简单的USB投屏工具——scrcpy。 安装说明 Office&#xff1a;https://github.com/Genymobile/scrcp…

深度学习之卷积神经网络(CNN)

大家好&#xff0c;我是带我去滑雪&#xff01; 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种基于深度学习的前馈神经网络&#xff0c;主要用于图像和视频识别、分类、分割和标注等计算机视觉任务。它主要由卷积层、池化层、全连接…

手机技巧:安卓微信 8.0.38 内测版本功能一览

2023年6月14号安卓版本的微信8.0.38又开始内测了&#xff0c;今天就赶紧下载体验一下&#xff0c;下面就来给大家一一介绍&#xff0c;本次安卓微信内测版本功能更新&#xff0c;感兴趣的朋友可以文末下载体验一下&#xff01; 首先看一下官方的更新内容&#xff1a; 本次更新…

网络安全实验室|网络信息安全攻防学习平台(脚本关1-6)

传送门&#xff1a; http://hackinglab.cn/ 1. key又又不见了 点击此处开启抓包&#xff0c;send ti repeater 模块 yougotit_script_now2. 快速口算 脚本来源&#xff1a; https://blog.csdn.net/hzxtjx/article/details/125692349 import requests,re# 自动处理cookies&a…

Java+Swing+mysql仿QQ聊天工具

JavaSwingmysql仿QQ聊天工具 一、系统介绍二、功能展示1.用户登陆2.好友列表3.好友聊天4.服务器日志 三、系统实现四、其它1.其他系统实现2.获取源码 一、系统介绍 系统主要功能&#xff1a;用户登陆、好友列表、好友聊天、服务器日志 二、功能展示 1.用户登陆 2.好友列表 3…

Ubuntu远程装载硬盘Mount and unmount disk

小虎本来以为Ubuntu&#xff08;Linux系统&#xff09;不能够远程装载硬盘&#xff0c;每次重开机都要线下重新装载硬盘。但是苦于工作站不在身边&#xff0c;跑来跑去太麻烦&#xff0c;所以想远程装载一下。 解决方法 遍历搜索所有硬盘。找到对应名字。 lsblk创建一个文件…

Unity中Camera参数—Culling Mask详解

Culling Mask 如下图所示&#xff1a; 显示层级如下&#xff1a; 应用&#xff1a; Culling Mask &#xff1a;主要是相机针对不同层级的物体进行渲染的操作&#xff08;想让相机渲染哪个层就勾选哪个层&#xff09; 层级介绍&#xff1a; unity中的层前7个被unity锁定&#…

RISC-V体系结构的U-Boot引导过程 第一阶段

RISC-V体系结构的U-Boot引导过程 第一阶段 flyfish .globl _start _start:.globl使符号对链接器可见相当于C语言中的Extern&#xff0c;声明此变量&#xff0c;并且告诉链接器此变量是全局变量&#xff0c;外部可以访问.u-boot.lds里的ENTRY(_start)也是这里的_start。 即指定…

儿童遗留监测成为「加分项」,多种技术路线「争夺战」一触即发

儿童遗留密闭车内&#xff0c;温度可以在短短15分钟内达到临界水平&#xff0c;从而可能导致中暑和死亡&#xff0c;尤其是当汽车在太阳底下暴晒。 按照Euro NCAP给出的指引&#xff0c;与车祸相比&#xff0c;儿童因车辆中暑而死亡的情况较少&#xff0c;但却是完全可以避免的…

基于改进MRAS算法的永磁同步电机参数辨识

基于改进MRAS算法的永磁同步电机参数辨识 摘 要永磁同步点电机参数辨识算法介绍永磁同步电机数学模型改进MRAS参数辨识算法递推最小二乘法辨识原理递推最小二乘法结合MRAS算法原理仿真结果分析总结 摘 要 在永磁同步电机运行时&#xff0c;电机的电气参数会受到温度以及磁链饱…

【使用指导】wifi蓝牙二合一模块LCS2028与服务器的数据收发功能测试指导

在物联网智能家居、智能照明、智能楼宇、智慧工厂、智能制造等领域的数据透传、智能控制应用中&#xff0c;支持UART串口通信的低功耗WiFi蓝牙二合一模块应用极为广泛。模块性能测试环节中会测试模块与服务器的数据收发功能&#xff0c;确保功能性能够满足项目应用需求。本篇就…

在Mybatis执行插入数据时,如何将Date类型字段设置为“yyyy-MM-dd”的格式

1、问题描述 使用mybatis新增插入一条数据到MySQL数据库时&#xff0c; 其中实体类对象的一个属性”hiredate“的类型是日期类型Date&#xff0c; 此属性在数据库中对应的字段“hiredate”类型也是日期Date类型&#xff0c; 但是在数据库中要求“hiredate”字段的字段值为“yy…

Kendo UI R2 2023 crack

Kendo UI R2 2023 crack 新组件&#xff1a;角度PDFViewer 直接在Angular应用程序中查看PDF文件&#xff0c;无需第三方软件或附加组件。 凭借直观的分页机制、强大的搜索功能和灵活的缩放选项&#xff0c;用户可以轻松导航和浏览PDF内容。 角度16支架 Angular 16引入了一系列改…

视频网页前端禁止截屏代码实现js

有言在先 原理是采用商业级DRM实现&#xff0c;DRM 许可证费用目前没有免费服务商&#xff0c;腾讯云价格是0.0056元/次。 另外此功能不兼容安卓&#xff0c;安卓系统无法正常播放视频&#xff01; 先展示效果 可以看到截屏时刻出现黑屏&#xff0c;录屏也能保证全黑状态。…

搭建Freekan私人影视电影网站,cpolar内网穿透发布上线

文章目录 1.前言2.本地网页搭建2.1 环境使用2.2 支持组件和环境设置2.3 支持组件选和环境设置2.4 网页安装2.5 测试和使用2.6 问题解决 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转发自CSDNprobezy的文章&#xff1a;使用Cpolarfreekan源码…