当前位置: 首页 > news >正文

【网络】为什么TCP需要四次挥手?

在网络通信中,TCP(传输控制协议)是一种可靠的、面向连接的协议,它在数据传输过程中保证了数据的可靠性和顺序性。而TCP的连接建立过程只需要三次握手,但是TCP的挥手过程却需要四次挥手,这是为什么呢?本文将深入探讨TCP挥手过程为何需要四次。

TCP连接的建立和断开

在深入探讨为什么TCP需要四次挥手之前,我们先简要回顾一下TCP连接的建立和断开过程。

  • TCP连接的建立(Three-way handshake):

    1. 客户端向服务器发送SYN(同步)报文,表示请求建立连接。
    2. 服务器收到SYN报文后,向客户端发送SYN-ACK(同步-确认)报文,表示同意建立连接。
    3. 客户端收到服务器的SYN-ACK报文后,向服务器发送ACK(确认)报文,表示连接建立完成。
  • TCP连接的断开(Four-way handshake):

    1. 主动关闭方(例如客户端)向被动关闭方(例如服务器)发送FIN(结束)报文,表示请求断开连接。
    2. 被动关闭方收到FIN报文后,发送ACK报文,确认收到FIN报文。
    3. 被动关闭方向主动关闭方发送FIN报文,表示同意断开连接。
    4. 主动关闭方收到FIN报文后,发送ACK报文,确认收到FIN报文,完成连接的断开。

为什么TCP需要四次挥手?

TCP需要四次挥手,主要有以下两个原因:

  1. 保证数据的可靠传输: 在TCP连接的断开过程中,主动关闭方发送FIN报文后,被动关闭方可能还有未发送完的数据。被动关闭方发送ACK报文确认收到FIN报文后,需要等待一段时间,直到确认所有数据已发送完毕,然后才能发送自己的FIN报文。这样可以确保数据的完整传输,避免数据丢失。

  2. 允许双方同时关闭连接: TCP协议允许连接的双方同时发起连接的断开。在这种情况下,双方都会向对方发送FIN报文,然后等待对方的ACK报文。如果TCP的挥手过程只需要三次,那么在双方同时发起连接的情况下,就会出现死锁的情况:双方都收到对方的FIN报文后,都发送了ACK报文,然后都等待对方的ACK报文,导致连接无法正常断开。因此,通过增加一次挥手,可以避免这种死锁情况的发生。

什么情况下可以三次挥手

当TCP连接的被动关闭方(例如服务器)没有数据要发送,并且开启了TCP延迟确认机制时,第二次 ACK 和第三次 FIN 可以合并传输,从而出现了三次挥手的情况。

TCP的延迟确认机制是一种优化机制,它允许被动关闭方在收到数据时不立即发送 ACK 报文进行确认,而是等待一段时间,如果在这段时间内收到了另一方的数据,就将 ACK 报文和之前收到的数据一起进行确认。这样可以减少网络中的 ACK 报文数量,提高网络的利用率。

当被动关闭方没有数据要发送时,它会收到主动关闭方发送的 FIN 报文,表示请求断开连接。如果开启了延迟确认机制,被动关闭方就会延迟发送 ACK 报文进行确认,而是等待一段时间,看是否在这段时间内收到了主动关闭方的数据。如果没有收到数据,被动关闭方就会发送 ACK 报文进行确认,并立即发送自己的 FIN 报文,表示同意断开连接。因此,第二次 ACK 和第三次 FIN 就可以合并传输,形成了三次挥手的情况。

这种情况下的三次挥手过程如下:

  1. 主动关闭方发送 FIN 报文。
  2. 被动关闭方收到 FIN 报文后,延迟一段时间后发送 ACK 报文进行确认,并立即发送自己的 FIN 报文。
  3. 主动关闭方收到 FIN 报文后,发送 ACK 报文进行确认,完成连接的断开。

在这种情况下,通过合并传输第二次 ACK 和第三次 FIN 报文,可以减少网络中的报文数量,提高网络的效率,但仍然保持了连接的可靠性和数据的完整性。

总结

