泪伤荡的编程指南 泪伤荡的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM篇
  • 新特性
  • 进阶篇
  • 网络
  • 操作系统
  • 数据结构与算法
  • 硬件
  • 基础篇
  • MySql
  • Oracle
  • PostgreSQL
  • 达梦
  • Redis
  • Mongodb
  • Hive
  • 数据库比较
  • Spring
  • SpringMvc
  • SpringBoot
  • Hibernate
  • iBatis
  • Mybatis
  • Mybatis-plus
  • Mybatis-plus-join
  • 各个框架对比
  • UML画图
  • 设计须知
  • 开发流程
  • 开发理论
  • 架构体系
  • 设计模式
  • 开源知识
  • 分布式解决方案
  • SpringCloud
  • API网关
  • 注册中心
  • 配置中心
  • 服务调用
  • 分布式事务
  • 消息队列
  • 调度作业
  • 链路追踪
  • 服务保障
  • 搜索引擎Elk
  • 安全框架
  • 监控体系
  • 部署容器
  • Netty
  • Tomcat
  • Nginx
  • 图片云存储
  • 云存储
  • 虚拟机Linux
  • 项目部署
  • 容器部署
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • Bug记录仓库
  • 随笔
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 视频网站
  • 音乐网站
  • 商城网站
  • 论坛网站
  • scrm项目
  • Yudao-cloud
  • RuoYi-Vu-cloud
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
  • Java术语
  • 命名英语
  • 业务英语
  • 表字段英语
  • 包名英语
Github (opens new window)
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM篇
  • 新特性
  • 进阶篇
  • 网络
  • 操作系统
  • 数据结构与算法
  • 硬件
  • 基础篇
  • MySql
  • Oracle
  • PostgreSQL
  • 达梦
  • Redis
  • Mongodb
  • Hive
  • 数据库比较
  • Spring
  • SpringMvc
  • SpringBoot
  • Hibernate
  • iBatis
  • Mybatis
  • Mybatis-plus
  • Mybatis-plus-join
  • 各个框架对比
  • UML画图
  • 设计须知
  • 开发流程
  • 开发理论
  • 架构体系
  • 设计模式
  • 开源知识
  • 分布式解决方案
  • SpringCloud
  • API网关
  • 注册中心
  • 配置中心
  • 服务调用
  • 分布式事务
  • 消息队列
  • 调度作业
  • 链路追踪
  • 服务保障
  • 搜索引擎Elk
  • 安全框架
  • 监控体系
  • 部署容器
  • Netty
  • Tomcat
  • Nginx
  • 图片云存储
  • 云存储
  • 虚拟机Linux
  • 项目部署
  • 容器部署
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • Bug记录仓库
  • 随笔
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 视频网站
  • 音乐网站
  • 商城网站
  • 论坛网站
  • scrm项目
  • Yudao-cloud
  • RuoYi-Vu-cloud
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
  • Java术语
  • 命名英语
  • 业务英语
  • 表字段英语
  • 包名英语
Github (opens new window)
  • 网络

    • 网络核心知识总结
    • TCP 三次握手和四次挥手
    • TCP 传输可靠性问题
      • TCP 如何保证传输的可靠性?
      • TCP 如何实现流量控制?
      • TCP 的拥塞控制是怎么实现的?
      • 什么是 ARQ 协议?
      • 学习参考
    • 常见状态码总结
    • 响应内容的几种接收类型
    • Header请求头部详解
    • 《计算机网络》谢希仁
    • 日常网络小知识
  • 操作系统

    • 硬件结构
    • windows命令行基础
  • 数据结构与算法

    • 数据结构基础小结
    • 基础篇

      • 学前须知
      • 复杂度
      • 动态数组
      • 链表
      • 栈
      • 队列
      • 二叉树
      • 二叉搜索树
      • AVL树
      • B树
      • 红黑树
      • 集合
      • 映射
      • 哈希表
      • 二叉堆
      • 优先级队列
      • 哈夫曼树
      • Tire
      • 总结
    • 力扣篇

      • 刷题小记
      • 解法描述
      • Hot100题解

        • 简单篇
        • 中等篇(上)
        • 中等篇(中)
        • 中等篇(下)
        • 困难篇
  • 硬件

    • 网站内容
  • 计算机基础
  • 网络
泪伤荡
2023-06-12
目录

