BBRv1 总结

基于丢包的拥塞控制算法缺陷 Bufferbloat导致的高延迟 现代网络设备内置了非常大的缓冲区,基于丢包的算法会持续增加发送速率,直到填满缓冲区导致丢包才降速。大量的数据卡在网络设备的缓冲区中,导致排队延迟增大,从而使得整体的网络出现极高的延迟和抖动。 无法区分拥塞性丢包与随机性丢包 在无线网络(...

阅读更多

Release版本程序发生coredump定位思路

在一个没有符号的release版本二进制文件发生coredump时,由于缺乏符号信息,无法直接看到函数名和变量名。 根据地址偏移定位 收集和分析coredump文件 使用gdb加载core文件 gdb <可执行文件名> <coredump文件> ...

阅读更多

Linux进程间通信总结

每个进程都有自己独立的虚拟地址空间,一个进程不能直接访问另一个进程的内存。但在很多应用场景中,多个进程需要协同工作,交换数据。IPC 机制就是操作系统提供的一套让不同进程能够互相通信、同步操作的机制。 进程间通信方式主要有: 匿名管道 命名管道 消息队列 共享内存 信号量 套接字 ...

阅读更多

C++14/17/20新特性总结

C++14 std::make_unique // 旧方式 (不安全) // std::unique_ptr<Foo> p(new Foo()); // C++14 方式 (安全、简洁) auto p = std::make_unique<Foo>(); ...

阅读更多

TCP协议中的定时器

重传超时定时器 建立连接、传输数据,在发送SYN或FIN时,会启动一个定时器, 如果在定时器超时前没有收到ACK,就会重新发送。 SYN发送的次数也有限制:cat /proc/sys/net/ipv4/tcp_syn_retries 传输数据过程中,当发送方发送一个...

阅读更多

TCP协议:滑动窗口机制

TCP使用滑动窗口机制来进行流量控制。 窗口 滑动窗口机制机制的核心在于发送方和接收方都维护一个可变窗口,这个窗口的大小代表了当前可以发送或接收的数据量。 发送窗口: 已发送并已确认的数据: 这部分数据已经安全到达,将被移出窗口。 已发送但未确认的数据: 这部分数据已经发出,但还没有收到接收方的确认...

阅读更多

TCP协议:拥塞控制

产生原因 网络中数据传输需要超过了网络能够处理的最大容量: 数据管道容量 网络设备缓冲区 产生控制拥塞后,数据包累积导致延迟,超过缓冲限制则大量丢失,影响传输效率和吞吐。 算法分类 拥塞控制大类 具体算法 特点 ...

阅读更多

IO多路复用模型

I/O多路复用实现单个线程同时监控多个socket的状态,当任何一个socket文件描述符就绪(可读、可写)时,内核会通知应用程序,从而避免了阻塞和轮询的低效。 Linux中提供了select、poll和epoll三种IO多路复用机制。 select select 函数原型: int select(int...

阅读更多