IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 为什么TCP三次握手的时候ACK=Seq+1 -> 正文阅读

[网络协议]为什么TCP三次握手的时候ACK=Seq+1

从Telnet协议讲起

在这里插入图片描述
这个例子来自《计算机网络自顶向下方法》第6版 3.5.2小节。
在这里插入图片描述
上图中,因为主机A发送了一个字符C给主机B,所以作为接收方B的反馈的ACK为42+1。
在这里插入图片描述
上图中,因为主机B发送了一个字符C给主机A,所以作为接收方A的反馈的ACK为79+1。
在这里插入图片描述
而在最后一次发送中,由于没有携带任何数据,实际上Seq = 43是没有意义。但由于这个固定字段总得放个值进去,所以放个Next Sequence Number到这里是最合适的。也就是说这次发送没有消耗掉序号。
有意义的只有ACK = 80,这样就告诉了主机B:我这边已经成功接受到了 起码序号为79且长度为1 的数据。

下一次的可能发送情况

在这里插入图片描述

如果下一次是主机A再发送数据,数据包的Seq还会是43,因为上一次主机A的发送并没有消耗掉序号(即Len = 0),所以主机A发送的数据包序号还是应该从43开始。
在这里插入图片描述
如果下一次是主机B再发送数据,数据包的ACK还会是43,因为上一次主机A的发送并没有消耗掉序号(即Len = 0),所以主机B还是期待对方从43开始的序号。

三次握手时的ACK

在这里插入图片描述这是本机与百度之间的三次握手。
在这里插入图片描述
首先看前两个数据包,第一个数据包的Len = 0,但第二个数据包的ACK还是在Seq = 0的基础上加1了。这就很奇怪,因为按照上一章的逻辑,没有携带数据,那么ACK应该等于Seq的。
在这里插入图片描述
再看后两个数据包,同样的,第一个数据包的Len = 0,但第二个数据包的ACK还是在Seq = 0的基础上加1了。

解释

The server responds to the client with a sequence number of zero, as this is its first packet in this TCP session, and a relative acknowledgement number of 1. The acknowledgement number is set to 1 to indicate the receipt of the client’s SYN flag in packet #1.
Notice that the acknowledgement number has been increased by 1 although no payload data has yet been sent by the client. This is because the presence of the SYN or FIN flag in a received packet triggers an increase of 1 in the sequence. (This does not interfere with the accounting of payload data, because packets with the SYN or FIN flag set do not carry a payload.)

简而言之,接收方反馈的ACK之所以加1,是因为发送方包含了SYN标志位或FIN标志位。

也就是说,只要发送方包含了 SYN标志位或FIN标志位,即使没有包含数据,接收方也得认为 发送方消耗掉了一个序号。

另外,带有 SYN标志位或FIN标志位的报文段(在三次握手和四次挥手中),也是不允许携带数据的。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 12:04:52  更:2021-08-16 12:07:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 19:23:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码