TCP的挥手过程设计为四次是为了确保数据的可靠传输和允许连接的双方同时关闭连接。被动关闭方在发送第三次FIN报文之前需要确保所有数据已发送完毕,以保证数据的完整性。同时,增加一次挥手也确保了连接的灵活性和可靠性,从而提高了网络通信的稳定性和可靠性。

相关文章:

【网络】为什么TCP需要四次挥手?

在网络通信中,TCP(传输控制协议)是一种可靠的、面向连接的协议,它在数据传输过程中保证了数据的可靠性和顺序性。而TCP的连接建立过程只需要三次握手,但是TCP的挥手过程却需要四次挥手,这是为什么呢&#x…...

2024自动化测试市场分析

大家都说2024年软件测试讲会卷的更厉害,从原来的功能测试到现在自动化测试,那么2024年是否可以学习自动化冲一把,我们先看一下2023年自动化测试在测试行业中的分析: 1.市场需求增长: 随着技术的进步和企业对软件质量的要求日益提高,自动化测试在测试行…...

什么是机器视觉应用解决方案?

机器视觉应用解决方案通常指的是利用视觉系统自动检测、处理和分析图像的技术方案,以便执行各种工业或研究任务,如质量控制、自动检测、导航和识别等。在LabVIEW环境中,这些解决方案通常涉及到硬件和软件的紧密集成,以实现高效的数…...

使用 scrapyd 部署 scrapy

1.scrapyd 是什么? Scrapyd 是一个用于部署和运行 Scrapy 爬虫项目的服务器应用程序。它使得你可以通过 HTTP 命令来部署、管理和执行多个 Scrapy 爬虫,非常适合持续集成和生产环境中的爬虫部署。 2.安装scrapyd 并使用 2.1 安装 scrapyd F:\scrapydTes…...

Python计算器程序代码

from tkinter import * import random class App: def __init__(self, master): self.master master self.initwidgets() #表达式的值 self.expr None def initwidgets(self): #定义一个输入组件 self.show Label(relief SUNKEN, font (Courier New, 24), width 25, bg …...

图像分割各种算子算法-可直接使用(Canny、Roberts、Sobel)

Canny算子: import numpy as np import cv2 as cv from matplotlib import pyplot as pltimg cv.imread("../test_1_1.png") edges cv.Canny(img, 100, 200)plt.subplot(121),plt.imshow(img,cmap gray) plt.title(Original Image), plt.xticks([]), …...

Spring Boot进阶 - 实现自动装配原理

Spring Boot的自动装配(Auto-Configuration)是其核心特性之一,它极大地简化了Spring应用的配置过程。自动装配的原理基于Spring框架的Configuration、ConditionalOnClass、ConditionalOnMissingBean等注解,以及Spring Boot提供的s…...

面向电商家居行业3D室内场景合成中的空间感知

本文主要介绍了3D场景合成技术在电商领域,尤其是家居家装行业的应用。它解释了如何使用3D场景合成创建逼真的室内设计,让消费者能够交互式地查看和体验产品,提高购物的趣味性和效率。文章提到了两种主要的3D室内场景生成算法:传统…...

ERROR 1045 (28000) Access denied for user ‘root‘@‘IP‘(using password YES/NO)

查看权限 要查看MySQL用户的权限,您可以使用SHOW GRANTS语句。这将列出用户的权限,包括授予的权限和可以授予其他用户的权限。 以下是查看当前用户权限的SQL命令: SHOW GRANTS; 如果您想查看特定用户的权限,可以使用以下命令&…...

verilog $test$plusargs和$value$plusargs

#学习记录# 目录 Abstract 1 使用宏定义的条件编译 2 $test$plusargs 3 $value$plusargs 参考文献 Abstract 我们在进行verilog仿真时,经常喜欢采用宏定义,来做条件判断,但是通过宏定义做条件判断的这种方法,存在很大的弊端…...

Linux设置open files

临时设置 ulimit -n 1025 查看是否成功 ulimit -n 永久设置,网上很多说添加* soft nofile 65535 * hard nofile 65535但设置后不生效 vim /etc/security/limits.conf * soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535 然后重新…...

