【网络协议】TCP报文格式

1.源端口和目的端口

源端口字段占16比特,用来写入源端口号。源端口号用来标识发送该TCP报文段的应用进程。

目的端口字段占16比特,用来写入目的端口号。目的端口号用来标识接收该TCP报文段的应用进程。

2.序号

当序号增加到最后一个时,下一个序号又回到0。序号字段的值用来指出本TCP报文段数据载荷的第一个字节的序号。

3.确认序号

指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。

只有当ACK置为1时,确认号字段才有效,ACK取值为0时,确认号字段无效。TCP规定:在TCP连接建立后所有传送的TCP报文段都必须把ACK置1。

4.首部长度

该字段以4字节为单位,用来指出TCP报文段的有效载荷部分的起始处距离TCP报文段的起始处有多远,这实际上指出了TCP报文段的首部长度。

5.保留字段

保留字段占6比特位,保留为今后使用,目前应置为0。

6.窗口字段

用来指出发送本报文段的一方的接收窗口的大小,即接收缓存的可用空间大小,这表征接收方的接受能力.可以使用接收方接受能力的大小来控制发送方的数据发送量,这就是所谓的流量控制.

7.校验和

检查整个TCP报文段在传输过程中是否出现了误码。

8.标志位

(1)SYN

同步标志位(SYN)用于TCP双方建立连接。

(1)当SYN=1且ACK=0时,表明这是一个TCP连接请求报文段。

(2)若对方同意建立连接,则应在响应的TCP报文段的首部中使SYN=1且ACK=1。

综上所述,SYN为1的报文段要么是一个连接请求报文段,要么是一个连接响应报文段。

(2)FIN

终止标志位(FIN)用于释放TCP连接。

当FIN=1时,表明此TCP报文段的发送方已经将全部数据发送完毕,现在要求释放TCP连接。

(3)RST

复位标志位(RST)用于复位TCP连接。

当RST=1时,表明TCP连接中出现严重差错(例如由于主机崩溃或其他原因),必须释放连接,然后再重新建立连接。

RST置1也可以拒绝一个非法的TCP报文段或拒绝打开一个TCP链接。

(4)PSH

推送标志位(PSH)用于提醒对方尽快将报文交付给应用层。

出于效率的考虑,TCP可能会延迟发送数据或向应用程序延迟交付数据,这样可以一次处理更多的数据(返回的ACK报文中窗口大小会更大)。但是当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。在这种情况下,应用程序可以通知TCP使用推送(PUSH)操作。

发送方TCP把PSH置为1,并立即创建一个TCP报文段发送出去,而不需要积累到足够多的数组在发送。

接收方TCP收到PSH为1的TCP报文段,就尽快交付给应用进程,而不再等到接收到足够多的数据在发送。

(5)ACK
只有当ACK置为1时,确认号字段才有效,ACK取值为0时,确认号字段无效。TCP规定:在TCP连接建立后所有传送的TCP报文段都必须把ACK置1。
(6)URG

当URG置为1时,紧急指针字段有效;当URG置为0时,紧急指针字段无效。

16位紧急指针以字节为单位,用来指明紧急数据的长度。

当发送方有紧急数据时,可将紧急数据“插队”到发送缓存的最前面,并立即封装到一个TCP报文段中进行发送。紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是普通数据。

接收方收到紧急标志位为1的TCP报文段,会按照紧急指针字段的值从报文段数据载荷中取出紧急数据并直接上交应用进程,而不必在接收缓存中排队。

9.选项:

TCP报文段首部除了20字节的固定部分,还有最大40字节的选项部分。增添选项可以增加TCP的功能。

最大报文段长度(Maximum Segment Size,MSS)选项:

