【TCP协议】TCP的运输连接管理-三次握手四次挥手

news2024/11/20 18:22:14

TCP 的运输连接管理

TCP 是面向连接的协议,运输连接是用来传送 TCP 报文的,TCP 的运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。因此,运输连接就有三个阶段,即:连接建立、数据传输、连接释放

TCP 的连接建立

TCP 连接的建立采用客户服务器的方式。主动发起连接建立的应用进程叫做客户(client),而被动等待连接建立的应用进程叫做服务器(server)

在这里插入图片描述
TCP 在建立连接的过程中是采用了三次握手的机制,是指 TCP 在建立连接的过程中分为三个阶段(握手需要在客户和服务器之间交换三个 TCP 报文段)。

  • 第一次握手(SYN):客户端向服务器发送报文段,这时首部的同步位 SYN = 1,告诉服务器想要连接,同时选择一个初始序号 seq = x。注意:TCP 规定,SYN 报文段(即 SYN = 1 的报文段)不能携带数据,但是要消耗掉一个序号。 客户端进程进入 SYN-SENT(同步已发送)状态。
  • 第二次握手(SYN + ACK):服务器接收到请求报文段后,向客户端确认,在确认报文段中把 ACK 置为 1 ,表示确认连接,把 SYN 也置为 1,表示接收建立连接。确认号为 ack = x + 1。注意:该报文段也是不携带数据的,但同样消耗一个序号。 服务器进程此时进入 SYN-REVD(同步收到)状态。
  • 第三次握手(ACK):客户端收到服务器发来的 SYN + ACK 报文段后,客户端还会给服务器发送一个确认报文段(ACK 报文段),告诉服务器已经建立了连接,可以开始传输数据了。此时 TCP 连接已经建立,客户端进程进入了 ESTABLISHED(已建立连接)状态。

在这里插入图片描述

如果说三次握手,少了最后一次握手可以吗?

不可以,会浪费资源。

防止恶意连接,如歌没有第三次握手,当发送客户端发送请求报文段的时候在某个网络节点长时间滞留了,导致客户端重发了一个连接,如果没有第三步的话,那客户端发送的第二个连接收到服务器的 SYN-ACK 报文段后就确定连接了,开始发送数据然后释放连接。这个时候滞留的连接到服务器端然后发送了 SYN-ACK 报文段,服务器则表示已经连接了,等待数据传输,然而并没有数据,则浪费了资源。

如果第三次握手存在的话,那则当客户端发送了 ACK 报文段后才确定已连接。那即使那个连接滞留后才到,也会因为客户端没有发送 ACK 报文段而表示连接未建立成功。所以说第三次握手也是需要的。

半连接队列和全连接队列

服务器第一次收到客户端的连接请求(SYN)后,进程会处于 SYN_RCVD 状态,此时双方还没有完全建立连接,服务器会把此状态下的连接放到一个队列中,把这种队列称为半连接队列。

已经完成三次握手后,建立起来的连接就会放到全连接队列中。 如果队列满了就可能出现丢包现象。

SYN-ACK 重传问题

当服务器发送SYN-ACK 报文段的时候,如果未收到客户确认包(第三次握手),那么服务器会进行首次重传,反复重传次数超过系统规定的最大传送次数后,系统会将该连接信息从半连接队列中删除。

TCP 的连接释放

客户端当数据传输完毕,需请求关闭连接称为 TCP 连接的释放。

