TCP报文段的首部格式

news2024/11/16 21:58:52

TCP传送的数据单元称为报文段,既可以用来运载数据,又可以用来建立连接、释放连接和应答

一个TCP报文段可以分为首部和数据部分,整个TCP报文段作为IP数据报的数据部分封装在IP数据报中。首部的固定长度为20B,因此最短为20B,后面有4N字节是根据需要而增加的选项,长度为4B的整数倍

TCP报文段的各字段意义如下:

  • 源端口和目的端口: 各占2字节,端口号是传输层与应用层的服务接口,传输层的复用和分用都是通过端口号来实现的

  • 序号: 占4字节,共 2 32 2^{32} 232个序号,范围为(0 ~ 2 32 − 1 2^{32} -1 2321)。序号增加到最后一个后,下一个序号又回到0;用来指出本报文段所发送的数据部分的第一个字节的序号 例如数据长度为100B,上一个数据的序号为301那么该TCP报文段首部中的序号为401

  • 确认号: 占4字节,共 2 32 2^{32} 232个序号,范围为(0 ~ 2 32 − 1 2^{32} -1 2321)。确认号增加到最后一个后,下一个确认号又回到0;用来指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据进行确认 例如,若确认号为 n,则表明到序号 n - 1 为止的所有数据都已经正确接收,期望接收序号为 n 的数据

  • 数据偏移(即首部长度): 占4位,以四字节为单位,指出TCP报文段的数据载荷起始处距离TCP报文段的起始处有多远(其实就是TCP报文段的首部长度),首部长度固定为20B,因此数据偏移字段的最小值为 ( 0101 ) 2 (0101)_2 (0101)2 ,首部最大长度则为60B,数据偏移字段的最大值为 ( 1111 ) 2 (1111)_2 (1111)2

  • 保留: 占6位,保留为今后使用,但目前应置为0

  • 紧急位URG: 当URG= 1时,表明紧急指针字段有效,反之无效

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

  • 推送标志位PSH: 接收方TCP收到PSH = 1的报文段,就尽快地交付给接收应用进程, 而不再等到整个缓存都填满了后再向上交付

  • 复位标志位RST: 用来复位TCP连接,当RST = 1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接【还可以用来拒绝一个非法的报文段或者拒绝打开一个TCP连接】

  • 同步标志位SYN: 在TCP建立连接时用来同步序号,【当SYN = 1时表示这是一个连接请求或连接接受报文,当SYN = 1, ACK = 0时,表明这是一个连接请求报文,对方若同意建立连接,则应在响应报文中使用SYN = 1, ACK = 1】

  • 终止标志位FIN: 用来释放一个连接。当FIN = 1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接

  • **窗口:**占16位,以字节为单位。指出发送本报文段的一方的接收窗口 【窗口值作为接收方让发送方设置其发送窗口的依据,这是以接收方的接受能力来控制发送方的发送能力,称为流量控制

  • 校验和: 占16位,校验和字段检验的范围包括首部和数据两部分。在计算校验和时,和UDP一样,要在TCP报文段的前面加上12B的伪首部

  • **紧急指针:**占16位,**紧急指针仅在URG = 1时才有意义;**以字节为单位,用来指明紧急数据的长度 【但发送方有紧急数据时,可以将紧急数据插队到发送缓存的最前面,并立刻封装到一个TCP报文段中进行发送,紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后就是普通数据】

  • 选项:长度可变。TCP最初只规定了一种选项,即最大报文段长度(Maximum Segment Size, MSS),MSS是TCP报文段中的数据字段的最大长度(注意仅仅是数据字段)

  • 填充:这是为了使整个首部长度是4B的整数倍。

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

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

相关文章

17-工程化开发 脚手架 Vue CLI

开发Vue的两种方式: 1.核心包传统开发模式: 基于 html/css /js 文件,直接引入核心包,开发 Vue。 2.工程化开发模式: 基于构建工具 (例如: webpack)的环境中开发 Vue。 问题: 1. webpack 配置不简单 2. 雷同的基础配置 3. 缺乏统…

2023.8 - java - 对象和类

public class Dog {String breed;int size;String colour;int age;void eat() {}void run() {}void sleep(){}void name(){} } 一个类可以包含以下类型变量: 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方…

01-关于new Object()的问题

美团面试题关于Object o = new Object()的几个问题。 1、对象在内存中的存储布局? 实例化一个对象,在堆区开辟一段空间。 堆区由markword、类型指针(class point)、实例数据、对齐组成。 markword:由8个字节组成。 类型指针(class point):就是指向某class文件的指针,…

外网连接局域网的几种方式?快解析内网穿透安全便利吗?

外网连接局域网是一项网络连接中的关键技术,它能够让远程用户通过互联网访问内部局域网中的资源和服务。外网连接局域网为企业提供了更大的灵活性和便捷性,但也需要严格的安全措施来防止未经授权的访问。 外网连接局域网的几种方式 在将外网连接到局域…

数组详解

1. 一维数组的创建和初始化 1.1 数组的创建 数组是一组相同类型元素的集合。 数组的创建方式: type_t arr_name [const_n]; //type_t 是指数组的元素类型 //const_n 是一个常量表达式,用来指定数组的大小 数组创建的实例: //代码1 int a…

SpringMVC之入门搭建框架

