TCP三次握手,四次挥手

news2024/11/14 20:21:12

为什么是三次握手,两次or四次为什么不行?

两次握手:客户端发,服务收到后发,两方即可建立连接

存在的问题:这个过程确认了客户端发送能力正常,服务端发送,接受能力正常,但是没能确认客户端的接收能力是否正常

三次握手

目的一(有争议):防止已失效的连接请求又传送到服务器端,因而产生错误

若建立连接只需两次握手,客户端并没有太大的变化,仍然需要获得服务端的应答后才进入ESTABLISHED状态,而服务端在收到连接请求后就进入ESTABLISHED状态。此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源。

目的二:(38条消息) TCP 为什么三次握手而不是两次握手(正解版)_tcp三次握手为什么不能两次_贺二公子的博客-CSDN博客

  • 为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤
  • 如果只是两次握手,至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认

 为什么 A 要先进入TIME-WAIT状态,等待2MSL时间后才进入CLOSED状态

为了保证B能收到A的确认应答。若A发完确认应答后直接进入CLOSED状态,那么如果该应答丢失,B等待超时后就会重新发送连接释放请求,但此时A已经关闭了,不会作出任何响应,因此B永远无法正常关闭。

为什么是四次挥手,三次是否可以?

因为 TCP 是全双工通信,由于TCP的半关闭(half-close)特性,TCP提供了连接的一端在结束它的发送后还能接收来自另—端数据的能力。
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接

   第一次挥手 : 主动方 发送断开连接的请求(FIN 报文)给被动方, 仅仅代表 主动方不会发送 数据报文了,但仍然可以接受数据报文。

   第二次挥手:  被动方可能还有一些数据报文需要发送,因此会先发送 ACK 报文,告知 主动方 “我知道了你不想发送数据了”。这样主动方 便不会因为没有收到应答 而继续向被动方继续发送断开连接的请求(FIN 报文)。

   第三次挥手:  被动方处理完数据报文后,便主动发送 FIN 报文;(这样可以保证数据通信正常可靠的完成), 被动方进入 LAST_ACK 阶段(超时等待)。

   第四次挥手:  如果主动方及时发送 ACK 报文 进行 连接中断的确认,这是被动方就直接释放连接,进入可用状态。

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

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

相关文章

商户查询的缓存——添加redis缓存

1.什么是缓存 缓存就是数据交换的缓冲区(Cache),是存储数据的临时地方,一般读写性能较高 2.添加redis缓存 Autowired private StringRedisTemplate stringRedisTemplate; /*** 通过id查询商户信息* param id* return*/ Override public Resu…

【Python】五子棋 —— 摸鱼必备的小项目~

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,YOLO领域博主爱笑的男孩。擅长深度学习,活动,YOLO,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个人简…

Kali-linux设置ProxyChains

ProxyChains是Linux和其他Unices下的代理工具。它可以使任何程序通过代理上网,允许TCP和DNS通过代理隧道,支持HTTP、SOCKS4和SOCKS5类型的代理服务器,并且可配置多个代理。ProxyChains通过一个用户定义的代理列表强制连接指定的应用程序&…

【Redis扩展】Redis两种高级数据结构-HyperLogLog、BitMap

一、HyperLoglog-基数统计 1. HyperlogLog数据类型特点 Redis HyperLogLog 是用来做基数统计的算法,用以完成独立总数的统计HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。花费…

springboot整合邮箱功能二(实战)

【SpringBoot整合Email发送邮件】_ζั͡ ั͡空 ั͡ ั͡白�的博客-CSDN博客 https://www.cnblogs.com/erlou96/p/16878192.html#_label1_5 1. 准备工作 1.1 qq邮箱设置 本文默认使用qq邮箱来发送邮件,然后使用一个在线临时邮箱来接收邮件。为了让程序能够通过…

Semantic Segmentation using Adversarial Networks代码

代码来源 首先看一下模型架构: 损失计算: class GANUpdater(chainer.training.StandardUpdater, UpdaterMixin):def __init__(self, *args, **kwargs):self.model kwargs.pop(model) # set for exeptions.Evaluatorself.gen, self.dis self.model[g…

O2OA中如何使用PostgreSQL + Citus 实现分布式数据库实现方案?

虽然 O2OA 数据表高效的表结构以及索引的设计已经极大程度地保障了数据存取操作的性能,但是随着使用时间从增长,数据表存放的数据量也会急剧增长。此时,仍然需要有合适的方案来解决数据量产生的系统性能瓶颈。本文介绍通过 PostgreSQL Citus…

2023年5月DAMA-CDGA/CDGP数据治理认证开班啦,我要报名学习

