4.5 TCP 报文段的首部格式

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅!

文章目录

  • 前言
  • 1 TCP 报文段的基本结构
  • 2 固定部分
    • 2.1 源端口与目的端口
    • 2.2 序号
    • 2.3 确认号
    • 2.4 数据偏移
    • 2.5 保留字段
    • 2.6 控制位
    • 2.7 窗口
    • 2.8 检验和
    • 2.9 紧急指针
  • 3 可变部分
    • 3.1 选项
    • 3.2 填充


前言

本篇文章详细分析了 TCP 报文段首部的结构,并介绍其各字段的作用与相关选项,进一步理解 TCP 如何在不可靠的网络环境中实现可靠的数据传输。

1 TCP 报文段的基本结构

TCP(传输控制协议)是现代计算机网络中重要的协议之一,主要负责在网络中提供可靠的字节流传输。尽管 TCP 本身是面向字节流的,但它通过报文段的方式进行数据的封装与传输。TCP 的所有控制和功能机制都体现在报文段的首部字段中。

TCP 报文段的首部由固定部分可选部分组成。固定部分的长度为 20 字节,可选部分的长度可以变化,最大可达到 40 字节。
在这里插入图片描述

最小的 TCP 报文段首部长度为 20 字节,包含了实现数据传输所需的所有基本字段。

2 固定部分

2.1 源端口与目的端口

每个端口字段占 2 字节。端口号用于实现应用层协议和传输层协议之间的复用和分用。

  • 源端口:发送端的端口号。
  • 目的端口:接收端的端口号。
    在这里插入图片描述

2.2 序号

序号占 4 字节。每个 TCP 连接中传输的数据字节都有一个唯一的序号。

在这里插入图片描述
序号字段表示当前报文段中数据部分的第一个字节的序号。在连接的初始阶段,序号从 1 开始递增。通过序号,接收方能够按序接收数据并确保数据完整性。

【示例】
在这里插入图片描述

2.3 确认号

确认号占 4 字节。当 ACK 控制位被设置为 1 时,确认号字段才有效。
确认号字段指示接收方期望收到的下一个字节的序号。
在这里插入图片描述
TCP规定,在建立连接后所有传送的TCP报文段都必须把ACK置为1。

如果确认号为 N,则说明接收方已经正确收到序号为 N-1 之前的所有字节。

2.4 数据偏移

