【JavaEE】——三次握手(详细、易理解)

简介: 宏观设备双方如何建立连接,微观服务器和客户端建立连接“三次握手”过程,解决不同批次连接中“后发先至”的问题,syn(同步)详解

  image.gif 编辑

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

一:连接管理

1:建立连接

二:三次握手(重点)

1:syn同步报文段

2:过程详细梳理

3:合二为一

4:三次握手的目的

5:三次握手的意义

(1)投石问路

(2)验证双方通讯是否异常

6:一些误区

三:解决“后发先至”问题

1:选项定参数

2:通讯序号起始值


一:连接管理

1:建立连接

【JavaEE】——TCP回显服务器(万字长文超详细)-CSDN博客

在之前的学习中,我们知道用下述的这个代码(构造方法),将客户端 和服务器的内核建立连接,服务器在调用accept方法拿到操作系统内核中的连接,从而达到应用程序层面上服务器和客户端的连接

注:这个方法不是很明白的可以点击上面那条链接,里面有详细解释

image.gif 编辑

二:三次握手(重点)

1:syn同步报文段

在了解“三次握手”之前我们先来认识一个缩写词syn,syn(全称:synchronize 同步),这个单词并不陌生,加锁:synchronized。

这两者的含义却不同。加锁synchronized同步是协调各个线程之间的执行顺序,“握手”这里的synchronize同步是进入连接状态,客户端和服务器得相互配合完成一系列的工作

还记得上篇文章中,引入的TCP协议中的六位标志位

image.gif 编辑

六位标志位

image.gif 编辑

2:过程详细梳理

总图

image.gif 编辑

在建立连接的第一次交互中,一定是客户端先发起请求的,(服务器是被动的一方)

所谓的syn是一个特殊的TCP数据报,里面包含的内容不携带载荷和应用层的数据,也就不代表任何应用程序的业务逻辑,但是像IP报头,TCP报头,以太网数据帧.......这样的东西还是有的。(告诉服务器,我是谁——客户端的端口、IP地址)

(1)syn的作用就是告诉服务器:我想和你建立连接——此时发送过去syn的值就是1

image.gif 编辑

(2)服务器收到syn,并返回ack应答报文(此时ack值为1)

意思:我确认收到了你想和我建立连接这个信息!

image.gif 编辑

此时服务器通过syn,不仅可以知道客户端想要建立连接,还可以知道客户端的身份信息

注:(但是这里的身份信息是否存储,服务器会暂时观望,最终确定建立通讯连接后才会存储)

(3)服务器ask完之后,会决定是否建立连接,这里有两种情况。

情况①:服务器发出同意建立连接的响应

image.gif 编辑

情况②:此时服务器可能负载过高,客户端的请求处理不过来了,就会拒绝建立连接

(4)客户端收到服务器发来的“syn确认建立连接后”,会再返回一个ack(应答报文),告诉服务器——我收到了

image.gif 编辑

3:合二为一

细心的铁铁会发现上述不是4次过程吗,为什么叫三次握手,其实②③是可以合并的,服务器在发送②③的时候,把TCP数据报包中的六位标志中ask和syn中的值都置为1,就达到了一起发送的效果(即服务器:我收到了,我确认跟你建立连接)

image.gif 编辑

image.gif 编辑

好处:网络传输的过程中涉及到多次封装和分用,两个包合并成一个包,减少了一次封装分用的过程整体的效率就提高了,成本就降低了

4:三次握手的目的

目的是为了让通信双方都能保存对方的相关信息

5:三次握手的意义

(1)投石问路

三次握手,可以先针对通讯路径,进行投石问路,确认通讯路径是否畅通

注:就像你下班回家,得先看一下堵不堵车,不堵车的话就开车回家(路径通畅),堵车的话,不回了,加班!

(2)验证双方通讯是否异常

三次握手可以验证通讯双方,接受能力和发送能力是否正常

(关注点在两端)

6:一些误区

(1)确认应答机制独立于三次握手机制

在三次握手过程中,“确认应答机制”和“超时重传机制”都是存在的

注意:这里的三次握手虽然包含“确认应答”,但是不能说“确认应答”机制是“三次握手”机制中的一部分。

因为在“三次握手”结束进入数据传送后,“确认应答”机制依旧存在。

所以“确认应答”机制是独立于“三次握手”机制的

三:解决“后发先至”问题

