深入 TCP 核心:握手、挥手、滑动窗口与并发服务器实战

一、 连接的诞生与消亡

1. 三次握手 (The 3-Way Handshake)

发生时机connect()调用时。
本质:双方确认对方的发送和接收能力正常,并同步初始序列号 (ISN)。

  • 第一次:客户端发送SYN=1, seq=J。(我想连你)
  • 第二次:服务器回复SYN=1, ACK=1, ack=J+1, seq=K。(收到,我也想连你)
  • 第三次:客户端回复ACK=1, ack=K+1。(收到,连接建立!)

程序表现:当三次握手在内核层面全部完成后,客户端的connect函数才会返回 0 (成功)。此时双方状态变为ESTABLISHED

2. 四次挥手 (The 4-Way Wave)

发生时机close()调用时。
本质:TCP 是全双工的,断开需要双向分别关闭。

  • 第一次:主动方发FIN。(我没数据发了,申请关闭发送通道)
  • 第二次:被动方回ACK。(知道了,但我可能还有数据没发完,你先等着)
    • 此时处于半关闭状态 (Half-Close)
  • 第三次:被动方发FIN。(我的数据也发完了,申请关闭)
  • 第四次:主动方回ACK。(好的,再见)。

为什么是四次?
握手时,服务器的 SYN 和 ACK 可以合并在一个包里发。但在挥手时,服务器收到 FIN 后,可能还需要发送未处理完的数据,所以先回 ACK,等数据发完了再发自己的 FIN。


二、 流量控制的秘密:滑动窗口

在 TCP 头部中有一个字段叫Window

  • 误区:它不是屏幕上的窗口,而是一个数值。
  • 本质告诉我你还能吃多少(接收缓冲区的剩余容量)。

工作机制

  1. 接收方在回复 ACK 时,会带上自己的Win大小。
  2. 发送方根据这个数值调整发送速度。
  3. 如果Win=0,发送方就会停止发送(阻塞),直到窗口变大。

这实现了流量控制,防止发送方把接收方“撑死”。


三、 突破瓶颈:多进程并发服务器

1. 问题背景

我们之前写的服务器是迭代服务器(Iterative Server):