在这里插入图片描述
TCP 的连接释放需要经过四次挥手(四个报文段)。TCP 是提供全双工通信的, 也就是释放连接得释放两端互相的连接。而前俩次挥手只是让 TCP 处于半关闭状态,半关闭是通知应用程序已经无数据传输了。

  • 第一次挥手:客户端向服务器端发送 FIN 报文段,这时客户端进程进入了 FIN-WAIT-1(终止等待1)状态。
  • 第二次挥手:服务器收到 FIN 报文段后,发送 ACK 报文段给客户端,这时服务器进程是 CLOSE_WAIT(关闭等待)状态。客户端收到 ACK 报文段后就实现了半关闭状态,此时客户端进入 FIN_WAIT-2 状态。
  • 第三次挥手:若服务器想要关闭服务器到客户端的连接(就是使得服务器不能向客户端发送数据了),则进行第三次挥手,向客户端发送 FIN 报文段。此时服务器端进程状态为 LAST_ACK(最后确认)状态。
  • 第四次挥手:收到 FIN 报文段后,向服务器端发送 ACK 报文段。这时客户端进程的状态为 TIME -WAIT(时间等待)。此时连接并未释放,经过时间等待器设置的时间 2MSL 后,客户端进程为 CLOSED 状态。此时 TCP 链接释放完毕。

时间等待器需要的原因

设置时间等待器是为了客户端发送的最后一个 ACK 能到达服务器端。也就是说服务器端结束 TCP 连接的时间应该比客户端要早一些,让服务器端收到客户端发到的确认后,服务器端进入关闭状态,随后时间到了客户端再进入到关闭状态。

TCP 客户端和服务器端在连接管理过程中的生命周期

在这里插入图片描述

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

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

相关文章

chatgpt赋能Python-python3_6_6怎么用

Python3.6.6的基本介绍 1. Python3的发展历程 自1991年Guido van Rossum创造了Python language以来,Python一直在不断发展和改进。Python3是Python中的最新版本,它对Python2进行了重大升级。Python3.6.6是Python3的一个稳定版本,其中包含了…

chatgpt赋能Python-python3_4安装numpy

Python3.4安装Numpy的SEO指南 Numpy是Python科学计算库之一,它提供了强大的支持,使您可以使用Python进行数学和科学计算。Numpy的安装是许多Python开发者必须掌握的技能,因为它是许多其他库的先决条件。在本SEO指南中,我们将介绍…

MATLAB信号处理:滤波器设计、频域分析和数字信号处理的应用和优化

章节一:引言 在现代科技领域中,信号处理起着至关重要的作用。它涵盖了从音频和图像处理到通信和生物医学工程等众多领域。MATLAB作为一种强大的数值计算软件,为信号处理提供了丰富的工具和函数,使得信号处理任务更加高效和可靠。…

chatgpt赋能Python-python3_6怎么下载

Python3.6如何下载:完全指南 Python 3.6是一种非常强大的编程语言,被广泛应用于各种应用程序和领域。如果你还没有安装Python 3.6,那么你已经错过了很多有趣的功能和工具。本文将向你介绍如何在各种操作系统上下载Python 3.6,无论…

在Vue项目中vue-quill-editor的安装与使用【详细图解+过程+包含图片的缩放拖拽】

Quill 官网:https://quilljs.com// 一、Quill的安装与使用(初级) 1、下载安装 npm install vue-quill-editor --save这里建议使用管理员命令窗口的形式,找到自己的项目,如下图所示。然后进行安装(目的&a…

RBTree改造,并模拟实现setmap

目录 RBTree改造 给红黑树增加迭代器 前置 前置-- RBT细节改造 模拟set 模拟map RBTree改造 给红黑树增加迭代器 前置 前置的作用是找下一个较大的节点。 假如我们it指向的是5,it则是将it指向6。加入it指向的是7,则it则是将it指向8。 也就是说…

三十八、流控效果、

1、流控效果 流控效果是指请求达到流控阈值时应该采取的措施,包括三种: 快速失败:达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。 warm up:预热模式,对超出阈值的请求同样是…

chatgpt赋能Python-python3m

Python 3: 一个新时代的编程语言 在编程的世界里,Python 3可能是当前最为热门的编程语言。Python 3是Python语言的最新版本,代码更加现代化,更加简洁易懂,比Python 2更加易于使用。这篇文章将介绍Python 3的各种特性,…

Git回滚详解

文章目录 git restore撤销工作区文件更改撤销暂存区文件更改 git checkoutgit revert冲突解决具体操作 git resetreset 的作用第 1 步:移动 HEAD(--soft)第 2 步:更新暂存区(--mixed)第 3 步:更…

