TCP协议报头详解

2024-06-15 20:28
文章标签 详解 协议 报头 tcp

本文主要是介绍TCP协议报头详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

TCP特点

TCP报头

1.源端口和目的端口

2.序号

3.确认号

4.数据偏移

5.保留

6.控制位

        ① 紧急URG(URGent)

        ② 确认ACK(ACKnowledgment)

        ③ 推送PSH(PuSH)

        ④复位RST(ReSeT)

        ⑤ 同步SYN(SYNchronization)

        ⑥ 终止FIN(FINish)

7.窗口

8.检验和

9.紧急指针

10.选项

参考

共勉


前言

        总结了一下TCP报头中各个字段的作用,希望可以帮到你呀。


TCP特点

        面向连接:在使用TCP协议进行通讯时,必须先进行TCP连接,传送数据完毕后,必须释放用于传输数据的TCP连接。

        可靠性:通过TCP连接传送的数据,无差错、不丢失、不重复、并且按需到达。

        面向字节流:TCP中的“流(stream)”指的是流入到进程火铳进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。TCP并不知道所传送的字节流的含义。

        全双工通信:TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存。


TCP报头

1.源端口和目的端口

        各占两个字节,分别写入源端口号和目的端口号。


2.序号

        占4字节,序号范围是[0, 2^32 - 1],共2^32(4294 967 296)个序号。序号增加到2^32 - 1后,下一个序号又会回到0。在一个TCP连接中传送的每个字节流中的每个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段值则指的是本报文段所发送的数据的抵押给字节的序号。例如,一报文段的序号字段是301,则携带的数据共有100字节。下一个报文段(如果存在)的数据序号以当从301开始,即下一个报文段的序号字段应为401。这个字段的名称也叫做“报文段序号”。


3.确认号

        占4字节,是期望收到对方下一个报文段的第一个数据字节的序号。例如,B正确收到了A发送过来的一个报文段,其序号字段值是501,而数据长度是200字节(序号501~700),着表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701。

若确认号 = N,则表明:到序号N - 1为止的所有数据都已正确收到


4.数据偏移

        占4位,它指出TCP报文段的首部长度的数据起始处距离TCP报文段的起始处有多远。这个字段实际上是指出TCP报文段的首部长度。由于首部中还有长度不确定的选项字段,因此数据偏移字段是有必要的。但应注意,“数据偏移”的单位是32位字(即4字节的字位计算单位)。由于4位二进制数能够表示的最大十进制数字位15,因此数据偏移的最大值位60字节,这也是TCP首部的最大长度(即选项长度不能超过40字节)。


5.保留

        占6位,保留为今后使用,目前应该置为0。


6.控制位

        总共六位,每位说明一个性质,6位一起说明本报文段的性质。

        ① 紧急URG(URGent)

                当URG置为1时,表明紧急指针字段有效。它告诉系统此报文段中由紧急数据,应尽快传送(相当于高优先级的数据),而不是按照原来的排队顺序传送,紧急数据后面的数据仍然是普通数据。

        ② 确认ACK(ACKnowledgment)

                仅当ACK=1时,确认号字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置为1。

        ③ 推送PSH(PuSH)

                当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。这种情况下,TCP就可以使用推送操作。这时,发送方TCP把PSH置1,并立即创建一个报文段发送出去。接收方TCP收到PSH=1的报文段,就尽快地交付为应用进程,而不再等到整个缓存都填满了后再向上交付。

        ④复位RST(ReSeT)

                当RST=1时,表明TCP连接中出现严重差错(如主机崩溃),必须释放连接,然后再重新建立连接。将RST置为1还用来拒绝一个非法报文段或拒绝打开一个连接。RST也称为重置位。

        ⑤ 同步SYN(SYNchronization)

                在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应当响应的报文段中使用SYN=1和ACK=1。因此,SYN置为1就表示这是一个连接请求或者同意连接报文。

        ⑥ 终止FIN(FINish)

                用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已经发送完毕,并要求释放运输连接。


7.窗口

        占2字节。窗口值是[0, 2^16 - 1]之间的整数。窗口指的是发送本报文段的一方接收窗口(而不是自己的发送窗口)。窗口值告诉对方:从本报文首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。总之,窗口值作为接收方让发送方设置其发送窗口的依据。

窗口字段明确指出了现在允许对方发送的数据量。窗口值经常在动态变化着。

8.检验和

        占2字节,检验和字段检验的范围包括首部和数据这两部分。

9.紧急指针

        占2字节,紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。因此,紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完时,TCP就高数应用程序恢复到正常操作 。注意:即使窗口为零时也可发送紧急数据。

10.选项

        长度可变,最长40字节。填充字段仅仅是为了使整个TCP首部长度是4字节的整数倍。
 


参考

        《计算机网络》第八版 谢希仁编著 

        RFC 793

共勉

        以上就是我对TCP报头的全部理解。有什么问题和疑问欢迎在评论区讨论,或者私信我呀。后面还有出拥塞控制、三次握手和四次挥手相关的文章,关注可以第一时间看到呀。

感谢阅读

这篇关于TCP协议报头详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064491

相关文章

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现