5.5 TCP报文段的首部格式

思维导图:

 

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.rhkb.cn/news/177762.html

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

相关文章

Openssl数据安全传输平台019:外联接口类的封装以及动态库的制作 - Bug未解决,感觉不是代码的问题

文章目录 1 外联接口1.1 接口类的封装1.2 共享内存与配置文件 2 json格式配置文件的定义2.1 共享内存中存储的节点结构2.2 服务器端配置文件2.3 客户端配置文件2.4 改进配置文件 3 共享内存类修改4 将接口打包成库(静态/动态)4.1 相关的指令4.1.1 静态库4.1.2 动态库 4.2 外联接…

【地理位置识别】IP归属地应用的特点

IP归属地应用是一类用于确定特定IP地址的地理位置信息(通常是城市、地区或国家)的工具和服务。以下是IP归属地应用的几个主要特点: 地理位置识别: IP归属地应用主要用于确定IP地址的地理位置。这可以帮助组织更好地了解其网站访问…

Physics2DPlugin3加载后会跳转gsap官网解决

因工作需要使用Physics2DPlugin3库,目标效果 加载他里面的在线js,使用效果正常,但是几秒会跳转官网,我们app内部、浏览器都会这样。 于是研究js代码,发现里面有setTimeout跳转。 删掉就好了 分享我改好的文件&#x…

全球地表动态水体产品(数据集V2.0)(2000-2020年/8天/250米)

摘要 全球地表动态水体产品(8天/250米)GSWED(Global Surface Water Extent Dataset)由中国科学院空天信息创新研究院湿地与环境遥感研究团队制作而成。本套数据集是基于MODIS数据构建了一套全球地表水体NDVI阈值时空参数集,在此基础上使用遥感大数据云平台进行研发的,使用G…

【Excel密码】四个方法,设置excel表格只读模式

Excel文件想要设置成只读模式,其实很简单,今天给大家分享四个excel设置只读模式的方法。 方法一:文件属性 右键点击文件,查看文件属性,在属性界面,勾选上只读属性就可以了。 方法二:始终以只读…

左移测试,如何确保安全合规还能实现高度自动化?

「云原生安全既是一种全新安全理念,也是实现云战略的前提。 基于蚂蚁集团内部多年实践,云原生PaaS平台SOFAStack发布完整的软件供应链安全产品及解决方案,包括静态代码扫描Pinpoint,软件成分分析SCA,交互式安全测试IA…

【密评】商用密码应用安全性评估从业人员考核题库(十七)

商用密码应用安全性评估从业人员考核题库(十七) 国密局给的参考题库5000道只是基础题,后续更新完5000还会继续更其他高质量题库,持续学习,共同进步。 4001 多项选择题 网络和通信安全层面的通信主体一般包括哪些&…

uni-app 微信小程序 搜索关键字后 结果中的关键字变色

如图:想实现搜索关键字,搜索到的内容中把包含的此字变为蓝色。 实现方式如下:此方式是uniapp开发运行到微信小程序的代码。 第一种方法:小程序自己实现 1.布局写法 *[HTML]: 没有使用花括号渲染,所以需要 $options.filters 来…

平面波向球面波的展开

平面波向球面波的展开是一个极其重要的话题 手稿放在文章的结尾处 勒让德展开 citation 1: 我们整理一下,对exp(x)做泰勒展开,得 citation 2: 我们先把精力集中到解决这个积分上去 反复利用分部积分 考虑到奇偶性问题 当且仅当时积分不为零现在做变换 …

红队专题-从零开始VC++C/S远程控制软件RAT-MFC-远程桌面屏幕监控

红队专题 招募六边形战士队员[24]屏幕监控-(1)屏幕查看与控制技术的讲解图像压缩算法图像数据转换其他 [25]---屏幕监控(2)查看屏幕的实现添加 CScreen类获取图像声明变量stdafx.h 头文件处理发送函数 7.1 屏幕抓图显示创建对话框工程,拉入图片显示控件修改控件为位…

解析mfc100u.dll文件丢失的修复方法,快速解决mfc100u.dll问题

在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“缺少某个文件”的错误。最近,我也遇到了一个这样的问题,那就是“mfc100u.dll丢失”。这个问题可能会导致某些应用程序无法正常运行,给我们带来困扰。…

精品Python空巢老人志愿服务平台慈善捐赠活动报名

《[含文档PPT源码等]精品基于Python的空巢老人志愿服务平台》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: 开发语言:python 使用框架:Django 前端技术&#…

PicoDiagnostics (NVH设备软件)-电脑无法识别示波器(安装驱动)

有些用户第一次使用示波器时(或者更换电脑使用示波器时),发现电脑识别不了示波器,出现此类问题,可以根据下述方法进行解决。 我们先来看看软件识别到示波器的状态: PS7版本的软件中,可以点击软件…

[Linux 基础] Linux使用git上传gitee三板斧

文章目录 1、使用git1.1 安装git1.2 在Gitee上创建项目1.2.1 使用Gitee创建项目1.2.2 上传本地代码到远端仓库 1.3 git上传三板斧1.3.1 三板斧第一招:git add1.3.2 三板斧第二招:git commit1.3.3 三板斧第三招:git push 1、使用git 1.1 安装…

神经网络的解释方法之CAM、Grad-CAM、Grad-CAM++、LayerCAM

原理优点缺点GAP将多维特征映射降维为一个固定长度的特征向量①减少了模型的参数量;②保留更多的空间位置信息;③可并行计算,计算效率高;④具有一定程度的不变性①可能导致信息的损失;②忽略不同尺度的空间信息CAM利用…

本地创建一个虚拟机,并且能够连接到外网

1、从官网下载虚拟机 2、详细的安装教程 点击这里 其中这里的获取,我们店自动IP地址获取就行了,DNS也是自动获取就行了。 4、注意事项 4.1 linux命令:vim: command not found无法使用解决方案, 点击这里

Flask Shell 操作 SQLite

一、前言 这段时间在玩Flask Web,发现用Flask Shell去操作SQLite还是比较方便的。今天简单地介绍一下。 二、SQLite SQLite是一种嵌入式数据库,它的数据库就是一个文件,处理速度快,经常被集成在各种应用程序中,在IO…

记录rider编辑器快速文档 中英文显示的问题

起初是不同的项目里快速文档一个项目显示中文 一个项目显示英文 搞了很久不知道哪里的原因 偶然灵机一动,点开了下面docs.microsoft.com的地址进去一看 发现一个是4.6的文档 一个是4.6.1的文档 所以去项目属性里 切换了framework的版本. 然后汉化就好了 纯属强迫症,而且…

关于CSS的几种字体悬浮的设置方法

关于CSS的几种字体悬浮的设置方法 1. 鼠标放上动态的2. 静态的&#xff08;位置看上悬浮&#xff09;2.1 参考QQ邮箱2.2 参考知乎 1. 鼠标放上动态的 效果如下&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><met…

博后像苦力,ChatGPT来助力?nature:博士后三分之一在用GPT帮忙工作

最近&#xff0c;在《nature》杂志第二次全球博士后调查的结果中&#xff0c;31%的受访者报告使用ChatGPT&#xff0c;使用者中43%每周使用一次&#xff0c;17%每天都使用。 其中&#xff0c;使用ChatGPT最常见的用途是完善文本&#xff08;63%&#xff09;&#xff0c;最多的领…