5.5 TCP报文段的首部格式

news2024/11/25 7:33:29

思维导图:

 

5.5 TCP报文段的首部格式

基本概念

  • TCP报文段:包含首部和数据两部分,首部至少20字节。
  • 作用:首部字段定义了TCP的功能和行为。
  • 长度:首部长度可变,基础首部20字节,可添加选项。

首部字段解析

固定首部字段(20字节)
  1. 源端口和目的端口(各2字节)

    • 作用:标识发送和接收应用的端口,用于数据分用。
  2. 序号(4字节)

    • 作用:标记数据字节流中每个字节的位置。
    • 重点:循环利用,达到2³²-1后回到0。
  3. 确认号(4字节)

    • 作用:接收方期望的下一个数据字节的序号。
    • 注意:如果确认号是N,表示到序号N-1的所有数据已被正确接收。
  4. 数据偏移(4位)

    • 作用:标识数据部分的开始位置,实际上是首部长度。
    • 单位:32位字,最大值15,表示最长首部长度为60字节。
  5. 保留(6位)

    • 当前未使用,必须置为0。
控制位(标志位)
  1. URG(紧急指针标志)

    • 当URG=1,表明紧急指针字段有效,需要优先处理。
  2. ACK(确认标志)

    • 当ACK=1,确认号字段有效。
    • 连接建立后,所有传送的报文段ACK必须置为1。
其他首部字段
  • 窗口:流量控制相关,指定可接收的数据量。
  • 检验和:错误检测,保证数据传输的正确性。
  • 紧急指针:与URG标志搭配,指示紧急数据的结束位置。

可变长度选项

  • 额外的功能性定义。
  • 长度可变,最大不能超过40字节。

笔记要点

  • 理解每个字段的功能是理解TCP行为的关键。
  • 画图有助于理解首部结构和字段之间的关系。
  • 关注控制位,它们影响TCP连接的行为和状态。
  • 实践例题以加深对首部字段运作的理解。

我的理解:

  1. 源端口和目的端口

    • 类比:就像邮件的发件人和收件人地址,它们告诉网络这个数据包应该从哪里来到哪里去。
    • 重点:端口号用于识别主机上的不同应用程序。
  2. 序号(Sequence Number)

    • 类比:想象你发送了一系列相关的邮件,每封邮件都编号以确保收件人按正确顺序阅读它们。TCP的序号字段类似于邮件的编号。
    • 重点:序号用于保证数据传输的顺序性和完整性,以及基于字节流的传输。
  3. 确认号(Acknowledgment Number)

    • 类比:如果你接收一套多本的书籍,你会确认收到的最后一本书籍的编号,并告诉发件人你下次期待的是下一本编号的书籍。确认号类似于这个过程。
    • 重点:确认号用来告诉发送方哪些数据已经被成功接收,并期望下一个字节的序号。
  4. 数据偏移(Data Offset)

    • 类比:在一次会议中,有人会告诉你报告的正文在哪一页开始,这样你就不用浏览整个文件来找正文。数据偏移告诉接收方数据从哪里开始。
    • 重点:数据偏移是首部长度的指示器,用于确定数据部分的起点。
  5. 保留位

    • 类比:在一个设计图纸上保留的空白区域,可能将来会用于添加额外的设计元素。在TCP头部,保留位是为未来可能的需求预留的。
    • 重点:目前这些位必须设置为0,未来可能有用途。
  6. 控制位(例如URG, ACK等)

    • 类比:这就像你手机上的设置选项,可以开启飞行模式、蓝牙等功能。每个控制位可以开启或关闭特定的TCP功能。
    • 重点:控制位用于管理不同的TCP控制信息,如设置紧急数据(URG),确认收到数据(ACK)等。

理解TCP/IP协议中的各种标志和选项可能一开始会显得有些复杂

8. 推送PSH (Push)

  • 定义: TCP的推送操作用于要求数据立即发送,而非等缓冲区满。
  • 使用场景: 交互式通信,如命令行操作,要求立即反馈。
  • 操作: 发送方TCP设置PSH位为1,并发送数据;接收方收到后立即处理数据。
  • 注意: 即便可用,实际应用中并不常见。

9. 复位RST (Reset)

  • 定义: 指示TCP连接中出现严重错误,必须立即释放连接。
  • 使用场景: 响应非法报文段或拒绝连接请求。
  • 功能: 也被称为“重置位”,用于快速断开连接。

