tcp 的三次握手与四次挥手

      • 问1: 请你说一下tcp的三次握手
          • 一次握手
          • 两次握手
          • 三次握手
          • 问: 为什么不四(更多)次握手?
      • 问 2: 请说一下 tcp 的 4 次挥手
          • 一次挥手
          • 两次挥手
            • 问题:能不能等到数据传输完成再返回 ack?
          • 三次挥手
          • 四次挥手
          • 问: 为什么要等两个最大报文存在时间?

bg: tcp 是可靠的连接,如何保证

  1. 建立连接: 三次握手
  2. 传输: 重传,拥塞机制
  3. 断开: 四次挥手

问1: 请你说一下tcp的三次握手

如果自己去设计一个tcp建立连接的流程会怎么做?

一次握手

客户端(请求连接:SYN)->服务端

问题 1: 客户端不知道服务端能不能收到
问题 2: 客户端不知道服务端是否可以发送数据
问题 3: (假设服务端收到请求,并同意连接)服务端不知道客户端是否可以接收到数据.

举个例子:
客户端连接的是一个关闭的服务器,如果只进行一次握手,客户端发送给关闭的服务器,服务器是不可能收到的.

结论: 一次握手不行

两次握手

客户端(请求连接:SYN)->服务端
服务端(ack+SYN)->客户端

问题 1: 服务端不知道客户端是否可以收到数据

举个例子:
第二次握手的数据丢包了,客户端没有收到
这时候客户端认为连接没有建立好(没有收到服务器的返回)
服务器认为连接已经建立好了
这时服务器发送数据给客户端,客户端是不接收的(因为客户端认为连接没有建立好)

结论: 两次握手也不行

三次握手

客户端(请求连接:SYN)->服务端
服务端(ack+SYN)->客户端
客户端(ack)->服务端

服务端知道客户端可以发送与接受数据
客户端知道服务端可以发送与接受数据

结论: 三次握手可以

问: 为什么不四(更多)次握手?

三次握手已经满足需求,多余的只是在浪费性能.

问 2: 请说一下 tcp 的 4 次挥手

自己来设计断开连接的流程会怎么设计?

终端 A 数据传输完成,准备与终端 B 断开连接

一次挥手

A(FIN)->B

问题 1:A不知道 B 是否能收到断开连接的信号
问题 2: A不知道 B 的数据是否已经传输完成,可能会丢失数据

举个例子:
B 并没有传输完成数据,这时 A 断开了连接,没有完成传输的数据就丢失了

结论: 一次挥手不行

两次挥手

A(FIN)->B
B(ack)->A

问题 1: A不知道 B 的数据是否已经传输完成,可能会丢失数据

问题:能不能等到数据传输完成再返回 ack?

不能
举个例子: 如果 A 发送 FIN 给 B ,这个过程可能丢包了,B 没有收到 A 发起的 FIN 就不会 ACK,所以 3 有重传,只要一段时间没有收到 ACK 就会重传 FIN

那么问题来了,如果等到数据传输完成再返回 ack,那么如果 B 数据没有传输完成,还需要传输很久,比如 10 分钟,那么这十分钟都没有返回 ack,A 端没收到 ack 会认为丢包了,就会不断的重发 FIN

结论: 两次挥手不行

三次挥手

A(FIN)->B
B(ack)->A
B(FIN)->A

问题: B 不知道 A 是否能收到发出的 FIN 信号,如果丢包,A 会保持 tcp 连接

四次挥手

A(FIN)->B
B(ack)->A
B(FIN)->A
A(ack)->B

保证双方数据都传输完毕,等待两个报文段最大存活时间就会断开

问: 为什么要等两个最大报文存在时间?

有两种说法:

  1. 确保 B 能收到 ack,不然 B 就会认为FIN丢包了,继续发送 FIN
  2. 最后 ack 后可能网络中还有一些数据包(丢包重传的),如果这时再建立连接可能会是同一个端口,那么这些(上一个连接)数据包可能在新的连接中被接受到,造成数据的错乱.

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

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

相关文章

Kubernetes(k8s)离线部署DolphinScheduler3.2.2

1.环境准备 1.1 集群规划 本次安装环境为:3台k8s现有的postgreSql数据库zookeeper服务 1.2 下载及介绍 DolphinScheduler-3.2.2官网:https://dolphinscheduler.apache.org/zh-cn/docs/3.2.2 官网安装文档:https://dolphinscheduler.apach…

C++的侵入式链表

非侵入式链表 非侵入式链表是一种链表数据结构,其中每个元素(节点)并不需要自己包含指向前后节点的指针。链表的结构和节点的存储是分开的,链表容器会单独管理这些指针。 常见的非侵入式链表节点可以由以下所示,即&a…

Flutter组合动画学习

如何使用动画控制器和动画来创建一个简单的动画效果。具体来说,它通过一个 AnimationController 来控制两个动画,一个用于旋转,一个用于绘制。 前置知识点学习 SingleTickerProviderStateMixin SingleTickerProviderStateMixin 是 Flutter …

在vscode的ESP-IDF中使用自定义组件

以hello-world为例,演示步骤和注意事项 1、新建ESP-IDF项目 选择模板 从hello-world模板创建 2、打开项目 3、编译结果没错 正在执行任务: /home/azhu/.espressif/python_env/idf5.1_py3.10_env/bin/python /home/azhu/esp/v5.1/esp-idf/tools/idf_size.py /home…

