探讨TCP的可靠性以及三次握手的奥秘

news2024/10/5 18:29:09

🌟 欢迎来到 我的博客! 🌈

💡 探索未知, 分享知识 !💫

本文目录

    • 1. TCP的可靠性机制
      • 1.2可靠性的基础上,尽可能得提高效率
    • 2. TCP三次握手过程
    • 3. 为何不是四次握手?


在这里插入图片描述

在互联网的复杂世界中,TCP(传输控制协议)扮演着一个不可或缺的角色,确保我们的数据能够准确无误地在世界各地流动。它是一种面向连接的可靠的基于字节流 , 全双工的传输层通信协议。今天,我们将一起探索TCP的可靠性背后的原理,特别是那个让人好奇的问题:为什么是三次握手不是两次、也不是四次?

1. TCP的可靠性机制

TCP的设计目标是提供一种可靠的数据传输服务,在无法预测的网络环境中,这是一项挑战。以下是TCP确保数据可靠性的几种核心机制:

  • 确认应答:TCP对每个传输的字节赋予一个序号,用于跟踪数据包的顺序。接收方通过发送带有确认序号(ACK)的报文来告知发送方哪些数据已经被成功接收。确认序号接收方期望接收的下一个字节的序号。这样,即使数据包乱序到达,接收方也能根据序号重新排序,确保数据的完整性和顺序。

在这里插入图片描述

  • 超时重传:当发送方发送数据后,它会启动一个定时器,等待接收方的确认响应。如果在预定时间内没有收到确认序号(ACK),发送方会认为数据包丢失或出错,并重新发送该数据包。这个机制保证了数据能够在遇到丢包或错误时得到恢复。

情况① 数据直接丢了,接收方根本没有收到

在这里插入图片描述

情况① 接收方收到了,但是返回的ack丢了

在这里插入图片描述

1.2可靠性的基础上,尽可能得提高效率

  • 滑动窗口

要提高效率,每次等待ACK的时间就要花费不少时间,所以TCP引出了一个机制 : 通过滑动窗口实现批量传输

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上述批量传输数据的过程,被称为滑动窗口
  • 流量控制:TCP通过滑动窗口机制实现流量控制,动态调整发送方的发送速率以匹配接收方的处理能力。窗口大小指的是接收方能够接收但还未确认的数据量,这避免了接收方因处理不过来而导致的数据溢出。
滑动窗口,批量发送并不是数据越大就速度就越快,我们还要考虑到接受方.

如果你发的太快,瞬间就把接受方的缓冲区给打满了,接下来如果继续发送的话,就会造成丢包.这种情况不如发的慢一点.

在这里插入图片描述
在这里插入图片描述

这些机制共同作用,确保了TCP能在不稳定的网络环境中提供可靠且相对于比较快速的数据传输服务。

2. TCP三次握手过程

建立TCP连接的三次握手过程是这样的:

  1. SYN:客户端向服务器发送一个SYN(同步序列编号)报文,并进入SYN_SEND状态,等待服务器的响应。这个步骤启动连接过程,客户端告诉服务器它想建立连接,并提供初始的序号。
  2. SYN-ACK:服务器收到SYN报文后,会发送一个SYN-ACK报文,同时提供自己的初始序号,并确认客户端的序号。此时服务器进入SYN_RECV状态。
  3. ACK:客户端收到SYN-ACK报文后,发送一个ACK报文作为响应,确认服务器的初始序号。此时,TCP连接建立完成,数据传输可以开始。

在这里插入图片描述

如何来辨别是同步报文还是应答报文
在这里插入图片描述

3. 为何不是四次握手?

其实第二次的`syn + ack`,按通常一问一答的思路是发送ack报文之后,在发送syn报文来确认认对方的接收状态,但是为了提高效率便将syn和ack一并发送

