5.8.2 TCP报文段首部格式

news2025/1/30 16:27:21

5.8.2 TCP报文段首部格式

TCP报文段首部格式在很大程度上体现了TCP协议的功能

一、数据封装过程

如图

数据封装

应用层报文传送到传输层之后,加上TCP报文段的首部构成了TCP数据传送单位,我们称之为TCP报文段。在发送时TCP报文段是作为IP数据报的数据部分,加上IP数据报的首部之后成为IP数据报,在IP数据报首部中协议字段值如果赋值为6就表示该IP数据报携带的数据是TCP的数据(5.2.3 IP数据报(一)IP数据报的格式)。

在接收时,IP数据报将其IP首部去除后交付给传输层,从而得到TCP报文段,再去掉TCP报文段首部根据相应的端口交付给应用层的应用进程。

二、TCP报文格式

TCP报文段由TCP首部TCP数据两部分,TCP首部的前二十个字节是固定的,其后面是根据需要所增加的选项,如图所示。

TCP首部

  1. 前两个字段是源端口和目的端口,各占16个比特位,各两个字节,我们知道端口是传输层与应用层的服务接口。这其中五元组信息包括<源IP地址、源端口、目的IP地址、目的端口、传输协议>TCP可以唯一的标识一个TCP连接。

  2. 第二个字段是序号站32个比特位4字节,我们知道TCP是无结构的,面向字节流的,因此TCP传送的报文可以看为连续的字节流,TCP报文段中数据部分的每一个字节都进行编号,这个字段指明的是本报文段中所发送的数据部分的第一个字节的序号。

  3. 第三个字段是与第二个字段配对使用的,确认号,占32比特位4字节,这个字段指出的是期望收到的下一个报文段中首部的序号的值,这里需要注意的是确认号字段具有累积的效果。即如果确认号为M,就表明序号M-1为止的所有数据都已经正确的收到了。

  4. 第四个字段是数据偏移占4个比特位,它指出了TCP报文段中的首部长度,是以4字节为单位的。这个字段与我们学习的IP数据报首部的首部长度字段的含义是非常类似的。(5.2.3 IP数据报(一)IP数据报的格式),如果TCP报文段首部只有固定部分的话,这个值应该是5。

  5. 第五个字段是保留部分占6个比特位。

  6. 第六个字段是标志位,标志位是用于区分不同类型的TCP报文,每一个标志位只占用一个比特,一共六个标志位,相应的该位非零即一,当该标志位是1的时候,标识相应的标志位是有效的。

    1. 第一个标志位是URG,也就是urgent(紧急的),这个标志位表明本报文段中包含紧急数据,所以如果报文段中包含紧急数据时URG标志位为1,当然这个标志位上的取值还应该与首部后的紧急指针字段是联合在一起使用的。对于紧急指针的值如果有效的话,它表示的是在紧急数据之后的TCP的第一个字节的偏移值,所以这里我们就得出紧急数据的总长度

    2. 第二个标志位是ACK,也就是Acknowledgement即是确认字符,这个标志位表明确认号字段有效,这里需要注意的是ACK如果置1的话,它并不消耗掉序号,ACK如果为零的话表示数据段不包含确认信息,此时表示第三个字段的确认号字段无效,当ACK标志位置1时,此时说明TCP需要查看首部中确认号字段是有效的

    3. 第三个标志位PSH,即PUSH,它表明TCP应该尽快的将此报文段交付给应用程序,当PSH置1的时候,表明本数据段在接收方得到之后就应该直接送给应用程序,不必要等到缓存满了之后再进行发送。

    4. 第四个标志位**RST,即Reset,**它表明TCP连接出现严重错误,必须释放连接,然后再重新建立连接。

    5. 第五个标志位SYN,即同步序列编号(SynchronizeSequenceNumbers),它是在连接建立时用来同步序号。这里需要注意的是SYN是需要消耗掉一个序号的,如果这个标志位置1的话是需要消耗掉序号的。

      这里如果SYN=1,而ACK=0,在TCP里就表示它是一个连接请求。

      如果SYN=1且ACK=1,就表明是同意建立连接的标志。

    6. 第六个标志位FIN,它是用来释放一个连接,这里需要注意的是FIN置位时也是需要消耗掉一个序号的,所以当FIN=1表示发送端已经完成了发送任务,用来释放连接,表明发送方已经没有数据发送了。

  7. 第七个字段是窗口,这个字段表明当前允许发送方发送的数据量,它是以一个字节为单位的。在TCP中使用的是大小可变的滑动窗口机制进行流量控制,这里需要注意的是窗口指的是发送本报文段算起接收方目前允许发送方所发送的数据量(字节量),是接收方对发送方的流量控制,以保证接收方来得及接收数据。

  8. 第八个字段是校验和,校验和字段用来检查的范围包括TCP首部、TCP的数据,TCP的伪首部。这与UDP差错控制是一样的(5.7.2 UDP协议格式(一)——UDP差错控制)。当然这其中TCP的伪首部和UDP的伪首部不一样的地方在于TCP的伪首部协议字段值是6,其他都完全一样。

  9. 第九个字段是紧急指针,前面我们强调,只有在URG=1的情况下紧急指针位才有效,它表明的是本报文段中紧急数据的字节数。

  10. 最后额字段是选项字段,长度在0到40个字节之间是可变的,当然我们注意的是必须填充为4字节的整数倍,最常用的选项字段是在TCP中的最大报文段长度MSS,MSS最大报文段长度是TCP报文段中数据字段的最大长度。所以我们得出MSS的值=TCP报文段长度-TCP首部长度。

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

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

