吃透 TCP:可靠传输完整原理【上】
目录1. TCP协议段格式2. TCP协议特点2.1 确认应答2.2 超时重传2.3 连接管理2.3.1 三次握手2.3.1.1 三次握手的意义2.3.2 四次挥手TCPTransmission Control Protocol传输控制协议是传输层面向字节流的全双工不可靠传输协议。1. TCP协议段格式TCP协议段格式包含首部选项可选和数据部分。格式如图各个字段的含义1.源端口号/目的端口号分别表示数据从哪个应用进程源端口号来到哪个应用进程目的端口去2. 序号/确认号后文确认应答和超时重传详细介绍。3.首部长度TCP头部长度用来表示TCP头部有多少个32位bit4个字节所以TCP首部的最大长度是 15*460 。4.标志位URT表示紧急指针是否有效。ACK表示确认号是否有效。PSH提醒接收端将接收缓冲区的数据读走。RST对方要求重新建立连接。我们把带有RST的报文称为复位报文段。SYN要求建立连接。我们把带有SYN的报文称为同步报文段。FIN向对方要求断开连接。我们把带有FIN的报文称为结束报文段。5.窗口大小后面讲到滑动窗口后再详细介绍。6.校验和发送端填充该字段进行CRC计算校验和。接收端校验不通过则认为该数据出现错误直接丢弃。此处的校验和不仅包括首部还包含数据部分。7.紧急指针用来指定哪些数据需要紧急传。8 .头部选项后面详细讲。2. TCP协议特点我们都知道UDP是不可靠传输所以它的传输过程是很简单的。但是TCP是可靠传输但网络传输的过程中会遇到千奇百怪的问题为了保证TCP传输的可靠性TCP协议设置了一系列机制来保证数据传输的可靠性和高效性以下一系列TCP协议的机制可以让我们更深入地了解TCP协议的传输可靠性。2.1 确认应答确认应答是指发送端向接收端发送数据了之后接收端在收到并校验成功数据后向发送端发送确认应答ACK告知发送端已成功接收到并发送确认号告知下一次从哪里开始发TCP将每个字节的数据都进行了编号即为序列号如图2.2 超时重传发送方发送完数据后等待接收方的确认应答但不会一直等待TCP设置了最长的等待时间一旦超过该时间还没有收到应答消息就会进行重新传输数据给接收方这就叫超时重传。但发送方没有收到确认应答有几种情况数据在发送过程中丢失产生丢包。主机B发送的确认报文ACK丢失。还有一种情况就是由于网络拥堵导致发送时间超出最长等待时间触发重传。于是主机B会收到大量重复数据通过前面提到的序列号就可以区分哪些是重复数据并将重复数据丢弃。❓问题那么超时时间是如何确定的呢在比较理想的情况下此时选择一个最短的时间能够保证 “ 确认应答一定能够在这个时间返回 ” 。但是由于网络的不稳定性超时时间的长短是有差异的当超时时间太短会频繁地发送重复包当超时时间太长会影响重传机制的。TCP为了在任何情况下都能够有高效的通信因此会动态计算超时时间。Linux中Windows和BSD Unix通常以500ms为一个单位控制超时时间每次设置超时时间都以500ms的整数倍进行控制。如果重发一次仍然没有收到确认应答则以2 * 500ms设置超时时间。如果还是没有反应则以4 * 500ms设置超时时间呈指数倍增长。如果重传次数达到一定限度时发送方就会认为接收方或者网络出现异常强制关闭。2.3 连接管理连接管理分为建立连接和断开连接管理TCP使用 “三次握手” 使双方建立连接使用 “四次挥手” 使上方断开连接。2.3.1 三次握手纯靠文字来描述 “三次握手” 机制难以让大家理解可以先看图客户端先向服务器发送syn同步请求等待服务器发送ack确认应答。【第一次握手】服务器向客户端发送ack确认应答客户端→服务器连接成功同时也发送syn同步请求等待对方ack。【第二次握手】客户端最后向服务器发送ack确认应答服务器→客户端连接成功。【第三次握手】由于步骤②、③都是操作系统内核同时完成的故这两个步骤可以合并故整个TCP建立连接的过程就是这三个步骤称为 “三次握手” 。图中的状态表示的解释CLOSED不存在的状态tcp还没有建立连接LISTEN服务器监听准备随时建立连接SYN_SENT发送syn同步请求SYN_RCVD服务器接收到同步信息并返回了ack和synESTABLISHED表示连接已建立接下来双方可以进行通信。2.3.1.1 三次握手的意义首先看了三次握手的过程有些小伙伴可能会有些疑惑❓问题为什么一次握手不行也就是为什么服务器向客户端返回了ack确认消息之后还要向客户端发送syn同步请求呢不是已经建立了连接了吗☑️答此时的连接成功只是客户端向服务器传输数据且服务器可以成功接收这个方向的成功但并不知道服务器是否能够成功向客户端发送响应所以需要向客户端发送syn同步请求。举个简单的例子例如要测试两个正在用耳机语音时的耳机的连通性耳机A与耳机BA先向B说一句“你好”B收到后回答“嗯呢”但此时B并不知道A是否听到自己的回答于是A听到B的回答后再说“OK了”此过程也可以视作是“三次握手”。那么三次握手的意义是什么总结来讲为以下3点✅投石问路初步验证连接是否通常✅验证通信双方的收发能力是否匹配✅协商关键信息如下一次发送从第几个序号开始2.3.2 四次挥手TCP使用 “ 四次挥手 ” 的策略使通信双方断开连接如图设备A向设备B发送FIN断开连接请求等待设备B返回ACK确认应答。【第一次挥手】设备B收到FIN后立即返回ACK确认应答【第二次挥手】设备B向设备A发送FIN断开连接请求等待设备A发送ACK确认应答。【第三次挥手】设备A收到FIN后立即返回ACK确认应答【第四次挥手】图中的状态表示的解释FIN_WAIT_1主动方发完 FIN等 ACKFIN_WAIT_2主动方收到 ACK等对方 FINCLOSE_WAIT被动方收到 FIN等待应用程序关闭 socketLAST_ACK被动方发完 FIN等待最后的 ACKTIME_WAITTCP主动关闭一方进入确认关闭的最后的一个状态CLOSED主动方发完最后 ACK等待 2MSL。下一节继续介绍TCP可靠传输的特点滑动窗口、流量控制、拥塞控制、延迟应答、捎带应答、面向字节流、 粘包问题、异常情况等感兴趣的小伙伴不妨点个关注再走叭~