三次握手的设计确保了在双方准备好发送和接收数据之前不会建立连接。如果采用两次握手,可能会遗漏对方的准备状态确认,导致单向通信或数据无法到达。而采用四次握手则造成没必要的开销.

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

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

相关文章

Autosar Crypto Driver学习笔记(二)

文章目录 Crypto DriverFunction definitionsGeneral APICrypto_InitCrypto_GetVersionInfo Job Processing InterfaceCrypto_ProcessJob Job Cancellation InterfaceKey Management InterfaceKey Setting Interface密钥设置接口Crypto_KeyElementSetCrypto_KeySetValid Key Ex…

Linux操作系统及进程(一)

一、操作系统的概念 概念 :任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括: 内核(进程管理,内存管理,文件管理,驱动管理) 其他程…

Redis淘汰策略,持久化和集群

Redis淘汰策略 Redis 的 OBJECT 命令提供了多个子命令&#xff0c;用于检查有关键的内部详细信息。以下是可用的子命令及其描述&#xff1a; ENCODING <key>&#xff1a;返回用于存储与键关联的值的内部表示类型。 FREQ <key>&#xff1a;返回键的访问频率索引。返…

并查集

数据结构、算法总述&#xff1a;数据结构/基础算法 C/C_禊月初三的博客-CSDN博客 并查集是一种用于管理元素所属集合的数据结构&#xff0c;实现为一个森林&#xff0c;其中每棵树表示一个集合&#xff0c;树中的节点表示对应集合中的元素。 基本操作&#xff1a; 初始化&…

Windows→Linux,本地同步到服务器

适用背景&#xff1a; 用自己电脑修改代码&#xff0c;使用实验室/公司的服务器炼丹的朋友 优势&#xff1a; 本地 <--> 服务器&#xff0c;实时同步&#xff0c;省去文件传输的步骤 本地改 -> 自动同步到服务器 -> 服务器跑代码 -> 一键同步回本地&#xff…

Elasticsearch:调整搜索速度

在我之前的文章 “Elasticsearch&#xff1a;如何提高查询性能” 及 “Elasticsearch&#xff1a;提升 Elasticsearch 性能” 里&#xff0c;我详细描述了如何提高搜索的性能。在今天的文章里&#xff0c;我从另外一个视角来描述如何调整搜索的速度。希望对大家有所帮助&#x…

Python之Web开发中级教程----搭建虚拟环境

Python之Web开发中级教程----搭建Web框架二 搭建虚拟环境 虚拟环境的作用 虚拟环境可以搭建独立的python运行环境, 使得单个项目的运行环境与其它项目互不影响. 搭建虚拟环境 &#xff08;1&#xff09;安装 sudo pip install virtualenv sudo pip install virtualenvwra…

【LabVIEW FPGA入门】定时

在本节学习使用循环计时器来设置FPGA循环速率&#xff0c;等待来添加事件之间的延迟&#xff0c;以及Tick Count来对FPGA代码进行基准测试。 1.定时快捷VI函数 在FPGA VI中放置的每个VI或函数都需要一定的时间来执行。您可以允许操作以数据流确定的速率发生&#xff0c;而无需额…

科研学习|论文解读——交替协同注意力网络下基于属性的情感分析 (IPM, 2019)

论文题目 Aspect-based sentiment analysis with alternating coattention networks 摘要 基于属性的情感分析&#xff08;ABSA&#xff09;旨在预测给定文本中特定目标的情感极性。近年来&#xff0c;为了获得情感分类任务中更有效的特征表示&#xff0c;人们对利用注意力网络…

使用kettle导入Elasticsearch数据库

资源文件&#xff1a; 操作步骤&#xff1a; 1、删除data-integration\lib 下 所有 jackson- 开头的jar包&#xff0c;然后把jackson-2.8.10-libs文件夹中的jar拷到lib目录下 2、替换data-integration\plugins\elasticsearch-bulk-insert-plugin文件夹 3、如果开启了ssl认证…

Spring6--IOC反转控制 / 基于XML管理bean

