第三章、运输层

news2024/11/14 15:19:48

文章目录

  • 3.1 概述和运输层服务
    • 3.1.1 运输层和网络层的关系
    • 3.1.2 因特网运输层概述
  • 3.2 多路复用与多路分解
  • 3.3 无连接运输:UDP
  • 3.4 可靠数据传输原理
    • 3.4.1构造可靠数据传输协议
      • rdt1.0
      • rdt2.x
      • rdt3.0
    • 3.4.2 流水线可靠数据传输协议
    • 3.4.3 回退N步
    • 3.4.4选择重传
  • 3.5 面向连接的运输:TCP
    • 5.1 TCP 连接
    • 3.5.2 TCP报文段结构
    • 3.5.3 往返时间的估计与超时
    • 3.5.4 可靠数据传输
    • 3.5.5 流量控制
    • 3.5.6 TCP连接管理
      • 三次握手
      • 四次挥手
  • 3.6 拥塞控制原理
    • 3.6.1 拥塞原因与代价
    • 3.6.2拥塞控制方法
  • 3.7 TCP拥塞控制
    • 3.7.1 公平性
    • 3.7.2 明确拥塞通告:网络辅助拥塞控制
  • 3.8 小结

3.1 概述和运输层服务

运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信(logic communication)功能。

运输层协议是在端系统中而不是在路由器中实现的。

image-20231001072836043

3.1.1 运输层和网络层的关系

网络层提供了主机之间的逻辑通信,而运输层为运行在不同主机上的进程之间提供了逻辑通信。

  1. 网络层

    • 网络层确实提供了主机之间的逻辑通信,它负责选择最佳的路径来传输数据包从源主机到目标主机。在这个层次中,通信看起来就像是直接从一个主机到另一个主机,而不考虑中间可能经过的路由器和交换机等网络设备。
  2. 运输层

    • 运输层为运行在不同主机上的进程之间提供逻辑通信。它使得源主机和目标主机上的进程能够通过网络进行通信,就好像它们是直接连接的一样,即使实际上它们可能通过多个网络和路由器连接。运输层通过使用端口号来区分不同的进程,并确保数据准确无误地发送和接收。

3.1.2 因特网运输层概述

因特网的运输层主要负责端到端的通信。它在网络层之上,应用层之下,为运行在不同主机上的进程提供逻辑通信。运输层的主要协议有两种:传输控制协议 (TCP) 和用户数据报协议 (UDP)。

运输层的其他功能包括多路复用和解复用,它允许多个网络应用共享同一网络连接,同时保证数据能正确无误地发送到正确的应用。通过这些机制,运输层对于网络通信的效率和可靠性起到了关键的作用。

3.2 多路复用与多路分解

一个进程(作为网络应用的一部分)有一个或多个套接字 (socket),它相当于从网络向进程传递数据和从进程向网络传递数据的门户。因此,在接收主机中的运输层实际上并没有直接将数据交付给进程,而是将数据交给了一个中间的套接字。

image-20231004050823448

将运输层报文段中的数据交付到正确的套接字的工作称为多路分解(demultiplexing)。在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息(这将在以后用于分解)从而生成报文段,然后将报文段传递到网络 层,所有这些工作称为多路复用(multiplexing)。

3.3 无连接运输:UDP

用户数据报协议(UDP, User Datagram Protocol)是一种无连接的网络通信协议,由于它的特性,UDP成为许多特定类型的网络通信的首选。

  1. 无连接性:UDP是无连接的,意味着发送数据之前不需要建立连接。每个数据包的发送是独立的,它们可能到达目的地,也可能不会,也可能会按不同的顺序到达。

  2. 头部结构:UDP头部非常简单,只有8字节。其中包括源端口、目标端口、长度和校验和字段。这个简单的头部结构使得UDP的处理速度非常快。

  3. 校验和(Checksum):校验和字段用于检测数据在传输过程中是否出现错误。虽然它可以提供基本的错误检测,但如果需要更高的数据完整性保证,通常会需要应用层的错误处理机制。

  4. 数据包传输:UDP数据被封装成数据报,每个数据报包括头部和数据两部分,并且每个数据报都是独立发送的。

  5. 实时通信:由于UDP的低延迟特性,它常用于需要实时交互的应用,例如VoIP、视频流、在线游戏等。

  6. 多播和广播:UDP支持多播和广播通信,这使得它能够一次性向多个节点发送相同的数据包,非常适用于多节点通信场景。

  7. 流量控制和拥塞控制:UDP不提供流量控制和拥塞控制功能。它会不断地发送数据,不管网络的状态如何,这可能会导致网络拥塞。

  8. 应用场景:除了实时通信,UDP也适用于那些不需要确保每个数据包都到达目的地的场景,例如DNS查询、SNMP等。

  9. 自定义协议:许多自定义协议选择在UDP的基础上构建,因为它简单并允许开发者在应用层实现所需的控制和可靠性机制。