相关新闻

鸿蒙 DevEco Testing:上架预检(二)

鸿蒙 DevEco Testing:上架预检(二)

应用上架前,质量检测是必不可少的一步。应用上架预检(本地) 是基于鸿蒙应用上架质量标准构建的一键式自动化测试服务,提供兼容性、性能、稳定性、UX、功耗专项基础质量的专业检测报告,帮助识别应用的基础质量问题。一、…

2026/8/11 20:33:03 阅读更多 →
Java开发者如何实现Vibe Coding:热部署与实时反馈工作流实战

Java开发者如何实现Vibe Coding:热部署与实时反馈工作流实战

1. 先搞清楚 Vibe Coding 到底是什么,以及它和传统开发的区别如果你看到“Vibe Coding”这个词,第一反应是某种新的编程语言或者框架,那可能就理解偏了。它不是一个具体的技术栈,而是一种开发理念和工作流。简单来说,它…

2026/8/11 20:32:53 阅读更多 →
主流编程语言核心特性与应用场景全解析:从C到Python再到Go

主流编程语言核心特性与应用场景全解析:从C到Python再到Go

大家好,我是CSDN的一名技术博主。在日常学习和工作中,我们总会接触到各种各样的编程语言,从经典的C、Java,到现代的Python、Go,再到前端领域的JavaScript、TypeScript。面对如此多的选择,初学者往往感到迷茫…

2026/8/10 12:25:27 阅读更多 →

最新新闻

审小匠 vs ERP 账龄报表与 BI 透视:往来账龄口径一致性评测

审小匠 vs ERP 账龄报表与 BI 透视:往来账龄口径一致性评测

一、同一套往来数据,四个人算出四个账龄 往来账龄是审计底稿里被低估的一张表。表面上它就是"按时间分段求和",实际做过项目复核的人都知道:把同一套应收明细交给四个人,用四种工具去做,很容易得到四份对不上…

2026/8/11 20:32:26 阅读更多 →
AI智能体如何革新社交媒体趋势分析:从概念到Dify实践

AI智能体如何革新社交媒体趋势分析:从概念到Dify实践

如果你是一名开发者、产品经理或市场分析师,最近一定被各种“AI智能体”刷屏了。从Coze、Dify到各种开源框架,似乎一夜之间,所有应用都在“智能体化”。但热闹背后,一个核心问题始终存在: 这些智能体到底能解决什么具…

2026/8/11 20:32:26 阅读更多 →
网络协议 “通关秘籍”:从物理信号到数据传输的 “层层解密”

网络协议 “通关秘籍”:从物理信号到数据传输的 “层层解密”

一、物理层:信号的 “快递员”物理层是网络的 “最底层”,负责把 0 和 1 的电信号、光信号或无线电波在物理介质上传送。它不管数据含义,只保证信号能 “跑” 起来。举例:网线里的电脉冲、光纤里的光信号、Wi-Fi 的无线电波&#…

2026/8/11 20:32:26 阅读更多 →
审计系统怎么控大模型成本?上下文压缩、缓存复用与小模型路由的工程对比

审计系统怎么控大模型成本?上下文压缩、缓存复用与小模型路由的工程对比

一、审计场景的大模型账单,长在什么地方 给审计系统接大模型,头一个月的账单往往超出预期。原因不是单价高,是调用量分布和普通问答类应用完全不同。 拆开看,审计场景的 token 消耗集中在三类任务:任务类型特征单次 to…

2026/8/11 20:32:26 阅读更多 →
为什么选择csvtomd?10个让你放弃手动制表的理由

为什么选择csvtomd?10个让你放弃手动制表的理由

为什么选择csvtomd?10个让你放弃手动制表的理由 【免费下载链接】csvtomd 📝📊 Convert your CSV files into Markdown tables. 项目地址: https://gitcode.com/gh_mirrors/cs/csvtomd csvtomd是一款高效的CSV转Markdown表格工具&…

2026/8/11 20:32:25 阅读更多 →
AI Token生图成本怎么算?豆包生图中文渲染与大模型API中转站实践

AI Token生图成本怎么算?豆包生图中文渲染与大模型API中转站实践

电商批量出图,把豆包生图这类图像模型接进工作流,Token 到底怎么烧?本文用一个电商团队的出图流程还原真实场景:中文渲染乱码怎么避免、单次消耗调用量单价三个数怎么算、聚合中转按档位打折后成本差多少。结论先行:生…

2026/8/11 20:31:25 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/11 17:09:45 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/11 17:09:45 阅读更多 →