【网络协议】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.rhkb.cn/news/145335.html

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

相关文章

MySQL 的 C 语言接口

1. mysql_init MYSQL *mysql_init(MYSQL *mysql); mysql_init函数的作用:创建一个 MYSQL 对象(该对象用于连接数据库)。 mysql_init函数的参数: ① mysql:MYSQL 结构体指针,一般设置为 NULL 。 mysql_init函…

PL/SQL+cpolar公网访问内网Oracle数据库

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle,是甲骨文公司的一款关系…

JVM111

JVM1 字节码与多语言混合编程 字节码 我们平时说的java字节码, 指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为:jvm字节码。不同的编译器,可以编译出相同的字节码文件,字节码文件…

十五、异常(4)

本章概要 Java 标志异常 特例:RuntimeException 使用 finally 进行清理 finally 用来做什么?在 return 中使用 finally缺憾:异常丢失 Java 标准异常 Throwable 这个 Java 类被用来表示任何可以作为异常被抛出的类。Throwable 对象可分为两…

配置OSPF路由

OSPF路由 1.OSPF路由 1.1 OSPF简介 OSPF(Open Shortest Path First,开放式最短路径优先)路由协议是另一个比较常用的路由协议之一,它通过路由器之间通告网络接口的状态,使用最短路径算法建立路由表。在生成路由表时,…

LLM-TAP随笔——大语言模型基础【深度学习】【PyTorch】【LLM】

文章目录 2.大语言模型基础2.1、编码器和解码器架构2.2、注意力机制2.2.1、注意力机制(Attention)2.2.2、自注意力机制(Self-attention)2.2.3、多头自注意力(Multi-headed Self-attention) 2.3、transforme…

华为摄像头智能安防监控解决方案

云时代来袭,数字化正在从园区办公延伸到生产和运营的方方面面,智慧校园,柔性制造,掌上金融和电子政务等,面对各种各样的新兴业态的涌现,企业需要构建一张无所不联、随心体验、业务永续的全无线网络&#xf…

国内大语言模型的相对比较:ChatGLM2-6B、BAICHUAN2-7B、通义千问-6B、ChatGPT3.5

一、 前言 国产大模型有很多,比如文心一言、通义千问、星火、MOSS 和 ChatGLM 等等,但现在明确可以部署在本地并且开放 api 的只有 MOOS 和 ChatGLM。MOOS 由于需要的 GPU 显存过大(不量化的情况下需要80GB,多轮对话还是会爆显存…

TSM动作识别模型【详解】

文章目录 本文使用的是somethingv2数据集,解压后是如下形式; 由于该压缩数据进行了分卷操作,需要合并后才能进行解压。首先我们将下面4个json文件剪贴到其他文件夹,只保留00-19的文件,然后在该文件夹下打开cmd&#xf…

【图像分割】图像检测(分割、特征提取)、各种特征(面积等)的测量和过滤(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Python 笔记06(Mysql数据库)

一 基础 1.1 安装 MySQL下载参考:MySQL8.0安装配置教程【超级详细图解】-CSDN博客 测试是否安装并正确配置环境变量: 1.2 查看服务器是否正常运行 1.3 显示数据库 show databases; 1.4 退出 exit 1.5 python 连接 1.6 查主机IP ipconfig

一篇文章教你自动化测试如何解析excel文件?

前言 自动化测试中我们存放数据无非是使用文件或者数据库,那么文件可以是csv,xlsx,xml,甚至是txt文件,通常excel文件往往是我们的首选,无论是编写测试用例还是存放测试数据,excel都是很方便的。…

SpringBoot使用Docker并上传至DockerHub

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 文章目录 1.系列文章2.构建docker镜像的方式3.docker操作3.1 安装docker3.2 查看docker镜像3.3 本地运行docker3.4 修改tag3.5 推送docker镜像3.6 远端server拉取d…

Linux 集锦 之 最常用的几个命令

Linux最常用的几个命令 ​ Linux系统中的命令那是相当地丰富,不同的版本可能还有不同的命令,不过Linux核心自带的命令大概有几百个,这个不管是什么发行版一般都是共用的。 ​ 如果希望探索Linux的所有命令,可能不太实际&#xf…

树莓派基本配置(2)

安装motion $sudo apt-get update $sudo apt-get install motion配置motion sudo nano /etc/default/motionsudo nano /etc/motion/motion.conf主要改这些参数 //让Motion作为守护进程运行 daemon on ... //用这个端口号来读取数据 stream_port 8081 ... //网络上其它主机…

力扣刷题-哈希表-求两个数组的交集

349 求两个数组的交集 题意&#xff1a;给定两个数组&#xff0c;编写一个函数来计算它们的交集。注意&#xff1a;输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 提示&#xff1a; 1 < nums1.length, nums2.length < 1000 0 < nums1[i], …

nodejs在pdf中绘制表格

需求 之前我已经了解过如何在pdf模板中填写字段了 nodejs根据pdf模板填入中文数据并生成新的pdf文件https://blog.csdn.net/ArmadaDK/article/details/132456324 但是当我具体使用的时候&#xff0c;我发现我的模板里面有表格&#xff0c;表格的长度是不固定的&#xff0c;所…

WPF 03

staticResource和dynamicResource的区别 首先看一个案例 MainWindow.xaml <Window x:Class"WpfDay03.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml&quo…

Springboot中slf4j日志的简单应用

1、注入依赖&#xff08;pom.xml&#xff09; <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>2.0.9</version> &…

从MVC到DDD,该如何下手重构?

作者&#xff1a;付政委 博客&#xff1a;bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 大家好&#xff0c;我是技术UP主小傅哥。多年的 DDD 应用&#xff0c;使我开了技术的眼界&#xff01; MVC 旧工程腐化严重&#xff0c;…