while(1){accept();// 接一个process();// 处理完}// 才能接下一个

如果有客户端连上后一直不说话(挂机),process()就会一直阻塞,导致后续的客户端无法连接。

2. 解决方案:多进程模型

利用fork()创建子进程。

  • 父进程:只负责accept(即“迎宾小姐”),一有客人来就 fork 一个子进程。
  • 子进程:负责具体的通信(即“服务员”),服务完一个客人就退出。

3. 代码实战 (tcp_mp_server.c)

为了避免僵尸进程(Zombie Process),我们需要通过信号机制回收子进程。

#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<arpa/inet.h>#include<sys/socket.h>#include<signal.h>#include<sys/wa

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1188717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不仅仅是浏览器渲染:揭秘 Botasaurus 高效的 HTTP 请求封装

在现代网页爬虫与自动化领域&#xff0c;开发者常常面临一个“鱼与熊掌不可兼得”的困境&#xff1a;使用 Headless 浏览器&#xff08;如 Playwright 或 Selenium&#xff09;虽然能轻松应对复杂的 JavaScript 渲染和反爬校验&#xff0c;但资源消耗巨大、速度缓慢&#xff1b…

10个秘密:软件开发者的晋升路径大揭秘

测试从业者的职业晋升新视角 在软件开发生态中&#xff0c;测试从业者常被视为质量守护者&#xff0c;但晋升路径往往模糊不清。本文揭秘10个关键策略&#xff0c;帮助测试工程师突破职业瓶颈&#xff0c;从技术深耕到管理跃迁&#xff0c;实现可持续发展。这些秘密融合行业洞…

如何打开命令提示符

在 Windows 系统&#xff08;包括 Windows 10、Windows 11 和 Windows 11 的最新更新版本&#xff09;中&#xff0c;打开命令提示符&#xff08;Command Prompt&#xff0c;简称 CMD&#xff09;有多种常用方法。下面列出最实用、最快的几种方式&#xff0c;从最推荐开始排序&…

网络安全学习路线图:从零基础到全栈工程师

网络安全学习路线图&#xff1a;从零基础到全栈工程师 “看了 3 个月网络安全教程&#xff0c;学了 TCP/IP、防火墙原理&#xff0c;却连‘怎么用 Nmap 扫一个端口’都不会&#xff1b;跟着视频做了 DVWA 漏洞复现&#xff0c;换个靶场就一脸懵&#xff1b;不知道该先学 Web 渗…

如何避免职业倦怠:软件测试工程师的终极自救手册

倦怠危机的行业特殊性 在敏捷开发与持续交付的行业背景下&#xff0c;软件测试工程师面临版本迭代加速、需求变更频繁、质量责任高压三重挑战。2025年行业调研显示&#xff0c;78%的测试从业者存在中度以上倦怠感&#xff0c;其中自动化脚本维护、跨部门协作摩擦、技术迭代焦虑…

nginx的JavaScript魔力:njs简介与实践

Nginx 的 JavaScript 魔力&#xff1a;njs 简介与实践&#xff08;2026 年视角&#xff09; njs&#xff08;NGINX JavaScript module&#xff09;是 NGINX 官方推出的动态模块&#xff0c;让你可以用 JavaScript&#xff08;ECMAScript 5.1 严格模式 部分 ES6 扩展&#xff…

网络安全学习路线图(2026版详解)

近期&#xff0c;大家在网上对于网络安全讨论比较多&#xff0c;想要学习的人也不少&#xff0c;但是需要学习哪些内容&#xff0c;按照什么顺序去学习呢&#xff1f;其实我们已经出国多版本的网络安全学习路线图&#xff0c;一直以来效果也比较不错&#xff0c;本次我们针对市…

(3-1)机器人身体结构与人体仿生学:人体生物力学与关节分析

本章内容围绕人形机器人身体结构与人体仿生学展开&#xff0c;系统分析了人体生物力学特征及其对机器人结构设计的指导意义。首先从关节自由度、运动范围与扭矩需求入手&#xff0c;结合力臂与质量分布&#xff0c;阐明人体动态平衡的力学基础&#xff1b;随后重点介绍了人形机…

建站知识:域名/ 空间/ IP/ 端口之间的关系

域名、空间、IP、端口之间的关系&#xff08;建站完整图解&#xff0c;2026 年视角&#xff09; 建站最基础的四要素就是这四个&#xff1a;域名、空间&#xff08;服务器/主机&#xff09;、IP 地址、端口。它们的关系可以用一句话概括&#xff1a; 域名 → 解析到 → IP地址…

【全网最全】网络安全自学路线图:从零到专家,附资源清单与避坑指南

只要你敢学我就敢教&#xff01;500集黑客入狱教程&#xff0c;从入门到入狱&#xff01;全程干货无废话&#xff0c;学不会我退网&#xff01; 学习路线图 第一阶段&#xff1a;基础奠基&#xff08;约2-3个月&#xff09; 首先需要建立坚实的基础知识&#xff0c;这是后续…

2026年职业蓝图:从码农到CTO的加速计划

软件测试从业者的独特优势与CTO之路‌ 在数字化转型浪潮中&#xff0c;软件测试从业者常被视为技术生态的“守门人”&#xff0c;但2026年的科技革命&#xff08;如AI与DevOps普及&#xff09;正重塑职业格局。测试工程师凭借对质量、风险与系统的深刻理解&#xff0c;拥有晋升…

耐达讯自动化Profibus总线光纤中继器在连接测距仪中的应用

在工业自动化领域&#xff0c;实时、可靠的数据传输是确保生产效率和系统稳定性的核心要素。Profibus协议作为主流的工业通信标准&#xff0c;在各类自动化设备中广泛应用。然而&#xff0c;面对长距离传输、电磁干扰等复杂工况&#xff0c;传统电缆传输的局限性逐渐凸显。耐达…

精:C# 的四种委托实现详解

一、什么是委托1.1 官方解释委托是一种定义方法签名的类型。当实例化委托时&#xff0c;您可以将其实例与任何具有兼容签名的方法相关联&#xff0c;并通过委托实例调用该方法。1.2 个人理解委托就是用于封装和执行方法&#xff08;函数&#xff09;的一个类。★事件是一种特殊…

国产DevSecOps工具崛起:安全左移战略下的技术创新与市场重构

国产DevSecOps工具崛起&#xff1a;安全左移战略下的技术创新与市场重构 随着数字化转型进入深水区&#xff0c;软件开发的安全需求正在发生根本性变革。Gartner最新预测显示&#xff0c;到2025年中国DevSecOps工具市场将突破78亿元规模&#xff0c;年复合增长率高达42%&#x…

震惊!90%的AI从业者忽略了这些职业发展技巧

AI浪潮下的测试职业警钟 在2026年的今天&#xff0c;人工智能&#xff08;AI&#xff09;已渗透到软件开发的每个角落&#xff0c;但一个令人震惊的数据浮出水面&#xff1a;90%的AI从业者——包括开发者、数据科学家和测试工程师——忽视了关键的职业发展技巧。尤其对于软件测…

耐达讯自动化Profibus总线光纤中继器:光伏逆变器通讯的“稳定纽带”

在光伏发电系统中&#xff0c;实时数据采集与精准控制是保障发电效率与系统安全的核心。光伏逆变器作为能量转换的关键设备&#xff0c;其运行状态需与中央控制系统实时交互。然而&#xff0c;传统Profibus总线在长距离、强干扰环境下易出现信号衰减或中断。耐达讯自动化Profib…

‌软件测试员如何年薪翻倍的5个策略

在当今竞争激烈的软件测试行业&#xff0c;薪资增长已成为从业者关注的核心议题。随着技术迭代加速和企业对质量要求的提升&#xff0c;软件测试员面临双重挑战&#xff1a;一方面&#xff0c;自动化与AI的普及可能挤压基础测试岗位&#xff1b;另一方面&#xff0c;具备高阶技…

多商户+多端一体化:商城系统的核心功能架构与源码实现

温馨提示&#xff1a;文末有资源获取方式寻找一款既能自主创业&#xff0c;又能开启技术服务业务的电商系统&#xff1f;您的需求&#xff0c;现在有了完美的答案。我们为您带来一款经过重磅升级、功能堪称豪华的多端多商户商城源码&#xff0c;它专为有远见的创业者与开发者设…

AI技术分析股票财报

AI技术已经从简单的“数据提取”进化为深度的“策略参谋”&#xff0c;彻底重塑了股票财报分析的流程。以下是AI在该领域的核心应用场景。1. 深度非结构化数据处理传统的财报分析往往集中在利润表、资产负债表等硬性指标。AI利用自然语言处理 (NLP) 技术&#xff0c;能够瞬间穿…

开源商用级的多端多商户万能DIY商城系统全功能源码指南

温馨提示&#xff1a;文末有资源获取方式该系统不仅仅是一个交易工具&#xff0c;更是一个集用户连接、互动营销、数据沉淀于一体的综合性运营平台。它通过全渠道覆盖和深度运营功能&#xff0c;帮助企业将流量真正转化为可重复触达、可持续增值的客户资产。源码获取方式在源码…