如何写好英文论文中的句子?(下)

1 前情提要 大家先看完上一篇文章如何写好英文论文中的句子?(上),再接着往下翻。 10 先说名词,再用代词(it、they)指代该名词 11 否定词放在句子开头附近 12 否定词的正确位置:助动…

消息通知之系统层事件发布相关流程

前言 Openharmony 3.1Release中存在消息通知的处理,消息通知包括系统层事件发布、消息订阅、消息投递与处理,为了开发者能够熟悉消息的处理流程,本篇文章主要介绍系统层事件发布的相关流程。 整体流程 代码流程 发布消息 { eventAction)w…

自定义颜色编辑选取对话框

一、简介 Qt中已经有一些封装好的对话框,比如QMessageBox、QColorDialog等,使用起来快捷方便,但缺点是我们无法为它们自定义样式,所以可能难以“融入”我们的项目。既然如此,那就自己做一个把。抱着这样的想法&#x…

Android SELinux安全机制与权限管理那些事

文章目录 前言权限管理系统应用特权应用历史漏洞广播的保护机制CVE-2020-0391 SELinux 前言 在 Android 漏洞挖掘和安全研究过程中,不可避免地会涉及到跟 Android SELinux 安全机制打交道,比如当你手握一个 System 应用的路径穿越的漏洞的时候想去覆写其…

DS:基于鸢尾花数据集利用多种数据降维技术(PCA、SVD、MDS、LDA、T-SNE)实现三维可视化

DS:基于鸢尾花数据集利用多种数据降维技术(PCA、SVD、MDS、LDA、T-SNE)实现三维可视化 目录 基于鸢尾花数据集利用多种数据降维技术(PCA、SVD、MDS、LDA、T-SNE)实现三维可视化 # 1、加载示例数据集(鸢尾花数据集) # 2、数据预处理 # T1、…

媒体专访是品牌初创阶段宣传的重要手段

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 很早以前,有位前辈跟我讲,人的成功分两种,一种是借助平台成功,一种是自己创业成功, 前者成功的概率很大,只需要选好…

【5.18】二、黑盒测试方法—因果图与决策表法

目录 2.3 因果图与决策表法 2.3.1 因果图设计法 2.3.2 决策表 2.3.3 实例:三角形决策表 2.3.4 实例:工资发放决策表 2.3 因果图与决策表法 等价类划分法与边界值分析法主要侧重于输入条件,却没有考虑这些输入之间的关系,如…

单链表和双向链表如何执行删除操作

在实际的软件开发中,从链表中删除一个数据无外乎这两种情况: 删除结点中“值等于某个给定值”的结点;删除给定指针指向的结点。 1.从头结点开始一个一个依次遍历对比,直到找到值等于给定值的结点,然后再通过我前面讲…

LeetCode高频算法刷题记录4

文章目录 1. 二叉树的最近公共祖先【中等】1.1 题目描述1.2 解题思路1.3 代码实现 2. 全排列【中等】2.1 题目描述2.2 解题思路2.3 代码实现 3. 相交链表【简单】3.1 题目描述3.2 解题思路3.3 代码实现 4. 合并 K 个升序链表【困难】4.1 题目描述4.2 解题思路4.3 代码实现 5. 环…

chatgpt赋能Python-python3_4怎么下载

Python3.4的下载和安装 Python是一种流行的编程语言,它被广泛用于算法学习、数据分析和网站开发等领域。Python3.4是Python编程语言的一个版本,它在性能和功能方面都得到了改进。如果你希望学习Python3.4或者使用它开发项目,那么你需要下载并…

Jetpack Compose中的附带效应简介及使用

前言 附带效应是指LaunchedEffect、DisposableEffect、rememberCoroutineScope、rememberUpdatedState、produceState 、derivedStateOf的使用。附带效应这4个字在google官方文档上的表达与解释挺让人难以理解的。其实个人认为准确的描述应该是外部产生的数据向Compose状态作用…