image.gif 编辑

1:选项定参数

TCP中也是有很多参数需要协商的,这时往往是通过“选项”部分来体现的嘛(最多40字节提供给选项)40怎么来的参考这里【JavaEE】——TCP应答报文机制,超时重传机制-CSDN博客

image.gif 编辑

2:通讯序号起始值

在TCP数据报包中有一个非常关键的信息:TCP通讯序号的起始值

image.gif 编辑

TCP一次通讯中,起始值并不是从0或者1开始计算的,而是选择一个比较大的数字,以这个数字开头来进行计算,即使是同一个服务器和客户端,每次新的连接开始,开始的序号都不同,下面这个图告诉你为什么这样做——避免发生“前朝的剑,斩本朝的官”(后发先至)事情

image.gif 编辑

试想一下,数据A还没到达客户端,第一次连接就中断进行第二次连接了,此时等到数据A到达客户端之后发现:我嘞个乖乖,这已经不是第一次的连接了。第二次连接发现数据A不属于自己传输的数据,再处理就不合适了,上策就会选择把这个数据A丢包。

提问:第二次连接过程中是如何发现这个数据A不属于本次连接呢?

可以通过序号来区分,正常的数据报包的序号都是从开始序号依次按顺序往后排的,就算是偶尔丢包,顺序差异也不会太大,但是“前朝的包”和“本朝的包”序号差异非常大,一眼就能识别出来


相关文章
|
网络协议 大数据 网络架构
【TCP】确认应答、超时重传机制和TCP报头
【TCP】确认应答、超时重传机制和TCP报头
379 3
|
8月前
|
人工智能 搜索推荐
「社会实验室」成真!SocioVerse:复旦联合小红书开源社会模拟世界模型,用AI预演群体行为
SocioVerse是由复旦大学联合小红书等机构开源的社会模拟框架,基于大语言模型和千万级真实用户数据构建,能精准模拟群体行为并预测社会事件演化趋势。
663 2
「社会实验室」成真!SocioVerse:复旦联合小红书开源社会模拟世界模型,用AI预演群体行为
|
运维 监控 安全
DevOps实践:从理论到企业级应用的转化之路
【7月更文挑战第21天】在数字化转型的大潮中,DevOps作为一种提升软件开发与运维效率的方法论,正逐步成为企业IT战略的核心。本文将从DevOps的基本概念出发,深入探讨其在企业级应用中的实践路径,包括文化理念转变、工具链的选择与集成、持续交付的实施步骤以及监控与反馈机制的建立。通过分析成功案例,旨在为读者提供一条清晰的DevOps转型路线图,帮助技术团队和运维人员理解并实施DevOps,以实现快速迭代和高效运营的目标。
|
网络协议 开发者
TCP连接的四次挥手过程及其必要性
在网络通信中,TCP(传输控制协议)以其可靠性和有序性著称。TCP连接的建立和终止都需要特定的握手过程。本文将详细描述TCP连接的四次挥手(四次挥手)过程,并探讨为什么需要四次挥手来终止一个TCP连接。
501 8
|
存储 分布式计算 大数据
大数据减少单个分区的数据量
【11月更文挑战第3天】
278 2
|
前端开发
通用研发提效问题之动态渲染的配置页,如何解决
通用研发提效问题之动态渲染的配置页,如何解决
|
存储 SQL 分布式计算
Lakehouse 架构解析与云上实践
本文整理自 DataFunCon 2021大会上,阿里云数据湖构建云产品研发陈鑫伟的分享,主要介绍了 Lakehouse 的架构解析与云上实践。
Lakehouse 架构解析与云上实践
|
XML C# 数据格式
WPF/C#:如何将数据分组显示
WPF/C#:如何将数据分组显示
169 0
|
安全 机器人 开发者
Sora的五大应用场景
【2月更文挑战第16天】Sora的五大应用场景
1310 2
Sora的五大应用场景
|
SQL 存储 分布式计算
数据湖揭秘—Delta Lake
Delta Lake 是 DataBricks 公司开源的、用于构建湖仓架构的存储框架。能够支持 Spark,Flink,Hive,PrestoDB,Trino 等查询/计算引擎。作为一个开放格式的存储层,它在提供了批流一体的同时,为湖仓架构提供可靠的,安全的,高性能的保证。
4538 7
数据湖揭秘—Delta Lake

热门文章

最新文章