Home
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • JavaSE
  • JVM
  • JUC
  • Netty
  • CPP
  • QT
  • UE
  • Go
  • Gin
  • Gorm
  • HTML
  • CSS
  • JavaScript
  • vue2
  • TypeScript
  • vue3
  • react
  • Spring
  • SpringMVC
  • Mybatis
  • SpringBoot
  • SpringSecurity
  • SpringCloud
  • Mysql
  • Redis
  • 消息中间件
  • RPC
  • 分布式锁
  • 分布式事务
  • 个人博客
  • 弹幕视频平台
  • API网关
  • 售票系统
  • 消息推送平台
  • SaaS短链接系统
  • Linux
  • Docker
  • Git
GitHub (opens new window)
Home
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • JavaSE
  • JVM
  • JUC
  • Netty
  • CPP
  • QT
  • UE
  • Go
  • Gin
  • Gorm
  • HTML
  • CSS
  • JavaScript
  • vue2
  • TypeScript
  • vue3
  • react
  • Spring
  • SpringMVC
  • Mybatis
  • SpringBoot
  • SpringSecurity
  • SpringCloud
  • Mysql
  • Redis
  • 消息中间件
  • RPC
  • 分布式锁
  • 分布式事务
  • 个人博客
  • 弹幕视频平台
  • API网关
  • 售票系统
  • 消息推送平台
  • SaaS短链接系统
  • Linux
  • Docker
  • Git
GitHub (opens new window)
  • HTTP

  • TCP

    • 网络模型模型
    • TCP三次握手&四次挥手
    • 重传机制
    • 流量控制
      • 流量控制
      • 窗口关闭死锁
      • 糊涂窗口综合征
    • 拥塞控制
    • TCP与UDP区别
    • TCP和UDP可以使用同一个端口吗?
    • 如何解决粘包?
    • 一个服务端进程最多支持多少条TCP连接?
  • UDP

  • IP

  • 网络安全

  • 计算机网络
  • TCP
Nreal
2024-03-03
目录

流量控制

# 流量控制

让发送方根据接收方的实际接受能力控制发送的数据量;

# 窗口关闭死锁

窗口关闭的死锁现象:当接收方来不及处理,滑动窗口大小设置为0,等到接收方数据处理完之后,发送一个窗口非0的ack报文,如果该报文丢失,陷入死锁状态;

解决方法:

tcp收到零窗口通知的那一方会启动计时器,超时后,发送窗口探测报文;

# 糊涂窗口综合征

背景:TCP+IP头部有40个字节,如果只传输几个字节,开销太过于浪费;

如果接收方来不及处理数据,发送方窗口越来越小,如果窗口只剩几个字节,发送方也会选择发送;

解决方法:

  1. 接收方不通知小窗口

    当窗口大小<MSS/2,向发送方通知窗口为0;

  2. 发送方避免发送小数据

    Nagle算法,囤积数据;

    if 有数据要发送 {
     if 可用窗口大小 >= MSS and 可发送的数据 >= MSS {
     	立刻发送MSS大小的数据
     } else {
         if 有未确认的数据 {
             将数据放入缓存等待接收ACK
         } else {
             立刻发送数据
         }
     }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
重传机制
拥塞控制

← 重传机制 拥塞控制→

Theme by Vdoing | Copyright © 2021-2024
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式