UDP提供了一种简单快速的数据传输方式,但它不保证数据的可靠性和顺序,这些特性使得UDP成为一些特定应用的理想选择,同时也需要开发者在应用层处理可能出现的问题,如数据的重传、丢包和顺序控制等。

image-20231004052919555

3.4 可靠数据传输原理

TCP是在不可靠的(IP)端到端网络层之上实现的可靠数据传输协议。

image-20231004053242584

3.4.1构造可靠数据传输协议

rdt1.0

rdt1.0(Reliable Data Transfer 1.0)是一个理论上的协议,用于在完全可靠的信道上实现可靠的数据传输。在这种情境下,我们假设网络是完全可靠的,没有任何的数据包丢失、错误或延迟。

在实际网络环境中,由于存在数据包丢失、延迟和错误等问题,需要更复杂的协议来确保数据传输的可靠性。

image-20231004053801368

rdt2.x

在一个存在比特错误的信道中,rdt2.0(Reliable Data Transfer 2.0)是一个理论上的协议,用于实现可靠的数据传输。与rdt1.0不同,rdt2.0需要应对由于比特错误导致的问题。以下是rdt2.0协议的一些主要特点:

  1. 错误检测:rdt2.0`需要具备错误检测机制以识别传输过程中的错误。通常,这是通过在每个数据包中包含一个校验和来实现的,该校验和可以帮助接收方检测到任何比特错误。

  2. 确认和否认:当接收方接收到一个数据包并且检测无误时,它会发送一个确认(ACK)回复给发送方。如果接收方检测到数据包中的错误,它会发送一个否认(NAK)回复给发送方。

  3. 重传:当发送方接收到一个否认(NAK)时,它会重新发送该数据包。如果发送方接收到确认(ACK),它会知道该数据包已被成功接收,并准备发送下一个数据包。

  4. 简单停等协议rdt2.0通常使用一种简单的停等协议,其中发送方在发送一个数据包后会停止发送,直到它接收到确认(ACK)或否认(NAK)。这确保了每次只有一个数据包在传输,简化了协议的设计,但也限制了其效率。

  5. 无需拥塞控制:在rdt2.0中,没有考虑拥塞控制,因为它主要关注的是比特错误,而不是由网络拥塞导致的数据包丢失。

rdt2.0协议为理解如何在存在比特错误的信道中实现可靠数据传输提供了基础。然而,在现实世界中,更复杂的协议会需要处理其他的网络问题,例如数据包丢失和网络拥塞。

image-20231004060314049

rdt2.0协议看起来似乎可以运行了,但是我们没有考虑到ACK或NAK分组受损的可能性!

rdt2.1多了一个标志位,0或者1,用来让接收方知道发送方是否正在重传前一个发送分组。

协议rdt2.1使用了从接收方到发送方的肯定确认和否定确认。当接收到失序的分组 时,接收方对所接收的分组发送一个肯定确认。如果收到受损的分组,则接收方将发送一 个否定确认。如果不发送NAK,而是对上次正确接收的分组发送一个ACK,我们也能实现与NAK—样的效果。发送方接收到对同一个分组的两个ACK (即接收冗余ACK (duplicate ACK))后,就知道接收方没有正确接收到跟在被确认两次的分组后面的分组。

image-20231004062940882

image-20231004062954820

rdt2.2是在有比特差错信道上实现的一个无NAK的可靠数据传输协议

rdt2. 1和rdt2.2之间的细微变化在于,接收方此时必须包括由一个ACK报文所确认的分组序号发送方此时必须检查接收到的ACK报文中被确认的分组序号

image-20231004063350976

image-20231004063416071

rdt3.0

现在假定除了比特受损外,底层信道还会丢包,这个时候就需要加入重传机制,也就是rdt3.0

发送方明智地选择一个时间值,以判定可能发生了丢包(尽管不能确保)。如果在这个时间内没有收到ACK,则重传该分组。

为了实现基于时间的重传机制,需要一个倒计数定时器(countdown timer),在 一个给定的时间量过期后,可中断发送方。因此,发送方需要能做到:①每次发送一个分组(包括第一次分组和重传分组)时,便启动一个定时器。②响应定时器中断(采取适当的动作)。③终止定时器。

image-20231004064816079

image-20231004064835037

3.4.2 流水线可靠数据传输协议

rdt3.0是一个功能正确的协议,但是确存在很大的性能问题,因为它是一个停等协议

image-20231004065411833

可以使用流水线机制进行优化

image-20231004065447765

流水线机制会存在新的问题需要进行解决

  • 必须增加序号范围,因为每个输送中的分组(不计算重传的)必须有一个唯一的 序号,而且也许有多个在输送中的未确认报文。

  • 协议的发送方和接收方两端也许不得不缓存多个分组。发送方最低限度应当能缓冲那些已发送但没有确认的分组。如下面讨论的那样,接收方或许也需要缓存那些已正确接收的分组。

  • 所需序号范围和对缓冲的要求取决于数据传输协议如何处理丢失、损坏及延时过大的分组。解决流水线的差错恢复有两种基本方法是:回退N步(Go Back N, GBN)和选择重传(Selective Repeat, SR)。

3.4.3 回退N步

回退N步就是允许发送方发送多个分组(当有多个分组可用时)而不需等待确认

image-20231004214607445

回退N步(Go-Back-N, GBN)协议是一种自动重传请求(ARQ)协议,通过滑动窗口机制允许发送方连续发送多个数据帧而无需等待每个帧的确认。发送方维护一个大小为N的发送窗口。接收方只确认按顺序接收的帧,并丢弃任何乱序的帧。发送方有一个定时器来检测数据帧的超时;如果定时器超时,则重传窗口中的所有帧。接收到确认后,发送方将窗口向前滑动并发送新的帧。这种机制在面对丢失或错误的帧时提供了错误恢复能力,同时通过连续的数据传输提高了传输效率。

image-20231004214953176

image-20231004215017564

3.4.4选择重传

选择重传(SR)协议通过让发送方仅重传那些它怀疑在接收方出错(即丢失或受损)的分组而避免了不必要的重传。这种个别的、按需的重传要求接收方逐个地确认正确接收的分组。再次用窗口长度N来限制流水线中未完成、未被确认的分组数。然而,与GBN不同的是,发送方已经收到了对窗口中某些分组的ACK。

image-20231004220801035

选择重传协议的优势在于它只重传丢失的帧,而不是一系列的帧,这可以提高在丢包率较高的网络环境中的效率。同时,它允许接收方接收并处理乱序的帧,这为更高的网络性能提供了可能。

3.5 面向连接的运输:TCP

TCP(传输控制协议)是一种面向连接、可靠的、基于字节流的传输层协议,被广泛应用于各种网络通信场景。

5.1 TCP 连接

TCP被称为是面向连接的(connection.oriented),这是因为在一个应用进程可以开始 向另一个应用进程发送数据之前,这两个进程必须先相互“握手” ,即它们必须相互发送某些预备报文段,以建立确保数据传输的参数。

一旦建立起一条TCP连接,两个应用进程之间就可以相互发送数据了。客户进程通过套接字(该进程之门)传递数据流。数据一旦通过该门,它就由客户中运行的TCP控制了。TCP将这些数据引导到该连接的发送缓存(send buffer)里,发送缓存是发起三次握手期间设置的缓存之一。接下来TCP就会不时从发送缓存里取出一块数据,并将数据传递到网络层。

TCP为每块客户数据配上一个TCP首部,从而形成多个TCP报文段(TCP segment)。 这些报文段被下传给网络层,网络层将其分别封装在网络层IP数据报中。然后这些IP数据报被发送到网络中。当TCP在另一端接收到一个报文段后,该报文段的数据就被放入该 TCP连接的接收缓存中,应用程序从此缓存中读取数据流。该连接的每一端都有各自的发送缓存和接收缓存。

image-20231004223556734

3.5.2 TCP报文段结构

TCP报文段结构包括多个字段,每个字段都具有特定的功能和意义。以下是TCP报文段结构的详细说明:

  1. 源端口 (Source Port) 和目标端口 (Destination Port):这两个字段各占16位,用于标识通信的端点。源端口指明了发送方的端口,而目标端口指明了接收方的端口。

  2. 序列号 (Sequence Number):序列号字段占32位,用于标识从TCP源端到目标端的字节流,并帮助接收方按正确的顺序重新组装数据。

  3. 确认号 (Acknowledgment Number):确认号字段也占32位,仅在ACK控制位被设置时有效。它包含了接收方期望接收的下一个字节的序列号。

  4. 数据偏移 (Data Offset):数据偏移字段占4位,它指明了TCP报文段头部的长度,从而也标识了数据部分的开始位置。

  5. 保留 (Reserved):保留字段占3位,为未来的使用而保留,目前应设为零。

  6. 控制位 (Control Flags):控制位字段占9位,包含了9个独立的控制位,例如SYN、ACK、FIN、RST等,用于控制TCP连接的建立、维护和终止。

  7. 窗口大小 (Window Size):窗口大小字段占16位,指明了接收方愿意接收的数据量,用于流量控制。

  8. 校验和 (Checksum):校验和字段占16位,用于检查报文段头部和数据部分的错误。

  9. 紧急指针 (Urgent Pointer):紧急指针字段占16位,仅在URG控制位被设置时有效,用于指明紧急数据的结束位置。

  10. 选项和填充 (Options and Padding):选项字段的长度可变,包含了诸如最大段大小、时间戳等额外的选项。如果有必要,填充位会被添加以使头部的长度为32位的倍数。

  11. 数据 (Data):数据字段的长度可变,包含了要传输的实际数据。

通过这些字段,TCP能够支持复杂的控制和错误恢复机制,提供可靠的、有序的数据传输服务。

image-20231004224701749

3.5.3 往返时间的估计与超时

在TCP通信中,往返时间 (Round-Trip Time, RTT) 和超时是两个非常重要的概念,它们对于保证数据传输的可靠性和效率起着关键作用。

  1. 往返时间估计 (RTT Estimation):

    • 往返时间是指数据包从发送到接收并得到确认所需的时间。准确估计RTT对于设置合适的超时时间非常重要,以避免不必要的重传和网络拥堵。
    • TCP使用一种自适应的算法来估计RTT。这种算法通常会考虑过去的RTT测量值以及当前的测量值来计算一个平滑的RTT估计值。例如,使用指数加权移动平均(EWMA)算法。
  2. 超时 (Timeout):

    • 超时是指等待一个包的确认的时间。如果超过这个时间还没有收到确认,TCP会假设该包已丢失,并将其重新发送。
    • 超时时间的设置是一个重要的问题。如果超时时间设置得太短,可能会导致不必要的重传,从而降低网络效率。如果超时时间设置得太长,可能会导致长时间的延迟,降低用户体验。
    • 通过动态调整超时时间,可以使TCP更好地适应网络条件的变化。通常,超时时间会根据RTT的估计值以及其变化量(即抖动)来设置。
  3. 重传超时 (Retransmission Timeout, RTO):

    • RTO是基于RTT估计值及其变化量计算的。它的计算公式通常包括平滑的RTT估计值和RTT的方差,以确保在网络条件变化时,RTO能够提供足够的时间以等待确认。

通过往返时间的估计和合理的超时设置,TCP能够在不同的网络条件下保持高效和可靠的数据传输。同时,这也使得TCP能够在网络拥堵时做出适当的调整,避免进一步加重网络拥堵。

3.5.4 可靠数据传输

TCP在IP不可靠的尽力而为服务之上创建了一种可靠数据传输服务(reliable data transfer service)。TCP的可靠数据传输服务确保一个进程从其接收缓存中读出的数据流是 无损坏、无间隙、非冗余和按序的数据流;即该字节流与连接的另一方端系统发送出的字节流是完全相同。

在TCP里面有超时加倍和快速重传这两个重要的内容,超时加倍和快速重传是TCP协议中处理数据包丢失和网络拥塞的两种策略。它们帮助保证数据的可靠传输和网络的高效运行。以下是这两种机制的详细说明:

  1. 超时加倍(Exponential Backoff):
    • 超时加倍是一种动态调整重传超时(RTO)的方法。当TCP检测到数据包丢失时,它会将RTO加倍,以便给网络更多的时间来恢复。
    • 初始的RTO通常是基于往返时间(RTT)的估计和变化(jitter)来设定的。如果数据包丢失,RTO将被加倍,例如,从1秒加倍到2秒,再到4秒,依此类推,直到数据包被确认或达到某个最大值。
    • 超时加倍有助于在网络拥塞时减少额外的网络流量,给网络提供恢复的机会。
  2. 快速重传(Fast Retransmit):
    • 快速重传机制是为了更快地响应预期的数据包丢失。当发送方接收到三个重复的确认(duplicate ACKs)时,它会立即重传丢失的数据包,而不是等待RTO超时。
    • 在正常情况下,接收方只有在接收到新数据包时才会发送确认。但是,如果接收到一个乱序的数据包,它会立即发送一个重复的确认,以通知发送方有数据包丢失。
    • 当发送方收到三个重复的确认时,它推断网络中可能发生了数据包丢失,并立即重传丢失的数据包。这种机制允许TCP在不等待RTO超时的情况下快速响应数据包丢失。
    • image-20231005000648419

这两种机制在不同的情况下发挥作用,协助TCP实现可靠的数据传输,特别是在网络条件不稳定或拥塞的情况下。超时加倍有助于减轻网络拥塞,而快速重传则帮助快速恢复丢失的数据包,从而提高传输效率。

3.5.5 流量控制

TCP为它的应用程序提供了流量控制服务(flow control service)以消除发送方使接收方缓存溢岀的可能性。流量控制因此是一个速度匹配服务,即发送方的发送速率与接收方应用程序的读取速率相匹配。

TCP通过让发送方维护一个称为**接收窗口(receive window)的变量**来提供流量控制。 通俗地说,接收窗口用于给发送方一个指示一一该接收方还有多少可用的缓存空间。因为 TCP是全双工通信,在连接两端的发送方都各自维护一个接收窗口。

3.5.6 TCP连接管理

TCP连接如何建立和拆除一条TCP连接,建立连接阶段包括三次握手,拆除连接阶段包括四次挥手

image-20231005005238868

三次握手

三次握手(Three-way Handshake)是TCP(传输控制协议)用来在两个网络实体之间建立连接的标准方法。它的主要目的是初始化连接双方的序列号和确认号,并交换一些参数,为数据传输创造稳定的环境。下面是三次握手的详细步骤:

  1. 步骤一 - SYN:

    • 发送方(通常是客户端)开始通过发送一个TCP段来请求连接,该段的SYN(Synchronize)标志设置为1。
    • 这个TCP段还包含发送方的初始序列号(例如,x)。
    • 此时,发送方处于SYN-SENT状态。
  2. 步骤二 - SYN-ACK:

    • 接收方(通常是服务器)收到SYN请求后,发送一个新的TCP段作为响应。
    • 这个段的SYN标志设置为1,表示它是一个同步段。
    • 它包含接收方的初始序列号(例如,y)和对发送方初始序列号的确认号(x + 1)。
    • 此时,接收方处于SYN-RECEIVED状态。
  3. 步骤三 - ACK:

    • 发送方收到SYN-ACK段后,发送另一个TCP段来确认连接。
    • 这个段的ACK标志设置为1,SYN标志设置为0。
    • 它包含的确认号是接收方初始序列号加1(y + 1)。
    • 在发送这个确认段后,连接建立,发送方进入ESTABLISHED状态,接收方在收到这个确认段后也进入ESTABLISHED状态。

现在连接已经建立,双方都知道了对方的初始序列号,可以开始数据传输。每个方向上的数据传输都是独立的,并使用ACK段来确认数据的接收。这种握手机制确保了连接的可靠性和数据传输的顺序性。

此外,三次握手还帮助防止了过时连接请求突然出现并干扰当前的连接,因为每个连接请求和应答都包含了新的和唯一的初始序列号。

image-20231005003920183

四次挥手

四次挥手(Four-way Handshake)是TCP协议中用来终止连接的过程。当通信双方完成了数据传输,并希望关闭连接时,就会通过四次挥手来安全地终止连接。以下是四次挥手的详细步骤:

  1. 步骤一 - FIN:

    • 当发送方完成了数据发送,并希望关闭连接时,它会发送一个TCP段,其中的FIN(Finish)标志被设置为1,以表明它没有更多的数据要发送了。
    • 在发送FIN段后,发送方进入FIN-WAIT-1状态,等待接收方的确认。
  2. 步骤二 - ACK:

    • 接收方收到FIN段后,发送一个ACK(Acknowledgment)段来确认它已经收到了FIN段。
    • 该ACK段的确认号字段是发送方的序列号加1,表示接收方期望接收的下一个序列号。
    • 在发送ACK段后,发送方进入FIN-WAIT-2状态,接收方进入CLOSE-WAIT状态,等待接收方关闭它的发送通道。
  3. 步骤三 - FIN:

    • 当接收方也完成了数据发送,并准备关闭连接时,它会发送另一个FIN段。
    • 在发送FIN段后,接收方进入LAST-ACK状态,等待发送方的最终确认。
  4. 步骤四 - ACK:

    • 发送方收到接收方的FIN段后,发送一个ACK段来确认接收。
    • 该ACK段的确认号字段是接收方的序列号加1,表示发送方已经接收了接收方的FIN段,并期望接收的下一个序列号。
    • 在发送ACK段后,发送方进入TIME-WAIT状态,等待一段时间以确保ACK段已被接收方收到,然后进入CLOSED状态。接收方在收到ACK段后也进入CLOSED状态,连接终止。

这个四次挥手过程确保了双方都能完成数据传输,并安全地关闭连接。它为每个方向的数据传输提供了一个单独的终止过程,使得双方都能确认对方已经完成了数据传输,并准备关闭连接。每个步骤都是必要的,以确保连接的可靠终止,并防止潜在的数据丢失。

image-20231005004948517

3.6 拥塞控制原理

3.6.1 拥塞原因与代价

拥塞原因主要包括过多的数据流、网络设备和链路带宽的限制、突发流量和恶意攻击。

拥塞的代价包括增加的延迟、数据包丢失、吞吐量下降、服务质量和应用性能下降,以及降低的资源利用率。

3.6.2拥塞控制方法

在最为宽泛的级别上,我们可根据网络层是否为运输层拥塞控制提供了显式帮助,来区分拥塞控制方法。

  • 端到端拥寒控制:在端到端拥塞控制方法中,网络层没有为运输层拥塞控制提供显式支持。即使网络中存在拥塞,端系统也必须通过对网络行为的观察(如分组丢失与时延)来推断之。
  • 网络辅助的拥塞控制:在网络辅助的拥塞控制中,路由器向发送方提供关于网络中拥塞状态的显式反馈信息。

image-20231005021350165

3.7 TCP拥塞控制

TCP拥塞控制算法包括3个主要部分:①慢启动;②拥塞避免; ③快速恢复。慢启动和拥塞避免是TCP的强制部分,两者的差异在于对收到的ACK 做出反应时增加cwnd长度的方式。我们很快将会看到慢启动比拥塞避免能更快地增加cwnd(congestion window,拥塞窗口)的长度。快速恢复是推荐部分,对TCP发送方并非是必需的。

  1. 慢启动(Slow Start):
    • 慢启动是TCP拥塞控制的初始阶段。发送方初始将拥塞窗口(cwnd)设置为一个较小的值(通常是1或2个最大段大小MSS)。
    • 每接收到一个ACK,cwnd增加1个MSS,这样每个往返时间RTT,cwnd将翻倍。这是一个指数增长。
    • 当cwnd达到一个阈值(ssthresh,拥塞阈值)时,TCP进入拥塞避免阶段。
  2. 拥塞避免(Congestion Avoidance):拥塞避免(Congestion Avoidance):
    • 在拥塞避免阶段,每接收到一个ACK,cwnd增加1。这样,cwnd的增长将变得较为缓慢,大致呈线性增长,而不是指数增长。
    • 如果出现丢包,TCP会将ssthresh设置为当前cwnd的一半,cwnd重置为1,并重新进入慢启动阶段。
  3. 快速重传(Fast Retransmit):
    • 当发送方接收到三个重复的ACKs(也就是三个具有相同确认号的ACK)时,它会立即重传可能丢失的段,而不是等待重传计时器超时。
    • 这样做是基于的假设是,如果有三个重复的ACK,那么它很可能是因为一个段的丢失。
  4. 快速恢复(Fast Recovery):
    • 在快速重传后,TCP不返回到慢启动阶段,而是进入快速恢复阶段。
    • TCP将ssthresh和cwnd都设置为cwnd的一半,然后线性增加cwnd,直到完全恢复。
    • 这样做的目的是尽可能快地从丢包恢复,而不是完全关闭发送窗口并重新开始。

3.7.1 公平性

尽量公平,具有较小RTT的连接能够在链路空闲时更快地抢到可用带宽(即较快地打开其拥塞窗口),因而将比那些具有较大RTT的连 接享用更高的吞吐量。

3.7.2 明确拥塞通告:网络辅助拥塞控制

TCP通过观察分组丢失来推断拥塞,但是最近对于IP和 TCP的扩展方案[RFC 3168]已经提出并已经实现和部署,该方案允许网络明确向TCP发送方和接收方发出拥塞信号。这种形式的网络辅助拥塞控制称为明确拥塞通告(Explicit Congestion Notification, ECN)

image-20231005020214290

3.8 小结

运输层在网络架构中占据核心位置,主要负责端到端的通信。下面是关于运输层的简要总结:

  1. 主要协议:TCP(传输控制协议)和UDP(用户数据报协议)是运输层的两个主要协议。TCP提供可靠的、面向连接的通信,而UDP提供无连接的、最低开销的通信。

  2. 端口和套接字:端口和套接字是运输层的基础概念,它们帮助识别通信的端点,并提供了应用程序之间通信的接口。

  3. 可靠数据传输:TCP通过确认、重传和流控制机制来确保数据的可靠传输。

  4. 拥塞控制:TCP通过慢启动、拥塞避免、快速重传和快速恢复等算法来控制网络拥塞,确保网络的稳定运行。

  5. 连接管理:TCP通过三次握手建立连接,并通过四次挥手来终止连接,确保数据传输的可靠性。

  6. 多路复用和多路分解:运输层通过多路复用和多路分解使多个应用程序能够共享网络资源,同时保持数据传输的独立性。

  7. 无连接通信:UDP提供了一种低延迟、低开销的通信方式,但不保证数据的可靠传输。

  8. 错误检测和纠正:运输层通过校验和和其他错误检测机制来检测和可能的话纠正数据传输中的错误。

运输层通过这些机制和协议,为应用层提供了一个可靠、高效的通信平台,使网络通信成为可能。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

x64内核实验1-调试环境配置

x64内核实验1-调试环境配置 这是一套x64内核实验的课程,我之前学习32位内核的时候就是在网上找的各种教程当学完32位很久之后发现在网上的64位内核相关的完整教程真的很少,所以就想着不如自己写一点方便对内核有兴趣的人能更好的入门,首先声…

哈希原理和解决哈希冲突方法

第一 哈希介绍 哈希和红黑树是我早期就听过的名词,却一直没见到真面目,实现哈希后才发现原来我早就使用过了哈希。看下面例题。 用map和set都可以轻松解决,但是在我写这题时我还不会用map和set,我用了另一种方法。看下面代码。先定…

【Java】微服务——Nacos配置管理(统一配置管理热更新配置共享Nacos集群搭建)

目录 1.统一配置管理1.1.在nacos中添加配置文件1.2.从微服务拉取配置1.3总结 2.配置热更新2.1.方式一2.2.方式二2.3总结 3.配置共享1)添加一个环境共享配置2)在user-service中读取共享配置3)运行两个UserApplication,使用不同的pr…

Office Tool Plus下载与神龙版官网下载

文章目录 一、Office Tool Plus下载二、神龙下载 Office Tool Plus简称OTP,是一款专业的Office官方镜像下载器,可以下载安装Word、Excel、Visio等。神龙用于快速激活使用。 注意:Win7系统必须要SP1或更高版本才能使用,Office Tool…

intel 一些偏门汇编指令总结

intel 汇编手册下载链接:https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html LDS指令: 手册中可以找到 位于 3-588 根据手册内容猜测:lds r16 m16:16 的作用,是把位于 [m16:16] 内存地址的数…

JMeter的详细使用及相关问题

一、中文乱码问题 如果出现乱码,需要修改编码集,(版本问题有的不需要修改,就不用管) 修改后保存重启就好了。 JMeter5.5版本的按照如下修改: 二、JMeter的启动 ①建议直接用ApacheJMeter.jar双击启动…

Zabbix4自定义脚本监控MySQL数据库

一、MySQL数据库配置 1.1 创建Mysql数据库用户 [rootmysql ~]# mysql -uroot -p create user zabbix127.0.0.1 identified by 123456; flush privileges; 1.2 添加用户密码到mysql client的配置文件中 [rootmysql ~]# vim /etc/my.cnf.d/client.cnf [client] host127.0.0.1 u…

CSDN博主粉丝数突破10万:坚持分享的力量与收获

今天,我在CSDN上看到了一位好友的统计数据,他统计了CSDN上所有粉丝数量排名靠前的博主的排名。虽然这个统计可能存在一些误差,但大体上应该是准确的。我惊讶地发现,截止到2023年10月4日,我的粉丝数量已经达到了101,376…

QScrollArea样式

QScrollBar垂直滚动条分为sub-line、add-line、add-page、sub-page、up-arrow、down-arrow和handle几个部分。 QScrollBar水平滚动条分为sub-line、add-line、add-page、sub-page、left-arrow、right-arrow和handle几个部分。 部件如下图所示: /* 整个滚动…

Pikachu靶场——文件包含漏洞(File Inclusion)

文章目录 1. File Inclusion1.2 File Inclusion(local)1.2.1 源代码分析1.2.2 漏洞防御 1.3 File Inclusion(remote)1.3.1 源代码分析1.3.2 漏洞防御 1.4 文件包含漏洞防御 1. File Inclusion 还可以参考我的另一篇文章:文件包含漏洞及漏洞复现。 File Inclusion(…

商业智能系统的主要功能包括数据仓库、数据ETL、数据统计输出、分析功能

ETL服务内容包含: 数据迁移数据合并数据同步数据交换数据联邦数据仓库

plt 画图不显示label

没写 plt.legend() 这个 ! # 效果模拟-------------- import matplotlib.pyplot as plt import matplotlib as mpl # matplotlib其实是不支持显示中文的 显示中文需要一行代码设置字体 mpl.rcParams[font.family] = STKAITI # STKAITI——字体 plt.rcParams[axes.unicode_m…

亲,您的假期余额已经严重不足了......

引言 大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。 转眼八天长假已经接近尾声了,今天来总结一下大家的假期,聊一聊假期关于学习的看法,并预估一下大家节后大家上班时的样子。 1.放假前一天 即将迎来八天…

侯捷 C++ STL标准库和泛型编程 —— 9 STL周围

最后一篇,完结辽!😋 9 STL周围 9.1 万用Hash Function Hash Function的常规写法:其中 hash_val 就是万用Hash Function class CustumerHash { public:size_t operator()(const Customer& c) const{ return hash_val(c.fna…

x64内核实验2-段机制的变化

x64内核实验2-段机制的变化 ia-32e模式简介 x86下的段描述符结构图如下 在x86环境下段描述符主要分为3个部分的内容:base、limit、attribute,而到了64位环境下段的限制越来越少,主要体现在base和limit已经不再使用而是直接置空&#xff0…

U盘里文件损坏无法打开怎么恢复?

U盘,全称为USB闪存盘,是一种体积小巧、传输数据速度快的便携式存储设备。由于其出色的便捷性和高效性,U盘在各个工作领域和日常生活中得到了广泛应用,赢得了消费者的普遍好评。然而,使用U盘的过程中也可能会面临数据损…

Zabbix配置监控文件系统可用空间小于30GB自动告警

一、创建监控项 二、配置监控项 #输入名称–>键值点击选择 #找到磁盘容量点击 注: 1、vfs 该键值用于检测磁盘剩余空间,zabbix 内置了非常多的键值可以选着使用 2、单位B不需要修改,后期图表中单位和G拼接起来就是GB 3、更新时间 10S…

Qt扫盲-QSqlTableModel理论总结

QSqlTableModel理论总结 一、概述二、使用1. 与 view 视图绑定2. 做中间层,不显示 三、常用函数 一、概述 QSqlTableModel是用于从单个表读写数据库记录的高级接口。它构建在较低级的QSqlQuery之上,可用于向QTableView 等视图类提供数据。这个主要是对单…

基于三平面映射的地形纹理化【Triplanar Mapping】

你可能遇到过这样的地形:悬崖陡峭的一侧的纹理拉伸得如此之大,以至于看起来不切实际。 也许你有一个程序化生成的世界,你无法对其进行 UV 展开和纹理处理。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 三平面映射(Trip…

【C++】String -- 详解

⚪C语言中的字符串 C 语言中,字符串是以 \0 结尾的一些字符的集合,为了操作方便,C 标准库中提供了一些 str 系列的库函数,但是这些库函数与字符串是分离开的,不太符合 OOP 的思想,而且底层空间需要用户自己…