Tcp可靠传输的实现,主要是做好三方面的细节

1.滑动窗口

2.流量控制

3.拥塞控制

一、滑动窗口

1…10…20…30…40…50…60…70…80…90…100

1…10…20…30…40…50…60…70…80…90…100

首先,给要发的数据通通标上序号

假设:一个数据对应一个序号,已经三次握手,1-19序号的数据已经收到

现在接受方给发送方发消息:发了个ack=19,意思是劳资要从20开始的数据,发了个rwnd=20,意思是一下给我发20个序号。

发送方收到接收方的喊话,做出回应:要的,跟你发,seq=11,表示接收方要的货从11开始的,

一下给接收方发了20个序号,等着接收方回应。

接下来要分情况讨论了

情况一,理想情况

接收方顺利的收到的这20个序号,窗口往前跑,并发个ack=40,告诉发送方,前面的字节我都收到了,这时候发送方的窗口也往前移动,这就是最理想的滑动窗口

1…10…20…30…40…50…60…70…80…90…100    ,看不懂就发挥你的想象力

 算了,贴个图(图与例子不对对应),还不懂,加油,你一定能懂的。

情况二,丢包了

接收方收到了  20,21,23,24, 拐哒,22,没收到,在网络传输的过程中,序号22贪玩,不晓得跑哪旮旯去了。

关键点来了,这时接收方给发送方发的确认包是ack=21,表示序号21收到了。这个应答包,关键就关键在他是以按序收到的数据的最高序号给出确认。有点绕, 按序收到、最高序号、确认。

滑动窗口:接收方滑动窗口到22, 发送方接收到确认包后,滑动窗口到22。

这时发送方给接收方发送了序号为22的数据,接收方接收到了,直接滑动窗口到25,因为刚刚说23,24,已经收到了。一般情况下,未按序收到的序号会暂存在接收窗口中。

极端情况,当发送方迟迟没有收到接收方的确认之后,就会超时重。比如,发了30的序号,发送反开始重传计时,重传计时器超时都没有收到确认包,就会再次发送该序号。

发送方和接收方窗口就这么相互滑动,知道数据收发完。

(错误之处,敬请指正)

CS随笔-TCP瞎逼逼之数据传输相关推荐

  1. 从 HTTP 瞎逼逼到 HTTP/2

    我真的是在瞎逼逼,因为光是 HTTP,就足够讲一块砖头了.而且,HTTP 只是协议栈的应用层的其中一个协议:),不过其他协议都不在本文讨论范围之内.如有疏漏,请指正. 概述:HTTP vs HTTPS ...

  2. 一周总结 | 瞎逼逼

    点击上方"AI算法与图像处理",选择加"星标"或"置顶" 重磅干货,第一时间送达 预计阅读时间: 4 分钟 上个月,我终于找到了新的工作,找 ...

  3. 面试阿里被问到JVM,不逼逼赖赖,直接盘给面试官看!!!

    面试阿里被问到JVM,不逼逼赖赖,直接盘给面试官看!!! 概述 JVM体系结构 类加载机制 类加载器 类加载过程 双亲委派机制 全盘负责委托机制 打破双亲委派机制 自定义类加载器实现 JVM运行时数据 ...

  4. 菜鸡瞎逼逼:基于UGUI的图文混排

    前一阵子在做UI的时候遇到了这样的一个需求,是在一行里显示这样的东西: 而且我们这个项目要做多语言,也就是前边后边的文字都不一定是什么,有可能是中文有可能是英文有可能是俄语也有可能是泰文-(我们项目虽 ...

  5. 菜ji瞎逼逼:基于UGUI的图文混排(续)

    上一篇 图文混排 时至今日又有到这个需求 就又把这个捡起来,顺便发现有了更好的理解.以做记录 直接上shader // Author:zouchunyi // E-mail:zouchunyi@kin ...

  6. 当段子手已经hi起来的时候,产品经理也来瞎逼逼一下faceid

    苹果发布会后,各种段子满天飞,着实热闹了一把. 比较经典的包袱是:老婆被老公刷脸:被打成熊猫后没法报警:韩国人没法用: 比较正式的疑问是:双胞胎怎么办?(这个其实不用太担心了,最强大脑里的百度机器人都 ...

  7. Wireshark工作笔记-对TCP连接与断开以及数据传输的实战分析

    首先要使用一个TCP/UDP Socket调试工具. 本次使用虚拟机NAT模式,主机IP地址为192.168.164.1,此时主机的/UDP Socket调试工具配置如下: 虚拟机采用Win7 IP地 ...

  8. python中基于tcp协议的通信(数据传输)

    tcp协议:流式协议(以数据流的形式通信传输).安全协议(收发信息都需收到确认信息才能完成收发,是一种双向通道的通信) tcp协议在OSI七层协议中属于传输层,它上承用户层的数据收发,下启网络层.数据 ...

  9. 记一次傻逼逼的python引入自定义的库函数

    内容 为了参加阿里云天池的一个比赛,官方提供了一个python调用的接口函数,用于读取kfb文件格式的图像,所以就需要将这个库函数引入项目工程中,但是我的一直报错说是DLL Load failed.我 ...

最新文章

  1. db browser连接mysql_MyEclipse DB Browser 连接 MySQL 配置 mysql select
  2. 深度学习DL蒙特卡洛法平衡态分子动力学模拟并计算苯酚键值
  3. Ubuntu连接WiFi
  4. Lua日期与时间操作
  5. switch字符串jdk_应用新的JDK 11字符串方法
  6. Linux 如何安装程序的源代码软件包/源码程序包/源码包?
  7. Cisco 3560 配置DHCP Relay实例
  8. oracle crs 命令,ORACLE RAC CRSCTL 命令使用 及 执行的用户
  9. asp.net中用后台代码创建datatable和html表格,ASP.NET中用后台代码创建DataTable和HTML表格...
  10. cellmap 基站查询 for android
  11. 干掉 SQL 中的 like,我用 es 后运营小姐姐们都说好快!
  12. 100天python、github_GitHub - 1392792445/Python-100-Days: Python - 100天从新手到大师
  13. “好工作”的最关键指标:场景足够复杂、数据量足够大、杠杆率足够高
  14. ImageNet数据集的0到999Label对应的类别分别是什么
  15. C语言uint8_t和char的区别,c – int8_t和uint8_t是char类型吗?
  16. 不重装系统改硬盘模式: RAID ON 改成 AHCI
  17. redis6.2.6版本配置详解
  18. 基于CAD纵断面图生成地质体模型
  19. Android工具修复属性,Android 热修复介绍之代码修复
  20. 机器学习之算法优化(一)

热门文章

  1. 一个普通程序员买古董的曲折经历(二)
  2. 打开计算机硬盘竖着两列,怎么把excel的两行改成列
  3. HDU---1754 I Hate It
  4. 一位普本211大一计算机专业学生的寒假总结
  5. 关于RxSwift MVVM flatMapLatest 点击事件网络请求失败整个序列结束
  6. 有哪些家用的投影仪?什么牌子的投影仪便宜好用
  7. ContactsUtil 工具类 - 转载
  8. 安卓和苹果按钮颜色不同解决方案
  9. SSL_read返回SSL_ERROR_WANT_READ怎么办?
  10. 液晶显示器HSYNC、VSYNC、DE、CLK关系