TCP三次握手四次挥手,滑动窗口

TCP三次握手

TCP(传输控制协议)是一种重要的网络协议,它属于互联网协议套件中的传输层,主要用于在不可靠的互联网上提供可靠的、有序的和无差错的数据传输。下面详细介绍TCP的工作原理,包括其连接建立的三次握手过程。

TCP的特点
  1. 面向连接:在数据传输之前,必须在两个通信端点之间建立连接。
  2. 字节流服务:数据被视为无结构的字节流,发送方的字节流和接收方接收的字节流完全相同。
  3. 可靠性:TCP通过序列号、确认应答、重传机制等确保数据传输的可靠性。
  4. 流量控制:TCP使用滑动窗口协议进行流量控制,确保发送方不会因为发送数据过快而淹没接收方。
  5. 拥塞控制:TCP还包括多种拥塞控制机制,如慢启动、拥塞避免、快速重传和快速恢复等,以适应网络状况的变化。
三次握手过程

三次握手(Three-way Handshake)是TCP建立连接的过程,它涉及发送和接收三个包。这个过程的主要目的是同步连接双方的序列号和确认号,并交换TCP窗口大小信息。三次握手的具体步骤如下:

  1. SYN
    • 客户端发送一个SYN(同步序列编号)报文到服务器。
    • 在这个报文中,客户端将设置一个随机的序列号(例如x)。
  2. SYN+ACK
    • 服务器收到SYN报文后,会发送一个SYN+ACK(确认应答)报文。
    • 服务器的SYN+ACK报文中,确认号设置为客户端的序列号加一(即x+1),同时服务器也选择一个随机序列号(例如y)。
  3. ACK
    • 客户端收到SYN+ACK报文后,向服务器发送一个ACK报文。
    • 这个ACK报文的序列号是客户端原始的序列号加一(即x+1),确认号是服务器序列号加一(即y+1)。
    • 三次握手完成后,TCP连接建立。
连接的终止

TCP连接的终止则通常涉及四次挥手(Four-way Handshake)。这个过程确保双方都能完全关闭连接,释放资源。

总结

通过三次握手,TCP协议能够在不可靠的网络环境中提供一种可靠的、有序的数据传输方式。这种机制使TCP成为互联网上应用最广泛的协议之一,广泛用于Web浏览、电子邮件、文件传输等。

image-20240603191500270

TCP(传输控制协议)的头部包含多个关键字段,每个字段都对于维持TCP的可靠性、效率和数据完整性至关重要。以下是各个字段的详细解释:

  1. 16位端口号 (Port Number)
  • 源端口号目的端口号分别用于标识发送和接收的应用程序。端口号是与IP地址一起用来标识网络上的特定进程。
  • 客户端通常使用由系统自动选择的临时端口号,而服务器通常使用固定端口号(如HTTP服务通常使用端口80)。
  1. 32位序号 (Sequence Number)
  • 用于标识从TCP连接开始后发送的每个字节的位置。
  • 序号是基于字节流的,每个字节都会被计数。
  • 初始序列号(ISN)是随机选取的,用以增加连接的安全性。
  1. 32位确认号 (Acknowledgement Number)
  • 用于确认接收到的数据。
  • 确认号是期望收到的下一个序列号,即对方发送的最后一个字节的序列号加一。
  1. 4位头部长度 (Header Length)
  • 也称为数据偏移,表示TCP头部的长度,以32位(4字节)为单位计量。
  • 因为TCP头部可以包含不定数量的选项,所以这个字段是必需的。
  1. 6位标志位 (Control Flags)
  • URG(紧急): 指示紧急指针字段有效。
  • ACK(确认): 表示确认号字段有效。
  • PSH(推送): 提示接收应用程序应该立即从TCP缓冲区读取数据。
  • RST(重置): 用于重新建立连接。
  • SYN(同步): 用于建立连接。
  • FIN(结束): 用于关闭连接。
  1. 16位窗口大小 (Window Size)
  • 用于流量控制。
  • 表示接收端的TCP缓冲区还能接收多少字节的数据,用来控制发送端的发送速率。
  1. 16位校验和 (Checksum)
  • 用于确保TCP头部和数据在传输过程中的完整性。
  • 通过在发送和接收时计算和验证,检测数据是否在传输中被破坏。
  1. 16位紧急指针 (Urgent Pointer)
  • 当URG标志位被设置时,这个字段表示紧急数据的结束位置相对于序列号的偏移。
  • 它用于标识数据流中紧急消息的结束位置。