1. 容器IOC 先理解概念&#xff0c;再进行实际操作。概念比较偏术语化&#xff0c;第一次看可能看不懂&#xff0c;建议多看几遍&#xff0c;再尝试自己独立复述一遍&#xff0c;效果会好些 1.1. IOC容器 1.1.1. 控制反转&#xff08;IOC&#xff09; IOC (Inversion of Con…

27-Java MVC 模式

Java空对象模式 实现范例 MVC模式代表 Model-View-Controller&#xff08;模型-视图-控制器&#xff09; 模式MVC模式用于应用程序的分层开发 Model&#xff08;模型&#xff09; - 模型代表一个存取数据的对象或 JAVA POJO 它也可以带有逻辑&#xff0c;在数据变化时更新控制…

Sharding sphere分库分表

需要物理自己实现分表分库&#xff0c;然后通过配置文件配置。 配置文件&#xff1a; 需要配置多个数据源&#xff0c;主从表的关系【默认主表修改&#xff0c;从表读取】&#xff0c;定义分库的策略【比如User id】和分表【表Id】的策略 分库和分表策略&#xff1a;分库策略…

K8S之持久化存储

持久化存储 支持的持久化存储类型EmptyDirHostPathNFS 在K8S中部署的应用都是以pod容器的形式运行的&#xff0c;假如部署数据库服务 例如&#xff1a;MySQL、Redis等&#xff0c;需要对产生的数据做备份。如果pod不挂载数据卷&#xff0c;那pod被删除或重启后这些数据会随之消…

双指针 | 移动零 | 复写零

1.移动零 题目描述&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 示例&#xff1a; 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]解题思路&#xff1a; right指针一直往后移动&#xff0c;当…

LAMP架构部署--yum安装方式

这里写目录标题 LAMP架构部署web服务器工作流程web工作流程 yum安装方式安装软件包配置apache启用代理模块 配置虚拟主机配置php验证 LAMP架构部署 web服务器工作流程 web服务器的资源分为两种&#xff0c;静态资源和动态资源 静态资源就是指静态内容&#xff0c;客户端从服…

MATLAB环境下基于可调Q因子小波变换的滚动轴承故障诊断(MATLAB R2021B)

小波变换是一种时频局域化方法&#xff0c;它的窗口面积固定但形状可以发生改变&#xff08;时间窗与频率窗均可变化&#xff09;。小波变换在时间域与频率域都能够表示信号的局部特征&#xff0c;并具有多分辨率分析的特点&#xff0c;是机械故障诊断中常用的方法。小波变换故…

【机器学习系列】M3DM工业缺陷检测部署与训练

一.基础资料 1.Git 地址 地址 2.issues issues 3.参考 参考 csdn 二.服务器信息 1.GPU 服务器 GPU 服务器自带 CUDA 安装(前提是需要勾选上)CUDA 需要选择大于 11.3 的版本登录服务器后会自动安装 GPU 驱动 2.CUDA 安装 GPU 服务器自带 CUDA CUDA 版本查看 3.登录信…

deepseek-coder模型量化

1 简介 DeepSeek-Coder在多种编程语言和各种基准测试中取得了开源代码模型中最先进的性能。 为尝试在开发板进行部署&#xff0c;首先利用llama.cpp对其进行量化。 2 llama.cpp安装 git clone之后进入文件夹make即可&#xff0c;再将依赖补全pip install -r requirements.tx…

蓝桥杯2023年省A(一波三折的)【买瓜】折半搜索+剪枝+排序

题目&#xff1a;洛谷 P9234 [蓝桥杯 2023 省 A] 买瓜 折半搜索 一开始觉得像dp&#xff0c;试着写了&#xff0c;显然过不了&#xff0c;但我实在觉得搜索也过不了啊&#xff0c;去看题解&#xff0c;发现使用了折半搜索&#xff08;每天都觉得啥都不会捏 折半搜索就是先搜一…