TCP 协议为什么要设计三次握手 TCP 协议,是一种可靠的,基于字节流的,面向连接的传输层协议。

文章目录

  • TCP 协议为什么要设计三次握手
    • TCP 协议,是一种可靠的,基于字节流的,面向连接的传输层协议。
    • TCP 通信双方的数据传输是通过字节流来实现传输的
    • 客户端向服务端发送连接请求并携带同步序列号 SYN。

今天我们来谈谈tcp的三次握手

TCP 协议为什么要设计三次握手

我们可以三个方面来说

TCP 协议,是一种可靠的,基于字节流的,面向连接的传输层协议。

  可靠性体现在 TCP 协议通信双方的数据传输是稳定的,即便是在网络不好的情况下,TCP 都能够保证数据传输到目标端,而这个可靠性是基于数据包确认机制来实现的。

TCP 通信双方的数据传输是通过字节流来实现传输的

  面向连接,是说数据传输之前,必须要建立一个连接,然后基于这个连接进行数据传输

  因为 TCP 是面向连接的协议,所以在进行数据通信之前,需要建立一个可靠的连接,TCP 采用了三次握手的方式来实现连接的建立。

  所谓的三次握手,就是通信双方一共需要发送三次请求,才能确保这个连接的建立。

客户端向服务端发送连接请求并携带同步序列号 SYN。

  服务端收到请求后,发送 SYN 和 ACK,这里的 SYN 表示服务端的同步序列号,
ACK 表示对前面收到请求的一个确认,表示告诉客户端,我收到了你的请求。

  客户端收到服务端的请求后,再次发送 ACK,这个 ACK 是针对服务端连接的一个确认,表示告诉服务端,我收到了你的请求。

在这里插入图片描述
之所以 TCP 要设计三次握手,我认为有三个方面的原因:

  TCP 是可靠性通信协议,所以 TCP 协议的通信双方都必须要维护一个序列号, 去标记已经发送出去的数据包,哪些是已经被对方签收的。而三次握手就是通信双方相互告知序列号的起始值,为了确保这个序列号被收到,所以双方都需要有一个确认的操作。

  TCP 协议需要在一个不可靠的网络环境下实现可靠的数据传输,意味着通信双方必须要通过某种手段来实现一个可靠的数据传输通道,而三次通信是建立这样一个通道的最小值。当然还可以四次、五次,只是没必要浪费这个资源。

  防止历史的重复连接初始化造成的混乱问题,比如说在网络比较差的情况下,客户端连续多次发送建立连接的请求,假设只有两次握手,那么服务端只能选择接受或者拒绝这个连接请求,但是服务端不知道这次请求是不是之前因为网络堵塞而过期的请求,也就是说服务端不知道当前客户端的连接是有效还是无效。

以上就是我对这个问题的理解。感谢大家的支持!!!!

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

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

相关文章

C++ dynamic_cast学习

dynamic_cast是将一个基类对象指针(或引用)转换到继承类指针; 可以在执行期决定真正的类型; 与static_cast一样,dynamic_cast的转换也需要目标类型和源对象有一定的关系:继承关系; 更准确的说,dynamic_cast是用来检查两者是否有继承关系; 用法 dynamic_cast <ty…

Vue2+element-ui 实现select选择器结合Tree树形控件实现下拉树效果

效果&#xff1a; DOM部分 &#xff1a; // 设置el-option隐藏的下拉选项&#xff0c;选项显示的是汉字label&#xff0c;值是value // 如果不设置一个下拉选项&#xff0c;下面的树形组件将无法正常使用 <el-form-item label"报警区域" prop"monitorId"…

如何让python在手机上运行,python程序在手机上运行

大家好&#xff0c;给大家分享一下python怎么在手机上运行爱心代码&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 1. 写在前面的话 天天都在PC端运行Python代码的我&#xff0c;今天突然灵光一现&#xff0c;想着是不是能够在移动端运行P…

【STM32】TIM1在电机应用时的注意事项

互补通道OC和OCN的输出极性 OC1和OC1N同时使能的时候&#xff0c;两个才是互补的&#xff0c;OC相对OCREF高电平有效&#xff0c;OCN相对OCREF低电平有效。当OC1或OC1N只选中一个通道&#xff0c;那么就没有互补的概念&#xff0c;都是OCxREF有效时OC或OC1N有效。 举例&#x…

CSS 缩减顶部

<template><!-- mouseenter"startAnimation" 表示在鼠标进入元素时触发 startAnimation 方法。mouseleave"stopAnimation" 表示在鼠标离开元素时触发 stopAnimation 方法。 --><!-- 容器元素 --><div class"container" mou…

通用搜索的工作原理

了解 Google 的通用搜索结果为何如此重要&#xff0c;通用搜索的发展方向&#xff0c;以及它对您意味着什么。 让我们从回答一个显而易见的问题开始&#xff1a; 什么是通用搜索&#xff1f; 网络上有一些通用搜索的定义&#xff0c;但我更喜欢从马的嘴里听到这样的事情。 …

搞懂Vue一篇文章就够了