以上字段共同工作,确保TCP能够提供可靠、有序且无差错的数据传输服务。这些机制也使TCP成为复杂网络环境中健壮的传输协议之一。

第一次握手:

1.客户端将SYN标志位置为1

2.生成一个随机的32位的序号seq=J , 这个序号后边是可以携带数据(数据的大小)

第二次握手:

1.服务器端接收客户端的连接: ACK=1

2.服务器会回发一个确认序号: ack=客户端的序号 + 数据长度 + SYN/FIN(按一个字节算)

3.服务器端会向客户端发起连接请求: SYN=1

4.服务器会生成一个随机序号:seq = K

第三次握手:

1.客户单应答服务器的连接请求:ACK=1

2.客户端回复收到了服务器端的数据:ack=服务端的序号 + 数据长度 + SYN/FIN(按一个字节算))
image-20240603203421092

为什么是三次:因为双方都要确认服务端和客户端都能够收发

image-20240603194150228

TCP滑动窗口

滑动窗口(Sliding Window)是一种关键的流量控制技术,广泛应用于TCP协议中,用于优化数据传输效率和管理网络拥塞。滑动窗口机制通过允许发送方在接收到应答(ACK)之前发送多个数据包,从而提高网络的吞吐量。以下是关于滑动窗口的一些详细解释:

滑动窗口的工作原理

**滑动窗口机制允许发送方在接收任何确认应答之前连续发送一组数据包,而不是逐个等待应答。**接收方通过ACK应答告知发送方当前可以接受的窗口大小,从而控制发送方发送数据的速度和数量。

关键概念
  1. 窗口大小(Window Size)

    • 表示接收方缓冲区中可以接受的数据字节数。
    • 窗口大小由接收方动态调整,反映其当前可用的缓冲区空间。
  2. 发送窗口(Send Window)

    • 位于发送方,用于存储已发送但未确认的数据。
    • 发送窗口的大小由接收方通过ACK消息告知。
  3. 接收窗口(Receive Window)

    • 位于接收方,用于存储已接收到但未被应用程序读取的数据。
    • 接收窗口的大小会动态变化,反映出接收方的处理能力和缓冲区使用情况。
滑动窗口的具体过程
  1. 初始化

    • 发送方和接收方在连接建立时交换初始窗口大小。
  2. 发送数据

    • 发送方在发送窗口大小范围内连续发送数据包,并等待接收方的ACK。
    • 每发送一个数据包,发送窗口滑动。
  3. 接收数据

    • 接收方接收到数据包后,将其存入接收缓冲区,并发送ACK确认收到的数据。
    • ACK消息中包含新的窗口大小信息,告知发送方接收方当前能接受的字节数。
  4. 确认和滑动

    • 发送方收到ACK后,调整发送窗口,将窗口向前滑动到下一个未确认的字节位置,继续发送新的数据包。
示例

假设发送窗口大小为4,表示发送方可以在未收到任何ACK的情况下发送4个数据包。窗口大小根据接收方的接收能力动态调整。滑动窗口的操作如下:

  1. 发送数据包

    • 发送方连续发送数据包1、2、3、4。
    • 等待接收方的ACK应答。
  2. 接收和确认

    • 接收方收到数据包1、2、3、4后,发送ACK确认,告知窗口大小为4。
    • 发送方收到ACK后,窗口向前滑动4个位置,继续发送数据包5、6、7、8。
滑动窗口的优势
  1. 提高吞吐量

    • 通过允许发送方在等待ACK的同时发送多个数据包,提高了数据传输的并发性和吞吐量。
  2. 流量控制

    • 通过动态调整窗口大小,发送方可以根据接收方的处理能力控制数据发送速率,避免缓冲区溢出。
  3. 拥塞控制

    • 滑动窗口机制结合拥塞控制算法(如TCP的慢启动和拥塞避免),有效管理网络拥塞,确保数据传输的稳定性和效率。
总结

滑动窗口机制在TCP协议中扮演着重要角色,确保数据传输的可靠性和效率。通过动态调整窗口大小,滑动窗口能够适应网络状况的变化,优化数据传输过程中的流量控制和拥塞管理。

image-20240603200742930

发送方的缓冲区:白色格子:空闲的空间灰色格子:数据已经被发送出去了,但是还没有被接收紫色格子:还没有发送出去的数据
接收方的缓冲区:白色格子:空闲的空间紫色格子:已经接收到的数据

image-20240603201402767