10. 同步SYN (Synchronization)

  • 定义: 在TCP连接建立时用于序号同步。
  • 操作: SYN=1且ACK=0表示连接请求;响应方设置SYN=1和ACK=1表示同意。
  • 关键点: 是建立连接过程的一部分,5.9节将详细讨论。

11. 终止FIN (Finish)

  • 定义: 用于关闭TCP连接。
  • 操作: FIN=1表示发送方数据发送完毕,请求关闭连接。

12. 窗口 (Window)

  • 定义: 窗口大小指明接收方当前允许发送方发送的数据量。
  • 功能: 窗口大小是动态变化的,防止接收方缓冲区溢出。

13. 检验和 (Checksum)

  • 定义: 覆盖TCP首部和数据部分的错误检测码。
  • 操作: 发送前计算,接收时验证,使用伪首部增强准确性。

14. 紧急指针 (Urgent Pointer)

  • 定义: 仅当URG=1时有效,指示紧急数据的终止位置。
  • 功能: 允许接收方处理紧急数据。

15. 选项 (Options)

  • 定义: 可变长字段,用于扩展TCP功能,如设置最大报文段长度MSS。
  • MSS: 定义了TCP报文段中数据部分的最大长度。
  • 窗口扩大: 允许窗口字段超过原始的16位限制,以支持更大的窗口大小。
  • 时间戳: 用于计算往返时间RTT和避免序号重复。

通过上面的笔记,我们可以看到TCP协议是一个非常复杂的协议,提供了可靠的、面向连接的服务。它使用序号和确认来确保数据的有序传输,并且通过窗口控制和其他机制提供流量控制和拥塞控制。每个标志和选项都有特定的用途,而理解每个部分的作用对于深入理解TCP的工作原理至关重要。

 我的理解:

(8) 推送PSH (PuSH): 想象一下,你在餐厅点餐。通常,服务员会等你的菜都准备好了再统一端给你。但是如果你特别饿,你可能会要求“我点的汤一好就先给我”,服务员这时就会立即把汤端给你,而不是等所有菜都准备好。这个“先给我汤”的请求就像是PSH标志,它告诉服务员(在这里指的是TCP协议栈),不要等缓冲区满了再送数据,而是有数据就立即传输。

(9) 复位RST (ReSeT): 如果你和朋友在手机上通话,但是你突然意识到你拨错了一个不认识的人,你可能会立即挂断电话并重新拨号。在TCP连接中,如果一个设备发现它收到了不应该接收的连接请求,或者发现一个严重的错误,它会发送一个RST标志,就像是立即挂断电话一样,这个标志意味着“这个连接有误,我们得停止并重置”。

(10) 同步SYN (SYNchronization): 当两个人开始一场对话,他们通常会用“嗨”或“你好”来开场,以确保对方已经准备好交谈。在TCP中,SYN标志用于启动一个新的连接。当一台计算机想要开始和另一台计算机通信时,它会发送一个带有SYN标志的报文,好像在说“嘿,我们可以开始交谈了吗?”

(11) 终止FIN (FINis): 如果你在聚会上,到了晚上你准备离开时,你会向大家告别。在TCP连接结束时,一个设备会发送一个带有FIN标志的报文,这表示“我已经完成了发送所有我需要发送的数据,我准备结束这次会话了”。

(12) 窗口: 想象你在搬砖头,但你的搬运车每次只能装载一定数量的砖头。这里的车子就像TCP连接中的“窗口”,它定义了在需要发送确认之前可以发送多少数据。这确保了发送方不会因为接收方处理不过来而发送太多数据。

(13) 检验和: 当你收到一封重要信件时,你可能会检查信封上的邮戳和地址,以确保它没有被错误地发送或者在途中被损坏。同样,在TCP中,检验和用于验证收到的数据包是否在传输过程中出现了错误或损坏。

(14) 紧急指针: 如果你在一个会议中,有一件非常紧急的事情需要立即讨论,你可能会打断正在进行的讨论,说“抱歉打断一下,我们有一个紧急问题要处理”。在TCP中,紧急指针配合URG标志使用,它告诉接收方有紧急数据需要被优先处理。

(15) 选项: 假设你在装修房子时,可以选择各种额外的定制选项,比如颜色、装饰材料或者家电品牌。在TCP中,选项字段就像是这些额外的定制选项,它们提供了额外的功能和协议的灵活性,例如指定最大报文段大小或者用时间戳来记录发送和接收时间等。

 

总结:

重点:

  1. 首部长度:表示TCP首部的长度,这是因为TCP首部的长度是可变的,有时会包括选项字段。
  2. 序列号:用于确保数据的有序传输,以及重发丢失的数据包。
  3. 确认号:作为对收到的数据包的回应,表明接收方期望收到发送方的下一个序列号。
  4. 控制位:包括SYN、ACK、FIN、RST、PSH和URG,用于建立连接,数据传输的确认,终止连接,紧急数据处理等。
  5. 窗口大小:用于流量控制,指明了接收方能够接收的数据量。
  6. 校验和:用于检测数据在传输过程中的任何改变,保证数据完整性。

难点:

  1. 选项字段:由于可变长,处理TCP选项字段通常比较复杂,特别是如何在不同的实现中正确解析和使用这些选项。
  2. 流量控制与拥塞控制机制:理解窗口大小如何变化以及这如何影响TCP的性能可以是非常复杂的,它涉及到细微的调整和多个算法(如慢启动,拥塞避免等)。

易错点:

  1. 首部长度字段误解:首部长度字段是4位的,表示的是32位字的数量,而不是字节的数量,有时候容易忘记这一转换。
  2. 序列号和确认号混淆:容易混淆这两个字段的作用,尤其是在一个方向上的数据传输结束后,如何处理序列号和确认号。
  3. 紧急指针的误用:通常不常用,但是在需要的时候,正确地设置URG控制位和紧急指针字段是很重要的,错误地使用它们可能会导致通信双方处理紧急数据的方式不一致。
  4. 控制位组合的混乱:在不同的TCP状态下,哪些控制位可以一起使用,哪些不可以,尤其是在连接建立和释放阶段。
  5. 校验和的计算:校验和的计算包括首部和数据部分,有时在手动计算或者理解的时候容易出错。

掌握TCP报文段的首部格式对于深入理解网络协议栈中的数据流和各种网络问题的排查都是至关重要的。在实践中,经常通过网络工具和抓包软件来分析TCP报文段的细节,这有助于理解理论知识如何应用于实际网络通信中。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初学编程教程视频教程,初学编程入门知识

初学编程教程视频教程,初学编程入门知识 给大家分享一款中文编程工具,零基础轻松学编程,不需英语基础,编程工具可下载。 这款工具不但可以连接部分硬件,而且可以开发大型的软件,向如图这个实例就是用这个…

零信任网络:一种全新的网络安全架构

随着网络技术的不断发展,网络安全问题日益凸显。传统的网络安全策略往往基于信任和验证,但这种信任策略存在一定的局限性。为了解决这一问题,零信任网络作为一种全新的网络安全架构,逐渐受到人们的关注。本文将对零信任网络的概念…

富士康“吃饭砸碗”,3年时间推动印度制造的iPhone翻倍增长

近期富士康备受关注,业界人士查找了富士康、印度制造的数据发现富士康为印度制造iPhone做出了“卓越”贡献,3年时间推动印度制造的iPhone翻倍增长,为印度制造立下了汗马功劳。 这几年苹果力推富士康、纬创、和硕等赴印设厂生产iPhone&#xf…

SpringCloud 微服务全栈体系(十一)

第十章 RabbitMQ 三、SpringAMQP SpringAMQP 是基于 RabbitMQ 封装的一套模板,并且还利用 SpringBoot 对其实现了自动装配,使用起来非常方便。 SpringAmqp 的官方地址:https://spring.io/projects/spring-amqp SpringAMQP 提供了三个功能&…

【protobuf】protobuf自定义数据格式,CMake编译C++文件读写自定义数据

protobuf自定义数据格式,CMake编译文件读写自定义数据 1.protobuf安装2.定义.proto文件3.编写main.cpp4.编写CMAkeLists配置文件5.运行 1.protobuf安装 protobuf库链接 2.定义.proto文件 新建一个Person.proto文件和一个Animal.proto文件,内容如下&…

在Node.js中,什么是模块(module)?如何导入和导出模块?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Oracle JDK 和OpenJDK两者有什么异同点

Oracle JDK 和 OpenJDK 是两种不同版本的 Java Development Kit(Java 开发工具包),它们都提供了用于开发 Java 程序的一系列工具和库。以下是它们之间的一些主要异同点: 相同点: 功能:在大多数情况下&…

VS2022 开发方式

使用 C# 在VS 2022 上开发时,发现有多种项目类型可以创建。这些类型放一起容易搞混,于是记录一下各种类型的区别。 这里主要介绍windows控制台程序、MFC程序、WPF程序、WinForm程序的特点。 创建哪种应用? 创建控制台应用 Windows控制台程序…

