【TCP:可靠数据传输,快速重传,流量控制,TCP流量控制】

news2024/11/24 9:37:39

文章目录

  • 可靠数据传输
    • TCP:可靠数据传输
    • TCP发送方事件
    • 快速重传
    • 流量控制
    • TCP流量控制

可靠数据传输

TCP:可靠数据传输

  • TCP在IP不可靠服务的基础上建立了rdt
    • 管道化的报文段
      • GBN or SR
    • 累计确认(像GBN)
    • 单个重传定时器(像GBN)
    • 是否可以接受乱序的,可以缓存,也可以丢弃
  • 通过以下事件触发重传
    • 超时(只重发那个最早的未确认段:SR)
    • 重复的确认
      • 例子:收到了ACK50,之后又收到3个ACK50
  • 首先考虑简化的TCP发送方:
    • 考虑重复的确认
    • 忽略流量控制和拥塞控制
      在这里插入图片描述
      NextSeqNum = NextSeqNum + length(data):
      发送窗口前沿向前移动。
      SendBase = y
      /* SendBase–1: last cumulatively ACKed byte */
      if (there are currently not-yet-acked segments) start timer else stop timer:
      发送窗口后沿向前移动,没有已发送未确认的字节,关掉定时器。

TCP发送方事件

从应用层接收数据:

  • 用nextseq创建报文段
  • 序号nextseq为报文段首字节的字节流编号
  • 如果还没有运行,启动定时器
    • 定时器与最早未确认的报文段关联
    • 过期间隔:TimeOutInterval
      超时:
  • 重传后沿最老的报文段
  • 重新启动定时器
    收到确认:
  • 如果是对尚未确认的报文段确认
    • 更新已被确认的报文序号
    • 如果当前还有未被确认的报文段,重新启动定时器
      在这里插入图片描述
      解释:这里发送方传送的序号从92开始的,8个字节,接收方收到给一个ACK100的确认,但是这个确认丢失,发送方又传了100开始,20个字节。这个时候就要重发92,8。
      在这里插入图片描述
      这里有几种情况:
      ①隐忍不发,等多个报文在一起时候再一起发。
      ②延时等待,下一个报文在延时时间发了的话,就一起发送。没发的话,就只发送一个ACK。
      ③在发送重复的ACK,指明下一个期待的字节序号。
      ④若报文中间有gap间隔,完全补齐的话,就发送所有的ACK,部分补齐的话,就发送补齐部分。

快速重传

  • 超时周期往往太长:
    • 在重传丢失报文段之前的延时太长
  • 通过重复的ACK来检测报文段丢失
    • 发送方通常连续发送大量报文段
    • 如果报文段丢失,通常会引起多个重复的ACK
  • 如果发送方收到同一数据的3个冗余ACK,重传最小序号的段:
    • 快速重传:在定时器过时之前重发报文段
    • 在这里插入图片描述
      在这里插入图片描述

流量控制

TCP流量控制

流量控制:接收方控制发送方,不让发送方发送的太多,太快以致于让接收方的缓冲区溢出。
在这里插入图片描述

  • 接收方在其向发送方的TCP段头部的rwnd字段“通告”其空闲buffer大小。
  • 保证接收方不会被淹没。
    在这里插入图片描述
    在这里插入图片描述

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

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

相关文章

深入浅出TCP 与 UDP

🔥 引言 在互联网的广阔天地里,TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)作为传输层的两大支柱,各自承担着不同的使命。下面这篇文章将带你从基础到进阶,全…

Unity射击游戏开发教程:(8)构建 UI 元素:添加分数显示

用户界面决定用户如何与屏幕交互。UI 适用于所有类型的游戏和应用程序,在此示例中,我们将为我的太空射击游戏设置一个简单的记分板。 第一步是在层次结构中创建一个 UI 元素。只需在层次结构中右键单击,滚动 UI 并选择要添加的 UI 元素类型。在本例中,我们将使用文本元素。…

xLua背包实践

准备工作 环境,代码 在C#代码方面我们需要准备单例模式基类,AB包管理器,lua解析器管理器 详情请见AB包管理器 xlua详解 然后是Xlua包和AB包,具体导入方法也在上面的链接中 然后是lua的三个文件 具体代码: JsonUtil…

必应bing广告可以在国内推广投放了吗?

搜索引擎营销(SEM)是企业不可或缺的市场拓展手段之一,微软的必应Bing搜索引擎,作为全球第二大搜索引擎,其在中国市场的布局正逐渐显露其独特的价值与潜力。随着必应Bing广告正式对中国市场开放,它不仅为国内…

活动回顾 | 春起潮涌——硬件驱动的量化交易与AI

