TCP流量控制与拥塞控制

学习笔记:
        TCP是作用与端系统的协议,其首部中包含着源端口号和目标端口号,其作用就是实现可靠传输,并将接受到的数据派发给合适的进程。
        流量控制和拥塞避免都是作用在传输层的网络性能优化的方案;
        其中流量控制是端对端的控制(被动控制)。其中客户端和服务端各自维护着收发缓存区域以及收发窗口,通过接受方的接收性能来协商发送窗口的大小。其中缓存区域存放的都是基于字节流的数据,当接收方处理不过来的时候就要限制发送窗口的大小,可以在TCP首部的窗口大小中进行定义。甚至会使发送窗口大小设置为0,即停止发送数据。但是此时为了防止死锁(接收方发了一个TCP包重新扩容了发送窗口,但是这个包丢了),发送方会启用一个定时器,每隔一段时间确认一遍发送窗口的大小是否改变。
        拥塞控制的话则是为了维护整个网络的性能,当检测到网络拥堵(丢包)时,发送方主动降低发送速率,减少网络中的负载。拥塞控制在发送方定义了一个拥塞窗口,来限制发送方可以发送数据的范围。即一开始通过慢启动,以指数的形式来扩大MSS的数量,然后当第一次丢包的时候(或者达到慢开始门限的时候)将发送的包数量降低为原来的一半。接着开始启用拥塞避免方法,每经过一次往返确认时间后增加一个MSS,直至又出现拥塞。则将慢开始门限降低为拥塞窗口的一半。重新开始慢开始》拥塞避免的流程(此处注意,当启用慢开始再次超过慢开始门限时,拥塞窗口的大小不会降低为原来的一半,而是直接从慢开始门限开始拥塞避免式增长...)。后面涉及的快恢复,指的是直接从减半后的慢开始门限处启用拥塞避免式增长。而不是从1开始执行慢开始直至慢开始门限。后面涉及的快速重传,指的是接受到乱序报文后,将连续发送三个确认包,确认缺失之前的部分,则发送方则不会要等到超时后才重传,而是直接将缺失的部分再次传递过来。
        发送窗口的实际大小 = Math.min(接收窗口定义的发送窗口的大小, 拥塞窗口);

#笔记#
全部评论
学习了
点赞 回复 分享
发布于 2019-09-02 16:58

相关推荐

项目适用岗位:互联网C++后端, 大模型端侧部署 ,自动驾驶/机器人具身智能C++开发1、底层通信组件方案通信模式封装支持兼容多种通信模式普通消息模式:PUB/SUB(发布订阅)、PUSH/PULL(点对点通信)RPC 模式:通过ZMQ_REP、ZMQ_REQ 封装 RPC 功能RPC功能支持 RPC 方法的动态注册提供默认的 RPC 方法列表查询支持 RPC 调用2、Master模块(实现思路:类似ROS1 Master功能, 更轻量化)背景:分布式大模型系统中,多个节点(如llm/vlm, asr,tts, camera,yolo)需要动态发现彼此并高效通信,外部用户可以动态管理节点内任务调度​​节点注册与发现​实现轻量化内存kv缓存数据库:存储节点元信息;并提高sql查询接口,供节点动态通信节点启动时向Master模块注册,上报自身元信息;节点通信时自动匹配动态任务调度分配设计用户请求-任务匹配机制:外部用户仅封装简易数据包请求,可实现动态控制各个模块(启停/llm推理等)3、Channel模块封装上层发布-订阅(PUB/SUB)和点对点通信(PUSH/PULL)混合通信模式设计闭包,通过闭包将​​网络层​​(ZeroMQ)与​​业务层​​(用户回调)解耦,同时隐式维护了通信上下文状态。4、Infra基础架构模块rpc分布式控制指令下发+异步​事件驱动架构​​注册rpc_setup/rpc_pause等分布式控制接口->注册eventpp事件监听->上层触发rpc调用 -> 添加eventpp事件队列中-> 异步事件驱动->各子类Setup/Pause等功能接口标准化控制协议​​基于抽象接口(Setup/Pause等)实现跨模块统一管控,支持LLM/ASR/TTS等异构节点无缝集成5、TASK模块与Infra模块关系:类似与进程和线程之间关系,Infra模块负责资源分配和流程管控,TASK模块是真正干活的,干的活如下:各模块中模型生命周期管理(加载/卸载)infra推理包装回调输出等等            
Sor大白:项目适用岗位:互联网C++后端, 大模型端侧部署 ,自动驾驶/机器人具身智能C++开发
点赞 评论 收藏
分享
05-19 这一周的面试。二面 40 分钟。发面经攒人品 许愿后面顺利简历项目一个是重写 muduo 网络库,一个是简单的 web server。一开始面试官问了一些学习原因,目标,兴趣方面的问题。1. 简单介绍自己(我的自我介绍太长了,需要改进。面试官在 1 分 30 礼貌打断开始提问了)2. 你自学这些项目时,是怎么样的想法?为什么要学?想达到什么效果?   开源的框架已经有了 django,为什么你还要做呢?你看过开源框架的代码吗?3. 怎么样算是这个事情达成了呢?你是用什么标准来衡量自己的呀?4. 你自己对这些感兴趣吗?就是这个项目,自己做的事情5. muduo 网络库本来是什么语言?最后效果怎么样?比原生的要好吗?(回答说没有,再详细说明做 muduo 网络库的原因,从 webserver 中的事件驱动编程说的)6. 你有什么收获?(主要学习了网络编程,多线程编程,IO 多路复用。拓展提到 asio 库,redis 中的 IO 多路复用。)7. 为什么硕士转了方向?你转到计算机之后,一些基本的课程,是自己去补的吗?8. 编译原理了解吗?词法分析和语法分析用到哪些数据结构和方法,了解吗?怎么把表达式和函数分析出来?9. 一个进程在操作系统上跑起来之后,它的内存分布大概有哪些?(答了代码段,数据段,堆,栈)还有吗?10. 堆和栈,哪些东西在堆上,哪些在栈上?    - 局部变量都在栈上吗?如果很大呢,声明一个一百万的数组呢?11. 怎么避免爆栈问题?怎么知道会不会爆栈?写代码有什么建议,比如,超过多大就需要用动态内存分配大数组?12. 听过读写锁吗,怎么实现?(10 分钟左右,可能算场景题了吧。)    - 读者怎么请求锁,释放锁?写者呢?    - 后来按照 acquire read,release read 这样的 api 来分别说明。代码题:数组中除自身以外的数字的乘积反问对实习生的期待。
查看14道真题和解析 面试问题记录
点赞 评论 收藏
分享
评论
4
25
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务