网络基础篇~三次握手和四次挥手
一、TCP 头部数据结构一TCP头部数据结构:【源端口号16位】 | 【目标端口号16位】 seq序列号32位:序列号用于将多个数据包进行排序形成一个完整有序的数据流 ack(确认应答号32位): SYN报文:1表示连接请求或是连接接收请求 synchronize sequence numbers 同步序列编号 ACK报文:1表示确认号字段有效 acknowledge character 确认字符 FIN报文:请求断开0表示不请求1表示没有数据传输 RST报文:连接状态0表示正常1表示异常 【数据】二TCP头部数据结构表图二、TCP三次握手一简单描述三次握手过程第一次握手 【客户端】to【服务端】:【SYN报文】 seq client_isn客户端序列号 #客户端处于:SYN_SEND状态 第二次握手 【服务端】to【客户端】:【SYN,ACK报文】 ack client_isn 1 seq server_isn服务端序列号 #服务端处于:SYN-RCVD状态 第三次握手发送 【客户端】to【服务端】:【ACK报文】 ack server_isn 1 seq client_isn 1 #客户端处于:ESTABLISHED状态 **第三次握手是可以携带数据的前两次握手是不可以携带数据的**二简单抽象的描述三次握手1c-s - SYN - seq 2s-c - SYN - ACK - seq - ack 3c-s - ACK - seq - ack三TCP 三次握手表图如下3.1 抓包截图三、TCP四次挥手一简单描述四次挥手过程#第一次挥手 【客户端】to【服务端】:【FIN,ACK】, seq 序列号X , ack y#客户端进入FIN_WAIT_1状态 #第二次挥手 【服务端】to【客户端】:【ACK】 seq y , ack x1#服务端发送完成进入CLOSE_WAIT状态、客户端接收成功进入FIN_WAIT_2状态 #第三次挥手 【服务端】to【客户端】:【FIN】 seq y , ack x1#服务器发送完成进入LAST_ACK状态 #第四次挥手 【客户端】to【服务端】:【ACK】 seq x1,ack y1#客户端发送完成进入TIME_WAIT状态,服务端接收成功进入CLOSE状态二简单抽象的描述四次挥手1s - c - FIN - seq - ack 2c - s - ACK - seq - ack 3c - s - FIN - ack - seq 4s - c - ACK - ...三TCP 四次挥手表图如下3.1 抓包截图如下四、TCP三次握手状态变化一简单画画三次握手状态变化五、TCP四次挥手状态变化一简单画画四次挥手状态变化六、三次握手全部状态一CLOSED状态服务端和客户端初始状态二SYN_SEND状态1客户端发送SYN后状态转为SYN_SENT2客户端通过应用程序调用connect进入active open.发送SYN报文建立连接之后状态置为SYN_SENT三LISTEN状态1服务端收到客户端SYN请求报文。2服务端打开一个socket进行监听状态置为LISTEN监听。四SYN_RCVD状态1服务端给客户端发送SYN请求报文ACK 状态转为SYN_RCVD.2A connection request has been received fromthenetwork.五ESTABLISHED状态1服务器SYN_RECVD状态收到ACK后状态为ESTABLISHED2客户端SYN_SENT状态收到SYN、ACK后发送ACK状态转变为ESTABLISHED3The socket has anestablishedconnection.六拓展了解1.如何避免SYN攻击调大netdev_max_backlog增大TCP半连接队列开启tcp_syncookies减少SYNACK重传次数六、四次挥手的全部状态一ESTABLISHED状态连接传输数据中二FIN_WAIT_1状态1FIN_WAIT_1只出现在主动关闭的那一端表示等待对方的FIN报文。2FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时它想主动关闭连接向对方发送了FIN报文此时该SOCKET即进入到FIN_WAIT_1状态。对方回应ACK报文后则进入FIN_WAIT_2状态。3实际无论对方何种情况下都应该马上回应ACK报文导致有可能见不到FIN_WAIT_1状态。三FIN_WAIT_2状态1主动关闭的一端FIN_WAIT_1状态得到对方返回ACK报文就进入FIN_WAIT_2状态2进入FIN_WAIT_2状态后在没有拿到FIN报文之前说明服务器端还有数据传输那此时为半连接。四CLOSE_WAIT状态服务器端在收到 FIN 后发送 ACK状态为 CLOSE_WAIT如果此时服务器端还有数据需要发送那么就发送直到数据发送完毕此时服务器端发送FIN状态变为 LAST_ACK;五LAST_ACK状态last_ack持续时间一般为一个RTOretransmission timeout数据包重传的timeout时间的时间这个时间根据RTT动态计算出来有两个作用作用一是处理重用连接防止前一个连接上延迟的数据包或者丢失重传的数据包被后面复用的连接前后两次连接的协议相同ip相同端口号相同且包的seq号也恰巧相同错误的接收则发送rst重置连接作用二是在发送第二个fin之后如果在RTO之后还没收到ack则重发fin。六TIME_WAIT状态FIN_WAIT_1进入此时应用程序端口收到 FINACK而不是像 FIN_WAIT_2 那样只收到 ACK说明数据已经发送完毕并向服务器端口发送 ACKFIN_WAIT_2进入此时应用程序端口收到了 FIN然后向服务器端发送 ACKTIME_WAIT 是为了实现 TCP 全双工连接的可靠性关闭用来重发可能丢失的 ACK 报文需要持续 2 个 MSL (最大报文生存时间)假设应用程序端口在进入 TIME_WAIT后2 个 MSL 时间内并没有收到FIN,说明应用程序最后发出的 ACK 已经收到了否则会在 2 个 MSL 内在此收到ACK报文七CLOSE状态服务器LAST_ACK状态接受ACK包后会等待一段时间2MSL以确保所有的数据包都已经被对方接受和处理保证通信的可靠和稳定。八拓展了解1.TIME_WAIT过多有什么危害第一是占用系统资源比如文件描述符、内存资源、CPU资源、线程资源等第二是占用端口资源端口资源也是有限的一般可以开启的端口为32768~61000也可以通过net.ipv4.ip_local_port_range参数指定范围。2.如何优化TIME_WAIT打开net.ipv4.tcp_tw_reuse 和 net.ipv4.tcp_timestamps选项net.ipv4.tcp_max_tw_buckets程序中使用SO_LINGER,应用强制使用RST关闭。