Postgresql批量按照顺序更新某一个字段

如批量更新采购订单行sequence字段,按照订单行id的顺序赋值1,2,3,4...: UPDATE purchase_order_line_copy1 SET sequence subquery.new_sequence FROM (SELECT id, ROW_NUMBER() OVER (ORDER BY id) AS new_sequence…

一种使用Windows10自带工具快速精准地调整图片文件的尺寸大小的方法

最近在做一个材料申报工作,需要将很多图片大小调整到200k以下。个人经过摸索,总结出一种Windows10自带工具快速精准地调整图片文件的尺寸大小的一个便捷方法,现分享如下。 一、所用工具 Windows10系统自带的照片工具 默认Windows10系统打开…

【Python学习笔记】SQLite报错Error: near “)“: syntax error的低级错误

【Python学习笔记】SQLite报错Error: near “)”: syntax error的低级错误 不说废话,典型错误,写建表语句的时候末尾多写了一个逗号。 之前为了解决这个错误还去问chatgpt,得到一堆官话答案。伤害性不高,侮辱性极强。 最后发现在…

【Proteus仿真】【51单片机】数控稳压可调电源设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使用动态数码管、按键、PCF8591 AD/DAC、LM358放大电路模块等。 主要功能: 系统运行后,系统默认输出直流5V,数码管…

基于合成数据的文本定位实现【OpenCV】

数据是目前深度学习的主要限制因素。 好的数据很难获得。 收集和标记数据是一项艰苦的体力劳动。 这是昂贵、耗时且困难的。 AI获胜者并不是有最好算法的人,而是有最多数据的人。 -安德鲁吴 此问题的一个“次优”解决方案是以编程方式生成合成数据。 合成数据无疑不…

【腾讯云HAI域探秘】搭建一个永不宕机的本地SD文本生成图像应用--喂饭级高性能应用HAI部署stable diffusion webui 一键文生图

目录 一、高性能应用服务HAI产品 Stable Diffusion Webui部署思路二、一键启动Stable Diffusion WebUI 推理三、使用 HAI JupyterLab连接 进行 StableDiffusion API 的部署四、使用本地IDE实现私服Web端一键文生图五、使用腾讯云Cloud Studio 快速云上开发六、高性能应用服务H…

C++设计模式_23_Command 命令模式

我们将Command 和Visitor归为“行为变化”模式。 Command 命令模式与函数对象十分类似,但在C主流框架中,函数对象(function object)应用的更为广泛。 文章目录 1. “行为变化”模式1.1 典型模式 2. 动机( Motivation )3. 模式定义…

Java调用GDAL实现融合有相同字段属性的多边形矢量数据的一种方法

目录 一、写在文章前 二、实现思路 三、实现过程 1.打开矢量数据 2.生成融合结果 3.不融合不相邻的几何图形 4.融合后的几何图形写入到新的图层 5.融合的效果 四、完整的示例 一、写在文章前 如下图所示,融合(dissolve)具有相同字段属…

Linux中搭建coturn服务器

1、下载coturn源码 git clone https://github.com/coturn/coturn.git2、进入到coturn路径下,执行一下命令。 ./configure出现以下错误: 问题1:ERROR: OpenSSL Crypto development libraries are not installed properly in required locati…

浅谈安科瑞无线测温产品在南非某变电站的应用

摘要:随着电力工业的发展,对设备的安全性、可靠性要求越来越高。在这种条件下,高压设备的无线测温系统应运而生。这种技术是将内置电池或电流感应和无线发射模块的测温传感器安装于各测温点,由于其体积小,且无需任何接…

CHS零壹视频恢复程序监控版/海康版/大华版深入扫描功能演示

安防文件系统是一种嵌入式文件系统,一般情况下监控版程序扫描会基于文件系统进行扫描,如果想更深入的扫描一些数据建议开启深入扫描功能,具体方法如下: 适用版本:监控版/海康版/大华版/专业版/高级版 作用:舍弃嵌入式文件系统直…

手机端抓包流程

一.Charles 抓包 1.创建模拟器 2.配置证书 3.打开开发者工具中的usb调试 4.下载xposed安装 5.安装模块 破解app反代理 使用XposedJustTrustMe突破SSL Pinning验证_justtrustme模块官网-CSDN博客 配置流程 手机APP数据包抓包分析_socksdroid下载-CSDN博客 二.HttpCanary抓…