# mss: Maximum Segment Size(一条数据的最大的数据量)
# win: 滑动窗口
1. 客户端向服务器发起连接,客户单的滑动窗口是4096,一次发送的最大数据量是1460
2. 服务器接收连接情况,告诉客户端服务器的窗口大小是6144,一次发送的最大数据量是1024
3. 第三次握手
4. 4-9 客户端连续给服务器发送了6k的数据,每次发送1k
5. 第10次,服务器告诉客户端:发送的6k数据以及接收到,存储在缓冲区中,缓冲区数据已经处理了2k,窗
口大小是2k
6. 第11次,服务器告诉客户端:发送的6k数据以及接收到,存储在缓冲区中,缓冲区数据已经处理了4k,窗
口大小是4k
7. 第12次,客户端给服务器发送了1k的数据
8. 第13次,客户端主动请求和服务器断开连接,并且给服务器发送了1k的数据
9. 第14次,服务器回复ACK 8194, a:同意断开连接的请求 b:告诉客户端已经接受到方才发的2k的数据
c:滑动窗口2k
10.第15、16次,通知客户端滑动窗口的大小
11.第17次,第三次挥手,服务器端给客户端发送FIN,请求断开连接
12.第18次,第四次回收,客户端同意了服务器端的断开请求

TCP四次挥手

四次挥手发生在断开连接的时候,在程序中当调用了close()会使用TCP协议进行四次挥手。

客户端和服务器端都可以主动发起断开连接,谁先调用close()谁就是发起。

因为在TCP连接的时候,采用三次握手建立的的连接是双向的,在断开的时候需要双向断开。

为什么要四次:确保双方数据传输完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/21808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

类和对象(下)【初始化列表】【static成员】【友元】等..... .及【练习题】

类和对象&#xff08;下&#xff09; 1.再谈构造函数 1.1构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 // 初始化列表 # include<iostream> using namespace std;class Date { public:// 构造…

机器学习第十一次课

前言 从现在开始进入神经网络的领域了 正文 先是一段历史介绍,这个就跳过吧,我觉得这里最重要的就是反向传播这里 反向传播 反向传播&#xff08;Backpropagation&#xff09;是一种训练人工神经网络的算法&#xff0c;它通过计算损失函数关于网络参数的梯度来调整网络参数…

java基础篇(1)

JDK是什么?有哪些内容组成?JDK是Java开发工具包 JVM虚拟机: Java程序运行的地方 核心类库: Java已经写好的东西&#xff0c;我们可以直接用开发工具: javac、java、jdb、jhat.. JRE是什么?有哪些内容组成? JRE是Java运行环境 JVM、核心类库、运行工具 JDK&#xff0c;JRE&…

Vulnhub项目:HACKSUDO: THOR

1、靶机地址 hacksudo: Thor ~ VulnHubhacksudo: Thor, made by Vishal Waghmare. Download & walkthrough links are available.https://vulnhub.com/entry/hacksudo-thor,733/ 2、渗透过程 来了来了&#xff0c;开搞&#xff0c;先看目标 56.161&#xff0c;本机 56.1…

WebGL开发电力数字孪生

WebGL 开发电力数字孪生是一项复杂但极具潜力的任务。电力数字孪生通过创建电力系统的虚拟模型&#xff0c;可以实时监控、分析和优化电力系统的运行状态。以下是开发电力数字孪生的详细步骤。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流…

【MyBatis】MyBatis操作数据库(二):动态SQL、#{}与${}的区别

目录 一、 动态SQL1.1 \<if>标签1.2 \<trim>标签1.3 \<where>标签1.4 \<set>标签1.5 \<foreach>标签1.6 \<include>标签 二、 #{}与${}的区别2.1 #{}是预编译sql&#xff0c;${}是即时sql2.2 SQL注入2.3 #{}性能高于${}2.4 ${}用于排序功能…

防雷接地测试方法及注意事项

一、防雷接地的测试方法 检测避雷针、高层建筑物等设施的接地电阻&#xff0c;接雷后能否顺畅导入大地。 1、你先找到防雷接地网的接地引线或等电位联接箱。 2、用接地电阻测测试仪测接地电阻。 &#xff08;有两根测试桩0.4M的要插入泥土&#xff0c;一根距测试点20米&…

基于DeepLabv3+实现图像分割

目录 1. 作者介绍2. DeepLabv3算法2.1 DeepLabv3算法介绍2.2 DeepLabv3模型结构 3. 实验过程基于DeepLabv3实现图像分割3.1 VOC数据集介绍3.2 代码实现3.3 问题分析 4. 参考连接 1. 作者介绍 吴天禧&#xff0c;女&#xff0c;西安工程大学电子信息学院&#xff0c;2023级研究…

