- 博客(416)
- 资源 (12)
- 收藏
- 关注
原创 流量控制与拥塞控制的区别
流量控制:面向接收端,防止被“发爆”;拥塞控制:面向网络,防止网络被“塞爆”;TIME_WAIT 和 2MSL:为保障连接的可靠关闭机制与安全连接复用机制。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-25 14:59:11
48
原创 重复 ACK 的含义
快速重传机制选择3 次重复 ACK作为阈值,是在避免误判与提升响应速度之间的工程折中。它能在维持 TCP 性能的同时减少不必要的重传,已成为各类 TCP 实现(如 Reno、NewReno、Cubic)中的通用标准。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-25 14:58:31
92
原创 TCP 拥塞控制的原理及其主要算法机制
机制作用慢启动快速探测带宽,指数增长拥塞避免避免拥塞,线性增长快速重传快速发现丢包,及时重发快速恢复不进入慢启动,避免性能骤降这些机制共同保证 TCP 在保证可靠传输的同时,也尽量发挥网络带宽,避免过载。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-25 14:57:59
85
原创 IP 分片与 TCP 分段的区别
TCP 分段是由源主机在传输层主动进行,具备可靠性与重传机制;IP 分片是网络层被动处理,风险较高,效率较低;实际开发中,建议调整 MSS,避免出现 IP 层分片,提高网络传输稳定性。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-25 14:57:22
107
原创 MTU 和 MSS 分别是什么
MTU(Maximum Transmission Unit)最大传输单元属于链路层参数,由底层网络设备决定;指在某种物理网络协议下,一个数据帧能够承载的最大数据量(单位为字节);以太网标准 MTU 通常为1500 字节;若 IP 数据报超过 MTU,将在网络层进行 IP 分片,每个分片不超过 MTU。MSS(Maximum Segment Size)最大报文段长度属于传输层 TCP 协议参数;表示TCP 连接中单个报文段中负载数据部分的最大长度,不含 TCP 和 IP 头部;
2025-06-25 14:56:47
159
原创 RTT、RTO 与超时重传机制
RTT 是基础测量数据,RTO 是基于 RTT 推导出的超时判定标准。TCP 使用超时重传机制确保即使在不可靠的网络环境下也能保证数据最终传达,配合快速重传与拥塞控制提升整体性能与稳定性。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-24 20:26:01
177
原创 拥塞控制机制
拥塞窗口cwnd是发送方根据网络拥塞状况动态调整的窗口大小,用于限制发送速率;与接收方通告的接收窗口不同,cwnd反映的是发送方对网络当前可承受能力的估计;实际发送窗口 =,即取拥塞窗口和接收窗口中的较小值作为可发送数据上限。拥塞窗口是发送方使用的控制手段,与接收方的通告窗口互补;拥塞控制适应网络实际带宽状况,避免链路过载;通过“慢启动”实现快速探测可用带宽,后续通过线性增长稳步扩大发送能力。该机制是 TCP 协议实现可靠性与公平性的关键之一,确保网络稳定运行。
2025-06-24 20:25:28
98
原创 流量控制机制
TCP 流量控制通过滑动窗口动态控制发送速率,保证网络稳定性和可靠性,是 TCP 区别于 UDP 的关键特性之一。它能根据接收方能力实时调整,有效避免缓存溢出或资源浪费。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-24 20:21:38
241
原创 高速重发控制机制
例如,如果接收方多次发送 ACK=1001,说明它一直没有收到编号为 1001 的数据段,而收到了后续数据段(如 1002、1003 等),只能缓存并重复发 ACK=1001。TCP 中的**快速重传(Fast Retransmit)**是一种优化的数据重传机制,用于在无需等待超时的情况下尽快重传丢失的数据段。总结:快速重传通过“3 次重复 ACK”作为重传触发条件,是一种比超时重传更快响应的机制,用于提升 TCP 连接的可靠性与吞吐量。请简要说明 TCP 中的高速重发控制机制(快速重传)的原理及优势。
2025-06-24 20:21:06
60
原创 TCP 是如何实现流量控制
TCP 的流量控制是为了防止发送方发送数据过快,超过接收方的处理能力,造成丢包或缓冲溢出。TCP 使用滑动窗口协议来实现流量控制,窗口大小由接收方通过TCP header中的窗口字段(Window Size)来通告给发送方,发送方根据该窗口限制自己的发送速率。问题现象描述原因解决策略死锁接收方窗口为 0,恢复后通知丢失滑动窗口机制依赖确认报文启用持久计时器 + 探测机制糊涂窗口综合症每次发送的数据过少,网络效率低应用层数据处理慢Nagle 算法Clark 方案。
2025-06-24 20:18:18
186
原创 服务器大量 CLOSE_WAIT 原因及排查处理策略
问题说明CLOSE_WAIT多说明服务端收到 FIN 后未及时调用close()典型原因业务阻塞、异常流程未清理、socket 继承处理建议修复逻辑、设超时、统一管理连接生命周期合理设计 TCP 生命周期的状态转换逻辑是服务器开发的基础要求之一。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-23 14:17:37
288
原创 TCP保活计时器
情况响应策略客户端主动断开正常四次挥手关闭客户端突然故障TCP 保活机制探测可达性探测无响应服务端主动关闭连接释放资源TCP 保活机制有效防止了资源被异常客户端长期占用的问题,特别适用于长连接服务端场景(如数据库连接池、长时间未交互的控制链路等)。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-23 14:16:53
119
原创 无time-wait等待的危害
危害点描述报文混淆新旧连接之间的报文交叉,可能被误处理数据异常接收方误认为是当前连接的数据或控制信息服务端异常被动关闭端可能因收到 RST 而误以为连接异常断开连接可靠性下降不能确保连接完整关闭,破坏 TCP 的可靠传输保障TIME-WAIT 是 TCP 中为连接可靠终止而保留的安全间隙,它的存在是保障系统稳定性和数据一致性的关键。跳过它虽然可以“加快速度”,但容易引发数据错乱和连接错误,尤其是在网络质量较差或端口重用频繁的场景中,危害尤为明显。
2025-06-23 14:16:11
217
原创 为什么是三次握手四次挥手
操作次数原因三次握手3因为 SYN 和 ACK 可合并为一次响应四次挥手4因为 FIN 和 ACK 无法合并,被动方需要时间完成数据发送TCP 的设计确保了连接可靠地建立,也能确保所有数据传输完成后再关闭连接,这就是为什么是三次握手和四次挥手的根本原因。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-23 14:14:48
245
原创 为什么需要四次挥手
原因描述全双工通信双方的发送与接收是独立进行的,需要各自单独关闭资源处理差异被动关闭方可能还有数据未发送,不能立即发FIN数据可靠性四次握手确保双方都完全准备好释放连接因此,TCP 关闭连接必须四次挥手,三次并不可靠。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-23 14:14:04
260
原创 TCP 四次挥手
如果这个 ACK 丢失,服务端会重发 FIN,而客户端处于 TIME_WAIT 就可以再次发送 ACK。此外,TIME_WAIT 能避免旧连接的数据影响新连接,保障连接的可靠性。TCP 是全双工协议,通信双方的数据传输是独立的,连接的关闭也必须分别进行确认和释放。因此,连接断开比连接建立多一步,共需“四次挥手”。状态,确保服务端收到 ACK。报文,表示自己没有数据要发送了,但还可以接收数据。,表示已收到客户端关闭连接的请求。,表示已收到服务端的关闭连接请求。状态,等待客户端的最后确认。
2025-06-20 16:41:51
360
原创 TCP连接关闭中的三种重要状态
产生时机:主动关闭连接一方,在完成四次挥手最后一步(收到对方 FIN 并发送 ACK)后进入该状态;持续时间:默认为 2 倍 MSL(Maximum Segment Lifetime),Linux 默认是 60 秒;作用确保对方收到最后一个 ACK,如果丢失可以重发 FIN;避免旧连接的数据与新连接混淆,如果端口重复使用;特点处于该状态的连接不能立即复用同一四元组(源 IP、源端口、目的 IP、目的端口);可以通过内核参数在客户端复用 TIME_WAIT 状态的连接。状态所在角色。
2025-06-20 16:41:27
367
原创 TCP端口复用
目的方法适用角色作用多进程监听同端口服务端提升并发能力服务端快速重启服务端允许绑定处于 TIME_WAIT 的端口复用旧连接端口客户端避免端口耗尽,快速连接通过合理配置 socket 参数和内核选项,可以显著优化 TCP 程序的稳定性和并发性能。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-20 16:38:38
364
原创 为什么是三次握手不是两次握手
防止历史连接复用(最核心原因)确保双方都具备收发能力交换并确认初始序列号(ISN),为数据有序传输提供基础避免资源浪费和死锁TCP 三次握手的设计并非多此一举,而是为了解决连接唯一性、状态一致性与序列同步问题。功能/保障是否能被两次握手实现三次握手解决方案说明防止历史连接被误复用✘第三次 ACK 明确表明客户端在线双方状态确认✘客户端回复 ACK 才算连接可靠序列号双向确认✘通过双向 SYN+ACK+ACK 协商完成因此,
2025-06-20 16:37:02
241
原创 三次握手过程中是否可以携带数据
前两次握手不携带数据是出于安全性与协议稳定性考虑;第三次握手可以携带数据,但实际应用中较少使用,除非明确设计为性能优化场景;连接建立后再传输数据,是 TCP 保证可靠性的重要原则之一。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-20 16:36:30
244
原创 三次握手过程,为什么要三次握手
双方交换初始序列号,保证数据顺序与可靠性;验证客户端与服务端的收发能力都正常;减少资源浪费与被伪造连接带来的攻击风险;在connect()或accept()的过程中自动完成。
2025-06-19 17:23:13
273
原创 三次握手为什么要初始化序列号
初始化序列号(ISN)是为了可靠、有序地组装数据流;使用随机/递增 ISN 是为了防止历史包干扰与安全攻击;如果序列号可预测,TCP 连接容易遭受伪造或劫持,导致严重的安全问题。因此,在三次握手中动态初始化序列号是 TCP 协议设计中确保可靠性与安全性的关键策略。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-19 17:22:37
278
原创 TCP 协议中常见的连接状态
请简要说明 TCP 协议中常见的连接状态及其含义。TCP 协议是面向连接的协议,整个连接生命周期中会经历多个状态,这些状态主要出现在连接建立(三次握手)与连接释放(四次挥手)过程中。
2025-06-19 17:22:06
391
原创 TCP 头部中的几个重要字段
请介绍 TCP 头部中的几个重要字段,并说明它们的具体作用。TCP 是一种面向连接、可靠传输的协议,它的报文头部中包含了多项关键字段,用于实现连接管理、可靠性控制和流量调节。
2025-06-19 17:21:34
338
原创 TCP 报文头中包含哪些信息
请简要说明 TCP 报文头中包含哪些关键信息?各字段的作用是什么?TCP 报文段的头部包含多个关键字段,保证了可靠传输、顺序控制、流量管理等机制的实现。
2025-06-19 17:20:53
234
原创 Linux 中如何回收线程
方法是否阻塞是否自动回收是否能获取返回值适用场景是是是关心线程执行结果的场景否否(需 join 或 detach)是子线程主动退出,需回收资源否是否异步任务、不关心返回值合理选择回收方式可以避免线程泄漏,同时提升程序的健壮性和效率。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-18 18:00:25
313
原创 如何解决僵尸进程造成的问题
方案优点适用场景wait()控制灵活,保留退出状态父进程需获取子进程状态信号回调实时性好,非阻塞并发中型应用双重 fork自动回收,适合守护进程后台运行、守护进程、并发模型kill 父进程简单粗暴,紧急回收系统维护/异常恢复忽略 SIGCHLD自动清理,最简方案并发服务器、性能敏感型系统实际开发中应根据业务需求选择最适合的方案,避免系统资源被大量僵尸进程占用。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-18 17:59:13
396
原创 僵尸进程与孤儿进程的问题危害
类别触发条件危害系统处理方式僵尸进程子进程退出但父进程未调用wait()PID 泄漏,导致系统崩溃风险父进程应显式回收或忽略 SIGCHLD孤儿进程父进程退出但子进程仍在运行无实质危害系统自动转交给init回收因此,僵尸进程需要程序员显式关注和处理,而孤儿进程则可放心交由系统接管。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-18 17:58:38
135
原创 C++性能测评工具
优点局限完整函数调用图,非常炫酷执行速度极慢(成百上千倍)教学、调优早期阶段非常有用不适合生产大数据量场景工具核心机制适用场景优势局限gprof编译插桩单线程函数分析简单快速不支持多线程perf硬件采样生产系统硬件级精度高学习成本稍高valgrind指令模拟调试、教学函数调用全景执行速度慢可视化展示教学展示图形化强大依赖valgrind产出数据标准回答监控指标定位(CPU、内存、IO、网络)找到瓶颈方向;使用性能工具分析,如gprof定位函数热点、
2025-06-17 21:27:19
1023
1
原创 守护进程、僵尸进程和孤儿进程
守护进程是指在后台运行的、没有控制终端的进程,通常在系统启动时创建,常驻内存、长期运行。典型如 Web 服务(httpd)、数据库服务(mysqld)等。
2025-06-17 12:37:31
380
原创 实现一个mutex互斥锁
如果让你自己实现一个mutex互斥锁,你会怎么设计它?请说明核心原理和关键函数的实现。实现一个互斥锁的核心在于正确实现其lock()和unlock()方法,以保证临界区在任意时刻只能被一个线程访问。
2025-06-17 12:36:39
229
原创 半同步,半反应堆并发模式
同步:程序按顺序执行,每一步都等待上一步完成。适用于业务逻辑处理。异步:程序执行由事件触发,无需阻塞等待。适用于 I/O 操作,提高响应能力。
2025-06-17 12:36:05
328
原创 多线程并发编程模式
这些多线程模式根据应用场景不同可以灵活组合使用,如在高性能服务器中常见的 epoll + producer-consumer 模型就是一种经典混合设计。请简要介绍几种常见的多线程并发编程模式,并说明它们适用的场景。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-17 12:35:30
266
原创 进程中的多个线程,哪些资源是共享的
类别资源名是否共享共享资源堆、全局变量、静态变量、文件描述符、互斥锁、信号量是私有资源栈、寄存器、线程 ID、错误码、信号屏蔽字否共享环境代码段、信号处理器、当前目录、用户/组 ID是结论线程之间共享进程级资源,可以实现轻量级通信,但也因此带来同步问题;私有资源则保持线程独立性,便于并发调度和上下文切换。了解线程的资源边界,有助于编写安全、稳定的并发程序。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-16 14:07:25
220
C++ Hook DirectX 11的内部Imgui绘制的框架封装C++ Hook DirectX 11的内部Imgui绘制的
2022-10-07
C++ 面向对象实现的雷霆战机游戏,带音乐 ,主角带动态特效。完整源码 EasyX
2022-07-28
MFC 标签页 TabSheet.h TabSheet.cpp
2022-07-19
Inject.exe
2020-11-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人