TCP报文段(segment)首部格式

news2024/12/24 0:34:01

TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCP segment)。

IP传给链路层的数据单元称作IP数据报(IP datagram)。

通过以太网传输的比特流称作(Frame)。

逐层封装:

  • 源端口号

发送端端口号,字段长16位(2字节)

  • 目标端口号

目标端端口号,字段长16位(2字节)

  • 序列号(sequence number)

指发送数据的第一个字节的编号,字段长度为32位。

TCP是面向字节流的,每个字节都按顺序编号,由于该字段为32位,即序列号可表示2^32(4294967296个字节,4G字节)的数据,序列号到达最大值后,从0重新开始编号。

注意:一个连接的序列号不是从0或者1开始的,而是建立连接时由计算机生成的随机数作为其初始值。

  • 确认应答号(acknowledge number)

指期望收到下一个报文段的第一个数据字节的序列号。该字段段长度也是32位。

ack = seq + 数据长度(单位字节)。

若收到的确认号为N,则表明:到N-1个字节的所有的数据均已被收到。

比如:A往B发送数据,B收到了A发过来的序列号为501的报文段,该报文长200字节,则表名B收到了(501~700序列号的数据,所以B往A发送的确认号应该是701。

  • 数据偏移(data offset,也表示tcp首部长度)

表示tcp报文段的数据距离tcp报文段的起始处有多远。(实际就表示tcp首部的长度)。

该字段长4位,可表示0101~1111 个数,单位:"4字节"。所以tcp首部的长度范围:20字节~60字节

  • 保留位(reserved)

该字段长4位,主要为以后tcp扩展使用。一般都为0。

  • 控制位(control flag)

该字段长8位。分别如下:

  • CWR(Congestion Window Reduced)

CWR标志和ECE标志都是用于IP首部的ECN字段。

  • ECE(ECN-Echo)

ECE标志表示ECN-Echo,为1时会通知通信对方,从对方到这边的网络有拥塞。

如果在收到数据包的IP首部(IP协议)中ECN为1,则会将TCP首部中的ECE设置为1.

CWR和ECE控制位是tcp/ip协议随着发展增加的功能:拥塞控制通知(Explict Congestion Notification,简称“ECN".

"ECN"是一个对IP协议和TCP协议的扩展,定义于RFC 3168(2001)。ECN允许拥塞控制的端对端通知而避免丢包。

  • URG

为1时,表示有紧急数据需要处理。发送方会将紧急数据插入到报文段的最前面,而在紧急数据后面的数据仍是普通数据。需要与tcp首部的紧急指针(urgent pointer)配合使用。

  • ACK

仅当ACK=1时,确认好字段才有效。当ACK=0时,确认号无效。tcp规定,在建立连接后所有传送的报文段都必须将ACK置为1

  • PSH

当PSH=1时,发送方会立即创建一个报文段发送出去。接收方在收到PSH=1的报文段,就尽快地交付给接收方应用进程,而不用等到整个缓存填满了再交付。

  • RST

当RST=1时,表示tcp连接出现严重差错,必须释放连接,然后重新建立连接。RST=1还用来拒绝非法的报文段或者拒绝打开一个连接。

  • SYN

当SYN=1时,表明这是一个连接请求或者连接接受报文。

  • FIN

用来关闭连接。当FIN=1时,表明此报文段的发送方的数据已发送完毕,请求释放该tcp连接。

  • 窗口大小(window size)

占2字节。表示发送方的通信对方(即接收方)允许发送方发送的数据量(字节为单位)。发送方的发送窗口大小也是依据于此。因为接收方的数据缓存空间是有限的,应用进程也在动态处理数据缓存空间的数据,所以该窗口值经常是动态变化着。

  • 校验和(checksum)

占2字节,检验首部和数据两部分。

  • 紧急指针(urgent pointer)

占2字节。紧急指针仅当URG=1时才有意义。它支出本报文段中的紧急数据的字节数(紧急数据结束后仍是普通数据)。注意:即使窗口为0时,也可发送紧急数据。

  • tcp选项(tcp option)

长度可变,最大40字节。只有"data offset">5时,才会有tcp选项。

tcp选项格式有两种:

1)1字节长的选项(也就是8位),只有Kind。比如:

2)4字节长的选项(也就是32位),有1字节Kind + 1字节Length + 选项数据 + [padding]。比如:

  • 填充(padding)

"tcp选项"不足4字节的整数倍时,尾部填充的数据。

抓包样例明细:

参考:

RFC 9293: Transmission Control Protocol (TCP)

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

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

相关文章

计算机网络第二章

物理层的基本概念物理层的作用:物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的主要任务:确定与传输媒体接口有关的一些特性 🔜本质:定义一些固定标准物理层的四大特性&a…

Word怎么转PDF?8个Word转PDF工具分析

Word 到 PDF 转换工具是用于将 Microsoft Word(DOC 或 DOCX)文档转换为 PDF 格式的程序。根据操作模式,它可以是在线或离线软件。当然,考虑到市场上充斥着此类工具,获得最好的 DOCX 到 PDF 转换器可能会让人头疼。正是…

MySQL基础篇第12章(MySQL数据类型)

1. MySQL中的数据类型 常见的数据类型的属性: 2. 整数介绍 2.1 类型介绍 整数类型一共有 5 种,包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT。 它们的区别如下表所示: 2.2 可选属性 整数类型的可选…

javaweb-异步请求AjaxaxiosJSON

1,Ajax 1.1 概述 AJAX (Asynchronous JavaScript And XML):异步的 JavaScript 和 XML。 我们先来说概念中的 JavaScript 和 XML,JavaScript 表明该技术和前端相关;XML 是指以此进行数据交换。而这两个我们之前都学习过。 ####…

