接下来的内容是学习后续内容的基础,必须先讲清楚。为了方便你回忆 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->2379453244e->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 协议(序号和确认号)相关推荐

  1. TCP/IP,TCPsocket,tcp协议的特点,tcp报文段最长字节数,tcp头内容,确认号和超时时限的设定细节,tcp协议是GBN和SR的混合体,

    TCP/IP,TCPsocket,tcp协议的特点,tcp报文段最长字节数,tcp头内容,确认号和超时时限的设定细节,tcp协议是GBN和SR的混合体, 一.TCPsocket 1.TCP是面向连接的 ...

  2. 6-TCP 协议(序号和确认号)

    转载请注明出处:http://blog.csdn.net/q1007729991/article/details/69261780 接下来的内容是学习后续内容的基础,必须先讲清楚.为了方便你回忆 TC ...

  3. tcp报文段的结构之序号和确认号 (计算机网络—自顶向下)

    发现看书还是要做点笔记才行,看了就忘,没有多大的效率- 自顶向下这本书,说的不会很晦涩(虽然没看过别的),很多方面可以理解,但是涉及到一些算法原理的时候就有点头疼了,自己底子太差了- 这次看到了 第三 ...

  4. TCP头部分析与确认号的理解

    TCP头部分析与确认号的理解 https://www.cnblogs.com/xcywt/p/8075623.html TCP协议(1)--TCP首部 https://blog.csdn.net/la ...

  5. 网络原理 --- 传输层Ⅱ TCP协议中的确认应答,超时重传和连接管理

    文章目录 网络原理 传输层 TCP 协议 TCP的基本特性 1.确认应答 2.超时重传 3.连接管理 ❗❗①建立连接(三次握手) ②断开连接(四次挥手) 总结 网络原理 介绍TCP/IP协议中每一层里 ...

  6. 【TCP 协议2】确认应答、超时重传机制

    文章目录 前言 一.确认应答 1, 什么是确认应答 2, 序列号和确认应答号 二.超时重传 1, 什么是超时重传 总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你:

  7. TCP 序列号和确认号是如何变化的?

    大家好,我是小林. 在网站上回答了很多人的问题,我发现很多人对 TCP 序列号和确认号的变化都是懵懵懂懂的,只知道三次握手和四次挥手过程中,ACK 报文中确认号要 +1,然后数据传输中 TCP 序列号 ...

  8. TCP协议的特点和TCP报文段格式

    参考:https://www.bilibili.com/video/BV19E411D78Q?p=62 传送数据之前必须建立连接,数据传送结束后要释放连接.不提供广播或多播服务.由于TCP要提 供可靠 ...

  9. TCP协议详解----Linux学习笔记

    传输层概述 传输层协议主要有两个:TCP协议和UDP协议 TCP服务特点: TCP协议的特点是:面向连接.字节流和可靠传输.(相对UDP协议而言的) 面向连接: 1.使用TCP协议的双方必须先建立连接 ...

最新文章

  1. 【RS】如何从USGS上下载LANDSAT数据
  2. 如何给docker容器分配内存和cpu
  3. 创建squashfs.img文件挂载失败
  4. hdu-3015 Disharmony Trees---离散化+两个树状数组
  5. java证明ArrayList是线程不安全的
  6. 浅谈流处理算法 (1) – 蓄水池采样
  7. young people can also be a leader
  8. 理解JavaScript中this的指向详解
  9. exists hive中如何使用_07045.16.2如何使用Hive合并小文件
  10. 《Greenplum5.0 最佳实践》 迁移数据使用Gptransfer
  11. 一万年太久,只争朝夕_散文网
  12. C C++实现网络验证和本地验证
  13. 人工智能时代已经到来,政务工业商业等各领域都将是刚需
  14. (软件测试工程师)一线大厂新人工作指南!
  15. Git 术语及中英文对照
  16. 常用的十大Python开发工具
  17. koolshare lede 挂载硬盘剩余空间-猫耳朵朵
  18. IFrame与Frame分析
  19. MP3音频录音机6.30版
  20. [SpringCloud踩坑笔记]-Load balancer does not have available server for client

热门文章

  1. 如何解决微信端不能直接跳转浏览器
  2. DC/DCT/DCG 差别和联系
  3. 【Fracturing Destruction】Unity3D的物体爆裂、炸裂、碎裂效果
  4. 起航---开发基于国产华为鸿蒙操作系统的APP
  5. 快门背后的机器学习:实时 HDR+ 和双重曝光控制
  6. 卸载linux+nvidia驱动,如何完全卸载nvidia驱动程序?
  7. 对抗博弈搜索——吃豆人
  8. 这些数据爬虫网站,帮你工作提质增效,还不收藏?
  9. glob.glob()函数
  10. 守得住孤独,把得住清欢