当前位置:首页 > 通信技术 > 通信技术
[导读]把TCP首部想象成一封信的信封,每个字段对应信封上的不同信息。源端口和目的端口就像寄信人和收信人的门牌号,序列号和确认号相当于书信的页码编号和回执编号。数据偏移量可以比作信封上留出的贴邮票位置,保留字段就像信封上预留的空白区域。

源端口号 (Source Port - 16 bits)

寄件人的门牌号。 发送数据的应用程序在发送方电脑上的“门牌号”(端口号)。就像快递单上的寄件人地址,接收方知道这个数据是从哪个程序发来的,好把回信发给正确的“门牌号”。

目的端口号 (Destination Port - 16 bits)

收件人的门牌号。 接收数据的应用程序在接收方电脑上的“门牌号”(端口号)。就像快递单上的收件人地址,接收方的网络设备(TCP/IP协议栈)根据这个门牌号,把数据包交给正确的程序(比如浏览器)。

序列号 (Sequence Number - 32 bits)

包裹的页码编号(从第几页开始)。 想象你要邮寄一本很厚的书,不得不拆成很多个小包裹。这个编号告诉你当前包裹里装的是这本书的第几页(或者第几块数据), 接收方收到一堆零散的包裹(数据包)后,能按照这个编号把它们按顺序拼回那本完整的书(原始数据)。同时,它也用于识别重复的包裹或丢失的包裹(编号不连续了)。

确认号 (Acknowledgment Number - 32 bits)

回执单上的“下一张期待页码”。 当收件人收到包裹并检查无误后,会发一个回执给寄件人。回执上写着:“我已收到到第 X 页(确认号)为止的所有包裹了,请寄下一页(X+1)给我吧!”,确认对方已收到数据,并告诉对方接下来希望收到哪个编号的数据包。这是 TCP 可靠传输的核心机制!只有当 ACK 标志位(见下面)为 1 时,这个字段才有效。

数据偏移 (Data Offset / Header Length - 4 bits)

这张“发货单”本身有多长? 单位是 4 字节。比如,固定部分 20 字节就是 5 (20/4=5),如果加上选项部分,这个值会变大,告诉接收方,“发货单”(TCP 首部)在哪里结束,后面真正的“货物”(应用层数据)从哪里开始。

保留 (Reserved - 6 bits)

预留的空白格子。 暂时没用,填 0。留给未来可能的新功能,控制位 (Flags - 6 bits, 每个占1) - 最重要的部分之一!这是 6 个独立的开关(标志位),每个开关要么开(1)要么关(0),表示这个 TCP 包的特殊意图:

URG (Urgent):紧急开关。 “包裹里有加急物品!” 当它打开(1)时,表示这个数据包里有需要优先处理的紧急数据。这时紧急指针字段(见下面)才有效。现在用的比较少。

ACK (Acknowledgment):确认开关。 “这是个回执单!” 当它打开(1)时,表示这个包是用来确认对方发来的数据的。这时确认号字段才有效。绝大多数 TCP 包(除了第一个握手包)这个开关都是开着的!

PSH (Push):推送开关。 “别攒着了,赶紧送货上门!” 发送方打开(1),要求接收方收到这个包后,立刻把数据交给上层应用程序,不要等缓冲区满了再交。接收方打开(1),表示当前数据包里的数据是应用程序要求立即上交的。

RST (Reset):重置开关。 “出大问题了!赶紧断线重连!” 当连接出现严重错误(如端口未打开、连接异常)时,会发送一个打开(1)RST 开关的包,强制立即终止连接。

SYN (Synchronize):同步/连接请求开关。 “你好!我想和你建立连接。” 在建立连接(三次握手)时使用。第一次握手(客户端发起请求)和第二次握手(服务器响应)时,这个开关是开着的(1)。它用来初始化序列号。

FIN (Finish):结束开关。 “我的东西发完了,再见!” 用于正常关闭连接(四次挥手)。当一方数据发送完毕,就会发送一个打开(1)FIN 开关的包,表示它要关闭自己这一侧的连接。

窗口大小 (Window Size - 16 bits)

收件人的仓库还有多大空位? 接收方告诉发送方:“我现在最多还能接收这么多字节的数据(窗口大小值),你别发多了!” 这个值在通信过程中会动态变化,TCP 流量控制的核心机制!防止发送方发得太快,把接收方的缓冲区(仓库)塞爆。 

校验和 (Checksum - 16 bits)

包裹的防伪封条/完整性标签。 发送方根据整个 TCP 包(首部+数据)的内容计算出一个“指纹”(校验和)。接收方收到后,按照同样的算法再算一遍,接收方比较自己算的“指纹”和包裹上贴的“指纹”(校验和字段)。如果不一样,说明包裹在运输过程中损坏(比特位出错了)或者被篡改了,这个包就会被丢弃。保证数据传输的完整性。 

紧急指针 (Urgent Pointer - 16 bits)

加急物品在包裹里的位置。 只有当 URG 开关打开(1) 时才有效。它指向当前数据包中紧急数据最后一个字节的位置,告诉接收方应用程序,从包的开头到紧急指针指向的位置是紧急数据,需要优先处理。

选项 (Options - 长度可变,0-40字节)

特殊要求/增值服务。 可选的附加信息,用于一些高级功能。常见的选项有:

最大报文段长度 (MSS): 在建立连接(握手)时,双方协商每个 TCP 包最多能装多少数据(不包括首部)。避免在传输路径中被分片。

窗口缩放因子 (Window Scale): 因为基本窗口大小字段只有 16 位,最大只能表示 65535 字节。这个选项允许双方协商一个缩放因子,将实际窗口大小放大(比如左移若干位),用于高速网络。

时间戳 (Timestamp): 用于更精确地计算往返时间和防止序列号回绕,提供 TCP 的扩展功能,优化性能或增加特性。

填充 (Padding - 长度可变)

填空格,凑整。 因为 TCP 首部长度必须是 32 (4 字节) 的整数倍。如果选项部分的长度不是 4 字节的整数倍,就需要在最后用 0 填充一些位,把整个首部长度凑齐,确保首部对齐,便于硬件处理。

 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