拥塞控制:防止过多数据注入网络,保证网络中的路由器和链路不过载。对通信连接的端点来说,只有通过通信时延的增加判断是否发生拥塞。要防止过多的数据注入到网络中,一般有四种算法:慢开始算法(TCP刚连接好时,令拥塞窗口为1,每收到一个新报文段确认时,令窗口加1,逐步增大。表现在实际中,每次加倍,直到达到初始化的阈值然后开始每次加1)、拥塞控制算法(一旦网络拥塞就从1开始,但阈值变为当前拥塞窗口值的一半) ·另外两种算法是快重传算法(发送方连续收到三个冗余ACK直接重传,不必等待计时器)和快恢复算法(每次拥塞则阈值变为一半,但是窗口从新阈值开始直接每次加1,跳过了从1开始的过程)。 ·总体来说,流量控制中发送方的数据发送量由接收方决定,而拥塞控制中由发送方自己决定。发送方检测到超时就慢开始+拥塞避免,收到冗余ACK时则采取快重传和快恢复。但实际窗口是接收窗口和拥塞窗口的较小值。

相关推荐

1. this指针是什么?它有什么作用?2. const成员函数有什么特点?如何使用?3. 如何实现一个简单的动态数组?4. enum和enum class有什么区别?5. nullptr是什么?它与NULL有何不同?6. 如何处理内存泄漏?请给出几种方法。7. 解释一下数据库的ACID特性。8. 什么是死锁?如何避免死锁?9. 解释一下链表和数组的区别。10. 什么是哈希表?它的优缺点是什么?11. 如何使用SQL进行数据查询?请给出示例。12. 什么是索引?它如何提高数据库查询性能?13. 解释一下进程和线程的区别。14. 什么是操作系统的中断机制?15. 解释一下二叉树的遍历方式。16. 如何实现一个简单的栈?17. 什么是数据库范式?请简要说明第一范式和第二范式。18. 解释一下内存管理中的堆和栈的区别。19. 什么是SQL注入?如何防止它?20. 解释一下快速排序和归并排序的基本原理。21. 什么是视图(View)?它有什么用?22. 如何使用std::vector实现动态数组?23. 什么是事务?如何实现事务的提交和回滚?24. 解释一下操作系统中的调度算法。25. 如何实现一个简单的图结构?26. 什么是外键?它的作用是什么?27. 解释一下深度优先搜索和广度优先搜索的区别。28. 什么是存储过程?它有什么优缺点?29. 如何处理数据库中的并发访问?30. 解释一下LRU缓存算法的基本原理。我面试看的是大佬的面经,链接放下边了  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
点赞 评论 收藏
分享
牛客网
牛客企业服务