news 2026/6/10 15:00:36

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入 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
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/3 21:27:34

人类自然语言与大模型的桥梁——Embedding嵌入模型

“ Embedding模型是自然语言和模型的桥梁。” 了解过RAG技术的人应该都知道Embedding嵌入模型&#xff0c;但很多人可能并没有认真了解过这个核心组件&#xff1b;在大部分人眼中&#xff0c;Embedding模型是一个“不重要”的组件&#xff0c;只需要把文档切分之后&#xff0c;…

作者头像 李华
网站建设 2026/6/9 12:54:29

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

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

作者头像 李华
网站建设 2026/6/10 13:43:51

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

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

作者头像 李华
网站建设 2026/6/9 17:27:52

亲测好用!专科生毕业论文TOP10 AI论文平台测评

亲测好用&#xff01;专科生毕业论文TOP10 AI论文平台测评 2026年专科生毕业论文AI平台测评&#xff1a;选对工具事半功倍 随着人工智能技术的不断进步&#xff0c;越来越多的专科生开始借助AI写作工具来提升毕业论文的撰写效率与质量。然而&#xff0c;面对市场上五花八门的平…

作者头像 李华
网站建设 2026/6/8 19:41:04

Apache HTTP Server 高危漏洞:mod_proxy编码问题导致认证绕过

Apache HTTP Server — ACL 绕过 CVE-2024–38473 概述&#xff1a; 描述&#xff1a; 此漏洞源于 mod_proxy 模块中的一个编码问题&#xff0c;它允许将编码不正确的请求 URL 发送到后端服务。这有可能通过精心构造的请求绕过认证。 该漏洞可能允许攻击者绕过认证机制&#xf…

作者头像 李华
网站建设 2026/6/10 14:24:39

2026必备!10个AI论文写作软件,助本科生轻松搞定毕业论文!

2026必备&#xff01;10个AI论文写作软件&#xff0c;助本科生轻松搞定毕业论文&#xff01; AI 工具如何改变论文写作的未来 随着人工智能技术的不断发展&#xff0c;越来越多的本科生开始关注并依赖 AI 工具来提升论文写作效率。尤其是在当前 AIGC&#xff08;人工智能生成…

作者头像 李华