4.7 TCP 的流量控制

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅!

文章目录

  • 前言
  • [1 滑动窗口与流量控制](#1 滑动窗口与流量控制)
  • [2 持续计时器与零窗口探测](#2 持续计时器与零窗口探测)
  • [3 控制TCP发送报文段的时机](#3 控制TCP发送报文段的时机)
    • [3.1 控制发送时机的三种机制](#3.1 控制发送时机的三种机制)
    • [3.2 糊涂窗口综合症](#3.2 糊涂窗口综合症)

前言

在网络通信中,流量控制是确保高效且可靠传输的关键。TCP协议通过滑动窗口机制实现流量控制,防止发送方以过快的速率发送数据,确保接收方有足够的缓冲空间处理接收到的数据。此外,TCP还使用持续计时器、Nagle算法和其他优化策略,进一步提高网络传输的效率。本章将深入探讨TCP流量控制的实现原理。

1 滑动窗口与流量控制

①工作原理

TCP流量控制的核心机制是滑动窗口。通过滑动窗口,TCP能够控制发送方发送数据的速率,确保接收方能够及时处理接收到的数据。每一端都维护一个窗口,接收方的接收窗口大小决定了发送方能在未收到确认的情况下发送的最大数据量。

  • 发送窗口:发送方的窗口,表示可以连续发送的数据量。
  • 接收窗口:接收方的窗口,表示接收方当前能够接收的数据量。

通过调整接收窗口的大小,接收方能通知发送方其可用的缓冲区空间,进而控制数据流动的速率。接收方的接收缓冲区越大,发送方能发送的数据量也越大;反之,接收缓冲区越小,发送方的发送速度也需要相应减缓。

【示例】

②优点

滑动窗口机制能动态调整 数据的发送速率,避免发送方因为过快发送数据而造成接收方的缓冲区溢出。通过这一机制,TCP能够实现自适应流量控制 ,适应不同网络环境下的带宽和延迟条件,从而确保高效的数据传输

2 持续计时器与零窗口探测

在TCP连接中,接收方有时会因为缓冲区已满而无法接收更多的数据,导致接收窗口为零。当接收方的接收窗口为零时,发送方无法继续发送数据,这可能会导致连接的"死锁"状态。

为了避免这种情况,TCP引入了持续计时器(Persistence Timer)。

当发送方收到接收方的零窗口通知时,它会启动持续计时器。该计时器在到期后会发送一个零窗口探测报文段 ,报文中仅携带1字节 的数据。接收方在确认该探测报文段时,会回复当前的窗口大小。如果窗口值变为非零,发送方即可继续发送数据,从而打破死锁

【作用】

零窗口探测报文段的发送与确认机制,使得即使接收方的窗口暂时为零,通信双方也能保持联系并避免长时间的等待。通过反复探测,直到接收方的缓冲区有足够空间接收数据,持续计时器提供了一个有效的手段来恢复数据流通。

3 控制TCP发送报文段的时机

3.1 控制发送时机的三种机制

TCP控制数据传输的时机依赖于三种机制:

①最大报文段长度(MSS)

TCP发送方根据缓存中待发送的数据量来决定发送报文段的时机。当缓存中的数据量达到MSS时,发送方会立即构造并发送一个报文段。MSS限制了每个报文段的最大数据量,避免报文过大而导致网络拥塞。

②推送(Push)操作

发送方可以通过推送操作指示TCP立即发送当前缓存中的数据,而不必等待缓存满。当应用层需要立即传输数据时,推送操作便能够加快数据传输速度。

③计时器到期

TCP发送方维护一个计时器,在计时器到期时,它会将当前缓存中的数据(最多MSS字节)打包成报文段并发送出去。

3.2 糊涂窗口综合症

①糊涂窗口综合症

糊涂窗口综合症是指发送方在每次接收到极小的数据时就发送一个报文段,导致网络传输的效率严重下降

②发送方的糊涂窗口

当接收方的应用程序缓慢地消费数据(如每次仅读取一个字节)时,发送方可能每次接收到一个字节的数据后就立即发送一个报文段。

由于每个报文段需要添加TCP/IP头部,发送一个字节需要形成一个41字节长的IP数据报,浪费了大量的带宽。

【解决方法:Nagle算法】

为了解决发送方的糊涂窗口综合症,TCP引入了Nagle算法

算法的基本思想 :发送方在没有接收到对之前数据的确认时,应该尽量将多个小数据合并成一个报文段 发送。

Nagle算法会延迟数据的发送,直到积累足够的数据达到MSS的大小再进行发送,从而减少因发送小报文段而造成的带宽浪费。

③接收方糊涂窗口

接收方糊涂窗口问题在于接收方应用程序处理数据过慢

每当接收方有极小的空闲空间时,接收方就会急忙通知发送方当前的窗口大小。该做法导致发送方过于频繁地进行数据发送操作,降低效率。

【解决方法】

接收方可以设置一个阈值,只在其缓冲区的空间达到一定程度时才通知发送方。

此外,接收方也可以通过延迟确认操作,等待接收到足够多的数据后再发送确认,减少不必要的窗口大小更新。

相关推荐
小c君tt3 分钟前
ARINC429和CAN
运维·服务器·网络
FANGhelloworld8 分钟前
C++小工具封装 —— NetWork(TCP、UDP)
c++·网络协议·tcp/ip·udp
怦然星动_31 分钟前
泷羽Sec学习笔记-zmap搭建炮台
网络·安全·web安全
软件技术员44 分钟前
ZeroSSL Let‘s Encrypt Buypass Go SSL Google Public CA单域名证书申请教程ACMESSL.CN
网络协议·iphone·ssl
紫火桑葚1 小时前
windows openssl编译x64版libssl.lib,编译x64版本libcurl.lib,支持https,vs2015编译器
windows·网络协议·https·静态库·openssl·libcurl
孔汤姆2 小时前
渗透测试学习笔记(五)网络
网络·笔记·学习
亓才孓2 小时前
[计算机网络]唐僧的”通关文牒“NAT地址转换
计算机网络
CQU_JIAKE3 小时前
12.16【net】[debug]SOCKET_RAW无法在热点局域网下传递,悬而未决
服务器·计算机网络
烁月_o93 小时前
《红队和蓝队在网络安全中的定义与分工》
网络·经验分享·网络安全