[线程与网络] 网络编程与通信原理(五): 深入理解网络层IP协议与数据链路层以太网协议

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …

基于java的CRM客户关系管理系统(五)

目录 第五章 系统的详细设计与实现 5.1 持久层设计 5.1.1 创建关系映射 5.1.2 与数据库的连接 5.1.3 Hibernate的ORM映射 5.1.4 Struts的配置文件 5.1.5 Spring 的配置文件 5.1.6 DAO层设计 5.2 逻辑业务层设计 5.2.1 业务逻辑类的实现 前面内容请移步 基于java的C…

超市管理系统设计1——基本功能设计

超市管理系统基础功能类设计 1. 概述 本设计文稿提供一个基础的超市管理系统&#xff0c;包含基本的功能设计。该系统将管理商品、顾客、员工和交易记录&#xff0c;不需要接入数据库&#xff0c;通过文件存储数据&#xff0c;并满足面向对象编程的基本要求&#xff08;继承、…

FCCL:Learn from others and Be yourself in Heterogeneous Federated Learning

CVPR2022,通过在公开数据集上的logits相似性(同类相近、异类原理)来迁移客户端知识,通过上轮模型和初始模型延缓遗忘。 论文地址:openaccess code: 作者开源 贡献 提出了一种新颖的联邦学习方法,称为 FCCL(联邦互相关和持续学习)。 为异构联邦学习制定了一种简单有效…

面试题:说一下 http 报文都有哪些东西?

面试题&#xff1a;说一下 http 报文都有哪些东西&#xff1f; HTTP 是传输超文本&#xff08;实际上除了 HTML&#xff0c;可以传输任何类型的文件&#xff0c;如视频、音频、文本等&#xff09;的协议&#xff0c;是一组用于浏览器-服务器之间数据传输的规则。 HTTP 位于 OS…

摸鱼大数据——Hive函数14

14、开窗(开列)函数 官网链接&#xff1a;Window Functions - Apache AsterixDB - Apache Software Foundation 14.1 基础使用 开窗函数格式: 开窗函数 over(partition by 分组字段名 [order by 排序字段名 asc|desc] [rows between 开窗开始 and 开窗结束]) ​ partition b…

【问题随记】System policy prevents Wi-Fi scans,解决连接 WIFI 需要权限的问题

问题随记 System policy prevents Wi-Fi scans&#xff0c;每次打开我的开发板连接 wifi 都会出现下面的弹窗&#xff0c;这也阻挡了我的WIFI自动连接&#xff0c;然后就需要连上屏幕&#xff0c;输入 wifi 密码&#xff0c;这样才能进行 VNC、SSH 等一系列的连接。 问题解决 …

【运维项目经历|026】Redis智能集群构建与性能优化工程

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…

【SVG 生成系列论文(九)】如何通过文本生成 svg logo?IconShop 模型推理代码详解

SVG 生成系列论文&#xff08;一&#xff09; 和 SVG 生成系列论文&#xff08;二&#xff09; 分别介绍了 StarVector 的大致背景和详细的模型细节。SVG 生成系列论文&#xff08;三&#xff09;和 SVG 生成系列论文&#xff08;四&#xff09;则分别介绍实验、数据集和数据增…

2024码蹄杯初赛 拔河(非二分解法)

AK选手前来补充一发邪典&#xff08;水数据&#xff09;写法 题面&#xff1a; 简单来说就是给你一个序列&#xff0c;让你选择一段连续区间&#xff0c;使得这个区间平均值最大&#xff0c;同时区间长度大于等于F。 很显然对于区间求和直接用前缀和优化到O(1)&#xff0c;但是…

jar包部署到服务器,修改jar包配置文件

jar包部署到服务器 打包项目1.jar包分离2.整体打包配置文件配置文件分离整体打包修改配置文件 打包项目 maven项目打包有两种&#xff0c;一是将自己的项目和依赖包分离&#xff0c;二是打包成一个jar包 1.jar包分离 需要在pom文件中引入依赖 <build><finalName&…

Docker基础篇之将本地镜像发布到私有库

文章目录 1. Docker Registry简介2. 将本地镜像推送到私有库 1. Docker Registry简介 Docker Registry是官方提供的工具&#xff0c;可以用于构建私有镜像仓库。 2. 将本地镜像推送到私有库 下载Docker Registry docker pull registry现在我们可以从镜像中看到下载的Regist…