TCP首部报文段格式
最近《计算机网络》这本书看到了传输层的 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
TCP首部报文段格式相关推荐
- 5.3.1 TCP协议特点和TCP报文段格式
5.3.1 TCP协议特点和TCP报文段格式
- TCP协议的特点和TCP报文段格式
参考:https://www.bilibili.com/video/BV19E411D78Q?p=62 传送数据之前必须建立连接,数据传送结束后要释放连接.不提供广播或多播服务.由于TCP要提 供可靠 ...
- 【计算机网络】传输层 : TCP 协议 ( TCP 协议特点 | TCP 报文段首部格式 | TCP 报文段控制位 )
文章目录 一.TCP 协议 特点 二.TCP 报文段首部格式 三.TCP 报文段首部 666 控制位 一.TCP 协议 特点 TCP 协议 特点 : ① 面向连接 : TCP 协议的连接是 " ...
- TCP报文段首部格式详解
TCP首部格式 格式字段详解 源端口.目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要 ...
- 5.3 计算机网络传输层之TCP协议(tcp协议特点、tcp报文段首部格式、tcp连接---三次握手、tcp连接释放---四次握手)
文章目录 1.TCP协议特点 2.TCP报文段的首部格式 3.TCP连接管理 (1)连接的建立 - - - 三次握手 (2)SYN泛洪攻击 4.TCP连接释放----四次握手 5.TCP连接建立和释放 ...
- 下面是以十六进制格式存储的一个 UDP 首部:~~~TCP连接使用1000字节的窗口值,而上一次的确认号是22001~~那么下一个报文段的序号是否就是 x + 1 呢?在本题中列出的 8 种情况下,画
5-10 试说明运输层中伪首部的作用 用于计算运输层数据报校验和 5-11 某个应用进程使用运输层的用户数据报UDP,然而继续向下交给IP层后,又封装成IP数据报.既然都是数据报,可否跳过UDP而直接 ...
- TCP报文格式和三次握手——三次握手三个tcp包(header+data),此外,TCP 报文段中的数据部分是可选的,在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。...
from:https://blog.csdn.net/mary19920410/article/details/58030147 TCP报文是TCP层传输的数据单元,也叫报文段. 1.端口号:用来标识 ...
- TCP/IP学习笔记(九)TCP报文段首部格式
TCP为了实现稳定可靠的传输,自然是需要在发送数据时附带一些信息,对端接收到报文段后将用户数据分离开存放在接收缓冲区,然后根据附加信息决定接下来的行为.所以即使TCP是面向字节流的传输协议,但是传输的 ...
- 由 TCP 报文格式谈 TCP — 源端口号、目的端口号、报文段序号(一)
博主曾经学 Linux 的时候,觉得知识点很多很难很困惑,遂问一前辈,怎么才能学通学精达到融会贯通,前辈意味深长地丢给博主三个字:写博客.博主于是屁颠屁颠儿地跑过来写博客了,本人大三网络工程专业,最近 ...
最新文章
- 机器学习笔试题精选(二)
- Makefile完全解析PART5.使用变量
- 关于文字邮件日文乱码的问题
- Python:cv2.imread读入图片后返回NoneType的解决方案
- AUTOSAR从入门到精通番外篇(三)-嵌入式中设计模式的艺术
- cmake学习(一)静态库与动态库构建
- 【C/S】FIPS安全验证问题
- 不卖了?这家公司暂停门店销售iPhone!
- Mac硬件温度管理软件TG Pro
- A星(A*、A Star)路径规划算法详解(附MATLAB代码)
- chrome启动参数
- react项目中使用echart
- Ubuntu搭建Android NDK开发环境并编译Demo
- 『paddle』paddleclas 学习笔记:图像识别
- dnf打团正在连接服务器进不去是吗鬼,DNF韩服大转移版本开启 上线送迷你女鬼剑宠物...
- 一个文科毕业生在德国 IT 行业的漫漫求职路
- 解除Windows XP IIS 10个并发连接数的限制
- 快速打开电脑计算机的快捷键,电脑自带的计算器如何快速打开和快捷键的添加...
- Voyager 1.2.3 发布,Laravel 后台管理扩展包
- 气结、气闭、气郁......百病生于气!
热门文章
- 【☀️~爆肝万字总结递归~❤️玩转算法系列之我如何才能掌握递归解题的能力❤️~十大经典问题助你突破极限~建议收藏☀️】
- PaddleOCR——DEMO
- JavaFX——fxml文件加载错误:[javafx.fxml.LoadException]解决方案之一
- JavaScript——String转DOM对象解决方案
- c语言课后题2.52.8答案,C语言练习题(8)-只要答案不要分析,要速度,要正确51.(1 爱问知识人...
- zookeeper做分布式锁
- Java12-day03【​​​​​​​(类名、抽象类名、接口名)作为形参和返回值、内部类、常用API(Math、System、toString()、Arrays)、冒泡】
- Spring mvc参数类型转换
- 数据库系统(三)——数据库安全性控制
- 深入Java虚拟机:JVM中的Stack和Heap