JavaWeb基础——从入门到超神(笔记,持续更新)

day00综述 需要学习SpringBoot,但是JavaWeb是基础,来补一下 JavaWeb就是将数据库中的数据用好看的样式在网页上呈现出来 day01MySQL基础 接下来就是MySQL的安装什么的 mysqld --initialize-insecure mysqld -install net start mysql至此我的电脑上已…

【蓝桥杯-筑基篇】基础入门

🍓系列专栏:蓝桥杯 🍉个人主页:个人主页 目录 1.数位翻转 2.三个数求最大值的写法 3.两数交换的几种方法 4.身份证第18位合法性校验 5.黑洞数(陷阱数) 1.数位翻转 如: 整数 12345 返回结果为整数: 54321 当第一次看到这个题…

【零基础】学python数据结构与算法笔记7

文章目录前言41.查找排序部分习题42.查找排序习题143.查找排序习题244.查找排序习题345.查找排序习题4总结前言 学习python数据结构与算法,学习常用的算法, b站学习链接 41.查找排序部分习题 选题部分来自leetcode 42.查找排序习题1 242. 有效的…

蓝桥杯备赛Day6——链表

目录 数组的缺点 链表 单向链表 双向链表 Python链表的实现 手写链表 数组的缺点 1)需要占用连续的空间 若某个数组很大,可能没有这么大的连续空间给它用。 2〉不方便删除和插入 例如删除数组中间的一个数据,需要把后面所有的数据往前挪填补这个空…

CODESYS开发教程7-字符串及其基本操作

今天继续我们的小白教程,老鸟就不要在这浪费时间了😊。 前面一期我们介绍了CODESYS的关键字及变量。这一期主要介绍CODESYS的字符串类型,以及如何利用字符串操作函数来实现字符串的查找、插入、替换、连接、分割、删除等相关操作。注意本文介…

Realsense相机的RGB与depth图像的对齐

第三部分 将RGB图像和Depth图像对齐 文章目录第三部分 将RGB图像和Depth图像对齐前言一、创建对齐的cpp文件1.用vim创建C文件二、使用CMake构建C工程1.创建并编写CMakeList.txt文件2.编译CMakeLists.txt总结前言 将RGB图像和深度图像对齐有两种方式,一种是将深度图…

音视频开发-第一章-H264编解码

目录参考原文一、概述二、封装格式2.1、视频文件封装格式2.2、音视频编码方式2.2.1、视频编码方式2.2.2、音频编码方式三、H264相关概念3.1、H264基本单元3.2、帧类型3.3、GOP(画面组)3.4、IDR 帧四、H264压缩方式4.1、H264压缩方式4.2、H264压缩方式说明五、H264分层结构5.1、…

【websocket】前端websocket 实时通信

前端websocket 实时通信 文章目录前端websocket 实时通信什么是websocket为什么传统的http协议不能做到websocket实现的功能websocket前后端所用到的事件对比WebSocket.readyState代码什么是websocket websocket是HTML5开始提供的一种网络通信协议,它诞生的目的是在…

60条小妙招帮助你开车更省油

1、把备胎和千斤顶,工具,都放在家里,不跑长途不带这些,省油。2、说明书上说92号或以上标号,那么加95号油省油。如果是95或以上的标注,那就加98省油。3、驾驶中尽量减少急加速 急刹车,省油。4、驾…

Java——多态

好久不见啊,兄弟们!!这不将近期末考试了吗,阿涛平日里课听的不多,所以最近都在疯狂补课,祖宗之法也可变,阿涛的学校终于不是二十周校历了!!希望从今往后我们的生活都能够…

[oeasy]python0041_ 转义字符_转义序列_escape_序列_sequence

转义序列 回忆上次内容 上次回顾了5bit-Baudot博多码的来历从 莫尔斯码 到 博多码 原来 人 来 收发电报 现在 机器 来 收发电报 输入方式 从 电键改成 键盘 输出方式 从 纸带变成 打印纸张 后来 电传打字机ASR-33成为 初代 经典终端 除了 \n 和 \r 之外 还有什么 特殊字符 吗…

前端格式化工具使用(eslint、stylelint、prettier、lint-staged和husky搭配格式化代码)

目录 eslint 安装eslint .eslintrc.js env extends parser parserOptions rules globals plugins 屏蔽eslint检测具体规则 官方规则 stylelint 安装stylelint 创建stylelint配置文件 .eslintrc.js extends sass文件的格式检查 prettier 安装使用prettier …

Vue组件-插槽

一、插槽 1. 组件的三大核心:属性(data、props)、事件、插槽 2. 插槽(slot) 插槽(slot)将父组件的内容与子组件的模板相混合,从而弥补了视图的不足。 插槽的目的:使组件…

ConstraintLayout2

ConstraintLayout2ImageFilterView 属性 app:altSrc:altSrc提供的资源将会和src提供的资源通过crossfade属性形成交叉淡化效果。默认情况下,crossfade0,altSrc所引用的资源不可见,取值在0-1app:saturation:float型,默认1&#xf…

FPGA知识汇集-时钟系统的移植

ASIC 和FPGA芯片的内核之间最大的不同莫过于时钟结构。ASIC设计需要采用诸如时钟树综合、时钟延迟匹配等方式对整个时钟结构进行处理,但是 FPGA设计则完全不必。因为后者有内建的时钟资源:锁相环、频率综合器、移相器,以及具有低延迟特性的专用时钟布线网…

Unity基于状态机的架构与设计

我们做游戏的时候经常会有流程控制,流程控制的方法有很多,行为决策树,状态机等。本质差别都不大,就是把每一段执行逻辑做成一个一个的节点,根据条件执行某个节点,切换到某个节点。今天给大家分享一下基于状…