TCP 协议(序号和确认号)
接下来的内容是学习后续内容的基础,必须先讲清楚。为了方便你回忆 TCP 首部,这里再次把这个图贴出来,以便对照。
图1 TCP 首部
1. 序号
序号占用 4 字节,即 32 位。它的范围是 [0,232−1] ,也就是说一共有 4 294 967 296 个序号。TCP 协议中的序号,指的是报文段序号。
- 字节序号
TCP 连接中,为传送的字节流(数据)中的每一个字节按顺序编号。也就是说,在一次 TCP 连接建立的开始,到 TCP 连接的断开,你要传输的所有数据的每一个字节都要编号。这个序号称为字节序号。
当新连接建立的时候,第一个字节数据的序号称为 ISN(Initial Sequence Number),即初始序号。ISN 一开始并不一定就是 1。在 RFC (规定网络协议的文档)中规定,ISN 的分配是根据时间来的。当操作系统初始化的时候,有一个全局变量假设为 g_number 被初始化为 1(或 0),然后每隔 4ms 加 1. 当 g_number 达到最大值的时候又绕回到 0.当新连接建立时,就把 g_number 的值赋值给 ISN.
在 BSD 系统中,这段代码实现时并未遵守协议,它将 g_number 初始化为 1,每 8ms 加 1,也就是说,每隔 0.5 秒增加 64000,9.5 小时后 g_number 又绕回到了 0.
- 报文段序号
如果一个 TCP 报文段的序号为 301,它携带了 100 字节的数据,就表示这 100 个字节的数据的字节序号范围是 [301, 400],该报文段携带的第一个字节序号是 301,最后一个字节序号是 400.
图2 前面实验抓取的一个数据包
在图 2 中,报文段序号是 2379453244,它携带了 6 字节的数据 hello\0
,这 6 字节的数据字节序号就是从 h->2379453244
,e->2379453245
一直到最后一个空字符 \0->2379453249
.
注意:序号字段只有在下面两种情况的任意一种才有意义:
- 数据字段至少包含一个字节
- 这是一个 SYN 段,或者是 FIN 段,或者是 RST 段。
2. 确认号
如果你还记得前面你和你对象发短信的例子的话,这里就不难了。每传送一个 TCP 段,都要等待对方回复一个确认。不过这种方式效率太低,在 TCP 协议中,一般采用累积确认的方式,即每传送多个连续 TCP 段,可以只对最后一个 TCP 段进行确认。
对方通过回复一个确认号,来表示确认已经接收到了哪个 TCP 段。比如发送方发送了一个报文段序号为 301 的 TCP 段,这个段携带了 100 字节数据,则接收方应当回复的确认号是 401,它表示接收方已经收到了字节序号为 [0, 400] 的数据,现在期望你发送字节序号为 401 以及以后的数据。
只有当 ACK 标志位被置位的时候,确认号这个字段才有效。
3. 一次完整的 TCP 连接到释放的过程
图3 这个数据包还是前面实验中抓取的
为了能够清晰的看到客户端与服务器的交互过程,这里将它画成了下面的时序图。
图4 客户端与服务器的交互
现在,我们只需要观察每一次发送 TCP 段后,对方是如何应答的。为了方便观察序号和确认号,我只保留了后三位。
TCP 协议(序号和确认号)相关推荐
- TCP/IP,TCPsocket,tcp协议的特点,tcp报文段最长字节数,tcp头内容,确认号和超时时限的设定细节,tcp协议是GBN和SR的混合体,
TCP/IP,TCPsocket,tcp协议的特点,tcp报文段最长字节数,tcp头内容,确认号和超时时限的设定细节,tcp协议是GBN和SR的混合体, 一.TCPsocket 1.TCP是面向连接的 ...
- 6-TCP 协议(序号和确认号)
转载请注明出处:http://blog.csdn.net/q1007729991/article/details/69261780 接下来的内容是学习后续内容的基础,必须先讲清楚.为了方便你回忆 TC ...
- tcp报文段的结构之序号和确认号 (计算机网络—自顶向下)
发现看书还是要做点笔记才行,看了就忘,没有多大的效率- 自顶向下这本书,说的不会很晦涩(虽然没看过别的),很多方面可以理解,但是涉及到一些算法原理的时候就有点头疼了,自己底子太差了- 这次看到了 第三 ...
- TCP头部分析与确认号的理解
TCP头部分析与确认号的理解 https://www.cnblogs.com/xcywt/p/8075623.html TCP协议(1)--TCP首部 https://blog.csdn.net/la ...
- 网络原理 --- 传输层Ⅱ TCP协议中的确认应答,超时重传和连接管理
文章目录 网络原理 传输层 TCP 协议 TCP的基本特性 1.确认应答 2.超时重传 3.连接管理 ❗❗①建立连接(三次握手) ②断开连接(四次挥手) 总结 网络原理 介绍TCP/IP协议中每一层里 ...
- 【TCP 协议2】确认应答、超时重传机制
文章目录 前言 一.确认应答 1, 什么是确认应答 2, 序列号和确认应答号 二.超时重传 1, 什么是超时重传 总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你:
- TCP 序列号和确认号是如何变化的?
大家好,我是小林. 在网站上回答了很多人的问题,我发现很多人对 TCP 序列号和确认号的变化都是懵懵懂懂的,只知道三次握手和四次挥手过程中,ACK 报文中确认号要 +1,然后数据传输中 TCP 序列号 ...
- TCP协议的特点和TCP报文段格式
参考:https://www.bilibili.com/video/BV19E411D78Q?p=62 传送数据之前必须建立连接,数据传送结束后要释放连接.不提供广播或多播服务.由于TCP要提 供可靠 ...
- TCP协议详解----Linux学习笔记
传输层概述 传输层协议主要有两个:TCP协议和UDP协议 TCP服务特点: TCP协议的特点是:面向连接.字节流和可靠传输.(相对UDP协议而言的) 面向连接: 1.使用TCP协议的双方必须先建立连接 ...
最新文章
- 【RS】如何从USGS上下载LANDSAT数据
- 如何给docker容器分配内存和cpu
- 创建squashfs.img文件挂载失败
- hdu-3015 Disharmony Trees---离散化+两个树状数组
- java证明ArrayList是线程不安全的
- 浅谈流处理算法 (1) – 蓄水池采样
- young people can also be a leader
- 理解JavaScript中this的指向详解
- exists hive中如何使用_07045.16.2如何使用Hive合并小文件
- 《Greenplum5.0 最佳实践》 迁移数据使用Gptransfer
- 一万年太久,只争朝夕_散文网
- C C++实现网络验证和本地验证
- 人工智能时代已经到来,政务工业商业等各领域都将是刚需
- (软件测试工程师)一线大厂新人工作指南!
- Git 术语及中英文对照
- 常用的十大Python开发工具
- koolshare lede 挂载硬盘剩余空间-猫耳朵朵
- IFrame与Frame分析
- MP3音频录音机6.30版
- [SpringCloud踩坑笔记]-Load balancer does not have available server for client