6月18日DAMA-CDGA/CDGP数据治理认证考试开放报名中! 考试开放地区:北京、上海、广州、深圳、长沙、呼和浩特、杭州、南京、济南、成都、西安。其他地区凑人数中… DAMA-CDGA/CDGP数据治理认证班进行中,报名从速! DAMA认证为数据…

【刷题之路】LeetCode 234. 回文链表

【刷题之路】LeetCode 234. 回文链表 一、题目描述二、解题1、方法1——复制值到数组后用双指针1.1、思路分析1.2、代码实现 2、方法2——反转另一半链表2.1、思路分析2.2、代码实现2.3、补充 3、方法3——递归3.1、思路分析3.2、代码实现 一、题目描述 原题连接: …

计算机图形学 | 裁剪与屏幕映射

计算机图形学 | 裁剪与屏幕映射 计算机图形学 | 裁剪与屏幕映射8.1 裁剪思想裁剪的概念编码裁剪法中点裁剪法Liang-Barsky算法 8.2 真正的裁剪——在三维空间遇见多边形真正的裁剪多边形的裁剪Weiler-Atherton算法三维空间中的裁剪 8.3 几何阶段的完结:屏幕映射屏幕…

API 接口的使用和功能

随着互联网的快速发展,API接口已经成为了现代开发中不可或缺的一部分。API接口可以让你的应用程序与其他应用程序、系统或服务进行数据交流和集成。如果你正在开发应用程序,那么最好的方法就是使用API接口来增强功能和性能。 我们的API接口是为您的应用…

上财黄烨:金融科技人才的吸引与培养

“金融科技企业在吸引人才前,应先完善人才培养机制,建立员工画像,有针对性地培训提高成员综合素质。” ——上海金融智能工程技术研究中心上海财经大学金融科技研究院秘书长&院长助理黄烨老师 01.何为数字人才? 目前大多数研…

什么,你不会Windows本地账户和本地组账户的管理加固?没意思

什么,你不会Windows本地账户和本地组账户的管理加固?没意思 1.图形化界面方式管理用户2.图形化界面方式管理用户组3.命令行界面方式管理用户4.命令行界面方式管理账户组5.账户安全基线加固账户检查口令检查 1.图形化界面方式管理用户 1、打开管理界面 …

运维自动化工具 Ansible的安装部署和常用模块介绍

ansible安装 ansible的安装有很多种方式 官方文档:https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.ht ml https://docs.ansible.com/ansible/latest/installation_guide/index.html 下载 https://releases.ansible.com/ansible…

Java入门全网最详细 - 从入门到转行

Java基础入门 - 坚持 Java 基本介绍Java 学习须知Java 学习文档Java 基础Java Hello WorldJava 变量Java 数据类型Java 运算符Java 修饰符Java 表达式 & 语句 & 代码块Java 注释--------------------------------------------------------------------------Java 控制语…

在vue中引入高德地图

既然要用到高德地图首先要申请成为高德地图开发者,并申请使用高德地图的key这两点在这篇文章就不过多赘述,有需要的小伙伴可以查查资料,或者去高德地图api官网都有很详细的介绍。高德地图官网 简单提一下申请秘钥流程(web端&#…

Python入门教程+项目实战-12.2节: 字典的操作方法

目录 12.2.1 字典的常用操作方法 12.2.2 字典的查找 12.2.3 字典的修改 12.2.4 字典的添加 12.2.5 字典的删除 12.2.6 知识要点 12.2.7 系统学习python 12.2.1 字典的常用操作方法 字典类型是一种抽象数据类型,抽象数据类型定义了数据类型的操作方法&#x…

想成为神经网络大师?这些常用算法和框架必须掌握!

神经网络是机器学习和人工智能领域中的一种常用算法,它在图像识别、自然语言处理等方面都有广泛的应用。如果你想入门神经网络,那么这篇文章就是为你准备的。 首先,了解基本概念是入门神经网络的基础。神经元是神经网络的基本组成部分&#x…

AQS底层源码解析

可重入锁 又叫递归锁,同一个线程在外层方法获得锁的时候,再进入该线程内层方法会自动获取锁,(前提锁对象是同一个对象)。不会因为之前已经获取过还没释放而阻塞。 Synchronized和ReentrantLock都是可重入锁&#xff…

玩游戏时突然弹出”显示器驱动程序已停止响应并且已恢复”怎么办

随着3A游戏大作不断面市,用户也不断地提升着自己的硬件设备。但是硬件更上了,却还会出现一些突如其来的情况,比如正准备开启某款游戏时,电脑右下角突然出现“显示器驱动程序已停止响应并且已恢复”。遇事不慌,驱动人生…