文章目录 前言一、SpringMVC简介1.什么是MVC2.什么是SpringMVC3.SpringMVC的特点 二、搭建框架——HelloWorld1.创建maven工程(web项目)2.配置web.xml3.配置springMVC.xml4.创建请求控制器 总结 前言 基础小白第一次走进SpringMVC:了解什么是…

@mouseover不起作用,并没有触发

我的错误代码如下&#xff1a; <el-rowv-for"version in item.version_list":key"version.id":class"{ blue-background: versionItem.id version.id }"mouseover.native"version.isHovered true"mouseleave.native"version…

C++11并发与多线程笔记(11) std::atomic续谈、std::async深入谈

C11并发与多线程笔记&#xff08;11&#xff09; std::atomic续谈、std::async深入谈 1、std::atomic续谈2、std::async深入理解2.1 std::async参数详述2.2 std::async和std::thread()区别&#xff1a;2.3 async不确定性问题的解决 1、std::atomic续谈 #include <iostream&…

核能的发展与应用

目录 1.核能的概念 2.核能的实现原理 3.核能的利与弊 4.核能未来的发展趋势 1.核能的概念 核能是指利用核反应过程中释放出的能量来产生电力或其他形式能量的能源形式。核能主要通过核裂变和核聚变两种方式产生。 1. 核裂变&#xff1a;核裂变是指重核&#xff08;通常是铀、…

智能电视与win10电脑后续无法实现DLNA屏幕共享

问题背景&#xff1a; 我用的是TCL电视&#xff0c;但是并不是最新&#xff0c;打开的方式是U盘->电脑&#xff0c;各位看自己情况&#xff0c;很多问题都大概率是智能电视问题。 情景假设&#xff1a; 假设你已经完成原先智能电视该有的步骤&#xff0c;通过DLNA&#xf…

什么是springMVC 视图和视图解析器

&#x1f600;前言 本篇讲解了什么是springMVC 视图和视图解析器 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x1f609;&#x1f60…

【C# 基础精讲】LINQ to XML查询

LINQ to XML 是 C# 中用于查询和操作 XML 数据的强大工具。它允许您使用 LINQ 查询语法对 XML 文档进行查询、过滤、投影等操作&#xff0c;从而更加方便地处理 XML 数据。本文将详细介绍 LINQ to XML 的基本概念、常见操作以及示例&#xff0c;帮助您了解如何在 C# 中使用 LIN…

内核编译bpf

1 cp /boot/config-4.15.0-213-generic . 2 make menuconfig 报错缺少库 2.1 安装flex库 https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz ./configure CFLAGS-D_GNU_SOURCE make sudo make install 再次编译 缺少 bison库 2.2 下载 …

图片合成动图怎么弄?gif图制作的简单方法

许多鬼畜的表情包其实是用图片合成gif完成的&#xff0c;那么怎么将图片转gif呢&#xff1f;使用GIF中文网的gif合成&#xff08;https://www.gif.cn&#xff09;功能&#xff0c;打开浏览器就可以完成gif图片制作&#xff0c;非常简单方便&#xff0c;一起来了解一下吧。 打开…

C++笔记之Class A a = b调用的什么构造函数(引例)

C笔记之Class A a b调用的什么构造函数(引例) code review! 文章目录 C笔记之Class A a b调用的什么构造函数(引例)1.C笔记之Class A a b调用的什么构造函数&#xff1f;2.常见的三种形式3.等价的两种形式 1.C笔记之Class A a b调用的什么构造函数&#xff1f; 2.常见的三…

Vue 项目搭建

环境配置 1. 安装node.js 官网&#xff1a;nodejs&#xff08;推荐 v10 以上&#xff09; 官网&#xff1a;npm 是什么&#xff1f; 由于vue的安装与创建依赖node.js&#xff08;JavaScript的运行环境&#xff09;里的npm&#xff08;包管理和分发工具&#xff09;&#xff…

【80天学习完《深入理解计算机系统》】第八天 3.1 机器级代码【汇编指令】【寄存器】【操作数】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

Fluent向CFD-Post输出结果的方法

目前还有较多用户在使用 CFD-Post 进行 Fluent 结果后处理。本文整理了几种常用的 Fluent 向 CFD-Post 输出结果的方法。 本文内容其基于此演示模型进行讲解。 1 直接读取 DAT 文件 CFD-Post 可直接读取 Fluent 的结果文件&#xff0c;包括 .dat 和 .dat.h5 两种格式。其中&…

Jenkins+Jmeter集成自动化接口测试并通过邮件发送测试报告

一、Jenkins的配置 1、新增一个自由风格的项目 2、构建->选择Excute Windows batch command&#xff08;因为我是在本地尝试的&#xff0c;因此选择的windows&#xff09; 3、输入步骤&#xff1a; 1. 由于不能拥有相同的jtl文件&#xff0c;因此在每次构建前都需要删除jtl…

FFmpeg5.0源码阅读——VideoToobox硬件解码

摘要&#xff1a;本文描述了FFmpeg中videotoobox解码器如何进行解码工作&#xff0c;如何将一个编码的码流解码为最终的裸流。   关键字&#xff1a;videotoobox,decoder,ffmpeg   VideoToolbox 是一个低级框架&#xff0c;提供对硬件编码器和解码器的直接访问。 它提供视频…