TCP 传输可靠性问题

# TCP 传输可靠性问题

# TCP 如何保证传输的可靠性?

TCP 通过一些机制来保证传输的可靠性:

  1. 建立连接时的三次握手:客户端和服务器在开始数据传输之前进行三次握手,以确保双方都能正常接收和发送数据。
  2. 数据包的确认和重传:每个数据包都包含一个序号,接收方收到数据包后会回复一个确认报文,确认已经收到该数据包。如果发送方没有收到确认报文,就会重传该数据包。接收方需要缓存已经收到的数据包,以便在需要重传时使用。
  3. 滑动窗口机制:TCP 协议采用滑动窗口机制,控制数据包的发送速率和流量。发送方和接收方都维护一个窗口,窗口的大小取决于网络的拥塞情况和接收方的处理能力。发送方只有在接收到接收方的确认报文后,才能发送下一个数据包。
  4. 累积确认机制:接收方可以一次性确认多个数据包,以提高数据传输的效率。
  5. 超时重传机制:如果发送方没有在一定时间内收到确认报文,就会重传数据包。重传的时间间隔会逐渐加大,以避免网络拥塞。
  6. 流量控制和拥塞控制:TCP 协议通过流量控制和拥塞控制来避免网络拥塞和丢包。
    • 流量控制是指:发送方根据接收方的处理能力和网络拥塞情况,调整数据包的发送速率;
    • 拥塞控制是指:发送方根据网络拥塞情况,调整数据包的发送速率和窗口大小。

# TCP 如何实现流量控制?

TCP 协议通过以下机制实现流量控制:

  1. 接收方发送窗口(rwnd):接收方通过在 TCP 头部中的确认报文中返回一个接收窗口的值,来告诉发送方自己的接收缓存还有多少可用空间。发送方根据这个值来控制数据包的发送速率,以确保接收方能够及时接收数据,避免数据包丢失或拥塞。
  2. 发送方发送窗口(cwnd):发送方维护一个拥塞窗口的值,该值用来控制发送方可以发送的数据包数量。当网络拥塞时,发送方会根据网络传输的拥塞情况,调整拥塞窗口的大小,以控制发送速率,防止网络拥塞和数据包丢失。
  3. 慢启动算法:在连接建立时,发送方会初始化拥塞窗口的大小,然后逐渐增大窗口的大小,以控制发送速率。慢启动算法会根据网络的带宽和延迟,逐渐增大拥塞窗口的大小,直到出现网络拥塞或达到最大窗口值。
  4. 拥塞避免算法:在发送方发现网络拥塞时,会采用拥塞避免算法,逐渐减小拥塞窗口的大小,以降低发送速率。拥塞避免算法会根据数据包的丢失率和延迟时间,动态调整拥塞窗口的大小,以避免网络拥塞和数据包丢失。

总结:

TCP 主要是通过调整接收方发送窗口和发送方窗口的大小,以及利用慢启动算法和拥塞算法机制来实现流量控制的。

# TCP 的拥塞控制是怎么实现的?

TCP 协议的拥塞控制主要是通过慢启动算法、拥塞避免算法、快速重传和快速恢复机制以及拥塞状态机等多个机制来实现的。

其中:

  1. 慢启动算法通过逐渐增大拥塞窗口的大小来控制发送速率,
  2. 拥塞避免算法通过动态调整拥塞窗口的大小来避免网络拥塞和数据包丢失,
  3. 快速重传和快速恢复机制可以减少拥塞窗口的大小,避免网络拥塞和数据包丢失,
  4. 拥塞状态机则通过不同的状态和事件来实现拥塞控制。

# 什么是 ARQ 协议?

ARQ 全称为 Automatic Repeat Request,即自动重传请求,是一种数据传输协议,主要用于在不可靠的通信信道中保证数据传输的可靠性(通过使用确认和超时这两个机制)。

ARQ 包括停止等待 ARQ 协议和连续 ARQ 协议。

# 学习参考

TCP 传输可靠性保障(传输层) | JavaGuide(Java面试 + 学习指南) (opens new window)

上次更新: 2024/12/12 01:42:01
TCP 三次握手和四次挥手
常见状态码总结

← TCP 三次握手和四次挥手 常见状态码总结→

Theme by Vdoing | Copyright © 2024-2025 泪伤荡 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式