2025差旅平台怎么选?一体化、全流程降本案例解析

差旅支出在企业中一直是一项重要但容易被忽视的成本开支,尤其是在项目驱动型企业中,因频繁的差旅需求,支出规模往往持续增长。以差旅平台分贝通签约伙伴——某智能制造业的业务模式为例,该模式要求员工定期前往不同的工厂、供应商…

【linux】NFS实验

NFS NFS服务 nfs,最早是Sun这家公司所发展出来的,它最大的功能就是可以透过网络,让不同的机器,不同的操作系统,进行实现文档的共享。所以你可以简单的将他看做是文件服务器。 实验准备 ①先准备一个服务器端的操作系统和客户端的操作系统(Red Hat)。 ②选择NAT模式,…

智源研究院与安谋科技达成战略合作,共建开源AI“芯”生态

12月25日,智源研究院与安谋科技(中国)有限公司(以下简称“安谋科技”)与正式签署战略合作协议,双方将面向多元AI芯片领域开展算子库优化与适配、编译器与工具链支持、生态系统建设与推广等一系列深入合作&a…

ROG NUC:强大内核激发创意,AI赋能学子科技探索

有这么一款能够激发无限创意、助力科技探索的迷你主机,它以其卓越的性能和迷你的身材成为了成为了ProArt百校行活动中的明星产品,助力广大学子勇敢探索未知,追逐属于自己的科技梦想。它就是ROG NUC 2024! 强大性能,创意…

从零玩转CanMV-K230(8)-多线程例程

文章目录 前言一、_thread模块API二、使用示例创建并启动线程停止线程_thread.exit() 总结 前言 K230上不支持threading,只能支持_thread,该模块实现了相应 CPython 模块的子集,CPython 是 Python 编程的参考实现 语言,也是最著名…

yii2 手动添加 phpoffice\phpexcel

1.下载地址:https://github.com/PHPOffice/PHPExcel 2.解压并修改文件名为phpexcel 在yii项目的vendor目录下创建一个文件夹命名为phpoffice 把phpexcel目录放到phpoffic文件夹下 查看vendor\phpoffice\phpexcel目录下会看到这些文件 3.到vendor\composer目录下…

安卓多渠道apk配置不同签名

一般签名都是放在buildTypes里面: ... android {...defaultConfig {...}signingConfigs {release {storeFile file("myreleasekey.keystore")storePassword "password"keyAlias "MyReleaseKey"keyPassword "password"}}bu…

数据库-用户管理

一、创建用户 create user xy104192..168.42.24 identified by 123456;xy104:用户名 localhost;这个权限最高的root用户 %:任务ip地址 192.168.42.24:登录的IP地址 identified by ‘123456’:指定该用户的密码 mysql…

管理者需要的技能

管理者需要具备技术技能、人际技能和概念技能,这三种技能的内涵如下: 技术技能 专业知识与技术能力:指管理者掌握和运用某一专业领域内的知识、技术和方法的能力。这包括对特定行业的专业知识、技术流程、工具设备的熟悉和精通。例如&#x…

scala基础学习(数据类型)-字符串

文章目录 scala中的字符串引号单引号双引号三引号 常用内置函数length 获取字符串长度charAt 字符串元素访问substring 获取字串indexOf 获取字串位置replace 字符串替换toLowerCase,toUpperCase 字符串大小写转换trim 去除首位空白符split 字符串切割以及查看startsWith,endsW…

数据库安全-redisCouchdb

1.redis未授权访问 默认端口:6379 1.1 Redis沙盒逃逸漏洞RCE-CVE-2022-0543 介绍:Redis 是一套开源的使用 ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的API。Redis 如果在没有开启认证的情况下,…

springboot集成websokcet+uniapp开发聊天原型验证(一)

1. 整体思路 群组聊天功能实现思路 需要为每个群组维护一个对应的集合(可以是 Set 等数据结构),用来存放该群组内所有在线用户的 WebSocketSession。当有消息发送到群组时,遍历该群组对应的集合,向其中的每个在线用户…

Reed-Muller(RM)码之编码

点个关注吧! 看了一些中文的博客,RM码没有很详细的资料,所以本文尝试给出推导原理。 推导 RM码由 ( r , m ) ( r , m ) (r,m

List直接使用removeAll报错

List直接使用removeAll报错 需要先将list转换才能使用 原因是: removeAll 方法在 Java 中用于从当前列表中删除另一个列表中存在的所有元素。如果直接对 List 接口的一个实现使用 removeAll 方法抛出异常,可能的原因有: 不同的List实现&am…

Linux -- 线程的优点、pthread 线程库

目录 线程的优点 pthread 线程库 前言 认识线程库 简单验证线程的独立栈空间 线程的优点 与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少得多。 调度进程时,CPU 中有一个 cache(缓存,提高运行效率&#xff0…

【magic-dash】01:magic-dash创建单页面应用及二次开发

文章目录 一、magic-dash是什么1.1 安装1.2 使用1.2.1 查看内置项目模板1.2.2 生成指定项目模板1.2.3 查看当前magic-dash版本1.2.4 查看命令说明1.2.5 内置模板列表二、创建虚拟环境并安装magic-dash三、magic-dash单页工具应用开发3.1 创建单页面项目3.1.1 使用命令行创建单页…