相关文章

linux虚拟内存管理

目录 虚拟内存分布 进程虚拟内存空间的管理 内核如何划分用户态和内核态虚拟内存空间 内核如何管理虚拟内存区域 定义虚拟内存区域的访问权限和行为规范 关联内存映射中的映射关系 虚拟内存区域在内核中是如何被组织的 程序编译后的二进制文件如何映射到虚拟内存空间中 …

探索图像处理的利器——OpenCV

目录 引言&#xff1a; 一、OpenCV简介&#xff1a; 二、OpenCV的特点&#xff1a; 三、OpenCV的应用领域&#xff1a; 四、实际案例&#xff1a; 结论&#xff1a; 引言&#xff1a; 在当今信息化的时代&#xff0c;图像处理已经成为了日常生活中不可或缺的一部分。从社…

4742. 电(acw每日一题)

来源&#xff1a;Google Kickstart2022 Round H Problem C 题目描述 某城市有 N个电力节点&#xff0c;编号 1∼N。 这些电力节点形成的电力网络&#xff0c;可以看作一个 N 个节点 N−1 条边的连通图。 每个电力节点都有一个固定的电容&#xff0c;其中第 i 个节点的电容为…

CSS 备忘录-基础内容

目录 1、CSS的基本结构 2、样式表的来源以及优先级 3、选择器的优先级 4、源码顺序 5、px、em、rem单位 6、视口相对单位 7、使用 calc() 来定义属性值 8、一些无单位的属性 9、自定义属性 10、使用 JavaScript 来动态修改自定义属性 11、overflow 属性 12、子元素…

【单片机】STM32单片机的各个定时器的定时中断程序,标准库,STM32F103

文章目录 定时器1_定时中断定时器2_定时中断定时器3_定时中断定时器4_定时中断定时器5_定时中断 高级定时器和普通定时器的区别&#xff08;https://zhuanlan.zhihu.com/p/557896041&#xff09;&#xff1a; 定时器1_定时中断 TIM1是高级定时器&#xff0c;使用的时钟总线是R…

bochs编译安装

编译命令 ./configure --prefix‘/usr/local/bochs2.7’ --enable-debugger --enable-disasm --enable-iodebug --enable-x86-debugger --with-x --with-x11 make sudo make install 配置文件 bochsrc # configuration file generated by Bochs plugin_ctrl: unmapped1, biosde…

让开源项目从易用到好用 | 亚马逊的开源文化

亚马逊的领导力准则是亚马逊文化的核心&#xff0c;它如同亚马逊的 DNA 融入贯穿每一个重要决策&#xff0c;深深影响着每一位亚麻人、影响着每一位亚马逊的客户、合作伙伴以及每一位亚马逊云科技的构建者。同时&#xff0c;亚马逊的领导力准则对亚马逊与开源的互动方式也产生着…

如何设计一个文件系统?需要考虑哪些因素?

文件系统的实现 在对文件有了基本认识之后&#xff0c;现在是时候把目光转移到文件系统的实现上了。之前用户关心的一直都是文件是怎样命名的、可以进行哪些操作、目录树是什么&#xff0c;如何找到正确的文件路径等问题。而设计人员关心的是文件和目录是怎样存储的、磁盘空间…

数字孪生和GIS融合会为城市交通带来哪些便利?