不要被最大报文段长度的名称所误导,MSS用来指出的是TCP报文段有效载荷部分的最大长度,而不是整个TCP报文段的长度。MSS的选择并不简单。
>若选择较小的MSS,网络的利用率就会降低。设想在极端的情况下,TCP报文段只包含1字节的数据载荷,但有20字节的TCP首部,在网络层封装成IP数据报时又会添加20字节的IP首部,为了传输1字节的数据,额外要传输共40字节的 TCP首部和IP首部,到了数据链路层还要加上一些开销,因此网络的利用率不会超过1/40。
>若选择很大的MSS,则TCP报文段在网络层封装成IP数据报时,有可能要分片成多个短的数据报片。在目的站要将收到的各个短数据报片装配成原来的TCP报文段,当传输出错时还要进行重传,这些都会使开销增大。
一般认为,TCP报文段的MSS应尽可能大些,只要在网络层将TCP报文段封装成IP数据报时不需要分片就行。在TCP连接建立的过程中,双方可以将自己能够支持的MSS写入该字段中。在以后的数据传输阶段,MSS取双方提出的较小的那个数值。若主机未填写这一项,则MSS的默认值是536。因此,所有在因特网上的主机都应能够接受的TCP报文段的长度为20+536=556字节。

窗口扩大选项:

用来扩大窗口,提高吞吐率。

时间戳选项:有以下两个功能

>用于计算往返时间(RTT)

>用来处理序号超范围的情况,又称为防止序号绕回。

选择确认选项:

用来实现选择确认功能。

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

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

相关文章

封装JDBC,实现简单ORM框架

本文将封装JDBC的操作,实现简单的ORM框架,提供3种风格的api来给用户使用(1.原生jdbcSqlBuilder;2.类似jpa和mp的;3.注解接口方法) 代码仓库:malred/IFullORM 1. 原生JDBCsql构建器 第一步&…

26551-2011 畜牧机械 粗饲料切碎机

声明 本文是学习GB-T 26551-2011 畜牧机械 粗饲料切碎机. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了粗饲料切碎机的产品型号、技术要求、试验方法、检验规则、标志、包装、运输与贮存。 本标准适用于加工农作物秸秆等粗饲料…

Docker(一)、linux环境安装Docker

linux环境安装Docker 1、自动下载安装:2、指定yum的安装源3、安装docker社区版4、启动docker5、验证6、demo:从国外自动抽取下载hello-world镜像,并启动6、卸载docker7、安装的时候,会出现Error: Failed to download metadata for repo base:…

Python 3.10.9 Mac m1 无法安装grpc的解决办法

pip install airavata-mft-cli python3.10 -m venv venv source venv/bin/activate pip install grpcio1.47.0rc1 pip install grpcio-tools1.47.0rc1 然后就成了 python -m grpc_tools.protoc -I --python_out. --grpc_python_out. message.proto 参考文章: …

Mysql生产随笔

目录 1. Mysql批量Kill删除processlist 1.1查看进程、拼接、导出、执行 1.2常见错误解决方案 2.关于时区 3.内存占用优化 记录一下生产过程中的一些场景和命令使用方法,不定期进行更新 1. Mysql批量Kill删除processlist 1.1查看进程、拼接、导出、执行 sho…

【AIPOD案例操作教程】斜流风扇轮毂优化

AIPOD是由天洑软件自主研发的一款通用的智能优化设计软件,致力于解决能耗更少、成本更低、重量更轻、散热更好、速度更快等目标的工程设计寻优问题。针对工业设计领域的自动化程度低、数值模拟计算成本高等痛点,基于人工智能技术、自研先进的智能代理学习…

Tableau/Power BI 是什么

目录 1. Tableau 是什么?1.1. Tableau 组件1.2. Tableau 的优劣势 2. Power BI2.1. Power BI 的组成部分2.2. Power BI 概念2.2.1. 容量2.2.2. 工作区2.2.3. 数据集2.2.4. 共享数据集2.2.5. 报表2.2.6. 仪表板2.2.7. 模板应用 1. Tableau 是什么? Tableau 是 Tableau 公司推…

前端架构师之01_ES6_基础

1 初识ES6 简单来说,ECMAScript是JavaScript语言的国际标准,JavaScript是实现ECMAScript标准的脚本语言。 2011年,ECMA国际标准化组织在发布ECMAScript 5.1版本之后,就开始着手制定第6版规范。 存在的问题:这个版本…

linux部署页面内容

/bin:该目录包含了常用的二进制可执行文件,如ls、cp、mv、rm等等。 /boot:该目录包含了启动Linux系统所需的文件,如内核文件和引导加载程序。 /dev:该目录包含了所有设备文件,如硬盘、光驱、鼠标、键盘等等…

新手十分钟也能完成的Unity小游戏打砖块

