计算机网络 第5章 运输层

计算机网络 (第8版)

  • [第 5 章 传输层](#第 5 章 传输层)
    • [5.4 可靠传输的原理](#5.4 可靠传输的原理)
      • [5.4.1 停止等待协议](#5.4.1 停止等待协议)
      • [5.4.2 连续ARQ协议](#5.4.2 连续ARQ协议)
    • [5.5 TCP报文段的首部格式](#5.5 TCP报文段的首部格式)
    • [5.6 TCP可靠传输的实现](#5.6 TCP可靠传输的实现)
      • [5.6.1 以字节为单位的滑动窗口](#5.6.1 以字节为单位的滑动窗口)
      • [5.6.2 超时重传时间的选择](#5.6.2 超时重传时间的选择)
    • [5.7 TCP的流量控制](#5.7 TCP的流量控制)
      • [5.7.1 利用滑动窗口实现流量控制](#5.7.1 利用滑动窗口实现流量控制)
    • [5.8 TCP的拥塞控制](#5.8 TCP的拥塞控制)
      • [5.8.1 拥塞控制的一般原理](#5.8.1 拥塞控制的一般原理)
      • [5.8.2 TCP的拥塞控制方法](#5.8.2 TCP的拥塞控制方法)

第 5 章 传输层

5.4 可靠传输的原理

5.4.1 停止等待协议

停止等待协议是一种++数据链路层++的可靠传输协议,其核心思想是发送方在发送完一个数据帧后,会停止发送,等待接收方的确认(ACK)或否认(NAK)信号后才能继续发送。

通信方式:全双工通信

  1. 无差错情况

  2. 出现差错
    超时重传

  • 发送方在发送数据包(如TCP段)后,会启动一个超时计时器,等待接收方的确认(ACK)。
  • 如果在设定的超时时间内没有收到确认,发送方会认为数据包在传输过程中丢失或损坏,需要重新发送,否则撤销超时计时器。

注意点:

  • 发送完一个分组后,必须暂时保留已发送的分组副本,收到确认后再清除。
  • 分组和确认分组必须进行编号
  • 超时计时器设置的重传时间要合理
  1. 确认丢失和确认迟到

  2. 信道利用率

    采用流水线传输

    使用流水线传输时,要使用到连续ARQ协议滑动窗口协议

5.4.2 连续ARQ协议

连续ARQ协议:是一种在数据链路层和传输层实现可靠传输的协议,它通过连续发送数据包来提高效率。

  1. 发送窗口:发送方维持着一个一定大小的发送窗口,位于发送窗口内的所有分组都可连续发送出去,而中途不需要等待对方的确认,这样信道的利用率就提高了。
  2. 累积确认:连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。接收方一般都是采用积累确认的方式,即不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认。
  3. Go-back-N(回退N):如果发送方发送的某个分组丢失或出错,接收方会丢弃该分组及其后续的所有分组,并只发送对收到的最后一个正确分组的确认。发送方收到该确认后,从丢失分组的位置开始重传。
  4. 效率提升:连续ARQ协议通过流水线传输数据,可以有效利用信道带宽,大大提高信道利用率。在理想情况下(无错误、无超时),信道利用率可以接近1。
  5. 缓冲存储空间:连续ARQ协议需要在发送方设置一个较大的缓冲存储空间(称作重发表),用以存放若干待确认的以及待发送信息帧。当发送方收到对某信息帧的确认帧后,便可从重发表中将该信息帧删除。
  6. 连续发送数据帧:在连续ARQ协议中,发送站点发送完一个数据帧后,不是停下来等待应答帧,而是可以连续再发送若干个数据帧。如果在此过程中又收到了接收端发来的应答帧,那么还可以接着发送数据帧。
  7. 应答帧编号:由于连续发送了许多帧,所以应答帧不仅要说明是对哪一帧进行确认或否认,而且应答帧本身也必须编号。
  8. 重传机制:如果某个数据帧出错,发送方需要从出错帧开始重传,这可能导致需要重传多个帧,增加了系统开销

5.5 TCP报文段的首部格式

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP报文段(segment)的首部格式包含了多个字段,用于控制数据的传输和确保数据的可靠性。以下是TCP报文段首部的主要字段:

  1. 源端口和目的端口(Source Port and Destination Port)

    • 各占16位,分别标识发送方和接收方的端口号。
  2. 序号(Sequence Number)

    • 32位,用于标识从TCP源端向目的端发送的字节流中的每个字节的序号。
  3. 确认号(Acknowledgment Number)

    • 32位,当ACK标志位设置为1时,此字段有效,用于期望收到对方下一个报文段的起始序号。
  4. 数据偏移(Data Offset)

    • 4位,指示TCP首部的长度,即从TCP首部开始到TCP数据开始的字节数,由于数据偏移是4位,所以它的最大值是 2^4^−1=15,2^4^−1=15 个32位字(word),即 15×4=60字节
  5. 保留(Reserved)

    • 6位,保留给将来使用,目前必须置为0。
  6. 控制位(Control Flags)

  • 6位,用于控制TCP段的功能,包括:
    • URG(紧急指针字段有效)
    • ACK(确认号字段有效):ACK = 1,确认号字段有效,ACK = 0 ,无效。
    • PSH(提示接收端应尽快将这个报文段交给应用层)PSH = 1
    • RST(重置连接)
    • SYN(同步序列编号,用于建立连接)
    • FIN(结束发送数据,用于释放连接)
  1. 窗口(Window)

    • 16位,指的是接收窗口,窗口值是[0,2^16^ - 1],用于流量控制,指示发送端还可以发送多少字节的数据。窗口值作为接收方让发送方设置其发送窗口的依据。
  2. 检验和(Checksum)

    • 16位,用于错误检测,包括TCP首部、TCP数据和TCP伪首部。
  3. 紧急指针(Urgent Pointer)

    • 16位,当URG = 1时有效,指出本报文段中紧急数据的结束位置。
  4. 选项(Options)

    • 可变长度,选项和填充的总长度不能超过60−20=40 字节。最多40字节,用于提供额外的TCP功能,如最大报文段长度(MSS:TCP数据报中数据字段的最大长度)、窗口扩大、时间戳等。
  5. 填充(Padding)

    • 确保首部长度是32位字的整数倍。
  6. 数据(Data)

    • TCP段的数据部分,可以是0字节到TCP最大报文段长度(MSS)之间的任何值。

TCP首部的检验和字段包括了伪首部、TCP首部和TCP数据。伪首部是一个特殊的结构,包含源IP地址、目的IP地址、协议(TCP协议的协议号为6)、TCP报文段的长度等信息,用于计算检验和,但不包含在实际的TCP报文段中。

5.6 TCP可靠传输的实现

TCP实现可靠传输的技术主要包括以下几个方面:序列号和确认应答超时重传滑动窗口连接管理机制拥塞控制错误检测与恢复流量控制快速重传机制

5.6.1 以字节为单位的滑动窗口

接收方会通告一个窗口大小给发送方,告诉它在不需要等待新的确认应答的情况下可以发送多少数据。窗口大小是动态变化的,可以根据网络条件和接收方的缓冲区大小进行调整。

  1. 发送窗口:发送方维护一个滑动窗口,该窗口定义了哪些数据字节可以被发送。窗口的起始位置是最后被确认的数据字节的下一个字节,窗口的结束位置是起始位置加上窗口大小减去1。

  2. 接收窗口:接收方同样维护一个滑动窗口,定义了它准备接收哪些数据字节。当接收方接收到数据后,它会发送确认应答,告知发送方哪些数据已经被成功接收,从而允许发送方移动其发送窗口。

  3. 窗口更新:接收方在其发送给发送方的TCP段中包含窗口大小信息。如果接收方的缓冲区空间增加,它会发送一个新的窗口大小值,允许发送方发送更多的数据。

  4. 零窗口探测:当接收方的窗口大小变为0时,发送方将停止发送数据,但会定期发送探测段以检查窗口大小是否已经增加。

🌍P3 - P1 = A的发送窗口

🌍P2 - P1 = 已经发送但尚未确认的字节数(34 ~ 41)

🌍P3 - P2 = 允许发送但当前尚未发送的数据(42 ~ 53)

发送缓存和发送窗口

接收缓存和接收窗口

全双工的通信方式,每一方都有接收窗口和发送窗口。

5.6.2 超时重传时间的选择

超时重传时间(RTO, Retransmission Timeout)的选择是TCP协议中一个重要的动态过程,它基于网络往返时间(RTT)的估计来动态调整。以下是选择超时重传时间的一些关键点:

  1. 基于RTT的动态调整:TCP超时重传时间RTO的选择主要基于网络往返时间(RTT)的估计。由于RTT会因网络条件变化而波动,因此RTO需要动态调整以适应这些变化。

  2. 平滑往返时间(SRTT):TCP协议使用加权平均来计算平滑往返时间(SRTT),这是一种对实际RTT的平滑估计,以减少波动的影响。SRTT的计算公式为:新的SRTT = α ×(旧的SRTT)+(1-α)×(新的RTT样本),其中α是平滑因子,其值通常在0到1之间,RFC6298推荐的α值为1/8(0.125)。

  3. RTT的变异性(RTTVAR):除了SRTT,TCP还计算RTT的变异性(RTTVAR),这是对RTT变化幅度的估计,用于表示RTT的偏差或不确定性。

  4. Karn算法:在计算新的RTT时,如果重传了报文,则不会使用新的RTT值,反之,如果没有重传就更新RTT值。这样做可以避免因重传导致的RTT估计不准确。

  5. 指数退避策略:如果发生了重传,TCP会采取指数退避策略,每一次重传,RTO的数值就会加倍。例如,如果报文重传一次,RTO就会是原来的2倍;如果重传了两次,RTO就会是原来的4倍,以此类推。

  6. RTO的最小值和最大值:RTO_MIN必须大于等于1秒,如果小于则向上取整为1秒。RTO_MAX规定为60秒,这通常是基于网络的最大报文生存时间(MSL)的两倍。

  7. 时间戳选项:TCP的时间戳选项可以提供更精确的RTT测量,因为每个ACK都可以提供一个RTT的样本,这有助于更准确地调整RTO。

综上所述,超时重传时间的选择是一个复杂的自适应过程,它涉及到对RTT的平滑估计、变异性估计以及对重传事件的响应。通过这些机制,TCP能够在不同的网络条件下动态调整RTO,以确保数据的可靠传输。

5.7 TCP的流量控制

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

TCP的流量控制主要通过滑动窗口机制来实现。所谓流量控制就是指让发送方的发送速率不要太快,要让接收方来得及接收。

持续计时器(Persistent Timer)是TCP协议中用于处理零窗口 大小通知可能导致的死锁问题的一种机制。以下是持续计时器的工作原理和作用:

  1. 启动条件:当TCP连接的一方收到对方的零窗口通知(即接收窗口大小rwnd=0)时,就会启动持续计时器。
  2. 零窗口探测报文:如果持续计时器设置的时间到期,发送方就会发送一个特殊的探测报文段给接收方,这个探测报文段通常只携带1字节的数据。这个探测报文的目的是促使接收方回复当前的窗口值。
  3. 重新计时:接收方在确认这个探测报文段时,会给出自己现在的接收窗口值。如果接收窗口值仍为零,那么发送方收到这个确认报文段后就会重新设置持续计时器,继续等待非零窗口的通知。
  4. 打破死锁:如果接收方的接收窗口变为非零,那么死锁局面就可以被打破,发送方可以继续发送数据。
  5. 持续计时器的作用:持续计时器的主要作用是解决当接收方的接收窗口为零时可能出现的死锁问题。如果没有持续计时器,发送方可能会无限期地等待接收方的非零窗口通知,而如果这个通知因为某些原因丢失了,就会导致双方陷入互相等待的状态,形成死锁。
  6. TCP规定:即使接收窗口为0,也必须接受零窗口探测报文段、确认报文段以及携带有紧急数据的报文段。

5.8 TCP的拥塞控制

5.8.1 拥塞控制的一般原理

拥塞控制是网络通信中的一个重要概念,其目的是防止过多的数据同时进入网络,从而避免网络拥塞和数据包丢失。拥塞控制的一般原理包括以下几个方面:

  1. 监测网络状态
  • 网络中的路由器和交换机会监测经过的数据包流量,以判断网络是否出现拥塞。
  • 拥塞通常表现为数据包丢失、队列延迟增加、缓冲区溢出等。
  1. 反馈机制
  • 当网络出现拥塞时,路由器会通过某种机制(如发送 ICMP 消息)向发送方反馈拥塞信息。
  • 在TCP中,拥塞控制主要依赖于数据包的确认(ACK)和超时重传机制。
  1. 调整发送速率
  • 发送方根据网络的反馈信息调整数据的发送速率。
  • 在TCP中,这通常通过调整拥塞窗口(Congestion Window, cwnd)的大小来实现。
  1. 拥塞控制算法
  • 有多种拥塞控制算法,如慢启动(Slow Start)、拥塞避免(Congestion Avoidance)、快速重传(Fast Retransmit)和快速恢复(Fast Recovery)等。
  • 这些算法共同作用于TCP的拥塞控制过程,以适应不同的网络条件。

5.8.2 TCP的拥塞控制方法

TCP的拥塞控制主要通过四种算法来实现:慢开始 (Slow Start)、拥塞避免 (Congestion Avoidance)、快速重传 (Fast Retransmit)和快速恢复(Fast Recovery)。

  1. 慢开始(Slow Start)
  • 在TCP连接建立之初,拥塞窗口(cwnd)的值被设置为1个MSS(最大报文段长度),表示开始时只能发送1个数据包。

  • 每当收到一个ACK,拥塞窗口cwnd就加倍,这样cwnd的值呈指数增长。1--> 2--> 4--> 8-- >16 ...

  • 慢开始的目的是慢慢探测网络的容量,避免一开始就发送大量数据导致网络拥塞。

  • 当cwnd增长到达一个预设的慢开始门限(ssthresh)时,就会停止慢开始算法,转而进入拥塞避免阶段。

    🌍cwnd < ssthresh 慢开始算法。

    🌍cwnd > ssthresh 停止慢开始算法,该而用拥塞避免 算法。

    🌍cwnd = ssthresh 既可以用慢开始算法,又可以用拥塞避免算法。

  1. 拥塞避免(Congestion Avoidance)
  • 当cwnd超过ssthresh后,进入拥塞避免阶段。

  • 在这个阶段,cwnd的增长速率变为线性,即每经过一个RTT(往返时间),cwnd增加1个MSS。

  • 拥塞避免算法更加保守,目的是在避免网络拥塞的同时,逐步增加数据的发送量。

🌍在2超时处,设置门限值 ssthesh 为拥塞窗口 cwnd 的一半。即24/2 = 12 。

  1. 快速重传(Fast Retransmit)
  • 当发送方连续收到++三个重复的ACK++时,会立即重传丢失的数据包,而不是等待重传计时器超时。

  • 这种机制可以快速响应个别数据包的丢失,而不必等到整个RTT过去后才进行重传,从而减少了网络的等待时间。

  • 快速重传可以更有效地利用网络资源,减少因单个数据包丢失导致的延迟。

  1. 快速恢复(Fast Recovery)
  • 在快速重传之后,TCP不会回到慢开始阶段,而是进入快速恢复阶段。

  • 在快速恢复阶段,ssthresh会更新为cwnd的一半,cwnd也被设置为新的ssthresh值。

  • 然后,cwnd在收到新的ACK后线性增加,而不是像慢开始阶段那样指数增长。

  • 快速恢复允许TCP在发生丢包后快速恢复到较高的传输速率,而不是从很低的速率重新开始。

🌍在3 处 接收到3个ACK ,执行快恢复算法 ,并设置门限值 ssthesh 为拥塞窗口 cwnd 的一半 16/2 = 8。

相关推荐
鹓于18 分钟前
入侵他人电脑,实现远程控制(待补充)
网络
sky_feiyu1 小时前
wireshark初认识
网络·测试工具·wireshark
tan_135100751881 小时前
罗德与施瓦茨NRP33SN,一款独立、特性齐全的功率探头
网络·科技·测试工具·信息与通信
G丶AEOM1 小时前
TCP三次握手,四次挥手
网络·网络协议·tcp/ip
weixin_421475951 小时前
计算机网络B重修班-期末复习
计算机网络
网络安全-杰克2 小时前
以ATT&CK为例构建网络安全知识图
网络·安全·web安全
网络安全queen2 小时前
网络安全概论——网络安全基础
网络·web安全·php
黑客Jack2 小时前
网络安全概论——虚拟专网VPN技术
网络·安全·web安全
坚持就是胜利19862 小时前
内网穿透玩法之京东云亚瑟路由器刷神卓互联教程
网络·智能路由器·京东云
一名技术极客3 小时前
RabbitMQ实现网络分区
网络·分布式·rabbitmq