CS随笔-TCP瞎逼逼之数据传输
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瞎逼逼之数据传输相关推荐
- 从 HTTP 瞎逼逼到 HTTP/2
我真的是在瞎逼逼,因为光是 HTTP,就足够讲一块砖头了.而且,HTTP 只是协议栈的应用层的其中一个协议:),不过其他协议都不在本文讨论范围之内.如有疏漏,请指正. 概述:HTTP vs HTTPS ...
- 一周总结 | 瞎逼逼
点击上方"AI算法与图像处理",选择加"星标"或"置顶" 重磅干货,第一时间送达 预计阅读时间: 4 分钟 上个月,我终于找到了新的工作,找 ...
- 面试阿里被问到JVM,不逼逼赖赖,直接盘给面试官看!!!
面试阿里被问到JVM,不逼逼赖赖,直接盘给面试官看!!! 概述 JVM体系结构 类加载机制 类加载器 类加载过程 双亲委派机制 全盘负责委托机制 打破双亲委派机制 自定义类加载器实现 JVM运行时数据 ...
- 菜鸡瞎逼逼:基于UGUI的图文混排
前一阵子在做UI的时候遇到了这样的一个需求,是在一行里显示这样的东西: 而且我们这个项目要做多语言,也就是前边后边的文字都不一定是什么,有可能是中文有可能是英文有可能是俄语也有可能是泰文-(我们项目虽 ...
- 菜ji瞎逼逼:基于UGUI的图文混排(续)
上一篇 图文混排 时至今日又有到这个需求 就又把这个捡起来,顺便发现有了更好的理解.以做记录 直接上shader // Author:zouchunyi // E-mail:zouchunyi@kin ...
- 当段子手已经hi起来的时候,产品经理也来瞎逼逼一下faceid
苹果发布会后,各种段子满天飞,着实热闹了一把. 比较经典的包袱是:老婆被老公刷脸:被打成熊猫后没法报警:韩国人没法用: 比较正式的疑问是:双胞胎怎么办?(这个其实不用太担心了,最强大脑里的百度机器人都 ...
- Wireshark工作笔记-对TCP连接与断开以及数据传输的实战分析
首先要使用一个TCP/UDP Socket调试工具. 本次使用虚拟机NAT模式,主机IP地址为192.168.164.1,此时主机的/UDP Socket调试工具配置如下: 虚拟机采用Win7 IP地 ...
- python中基于tcp协议的通信(数据传输)
tcp协议:流式协议(以数据流的形式通信传输).安全协议(收发信息都需收到确认信息才能完成收发,是一种双向通道的通信) tcp协议在OSI七层协议中属于传输层,它上承用户层的数据收发,下启网络层.数据 ...
- 记一次傻逼逼的python引入自定义的库函数
内容 为了参加阿里云天池的一个比赛,官方提供了一个python调用的接口函数,用于读取kfb文件格式的图像,所以就需要将这个库函数引入项目工程中,但是我的一直报错说是DLL Load failed.我 ...
最新文章
- db browser连接mysql_MyEclipse DB Browser 连接 MySQL 配置 mysql select
- 深度学习DL蒙特卡洛法平衡态分子动力学模拟并计算苯酚键值
- Ubuntu连接WiFi
- Lua日期与时间操作
- switch字符串jdk_应用新的JDK 11字符串方法
- Linux 如何安装程序的源代码软件包/源码程序包/源码包?
- Cisco 3560 配置DHCP Relay实例
- oracle crs 命令,ORACLE RAC CRSCTL 命令使用 及 执行的用户
- asp.net中用后台代码创建datatable和html表格,ASP.NET中用后台代码创建DataTable和HTML表格...
- cellmap 基站查询 for android
- 干掉 SQL 中的 like,我用 es 后运营小姐姐们都说好快!
- 100天python、github_GitHub - 1392792445/Python-100-Days: Python - 100天从新手到大师
- “好工作”的最关键指标:场景足够复杂、数据量足够大、杠杆率足够高
- ImageNet数据集的0到999Label对应的类别分别是什么
- C语言uint8_t和char的区别,c – int8_t和uint8_t是char类型吗?
- 不重装系统改硬盘模式: RAID ON 改成 AHCI
- redis6.2.6版本配置详解
- 基于CAD纵断面图生成地质体模型
- Android工具修复属性,Android 热修复介绍之代码修复
- 机器学习之算法优化(一)