相关新闻

Rust 常量函数 `const fn` 完全解析:RFC 911 设计初衷、常量表达式规则与三十年的能力演进

Rust 常量函数 `const fn` 完全解析:RFC 911 设计初衷、常量表达式规则与三十年的能力演进

文档 【免费下载链接】rfcs RFCs for changes to Rust 项目地址: https://gitcode.com/gh_mirrors/rf/rfcs 点击查看 免费下载 导读:本文以 Rust RFC 仓库中的 RFC 911《const fn》 为核心,系统梳理 const fn 引入的动机、语法设计与常量表达…

2026/10/15 1:52:07 阅读更多 →
用任意语言实现“Lenguaje Hacker“:MoureDev 2023 编程挑战第 1 题(leet / 1337 字符映射转换)完整实战指南

用任意语言实现“Lenguaje Hacker“:MoureDev 2023 编程挑战第 1 题(leet / 1337 字符映射转换)完整实战指南

示例工程 【免费下载链接】retos-programacion-2023 Ejercicios de cdigo semanales en 2023 de la comunidad MoureDev para practicar lgica en cualquier lenguaje de programacin. 项目地址: https://gitcode.com/gh_mirrors/re/retos-programacion-2023 点击查…

2026/10/15 1:52:07 阅读更多 →
SSH证书登录全攻略:从密钥生成到安全加固的运维实践

SSH证书登录全攻略:从密钥生成到安全加固的运维实践

SSH证书登录(密钥认证)一直是我接手新服务器或者批量管理机器时第一个配置的项目。不管你是刚接触Linux服务器的小白,还是已经用密码登录硬扛了好一阵子的开发者,这套配置基本属于必做的“地基工程”。这篇文章,我从实…

2026/10/15 1:52:07 阅读更多 →

最新新闻

SQLite+FTS5+BM25构建本地化上下文管理方案

SQLite+FTS5+BM25构建本地化上下文管理方案

1. “context-mode”到底是什么?别被术语唬住,它本质是让AI真正“听懂上下文”的工程实践你最近在技术社区、开源项目讨论区,甚至IDE插件更新日志里反复看到“context-mode”这个词——它不像“HTTP”或“JSON”那样有明确的RFC文档&#xff…

2026/10/15 2:30:22 阅读更多 →
物理AI进化式框架HarnessPAI:让机器人在真实环境中持续进化

物理AI进化式框架HarnessPAI:让机器人在真实环境中持续进化

搞物理AI的这两年,我最大的感触就是:模型在仿真里跑得再好,一到真实环境就露馅。机械臂换个光照条件就抓不准,四足机器人走个地毯就打滑,AGV在仓库里被一张飘起来的塑料膜搞到死锁——这些场景我全经历过。所以你问我为…

2026/10/15 2:30:22 阅读更多 →
高阶英语词汇学习:掌握subtleness的136种场景应用

高阶英语词汇学习:掌握subtleness的136种场景应用

1. 项目概述"Subtleness"这个英文单词学习项目,乍看之下只是一个普通的词汇记忆工具,但深入探究后你会发现它实际上是一个针对高阶英语学习者的精密语言训练系统。作为有着15年英语教学经验的从业者,我见过太多学习者卡在"认识…

2026/10/15 2:30:22 阅读更多 →
Hyperframes高密度帧处理实战:批量聚合与流水线并行优化

Hyperframes高密度帧处理实战:批量聚合与流水线并行优化

1. 从“hyperframes”这个词说起:它到底是什么第一次看到“hyperframes”这个词,很多人会愣一下。它不像“docker”“kubernetes”那样有明确的官方定义,也不像某个具体产品名那样一搜就有官网。我在几个技术社区和创意工具圈子里反复看到这个…

2026/10/15 2:30:22 阅读更多 →
AI铲平个人量化门槛:从策略想法到回测实盘的完整指南

AI铲平个人量化门槛:从策略想法到回测实盘的完整指南

最近有个挺有意思的现象,很多人同时在搜"python量化交易策略代码"、"backtrader策略"、"量化比赛"、"博尔量化资金全景指标源码大全"这类词,另外一批人却在搜"deepseek int4量化"、"onnx量化&qu…

2026/10/15 2:30:22 阅读更多 →
成立三个月,Axiom-0 凭什么登顶 RoboCasa365?——一张具身“泛化能力“排行榜,和它背后的路线之争

成立三个月,Axiom-0 凭什么登顶 RoboCasa365?——一张具身“泛化能力“排行榜,和它背后的路线之争

最近具身智能圈有一则消息很提气:总部位于合肥的初创公司第四定律机器人(4Axiom Robotics),其自研的具身智能模型 Axiom-0 登上了国际权威具身评测基准 RoboCasa365 Benchmark,进入公开排行榜的头部行列——多家媒体用…

2026/10/15 2:29:22 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →