TCP首部格式_基本知识

TCP首部格式

表格索引:

|---------------------------------------------------|-------------------------------------------------|---------------------------------------------------|-------------------------------------------------|---|
| [源端口](#源端口 目的端口 序号 确认号 数据偏移 保留 ACK等 窗口 检验和 紧急指针) ||| [目的端口](#源端口 目的端口 序号 确认号 数据偏移 保留 ACK等 窗口 检验和 紧急指针) ||
| [序号](#源端口 目的端口 序号 确认号 数据偏移 保留 ACK等 窗口 检验和 紧急指针) ||||
| [确认号](#源端口 目的端口 序号 确认号 数据偏移 保留 ACK等 窗口 检验和 紧急指针) ||||
| [数据偏移](#源端口 目的端口 序号 确认号 数据偏移 保留 ACK等 窗口 检验和 紧急指针) | [保留](#源端口 目的端口 序号 确认号 数据偏移 保留 ACK等 窗口 检验和 紧急指针) | [ACK等](#源端口 目的端口 序号 确认号 数据偏移 保留 ACK等 窗口 检验和 紧急指针) | [窗口](#源端口 目的端口 序号 确认号 数据偏移 保留 ACK等 窗口 检验和 紧急指针) |
| [检验和](#源端口 目的端口 序号 确认号 数据偏移 保留 ACK等 窗口 检验和 紧急指针) ||| [紧急指针](#源端口 目的端口 序号 确认号 数据偏移 保留 ACK等 窗口 检验和 紧急指针) ||


TCP报文段首部格式图

源端口与目的端口:

各占16位

序号:占32比特,取值范围0~232-1。当序号增加到最后一个时,下一个序号又回到0。用来指出本TCP报文段数据载荷的第一个字节的序号

确认号:占32比特,取值范围0~232-1。当序号增加到最后一个时,下一个序号又回到0。用来指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认

数据偏移:

  • 占4比特,该字段的取值以4字节为单位
  • 指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远,这实际上指出了TCP报文段的首部长度

保留:

  • 占6比特
  • 保留为今后使用
  • 目前置为0

窗口:

  • 占16比特,该字段的取值以字节为单位
  • 指出发送本报文段的一方的接收窗口的大小,即接收缓存的可用空间大小,这用来表征接收方的接收能力.
  • 在计算机网络中,经常用接收方的接收能力的大小来控制发送方的数据发送量,这就是所谓的流量控制

检验和:

  • 占16比特
  • 用来检查整个TCP报文段在传输过程中是否出现了误码

发送方检验和计算方法:

(1)将TCP首部中检验和字段的值置为0。

(2)将伪首部、TCP首部以及数据载荷这三部分划分成若干个2字节的字。若伪首部、TCP首部以及数据载荷这三部分的总长度不是偶数个字节,则在最后添加1个"全0"字节。

(3)对划分出的全部2字节的字进行反码算数运算求和,并将求和结果取反码。

(4)将步骤③得到的结果写入TCP首部中的检验和字段。
与IPv4数据报首部检验和的计算方法类似,
差别仅在于前者只对首部进行检验。

接收方通过检验和字段的值判断TCP报文段在传输过程中是否误码的方法:

(1)给接收到的TCP报文段前面添加一个12字节的伪首部。

(2)将伪首部、TCP首部以及数据载荷这三部分划分成若干个2字节的字。

(3)对划分出的全部2字节的字进行反码算数运算求和,并将求和结果取反码。

(4)若步骤③得到的结果为0,则表示TCP报文段在传输过程中没有误码。否则,表示出现了误码。

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

同步标志位SYN:

  • 用于TCP"三报文握手"建立连接
  • SYN=1且ACK=0时,表明这是一个TCP连接请求报文段
  • 对方若同意建立连接,则应在响应的TCP报文段的首部中使SYN=1且ACK=1
  • 综上所述,SYN为1的TCP报文段要么是一个连接请求报文段,要么是一个连接响应报文段。

终止标志位FIN:

  • 用于TCP"四报文挥手"释放连接
  • FIN=1时,表明此TCP报文段的发送方已经将全部数据发送完毕,现在要求释放TCP连接

复位标志位RST:

  • 用于复位TCP连接
  • RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立连接
  • RST置1还用来拒绝一个非法的TCP报文段或拒绝打开一个TCP连接

推送标志位PSH:

  • 发送方TCP把PSH置1,并立即创建一个TCP报文段发送出去,而不需要积累到足够多的数据再发送。
  • 接收方TCP收到PSH为1的TCP报文段,就尽快地交付给应用进程,而不再等到接收到足够多的数据才向上交付。

|----------------------------------------------------------------|
| 出于效率的考虑,TCP的发送方可能会延迟发送数据,而TCP的接收方可能会延迟向应用进程交付数据。这样可以一次处理更多的数据。 |

|------------------------------------------------------------------------------------|
| 但是当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。在这种情况下,应用进程可以通知TCP使用推送(PUSH)操作。 |

紧急标志位URG:

  • 当URG=1时,紧急指针字段有效。
  • 当URG=0时,紧急指针字段无效。

紧急指针:

  • 占16比特,以字节为单位,用来指明紧急数据的长度。
  • 发送方有紧急数据时,可将紧急数据"插队"到发送缓存的最前面,并立刻封装到一个TCP报文段中进行发送。紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是普通数据。
  • 接收方收到紧急标志位为1的TCP报文段,会按照紧急指针字段的值从报文段数据载荷中取出紧急数据并直接上交应用进程,而不必在接收缓存中排队

选项与填充:

  • 选项是一些可选择添加的字段,如窗口扩大选项等等
  • 填充是若选项字段的长度加上20字节固定首部的长度不能被4字节整除时,需要填充相应数量的比特0,以确保首部长度能被4字节整除。
相关推荐
烷烯18 分钟前
终端安全检测和防御技术
网络·安全
mohesashou1 小时前
云原生作业(tomcat)
网络
Bruce_Liuxiaowei1 小时前
PHP伪协议详解:网络安全中的利用与防御
网络·web安全·php
网硕互联的小客服1 小时前
服务器如何应对SYN Flood攻击?
运维·服务器·网络
huluang2 小时前
中国网络安全处罚综合研究报告(2020-2025)
网络·安全·web安全
厦门辰迈智慧科技有限公司2 小时前
现代化水库运行管理矩阵建设的要点
运维·网络·物联网·线性代数·安全·矩阵·监测
国科安芯5 小时前
MCU外设初始化:为什么参数配置必须优先于使能
网络·单片机·嵌入式硬件·性能优化·硬件工程
居7然5 小时前
MCP协议更新:从HTTP+SSE到Streamable HTTP,大模型通信的进化之路
网络·网络协议·http
音视频牛哥6 小时前
从感知到执行:人形机器人低延迟视频传输与多模态同步方案解析
网络·人工智能·深度学习·大牛直播sdk·机器人视觉·人形机器人·智能机器人
AIBigModel12 小时前
智能情趣设备、爆 bug:可被远程操控。。。
网络·安全·bug