6-TCP 协议(序号和确认号)
转载请注明出处:http://blog.csdn.net/q1007729991/article/details/69261780
接下来的内容是学习后续内容的基础,必须先讲清楚。为了方便你回忆 TCP 首部,这里再次把这个图贴出来,以便对照。
图1 TCP 首部
1. 序号
1.1 序号存在的意义
首先得弄清楚为什么要有序号。
在 APUE 基础中,我们通过 TCP 协议将数据发送给对方,就比如 helloworld
,这一串字节流,假设被拆分成了三个 TCP 报文段,第一个报文段携带了 hel
,第二个报文段携带了 lowo
,第三个报文段携带了 rld
,这三个报文段不一定是按照顺序送到对端的,那么对端收到这三个段是如何确定他们的顺序的呢?此时序号的意义就体现在这里。
1.2 序号
序号占用 4 字节,即 32 位。它的范围是 [0,232−1][0, 2^{32}-1],也就是说一共有 4 294 967 296 个序号。TCP 协议中的序号,指的是报文段序号。
- 字节序号
TCP 连接中,为传送的字节流(数据)中的每一个字节按顺序编号。也就是说,在一次 TCP 连接建立的开始,到 TCP 连接的断开,你要传输的所有数据的每一个字节都要编号。这个序号称为字节序号。
- 初始序号 ISN
当新连接建立的时候,第一个字节数据的序号称为 ISN(Initial Sequence Number),即初始序号。ISN 一开始并不一定就是 1。在 RFC (规定网络协议的文档)中规定,ISN 的分配是根据时间来的。当操作系统初始化的时候,有一个全局变量假设为 g_number 被初始化为 1(或 0),然后每隔 4us 加 1. 当 g_number 达到最大值的时候又绕回到 0.当新连接建立时,就把 g_number 的值赋值给 ISN.
在 BSD 系统中,这段代码实现时并未遵守协议,它将 g_number 初始化为 1,每 8us 加 1,也就是说,每隔 1 秒增加 125000,约 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 段后,对方是如何应答的。为了方便观察序号和确认号,我只保留了后三位。
4. 总结
- 字节序号与报文段序号
- 初始序列号
- 确认号
6-TCP 协议(序号和确认号)相关推荐
- TCP 协议(序号和确认号)
接下来的内容是学习后续内容的基础,必须先讲清楚.为了方便你回忆 TCP 首部,这里再次把这个图贴出来,以便对照. 图1 TCP 首部 1. 序号 序号占用 4 字节,即 32 位.它的范围是 [0,2 ...
- TCP/IP,TCPsocket,tcp协议的特点,tcp报文段最长字节数,tcp头内容,确认号和超时时限的设定细节,tcp协议是GBN和SR的混合体,
TCP/IP,TCPsocket,tcp协议的特点,tcp报文段最长字节数,tcp头内容,确认号和超时时限的设定细节,tcp协议是GBN和SR的混合体, 一.TCPsocket 1.TCP是面向连接的 ...
- 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协议的双方必须先建立连接 ...
最新文章
- Battery electric vehicles (BEVs) 快充技术
- 122112_1452_Word1
- fisher's exact test
- Zabbix之监控Mysql性能
- P5737 【深基7.例3】闰年展示(python3实现)
- Docker 入门尝鲜
- SQL:select case when(转)
- 【库安装】windows下Python安装protobuf
- [转]ORA-01555错误总结(二)
- static 和 const的解释(转载)
- windwos 10打印机服务老是自动关闭
- WinForm自定义ListBox显示样式
- 数字人民币的基础:共识与信任
- android功能机,诺基亚正式发布了4款安卓智能手机和一款能上网的功能机
- TypeError: can‘t unbox heterogeneous list: int64 = float64
- 青龙面板基本脚本运行必装依赖 一键式安装脚本安装依赖 2023年3月28日
- 百度地图标记点中添加echarts图表
- Android 分享功能的实现
- 备赛电赛学习硬件篇(七):智能小车底板设计,暂时停更该系列
- IT数据中心第三方运维服务市场概况
热门文章
- java圆的面积_JAVA编程中求圆的面积怎么写?
- 数字疗法002 | 睡不着,睡不醒,睡不好?这几个平台是失眠星人的救星
- teablue数据分析_智能图像分析–智能外币检测与识别-艾科瑞特(iCREDIT)【最新版】_图像识别_商业智能_数据API-云市场-阿里云...
- 美团CEO王兴的互联网思维
- C语言--杨辉三角形
- 关于IO口信号采集上下拉电阻的选择
- java 日期转换视频_自定义转换器实现日期转换_JavaEE框架(Maven+SpringMvc+Spring+MyBatis)全程实战教程_Java视频-51CTO学院...
- VTK-三维坐标系计算两点之间距离
- 批量文件重命名工具:A Better Finder Rename 11 for Mac
- 敷完面膜后要擦水乳吗_贴完面膜要不要涂水乳