vue算是小编接触过时间最长的前端框架了&#xff0c;下面来总结一下最实用的知识点&#xff0c;一篇文章从入门到熟练工 目录 一、概念二、常用特性1.拦截器和路由篇1.1 拦截器和路由配置 2.传值篇2.1父子组件互相传值2.2路由跳转传值 3.接口封装3.1 api接口配置 4.组件封装5. …

GO语言工具函数库--Lancet

支持300常用功能的开源GO语言工具函数库–Lancet lancet&#xff08;柳叶刀&#xff09;是一个全面、高效、可复用的go语言工具函数库。lancet受到了java apache common包和lodash.js的启发。 特性 全面、高效、可复用300常用go工具函数&#xff0c;支持string、slice、dateti…

与擎创科技共建一体化“数智”运维体系,实现数字化转型

小窗滴滴小编获取最新版公司简介 前言&#xff1a; 哈喽大家好&#xff0c;最近分享的互联网IT热讯大家都挺喜欢&#xff0c;小编看着数据着实开心&#xff0c;感谢大家支持&#xff0c;小编会继续给大家推送。 新岁即将启封&#xff0c;我们一年一期的运维干货年末大讲也要…

【halcon深度学习】dev_display_dl_data 移植到C# 上篇

效果展示 前言 在研究halcon深度学习的时候,会发现halcon的例程里面用到了大量的二次封装库函数。这些库函数内部也是由基础的算子组成。我们在halcon的开发环境里面用的很爽,但是一旦要在C#中使用,就会报错。 一开始,我想避开这个移植过程,直接使用halcon引擎(HDevEngi…

深入Mybatis数据源

数据源是持久层框架中最核心的组件之一&#xff0c;在实际工作中比较常见的数据源有 C3P0、Apache Common DBCP、Proxool 等。作为一款成熟的持久化框架&#xff0c;MyBatis 不仅自己提供了一套数据源实现&#xff0c;而且还能够方便地集成第三方数据源。 javax.sql.DataSourc…

scala--面向对象(2)

package scala06object scala07_ABSClass {// 抽象属性 抽象方法 def main(args: Array[String]): Unit = { // 抽象类用法 // 实例化子类 val student0 = new Student08 student0.sayHi("lisi")// 直接实例化抽象类(匿名子类) //匿名子类 是多态的一种体现 (父…

C++系列-第1章顺序结构-3-输出类cout

C系列-第1章顺序结构-3-输出类cout 在线练习&#xff1a; http://noi.openjudge.cn/ https://www.luogu.com.cn/ 总结 本文是C系列博客&#xff0c;主要讲述输出类cout的用法 cout介绍与基本用法 在C中&#xff0c;cout 是用于输出&#xff08;打印&#xff09;数据的工具&…

文华财经鬼谷数据期货量化分析系统指标公式

鬼谷数据量化主图源码 安装流程——打开文华财经软件——右上角指标管理器——新建指标——复制源码——安装成功 鬼谷数据主图源码 安装流程——打开文华财经软件——右上角指标管理器——新建指标——复制源码——安装成功文华财经期货软件擒龙量化主图指标公式HH:HHV(HIGH…

系列四、Eureka自我保护

一、Eureka自我保护 1.1、故障现象 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式&#xff0c;Eureka Server将会尝试保护其服务注册表中的信息&#xff0c;不再删除服务注册表中的数据&#xff0c;也就是不会注销任何微服务。如…

交叉编译aarch64架构支持openssl的curl、libcurl

本文档旨在指导读者在x86_64平台上交叉编译curl和openssl库以支持aarch64架构。在开始之前&#xff0c;请确保您的系统环境已正确配置。 1. 系统环境准备 系统是基于Ubuntu 20.04 LTS&#xff0c;高版本可能会有问题。首页&#xff0c;安装必要的开发工具和库文件。打开终端并…

【C++拷贝构造函数】动态分配与成员对象

系列文章目录 &#x1f308;座右铭&#x1f308;&#xff1a;人的一生这么长、你凭什么用短短的几年去衡量自己的一生&#xff01; &#x1f495;个人主页:清灵白羽 漾情天殇_计算机底层原理,深度解析C,自顶向下看Java-CSDN博客 目录 系列文章目录 一、拷贝构造函数是什么&am…

Factory Method工厂模式(对象创建)

Factory Method&#xff08;对象创建&#xff09; 链接&#xff1a;工厂模式实例代码 解析 目的 在软件系统中&#xff0c;经常面临着创建对象的工作&#xff1b;由于需求的变化&#xff0c;需要创建的对象的具体类型经常变化。 如何应对这种变化&#xff1f;如何绕过常规的…

有序数组的平方

给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;平方后&#xff0c;数组变为 …

Django(四)

1.数据库操作 MySQL数据库 pymysql import pymysql# 1.连接MySQL conn pymysql.connect(host"127.0.0.1", port3306, userroot, passwd"root123", charsetutf8, dbunicom) cursor conn.cursor(cursorpymysql.cursors.DictCursor)# 2.发送指令 cursor.…