数据偏移占 4 位,以32 位字(即 4 字节为单位。在这里插入图片描述
该字段指示 TCP 报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远。

该字段实际上是指出了TCP报文段的首部长度。

2.5 保留字段

保留字段占 6 位。该字段目前保留为 0,供将来使用。
在这里插入图片描述

TCP 报文段中的其他控制位没有对应字段时,保留字段可用于扩展。

2.6 控制位

控制位用于指示不同的连接控制操作和报文段的状态。
在这里插入图片描述
TCP 报文段有六个控制位,其中每个位的意义如下:

  • URG(紧急):占 1 位。当 URG = 1 时,表示当前报文段包含紧急数据,系统应尽快处理该数据,具有较高优先级。
  • ACK(确认):占 1 位。只有当 ACK = 1 时,确认号字段才有效。用于确认数据的接收。
  • PSH(推送):占 1 位。当 PSH = 1 时,接收方会立即将接收到的数据交付给应用程序,而不是等到缓存满了再处理。
  • RST(复位):占 1 位。当 RST = 1 时,表示连接发生错误或出现异常,需要复位连接。
  • SYN(同步):占 1 位。同步 SYN = 1 表示这是一个连接请求或连接接受报文。;当 SYN = 1,ACK = 0 时,表明这是一个连接请求报文段;当 SYN = 1,ACK = 1 时,表明这是一个连接接受报文段。
  • FIN(终止):占 1 位。当 FIN = 1 时,表示发送端已经完成数据传输,并要求释放连接。

2.7 窗口

窗口占2 字节。窗口字段指示接收方当前能接受的字节数。
在这里插入图片描述

接收方的窗口大小会随接收缓冲区的空闲情况动态调整,以告知发送方可以继续发送的数据量。窗口值的大小直接影响了 TCP 的吞吐量。

2.8 检验和

检验和占 2 字节。检验和字段用于检测 TCP 报文段中的数据是否发生错误。
在这里插入图片描述

检验和的计算不仅包括 TCP 报文段的内容,还包括一个临时的“伪首部”,该伪首部包含源 IP 地址、目的 IP 地址、协议类型等信息,用来确保数据的完整性。
在这里插入图片描述

2.9 紧急指针

紧急指针占 2 字节。当 URG = 1 时,紧急指针字段有效。该字段指示紧急数据的最后一个字节相对于报文段起始位置的偏移量。
在这里插入图片描述

紧急指针用于标识数据流中哪些部分应优先处理。

3 可变部分

3.1 选项

选项字段长度可变,最长可达 40 字节。
在这里插入图片描述
选项用于扩展 TCP 协议的功能,常见的选项包括:

  • 最大报文段长度(MSS):TCP 协议中用于控制每个报文段数据字段最大长度的选项,计算方式为TCP 报文段长度 - TCP 首部长度
  • 窗口扩大因子(Window Scale):在标准 TCP 协议中,窗口字段为 16 位,窗口大小最大为 64KB,窗口扩大因子选项允许增加窗口大小,最多支持到 1GB。
  • 时间戳(Timestamp):占 10 字节,包含时间戳值和时间戳回送字段,可用于计算往返时间 RTT以及防止序号重复。

3.2 填充

TCP 报文段的头部长度必须是 4 字节的整数倍。因此,如果选项字段长度不足 4 字节的倍数,填充字段会被添加到报文段的末尾。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/484414.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

青听云音乐项目总结

前言 先来介绍一下我的项目:青听云音乐,几乎完全参考网易云音乐网页版实现,使用的技术栈有SpringBoot、SpringCloud、Mybatis、Mybatis-Plus、Redis、Elasticsearch、RabbitMQ、Docker,也包括一些小技术的使用,比如 j…

openssl的运用

一、概述 Opssl是一个用于TLS/SSL协议的工具包,也是一个通用密码库。 包含了国密sm2 sm3 sm4,包含了对称加密,非对称加密,单项散列,伪随机、签名,密码交换,证书等一些算法库。 为了深层次的学习…

房屋租赁系统源码 SpringBoot + Vue 实现全功能解析

这是一套使用 SpringBoot 与 Vue 开发的房屋租赁系统源码,站长分析过这套源码,推测其原始版本可能是一个员工管理系统,经过二次开发后,功能被拓展和调整,现已完全适用于房屋租赁业务。 该系统功能完善,涉及房屋销售、租赁管理等。站长在测试部署过程中,发现源码结构清晰…

工业齐套管理虚拟现实仿真模拟软件

工业齐套管理虚拟现实仿真模拟软件是与法国最大的汽车制造商合作开发的一款虚拟现实仿真模拟软件,借助身临其境的虚拟现实环境,无需停止生产线,即可模拟仓库和提货区域。 工业齐套管理虚拟现实仿真模拟软件不仅适用于汽车工业,安全…

基于python爬虫的智慧人才数据分析系统

文末获取源码和万字论文,制作不易,感谢点赞支持。 废话不多说,先看效果图 更多效果图可私信我获取 源码分享 import os import sysdef main():"""Run administrative tasks."""os.environ.setdefault(DJANGO…

Android 分词的两种方式

前言: 本文分别介绍了原生和三方(Jieba)两种分词方式的使用和注意事项 1、安卓原生BreakIterator分词 比较简单,但是效果不太行 /*** 功能:原生分词* 参数:text:需要分词的语句* 返回值:return&#xf…

TCP Analysis Flags 之 TCP Spurious Retransmission

前言 默认情况下,Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态,并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时,会对每个 TCP 数据包进行一次分析,数据包按照它们在数据包列表中出现的顺序进行处理。可…

react 路由鉴权

权限路由一般两种 1中接口中返回菜单 2 接口中返回权限,前端做匹配 一般都是那种结合,react中没有vue那种钩子函数如何做? 在项目中写一个高阶函数,在高阶函数中判断权限、是否登录等操作app.tsx或者man.tsx中使用 《AuthRouter》…

【spring mvc】全局处理请求体和响应体

目录 说明实现效果逻辑图 实现步骤创建公共处理的请求和响应的类api接口测试前端请求响应结果 扩展Response响应格式实体ResponseCode 响应状态码RSA工具类 RequestBodyAdvice 介绍使用场景 ResponseBodyAdvice 介绍使用场景 说明 由于项目中需要进行加密传输数据提高项目安全…

FlyHttp 的设计思想:前端 API 自动化构建工具

FlyHttp的相关文章: FlyHttp 的诞生:从认识各种网络请求开始 FlyHttp 的设计思想:前端 API 自动化构建工具 FlyHttp 的使用:如何高效使用 FlyHttp,支持 JS、TS 项目 FlyHttp 的最佳实践:加速项目级 API…

在CentOS上无Parallel时并发上传.wav文件的Shell脚本解决方案

在CentOS上无Parallel时并发上传.wav文件的Shell脚本解决方案 背景概述解决方案脚本实现脚本说明使用指南注意事项在CentOS操作系统环境中,若需并发上传特定目录下的.wav文件至HTTP服务器,而系统未安装GNU parallel工具,我们可通过其他方法实现此需求。本文将介绍一种利用Sh…

springboot整合flowable工作流

1、工作流介绍 1.Flowable起源于Activiti工作流引擎,由Activiti的主要开发者在2016年创建。它继承了Activiti的众多优点,并在此基础上进行了优化和改进,以提供更加稳定、高效的工作流管理解决方案。Flowable与Activiti有着共同的祖先&#x…

Linux Shell 脚本题目集(2)

1、使用 case 语句根据用户输入的分数(0-100)输出相应的成绩等级(A, B, C, D)。 #! /bin/bashread -p "请输入您的分数(0-100):" score# 验证输入是否为数字且在0到100之间 if ! [[ …

交换机四大镜像(端口镜像、流镜像、VLAN镜像、MAC镜像)应用场景、配置实例及区别对比

在网络管理中,端口镜像、流镜像、VLAN镜像和MAC镜像都是用于监控和分析网络流量的重要技术。 端口镜像(Port Mirroring) 定义:端口镜像是将一个或多个源端口的流量复制到一个目标端口,以便于网络管理员能够监控和分析…

Redis(1)

Redis是一个在内存中存储数据的中间件。 1.在内存中存储数据。 通过数据结构来存储,mysql通过表的方式存储数据,是关系型数据库,redis通过键值对存储,key的类型是string,value的类型是非关系型数据库。 2.可编程的 …

基于Pyside6开发一个通用的在线升级工具

UI main.ui <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>MainWindow</class><widget class"QMainWindow" name"MainWindow"><property name"geometry"&…

Linux 系统/etc目录下配置文件分类

目录 一、网络相关配置文件 主机名与 IP 映射类 /etc/hosts /etc/hostname 网络接口配置类 /etc/sysconfig/network-scripts/ifcfg-ens33 DNS 相关类 /etc/resolv.conf /etc/host.conf 网络服务相关类 /etc/hosts.allow文件 /etc/hosts.deny文件 /etc/netconfig …

自由学习记录(28)

C# 中的流&#xff08;Stream&#xff09; 流&#xff08;Stream&#xff09;是用于读取和写入数据的抽象基类。 流表示从数据源读取或向数据源写入数据的矢量过程。 C# 中的流类是从 System.IO.Stream 基类派生的&#xff0c;提供了多种具体实现&#xff0c;每种实现都针对…

Redis3——线程模型与数据结构

Redis3——线程模型与数据结构 本文讲述了redis的单线程模型和IO多线程工作原理&#xff0c;以及几个主要数据结构的实现。 1. Redis的单线程模型 redis6.0之前&#xff0c;一个redis进程只有一个io线程&#xff0c;通过reactor模式可以连接大量客户端&#xff1b;redis6.0为了…

Elasticsearch Serverless 现已正式发布

作者&#xff1a;来自 Elastic Yaru Lin 基于全新无状态&#xff08;stateless&#xff09;架构的 Elasticsearch Serverless 现已正式发布。它采用完全托管方式&#xff0c;因此你可以快速启动项目而无需操作或升级&#xff0c;并且可以使用最新的向量搜索和生成式 AI 功能。 …