数字孪生和GIS的融合对于城市交通领域带来了诸多便利&#xff0c;从智能交通管理到出行体验的提升&#xff0c;为城市交通带来了全新的发展机遇。 首先&#xff0c;数字孪生技术与GIS的结合可以实现智能交通管理。通过GIS建立城市交通网络的数字孪生模型&#xff0c;可以实时模…

程序员找工作难!拿到外包公司的 offer 我应该去么?

引言 前一阵子有一个帖子引起了非常广泛的讨论&#xff0c;描述的就是一个公司的外包工作人员&#xff0c;加班的时候因为吃了公司给员工准备的零食,被公司的HR当场批评&#xff01;这个帖子一发出来&#xff0c;让现在测试行业日益新增的外包公司备受关注。那么外包公司和非外…

Qt开发1--QCustomPlot的第一个示例

本文记录了在Linux上使用QCustomPlot进行一个基本绘制所需的完整过程&#xff0c;包括如何使用qtcreator&#xff0c;编辑ui以及编写相应的C代码。以下是详细步骤&#xff1a; 1、使用qtcreator启动开发环境&#xff1a; [blctrlmain-machine qt]$ qtcreator 启动后&#xf…

GBDT精讲

GBDT算法的流程 首先GBDT是通过采用加法模型(即基函数的线性组合)&#xff0c;以及不断减小训练过程产生的残差来达到将数据分类或回归的算法。 GBDT通过多轮迭代&#xff0c;每轮迭代产生一个弱分类器&#xff0c;每个分类器在上一轮分类器的梯度(如果损失函数是平方损失函数…

Quiz 4: Functions | Python for Everybody 配套练习_解题记录

文章目录 课程简介Quiz 4: Functions 单选题&#xff08;1-9&#xff09;编程题Exercise 4.6 课程简介 Python for Everybody 零基础程序设计&#xff08;Python 入门&#xff09; This course aims to teach everyone the basics of programming computers using Python. 本课…

JAVA2

文章目录 前言 前言 创建&#xff0c;编译java&#xff08;每4修改一次就要重新编译&#xff01;&#xff09; 第一个程序&#xff1a; 解决中文乱码问题&#xff1a; 效果&#xff1a; 总结&#xff1a;

管理类联考——英语——趣味篇——词根词汇——按频次分类——高频词汇——List1

优化原书记忆方法&#xff0c;轻松搞定考研单词 摒弃了传统的以字母顺序排序的方法&#xff0c;结合近20年考研真题&#xff0c;通过电脑搜索等方法对核心词进行科学统计&#xff0c;将核心词有机地分为高频词汇、常考词汇、中频词汇、低频词汇等4大部分&#xff0c;同时还补充…

一个三极管和稳压管构成的简易稳压电源

一个三极管和稳压管构成的简易稳压电源 先看电路 原理分析&#xff1a; 实际使用中可以加入合适的滤波电容。 上面的电路原理看着比较简单&#xff0c;但还是有不少要注意的地方。 来看看仿真电路的结果&#xff1a; 可以看到&#xff0c;输出的电压并不是我们想要的结果&am…

高压线路距离保护程序逻辑原理(五)

六、系统振荡的判断与振荡闭锁程序逻辑框图 &#xff08;一&#xff09;系统振荡概述 电力系统的振荡大致可以分为两种情况&#xff1a;一种是静稳破坏引起系统振荡&#xff0c;另一种是由于系统内故障切除时间过长&#xff0c;导致系统的两侧电源之间的不同步而引起的系统振…

【单片机】MSP430单片机,1.3寸 IIC OLED ,显示驱动

文章目录 main.coled.holedfont.h main.c #include <msp430.h> #include "OLED.h"int main( void ) {WDTCTL WDTPW WDTHOLD; /* Stop WDT */if ( CALBC1_8MHZ 0xFF ) /* If calibration constant erased */{while ( 1 ); /* do n…

C++ DAY4

1.思维导图 2.运算符重载 #include <iostream> using namespace std;class Person { private:int age;int *p; public://1.无参构造Person():p(new int(89)){age 18;}//2.有参构造Person(int age,int num){this->age age;this->pnew int(num);}//3.拷贝构造函数…

数据库中的日期函数DM和mysql都通用,计算年月日时分秒,获取日期之间相差的值

select MINUTE(date) from t_test; year month day hour minute second --对应年月日时分秒 select date from t_test select MINUTE(createtime),to_char(sysdate(),yyyy-MM-dd) select TIMESTAMPDIFF(minute,date,now()),date from t_test DateUtil.between(new Date(),ne…