由Siki学院打砖块游戏启发完成一个非常非常简单,纯新手也能十分钟做出来的小游戏——打砖块。 一.搭建场景 首先我们先在一个空白的3D项目中创建一个Plane平面,将其放置于世界中央位置,长宽设置为2,并为其添加一个材质Material&am…

二十,镜面IBL--打印BRDF积分贴图

比起以往&#xff0c;这节应该是最轻松的了&#xff0c; 运行结果如下 代码如下&#xff1a; #include <osg/TextureCubeMap> #include <osg/TexGen> #include <osg/TexEnvCombine> #include <osgUtil/ReflectionMapGenerator> #include <osgDB/Re…

挂件板死机刷固件

用ESP32-DevKitC_V4刷固件的工具flash_download_tool_3.9.5.exe 挂件板子端口接线依次为V&#xff08;接3V3&#xff09;、R&#xff08;接TXD&#xff09;、T&#xff08;接RXD&#xff09;、G&#xff08;接GND&#xff09;、L&#xff08;悬空&#xff09; 1.选择ESP8266&…

Redis hash 命令总结

redis hash命令总结 命令 描述 示例 注意 HSET HSET用于将散列表key中的field的值设置为value。 HSET key field value 返回值&#xff1a;如果散列表key中的field不存在并且设置成功&#xff0c;则返回1&#xff1b;如果散列表key中的field已经存在并且新值覆盖了旧值&…

关于TUM数据集

2、验证回环检测算法&#xff0c;需要有人工标记回环的数据集。然而人工标记回环是很不方便的&#xff0c;我们会考虑根据标准轨迹计算回环。即&#xff0c;如果轨迹中有两个帧的位姿非常相近&#xff0c;就认为它们是回环。请根据TUM数据集给出的标准轨迹&#xff0c;计算出一…

MySQL学习笔记19

MySQL日志文件&#xff1a;MySQL中我们需要了解哪些日志&#xff1f; 常见日志文件&#xff1a; 我们需要掌握错误日志、二进制日志、中继日志、慢查询日志。 错误日志&#xff1a; 作用&#xff1a;存放数据库的启动、停止和运行时的错误信息。 场景&#xff1a;用于数据库的…

BACnet/IP协议采集网关支持modbus RTU采集

楼宇自动化在现代建筑中扮演着重要的角色&#xff0c;它可以集成和控制各种设备和系统&#xff0c;提高建筑的能效和舒适性。然而&#xff0c;不同的设备和系统通常使用不同的通信协议&#xff0c;这给楼宇自动化的实施带来了一定的挑战。为了解决这个问题&#xff0c;BACnet和…

面试问到MySQL模块划分与架构体系怎么办

面试问到Mysql模块划分与架构体系怎么办 文章目录 1. 应用层连接管理器&#xff08;Connection Manager&#xff09;安全性和权限模块&#xff08;Security and Privilege Module&#xff09; 2. MySQL服务器层2.1. 服务支持和工具集2.2. SQL Interface2.3. 解析器举个解析器 …

vuepress+gitee免费搭建个人在线博客(无保留版)

文章目录 最终效果&#xff0c;一睹为快&#xff01;一、工具选型二、什么是VuePress三、准备工作3.1 node 安装3.2 Git安装3.3 Gitee账号注册 四、搭建步骤4.1 初始化VuePress4.2 安装VuePress4.3 初始化目录4.4 编写文章 五、部署到Gitee5.1 创建仓库5.2 个人空间地址设置4.3…

1.vue3脚手架在vscode下面建立

一、下载安装node.js Node.js (nodejs.org) 二、安装vue3脚手架 #添加项目脚手架 npm install -g vue/cli 三、建立项目 #项目建立 vue create {appname} 测试项目安装成功&#xff1a;运行npm run serve命令 npm run serve 证明脚手架、项目环境已配置好 四、添加配件&#x…

高光时刻丨极智嘉斩获2023中国物流与采购联合会科学技术一等奖

不久前&#xff0c;中国物流与采购联合会宣布了2022年度科学技术奖获奖名单&#xff0c;其中包括了一项令人瞩目的成就。这项成就源自于极智嘉与国药物流、南京医药、九州通医药以及多所高校的合作&#xff0c;他们共同努力&#xff0c;成功研究并应用了一项关键技术&#xff0…