4月20日,华锐技术ACLUB联合AMD在上海举办了“春起潮涌——硬件驱动的量化交易与AI”沙龙活动,会议围绕FPGA硬件加速、CPU&网卡调优、AI技术应用等展开,近50位量化IT与分享嘉宾一起探讨硬件技术在量化交易和AI领域的应用和创新。 FPGA在交…

SmartEDA助力教学创新:探索未来教育的无限可能

在数字化、智能化的浪潮中,教育领域正经历着前所未有的变革。SmartEDA,作为一款强大的数据分析工具,不仅能够助力科研工作者探索数据的奥秘,还能为教育工作者提供全新的教学手段和思路。本文将探讨如何使用SmartEDA进行教学&#…

Vue3框架

Vue3框架 一.使用create-vue搭建Vue3项目二.组合式API - setup选项1.setup选项的写法和执行时机2.setup中写代码的特点3. script setup 语法糖 三.组合式API - reactive和ref函数1. reactive2. ref3. reactive 对比 ref 四.组合式API - computed五.组合式API - watch1. 侦听单个…

【OC和红移的双面材质】

OC和红移的双面材质 2021-12-23 18:36 rs oc 评论(0)

【酱浦菌-模拟仿真】python模拟仿真PN结伏安特性

PN结的伏安特性 PN结的伏安特性描述了PN结在外部电压作用下的电流-电压行为。这种特性通常包括正向偏置和反向偏置两种情况。 正向偏置 当外部电压的正极接到PN结的P型材料,负极接到N型材料时,称为正向偏置。在这种情况下,外加的正向电压会…

nmap扫描工控设备的脚本支持

参考资料 转自(http://www.360doc.com/content/15/1201/11/26186435_517125254.shtml) 介绍 NMAP是一款强大的网络扫描工具,除了普通的TCP/IP网络扫描之外,NMAP的扩展脚本功能为我们提供了更为广阔的应用范围。 针对脚本学习可…

构建下一代去中心化应用:基于BASE链的DApp开发

在区块链技术的快速发展中,去中心化应用(Decentralized Applications,DApps)已经成为了一个热门话题。这些应用通过区块链技术,实现了去中心化、透明、安全和不可篡改的特性,为用户提供了全新的体验和解决方…

js使用echarts图表的柱状图的使用

效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html> <head><title>Bar Chart with Custom Label</title><script src"https://cdn.jsdelivr.net/npm/echarts5.2.2/dist/echarts.min.js"></script> </head&…

Linux编辑器调试器 gcc/g++ gdb 编译过程及使用讲解

这恋爱呀 我有两不谈 第一异性不谈 因为我们性别不一样 我知道的她不知道相处起来太累 第二同性不谈 因为我们性别一样 我知道的他也知道相处起来太无聊了 –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–❀–❀–❀–❀–…

stm32f103c8t6学习笔记(学习B站up江科大自化协)-UNIX时间戳、BKPRTC

UNIX时间戳 UNIX时间戳最早是在UNIX系统使用的&#xff0c;所以叫做UNIX时间戳&#xff0c;之后很多由UNIX演变而来的系统也继承了UNIX时间戳的规定&#xff0c;目前linux&#xff0c;windows&#xff0c;安卓这些操作系统的底层计时系统都是用UNIX时间戳 时间戳这个计时系统和…

numpy+matplotlib绘制玫瑰线图案

【第10次课]实验十一数据可视化及应用】 声明&#xff1a;著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 1.简答题 本实验绘制简单图形&#xff0c;要导入numpy库函数和matplotlib.pyplot子库函数: import matplotlib.pyplot as plt impor…

iOS 17上如何恢复数据?iOS 17 数据恢复软件

“您好&#xff0c;我正在为我的 iPhone 寻找一款iOS 17 数据恢复软件。升级到 iOS 17 后&#xff0c;我丢失了 iPhone 上的所有照片、联系人和消息。有什么建议吗&#xff1f;” ——丹尼 iOS 17数据恢复软件下载 升级到iOS 17后如何恢复丢失的数据&#xff1f;由于在 iPhone…

【保姆级讲解如何安装与配置Xcode】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

国内各种免费AI聊天机器人(ChatGPT)推荐(上)

作者主页&#xff1a;点击&#xff01; 国内免费AI推荐专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月27日11点25分 欢迎来到AI聊天机器人推荐系列的第一篇文章&#xff01; 在这个系列中&#xff0c;我将引领您探索国内各种AI聊天机器人的精彩世界。 从…

Linux内核之临时映射内核内存:kmap_atomic用法实例(六十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

解决Android Studio安卓开发写入文件问题

有很多小伙伴想把文件写进安卓系统储存失败&#xff0c;类似下面的代码 val file File("account.txt")val writer BufferedWriter(FileWriter(file))writer.use {it.write(username "," password)} 用java方式写入读出文件但是显示成功但是找不到文件…