恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
计算机网络‑TCP 协议原理与特性解析
首页
资讯中心
/
计算机网络‑TCP 协议原理与特性解析
计算机网络‑TCP 协议原理与特性解析
发布时间:2026/8/28 21:53:11
博客主页小谢同学的小破站✍️ 本文由小谢同学的小破站原创首发于 CSDN☕ Java学习专栏java MySQL专栏MySQL 数据结构与算法Java 数据结构与算法C语言专栏: C语言 欢迎点赞 收藏⭐ 留言发现错误欢迎指正✨ 脚踏实地持续深耕奔赴自己的目标✨– – – – – 分割线----------TCP协议1. 认识TCP协议1.1 TCP协议结构2. TCP协议的核心特性2.1 可靠传输的7大核心特性2.2 提高性能的4大核心特性2.3 面试高频问题总结前言这里是小谢同学的 Java学习记录整理TCP协议的核心特性。笔记用于自我复盘巩固有错误欢迎大家指出专栏还有 Java、网络、C 语言系列笔记欢迎翻阅.1. 认识TCP协议TCPTransmission Control Protocol传输控制协议属于传输层协议是面向字节流、可靠的字节流协议,全双工。和 UDP 无连接、不可传输形成鲜明对比。1.1 TCP协议结构解释:16位源端口: 是传输层协议中用于标识发送端应用程序的端口号用于区分同一主机上不同进程的通信。16位目的端口: 是网络通信中数据包发送到目标主机上特定服务的端口号用于标识接收方的应用程序或服务。32位序号: 针对数据进行编号。32位确认序号: 给ack报文进行使用,用于确定当前ack是应答哪一个数据4位首部长度: 该字段表示 TCP 所传输的数据应该从 TCP 数据包的哪位开始计算也可以把它看作 TCP 首部的长度。保留位:URG(紧急指针是否有效),ACK(确认是否有效)PSH(指示接收方立即将数据提交给应用层而不是等待缓冲区满)RST(对方要求重新连接,也称为:复位报文段)SYN(请求建立连接,也称为:同步报文)FIN(通知对方,当前端口需要关闭,也称为:结束报文段)16位窗口大小: 标识接收方可接受的数据字节数16位紧急指针: 标识哪部分数据是紧急数据选项: TCP头部中可变长度的字段用于增强连接功能如最大报文段长度、选择确认、时间戳和窗口扩大等16位校验和: 用于检验数据完整性。2. TCP协议的核心特性TCP协议中主要核心特性分别为:校验和,序列号,确认应答,超时重传,连接管理,流量控制,拥塞控制,滑动窗口,快速重传,延时应答,捎带应答2.1 可靠传输的7大核心特性确认应答(ACK报文): 数据在收到后,返回对应的应答报文来告诉发送方我收到了。2.超时重传: 发送方发送数据时,长时间没有收到对方的ACK,此时就会判定为丢包,会重新发送数据。传输过程中可能会出现发送时间超时了,但是超时后,数据到达了的情况此时这种情况就会多收到一次数据:类似于迷路了但是后来又找到了为了规避这种情况,传输的数据先会到达接收方的接收缓冲区,在接收缓冲区内会对数据进行去重,辨别是否为无效数据,此时就会进行舍去操作;超时重传的数据并不是固定的:1. 多次传输过程中都没有到达对方;2. 重传达到一定的次数;-这两者都极大可能说明了网络可能出现严重故障,每一次重传时间间隔会逐渐拉长连接管理: 此处涉及到建立连接与断开连接两个操作,分别为3次握手与4次挥手。连接操作:三次握手为了节省资源,3次握手连接过程中在返回ACK过程中,连同SYN一同返回回去;断开操作:四次挥手此处涉及到几种状态:listen,establishen,close_wait和time_waitlisten:服务器准备就绪establishen: 建立连接完成close_wait:断开连接时:收到FIN的一方,知道这方主动发送FINtime_wait:主动断开连接的一方,会等待一段时间(时间:2MSL 相当于2分钟)4次挥手可以合并吗?-不一定第二个FIN和ACK之间的时间间隔对于四次挥手来说取决于你自己代码怎么写的如果代码逻辑没啥中间的间隔非常短就可以合并不能合并的原因:如果代码逻辑比较多中间的间隔很长就不能合并流量控制:防止发送方发的太快接收方来不及接收。我们知道:滑动窗口提升效率.滑动窗口越大传输效率越高,但是滑动窗口特别大就会出现问题,例如:发送数据特别快,但是接收方的接收缓冲区就忙不过来了,此时再继续传输就会面临丢包;流量控制就是对滑动窗口大小进行控制拥塞控制:防止发送方发的太快把网络堵崩。和流量控制类似都是对滑动窗口做出限制,只不过二者有所区别:流量控制依据接收方的处理能力;拥塞控制依据通信路径的处理能力此时就能够对滑动窗口做出一种限制,传输数据快慢,会根据路由中最小处理能力的路由器相关,此时就会引入一个概念:拥塞窗口2.2 提高性能的4大核心特性滑动窗口:开辟一块窗口缓冲区窗口内的数据可以批量发出收到确认后窗口向后滑动。从而达到不再每发 1 个报文就等待一次 ACK 确认应答而是一次性连续发送一批数据。快速重传:丢包之后不等超时计时器到期立刻重传丢失报文。进而引出了两大问题:TCP如何解决ACK或者数据丢包了?跳过漫长的超时等待降低丢包恢复耗时提升传输效率。延时应答:接收方收到数据后不立即返回 ACK 确认报文短暂等待一小段时间。托的过程中先让应用程序处理一部分数据再返回ACK此时剩余空间就有可能会变大,从而提高效率;捎带应答:ACK 确认报文 “搭顺风车”附着在反向传输的数据报文头部一起发送给发送方。就类似于日常生活中的顺风车,司机顺路回家,你通过手机APP下单,司机送你回去的一种;2.3 面试高频问题总结TCP 如何保证可靠性校验和 确认应答 超时重传 序号去重 流量拥塞控制TIME‑WAIT 状态存在的意义客户端断开后等待 2MSL保证最后一个 ACK 报文一定被服务器收到。滑动窗口的作用实现流量控制批量发送报文减少 ACK 报文次数提升传输效率。三次握手流程客户端发送SYN请求报文请求建立连接服务端返回SYNACK同意连接并且确认收到客户端请求客户端返回ACK确认收到服务端报文连接正式建立不能两次握手的原因防止过期失效的连接报文延迟到达服务器。如果只有两次握手服务器收到旧报文就会直接建立一条无效连接白白占用服务器资源。