TCP首部报文段格式

article/2025/10/13 22:04:49

最近《计算机网络》这本书看到了传输层的 TCP 协议,因为TCP 的全部功能都体现在它的首部中,因此觉得有必要将这些知识梳理一下。

首先TCP 是面向字节流的。这个流指的是流入到进程或从进程流出的字节序列。面向字节流的含义是:应用程序与 TCP 的交互是一次一个数据块(大小不等),但是 TCP 把应用程序交下来数据仅仅看成是一连串的无结构字节流。而 TCP 不知道所传送字节流的含义。

一、TCP首部报文段格式

一个 TCP 报文段分为首部和数据两部分,只有弄清楚 TCP 首部中各字段的作用才能更好地掌握 TCP 的工作原理。
这里写图片描述

Source Port And Destination Port(源端口与目的端口):各占 2 个字节,分别写入源端口号与目的端口号。

Sequence Number(序列号):占 4 个字节,范围是[0, 232 - 1],序号增加到 232 - 1 后,下一个序号就又回到 0。在 TCP 连接中传送的字节流中的每一个字节都要按顺序编号,起始序号在连接建立时就完成设置。因此序列号可以用来解决网络包乱序(reordering)问题。

例如,一个报文段的序号是 301,而携带的数据共有 100 个字节。这就表明:本报文段的数据的第一个字节的序号是 301,最后一个字节的序号是 400。显然下一个报文段的数据序号要从 401 开始。

Acknowledgement Number(确认号):占 4 个字节,表示期望收到对方下一个报文段的第一个数据字节的序号。可以用来解决不丢包的问题。

例如:B 收到了 A 发送过来的一个报文段,序号字段值为 501,而长度是 200 字节(序号 501 - 700),这表明 B 正确地收到了 A 发送的 200 个字节的数据。于是 B 在发送给 A 的确认报文段中把确认号设置为 701。若确认号等于 N,表明:到序号 N - 1 为止的所有数据都已经正确接收到。

Offset(数据偏移):占 4 位,指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。这个字段实际上是指出 TCP 报文段的首部长度。

Reserved(保留):保留为今后使用,目前应置为 0。

TCP Flags:数据包的属性,用于控制 TCP 的状态机。下面介绍其中的一些属性

  • URG(紧急):当 URG=1 时,表明紧急指针字段有效,代表该报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。于是发送方就把紧急数据插在本报文段数据的最前面,通常与 Urgent Pointer 一起配合使用。
  • ACK(确认):只有当 ACK=1 时确认号字段才有效,代表这个封包为确认封包。当 ACK=0 时,确认号无效。TCP 规定,在连接建立后所有传送的报文段都必须把这个字段的值置为 1。
  • RST(复位):当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

Window(窗口):占 2 个字节,窗口值是一个 [0, 216 - 1] 之间的整数。窗口指的是发送本报文段的一方的接收窗口(而不是自己的发送窗口)。窗口值用于告诉对方:从本报文段首部中的确认号算起,接受方目前允许对方发送的数据量(以字节为单位)。之所以要有这个限制,是因为接受方的数据空间是有限的。

例如:发送了一个报文段,其确认号是 701,窗口字段值为 1000。这就告诉对方:“从 701 序号开始算起,我(发送此报文段的一方)的接收缓存空间还可以接收 1000 个字节数据,字节序号是 701 - 1700,你在给我发送数据时,必须要考虑到这一点”。窗口字段值明确的指出了现在允许对方发送的数据量,窗口值通常是在不断的动态变化着。

Checksum(校验和):占 2 个字节,校验和字段检验的范围包括首部和数据两部分。

Urgent Pointer(紧急指针):占 2 个字节,紧急指针仅在 URG = 1时才有意义,它指出本报文段中的紧急数据的字节数。因此,紧急指针指出了紧急数据的末尾在报文段中的位置。

TCP Options(选项):长度可变,最长可达 40 字节。当没有使用“选项时”,TCP 的首部长度是 20 字节。

二、总结

上面有几个头部信息非常重要:

  • Sequence Number 是包的序号,用来解决网络包乱序(reordering)问题
  • Acknowledgement Number 就是 ACK——用于确认收到,用来解决不丢包的问题
  • Window 又叫 Advertised-Window,也就是著名的滑动窗口(Sliding Window),用于解决流控的问题

参考资料:
《计算机网络》 谢希仁 著
TCP 的那些事儿 By 陈皓:https://coolshell.cn/articles/11564.html


http://chatgpt.dhexx.cn/article/ZBwWagbV.shtml

相关文章

ARP报文格式详解

ARP 协议包(ARP 报文)主要分为 ARP 请求包和 ARP 响应包,本节将介绍 ARP 协议包的格式。 ARP 报文格式 ARP 协议是通过报文进行工作的,ARP 报文格式如图所示。 ARP 报文总长度为 28 字节,MAC 地址长度为 6 字节&…

CAN的报文格式

CAN的报文格式 在总线中传送的报文,每帧由7部分组成。CAN协议支持两种报文格式,其唯一的不同是标识符(ID)长度不同,标准格式为11位,扩展格式为29位。 在标准格式中,报文的起始位称为帧起始&am…

IPv4报文格式详解和报文示例

目录 一,IP数据报文的组成 二,IP报文格式 三,IPv4报文示例 作者:柒烨带你飞 一,IP数据报文的组成 一个IP数据报文都是由首部和数据两部分组成。 每个 IP 数据报都以一个 IP 报头开始。IP 报头中包含大量信息&#…

ICMP报文格式解析