Linux下安装JDK并配置环境变量

一、Oracle官网下载jdk 1、官网地址 https://www.oracle.com/java/technologies/downloads/#java17 2、命令下载 wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz 3、解压 tar -zxvf jdk-17_linux-x64_bin.tar.gz 4、配置环境变量 ec…...

擎天科技与禅道合作,打造统一的项目管理平台

统一、全面的项目管理平台能够帮助企业优化管理流程,提升业务效率。擎天集团选择与禅道软件合作,打造统一的项目管理平台,在降低自研软件的研发成本、打破团队信息孤岛、保障数据全面性等方面效果显著,大大提高了团队沟通协作效率…...

ansible报错解决:Failed to import the required Python library (netaddr)

ansible报错解决:Failed to import the required Python library (netaddr) 问题情况 今天我在做实验的时候出现了一个问题,以下是我的playbook,这个playbook是验证变量ip_address是否是一个合法的IP地址,并打印相应的信息的一个…...

盛邦安全拟战略收购卫星通信加密厂商天御云安

近日,远江盛邦(北京)网络安全科技股份有限公司(以下简称“盛邦安全”,股票代码:688651)对外公布,拟使用自有资金不超过人民币3000万元持有北京天御云安科技有限公司(以下简称“天御云安”&#…...

iOS MRC那句话

混编时使用MRC文件需要使用这句话 -fno-objc-arc在下图中显示的位置添加...

macOS DOSBox 汇编环境搭建

正文 一、安装DOSBox 首先前往DOSBox的官网下载并安装最新版本的DOSBox。 二、下载必备的工具包 在用户目录下新建一个文件夹,比如 dosbox: mkdir dosbox然后下载一些常用的工具。下载好了后,将这些工具解压,重新放在 dosbox 这个文件夹…...

Python深度学习基于Tensorflow(1)Numpy基础

文章目录 数据转换和数据生成存取数据数据变形和合并算数计算广播机制使用Numpy实现回归实例 numpy的重要性不言而喻,一般不涉及到GPU/TPU计算,都是用numpy,常见的np就是这个玩意。其特点就是快!其实如果不涉及到深度学习&#xf…...

体验GM CHM Reader Pro,享受高效阅读

还在为CHM文档的阅读而烦恼吗?试试GM CHM Reader Pro for Mac吧!它拥有强大的功能和出色的性能,能够让你轻松打开和阅读CHM文件,享受高效、舒适的阅读体验。无论是学习、工作还是娱乐,GM CHM Reader Pro都能成为你的得…...

校园网拨号上网环境下多开虚拟机,实现宿主机与虚拟机互通,并访问外部网络

校园网某些登录客户端只允许同一时间一台设备登录,因此必须使用NAT模式共享宿主机的真实IP,相当于访问外网时只使用宿主机IP,此方式通过虚拟网卡与物理网卡之间的数据转发实现访问外网及互通 经验证,将centos的物理地址与主机物理…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

LangFlow技术架构分析

🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...

Matlab实现任意伪彩色图像可视化显示

Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的​​亮度(或…...

FTXUI::Dom 模块

DOM 模块定义了分层的 FTXUI::Element 树,可用于构建复杂的终端界面,支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...

Linux入门课的思维导图

耗时两周,终于把慕课网上的Linux的基础入门课实操、总结完了! 第一次以Blog的形式做学习记录,过程很有意思,但也很耗时。 课程时长5h,涉及到很多专有名词,要去逐个查找,以前接触过的概念因为时…...

【Redis】Redis从入门到实战:全面指南

Redis从入门到实战:全面指南 一、Redis简介 Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统,它可以用作数据库、缓存和消息代理。由Salvatore Sanfilippo于2009年开发,因其高性能、丰富的数据结构和广泛的语言支持而广受欢迎。 Redis核心特点:…...

LeetCode 0386.字典序排数:细心总结条件

【LetMeFly】386.字典序排数:细心总结条件 力扣题目链接:https://leetcode.cn/problems/lexicographical-numbers/ 给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。…...