ICMP报文的格式类型总共分为三大类: 1、差错报文 2、控制报文 3、查询报文 上图是ICMP报文的基本格式,上面提到的三种ICMP报文均有“类型,代码和校验和”三个字段,后面还有4个字节是根据不同的报文类型而有不同的格式&#xff…

常见网络报文数据包格式

当我们应用程序用TCP传输数据的时候,数据被送入协议栈中,然后逐个通过每一层,知道最后到物理层数据转换成比特流,送入网络。而再这个过程中,每一层都会对要发送的数据加一些首部信息。整个过程如下图。 以太网帧格式 以…

网络中的常见的各种协议--报文格式总结学习

网络中的各种协议总结学习 以太网帧结构IP报文格式ARP协议ICMP协议UDP用户数据包协议DNS TCP协议FTP协议HTTP协议SMTP协议POP协议SSH协议 以太网帧结构 注: 当LLC-PDU中携带的是数据的时候,那么左侧的2字节表示的就是长度;当然,以…

网络基础知识之报文格式介绍

1.以太网数据帧头部 DMAC:目的MAC地址,长度6个字节。 SMAC:源MAC地址,长度6个字节。 TYPE:类型字段,表明上层是哪种协议,IP协议是0x800,ARP协议是0x0806。 DATA:数据字…

计算机网络11种协议报文格式

文章目录 TCPUDPIPIPV6IPSec以太网帧结构802.1Q以太网帧结构802.11无线链路帧SSL记录RTP实时传输协议OpenFlow流表参考 TCP 源端口号和目的端口号: 用16bit表示所以端口号范围为0~65535,用来标识源主机和目的主机上的进程,用于运输层的多路复用和多路分解…

EndNote X8使用总结

本文记录在使用EndNote X8(Word2013)过程中遇到的一些问题,持续更新。 1.插入参考文献序号与文本的缩进问题 问题描述:在Word中使用EndNote插入参考文献后,在文末的参考文献出现文献序号与文本内容相距较大的情况&am…

EndNote20 安装方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Endnote是什么?二、安装步骤 1.安装库2.中文版总结 前言 管理文献工具是科研入门的一个必要学习方面。随着写作论文的增多,以及学习…

安装 EndNote X 9.3.3

下载 链接:https://pan.baidu.com/s/1d4njrGQUZQxE-VeSA_M1Zw 提取码:0226 安装 双击 .exe文件 不想安装在C盘的可以点击 Browse 自己设置一个路径,点击 OK 出现下图这一幕是因为我 office 打开着,只要把 wor…

Endnote操作

记录一下一些要点,以便之后毕设用到 1. 用endnote插入文献后,mathtype的公式显示域代码。word-文件-选项-高级 2.word中想修改endnote格式出现can not be formatted because it is no longer open. Please chose another document. word-endnote20-Too…

EndNote安装与使用

一、安装 1、双击ENX9Inst.msi安装 2、进入安装目录,使用CHS或ENG里的文件替换安装目录文件 CHS 中文版 ENG 英文版 二、软件优化 1、EndNote Import.enf 此文件用于导入中文文献时期刊名解析错误的问题,右击使用EndNoteX9打开后关闭即可 2、geebin…

EndNote X9导入文献的5种方式

上一篇介绍了EndNote X9下载与简介。 这里再介绍一下EndNote X9导入文献的5种方式,分别如下: 1. 从数据库网站导入参考文献 2. 在网页浏览中导入参考文献 3. 轻松导入本地参考文献 4. 在线检索导入参考文献 5. 手工添加参考文献信息 1. 从数据库网站导…

学习记录:关于如何安装EndnoteX9以及汉化过程

1、下载 Endnote X9安装包,并解压。 百度网盘地址: 链接:https://pan.baidu.com/s/1s1o81RVPsYIekr9as2M-kg 提取码:iw6h 2、 点击ENX9Inst.msi开始安装。 3、安装过程 Next accept Next accept、Next Typical、Next 可默认地址…

EndnoteX9下载并安装

Endnotex9 安装包链接链接:链接:https://pan.baidu.com/s/1lZYXIkZ-LjeHAH32DT4DmQ 提取码:yz2d 破解码:1、79SHT-UQFTD-FE94J-FRRBW-UDHXL 2、3VLXS-VVXSR-RMSJ7-AKURY-GPQFG 3、LTF3T-KJ778-RPRSC-8G4FN-5LWJN 4、3SF6V-TYK7C-…

Mac版本EndNote基本用法

NoteExpress在Mac上并未覆盖,转而探索了下Mac版EndNote基本用法: 以北京科技大学为例: 一、下载安装: 1.在校外访问学校VPN:http://n.ustb.edu.cn/。登录个人账号后,点击“电子资源数据导航”进入到学校图…

EndNote X9使用方法

要先下载,word里不自带 一、如何添加引用 1、打开EndNote x9。点击文件->新建,在弹出的对话框中选择一个地址,修改文件名,新建文献库。 新建之后的效果如图所示: 2、在谷歌学术、百度学术或知网上搜索自己需要的…

「Juc并发编程」什么是可重入锁?

「Juc并发编程」什么是可重入锁? 文章目录 「Juc并发编程」什么是可重入锁?一、概述二、解释三、可重入锁种类隐式锁同步块同步方法 显式锁 四、Synchronized的重入的实现机理 一、概述 可重入锁又名递归锁,是指在同一个线程在外层方法获取锁…

可重入锁和不可重入锁 ReentrantLock synchronize

http://blog.csdn.net/qq838642798/article/details/65441415 https://www.cnblogs.com/dj3839/p/6580765.html 用lock来保证原子性(this.count这段代码称为临界区) 什么是原子性,就是不可分,从头执行到尾,不能被其他…