java网络原理(三)----三次握手四次挥手

三次握手

三次握手是建立连接的过程,四次挥手是断开连接的过程,三次握手发生在socket.accept()之前。
在这里插入图片描述
客户端和服务器尝试建立连接的时候服务器就会和客户端进行一系列的数据交换称为握手,这个过程建立完了后,连接就好了。
A和B完成建立连接的过程需要3次打招呼的数据交互。
在这里插入图片描述

三次握手是一种可靠性的机制。

tcp想要保证可靠性传输,可靠传输的前提是网络路径得通畅,tcp三次握手就是验证网路通信时候否通畅,以及验证每个主机发送能力和接收能力是否正常。
当我和女朋友连麦打游戏时得先验证麦克风和耳机是否正常。
在这里插入图片描述
第一次我发送喵喵喵,为了验证我的麦克风是否正常,也是在验证女朋友耳机是否正常,女朋友收到喵喵喵,他就知道我的麦克风和他的耳机是好的。
第二次女朋友发送喵喵,为了验证他的麦克风是否正常,也验证我的耳机收否正常,我收到喵喵,我就知道我的耳机是好的,他的麦克风也是好的。
第三次我发送喵。就是对上述的喵喵进行回应,他收到喵说明刚才他发的喵喵我收到了。也就意味着双方设备都正常,可以互相通信了。
三次握手为什么是三次呢?因为恰好3次就能验证双方的发送能力和接收能力是否正常,并且把这样的信息同步给双方。
四次是否可以?可以但是没有必要。
在这里插入图片描述

消息协商

三次握手还能起到消息协商的效果。通信的时候涉及到一些参数,需要双方保持一致,通过协商来确定具体的参数是多少。
Tcp通信过程中有很多信息需要协调,比如双方的序号从几开始(一般不会从0或者1开始),这样做主要是保证2次连接消息的序号能有较大的差异,从而判定出某个消息是否属于这个连接的。网路上传输的信息可能后发先至,极端情况下,某个信息迟到了很久。当消息到达对端的时候,服务器和客户端已经断开了上一个连接。这是重新建立的连接了。这个时候就可以通过序号,明显的识别出这是上一个连接的信息,就可以丢弃了。

综上三次握手:
1.投石问路。验证通信路径是否通畅,双方的发送接收能力是否正常。
2.协商必要的参数。使客户端和服务器使用相同的参数进行消息的传输。

四次挥手

通信过程中,通信双方都在内存中保存了对端的信息,如果不需要连接了就得及时释放上述存储空间。
四次挥手和三次握手非常相似,三次握手必然是客户端主动发起的,四次挥手不一定,服务器也可以主动发起,大多还是客户端发起的。
在这里插入图片描述
第一个FIN由内核控制,第二个FIN是应用程序来控制的,调用socket.close();或者结束进程,就会触发FIN,相比之下ACK则是内核控制的,收到FIN就会立马返回ACK。
如果服务器始终不进行close会咋样?客户端始终不关闭吗?当程序执行结束不进行close 操作,此时服务器的tcp状态就处于CLOSE_WAIT状态,此时虽然连接没有关闭,但是此时这个连接已经不能用了。针对当前的socket进行操作,如果数据从缓存区中没有读完,能正常读到。如果读完,此时就会抛出异常。无论如何此时已经不能使用了,关闭是唯一的选择。更严重的是比如代码写出bug了,close就忘记写了,此时站在客户端的角度收不到对方的fin,也会进行等待,等待一定的时间就会放弃连接。
如果重传过程中出现丢包了怎么办?
这里也是超时重传,如果重传多次失败也会单方面放弃连接。如果主机A第二次接收到FIN,并且发出ACK,站在A的角度四次挥手就结束了。如果A发出ACK主机B并没有收到,出现丢包,把A释放了会出现问题,无人能够ACK。因此就需要让A最后一次发出ACK后等待一定的时间,如果没有接到B重新发来的FIN说明没有出现丢包,让A释放掉,如果接收到,让A重新传ACK。

Tcp是如何实现可靠传输的?
确认应答,超时重传,三次握手,四次挥手
三次握手是探路的,一旦网络通畅,双方接收和发送能力正常,三次握手的任务就完成。确认应答才是真正保证每次传输可靠的。

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

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

相关文章

Matlab有限差分法求解狄利克雷(Dirichlet)边界的泊松(Poisson)问题,边界值为任意值

参考l链接: 有限差分法简介有限差分法-二维泊松方程及其Matlab程序实现弹性力学方程 有限差分法matlab,泊松方程的有限差分法的MATLAB实现 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% Matrix method for Poisson Equation …

基于python+vue的OA公文发文管理系统flask-django-php-nodejs

系统根据现有的管理模块进行开发和扩展,采用面向对象的开发的思想和结构化的开发方法对OA公文发文管理的现状进行系统调查。采用结构化的分析设计,该方法要求结合一定的图表,在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的…

使用 Amazon SageMaker 微调 Llama 2 模型

本篇文章主要介绍如何使用 Amazon SageMaker 进行 Llama 2 模型微调的示例。 这个示例主要包括: Llama 2 总体介绍Llama 2 微调介绍Llama 2 环境设置Llama 2 微调训练 前言 随着生成式 AI 的热度逐渐升高,国内外各种基座大语言竞相出炉,在其基础上衍生出…

测试开发工程师(QA)职业到底需要干些什么?part1:移动端QA

概述 移动端QA测试开发工作主要涉及对移动应用程序进行质量保证和测试的开发工作。以下是移动端QA测试开发人员的主要职责和工作内容: 测试计划和策略制定:参与制定移动应用程序的测试计划和策略,确定测试范围、测试目标和测试方法。考虑到…

Mysql---DML

文章目录 目录 一.DML概述 注入数据( Insert) 替换数据(replace) 删除数据 (delete) 修改数据 (update) 查询数据 (select) 二. 多表连接查询 内连接 子…

Linux环境JMeter脚本性能测试、easyNmon生成监控报告

一、下载JMeter安装包 Jmeter是Java开发的,需要依赖JDK环境,因此我们需提前安装好JDK。 Jmeter是开源的工具,我们直接到官网下载即可。 最新版本下载地址:Apache JMeter - Download Apache JMeter 二、安装JMeter #新建jmete…

【GIT】最好用的git可视化教程网站推荐

最好用可视化学习git 网站:https://learngitbranching.js.org/?demo&localezh_CN 玩遍所有关卡&#xff0c;花半天时间便能掌握git &#x1f603; 本地仓库 基础命令介绍 git commit 提交 git branch <分支名> 创建分支 git checkout <分支名> 切换分支 git…

鸿蒙Harmony应用开发—ArkTS(@State装饰器:组件内状态)

State装饰的变量&#xff0c;或称为状态变量&#xff0c;一旦变量拥有了状态属性&#xff0c;就和自定义组件的渲染绑定起来。当状态改变时&#xff0c;UI会发生对应的渲染改变。 在状态变量相关装饰器中&#xff0c;State是最基础的&#xff0c;使变量拥有状态属性的装饰器&a…

【C++ leetcode】双指针问题

1. 611. 有效三角形的个数 题目 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 题目链接 . - 力扣&#xff08;LeetCode&#xff09; 画图 和 文字 分析 判断是否是三角形要得到三边&#xff0c;由于遍历三边要套三层循环&#x…

开发调试、远程访问、内网穿透解决方案集合

开发调试、远程访问、内网穿透解决方案集合 前言Cpolar下载安装配置与使用 Ngrok购买隧道下客户端配置与使用 ZeroTier注册与安装创建虚拟网络加入虚拟网络配置授权 花生壳Centos系统Ubuntu系统使用花生壳控制台SN码登录添加映射 Loophole通过CLI方式安装登录与注销简单使用身份…

网络安全是什么? 为什么要学网络安全 ?网络安全怎么学习?

网络安全是什么&#xff1f; 网络安全是指保护计算机网络、网络设备、应用程序、数据和用户免受非法访问、攻击、破坏或泄漏的过程和技术。网络安全包括多个领域&#xff0c;例如网络防御、漏洞管理、加密技术、身份验证和访问控制等等。 网络安全非常重要&#xff0c;因为现…

省一餐,是减瘦捷径?还是牺牲健康的换取?

肥胖从来不是靠短时间的&#xff0c;每天少吃一餐就能减掉的&#xff0c;需要长期坚持。但三餐不管哪一餐&#xff0c;长期不吃&#xff0c;都不会有好结果。为了瘦&#xff0c;失去健康值不值呢&#xff1f; 长期不吃早饭后果 1、消耗率、吸收率减慢&#xff1a;身体经过一整…

扩散模型零样本分类应用笔记

1 Title Your Diffusion Model is Secretly a Zero-Shot Classifier&#xff08;Alexander C. Li, Mihir Prabhudesai, Shivam Duggal, Ellis Brown, Deepak Pathak&#xff09;【ICCV 2023】 2 Conclusion This paper shows that the density estimates from large-scale tex…

阿里云4核8G服务器多少钱一年?

阿里云4核8G服务器优惠价格955元一年&#xff0c;配置为ECS通用算力型u1实例&#xff08;ecs.u1-c1m2.xlarge&#xff09;4核8G配置、1M到3M带宽可选、ESSD Entry系统盘20G到40G可选&#xff0c;CPU采用Intel(R) Xeon(R) Platinum处理器&#xff0c;阿里云活动链接 aliyunfuwuq…

SSH介绍及检测规则思路分析

一、SSH 1、定义 SSH是安全的加密协议&#xff0c;用于远程连接linux服务器。 2、ssh服务的主要功能&#xff1a; 1&#xff09;提供远程链接服务器的功能&#xff1b; 2&#xff09;对远程链接传输的数据进行加密 3、ssh与telnet的区别&#xff1a; 服务链接方式 服务数据…

DBO优化LSBoost回归预测(matlab代码)

DBO-LSBoost回归预测matlab代码 蜣螂优化算法(Dung Beetle Optimizer, DBO)是一种新型的群智能优化算法&#xff0c;在2022年底提出&#xff0c;主要是受蜣螂的的滚球、跳舞、觅食、偷窃和繁殖行为的启发。 数据为Excel股票预测数据。 数据集划分为训练集、验证集、测试集,比…

【国家计算机二级C语言】高分笔记

二叉树 参考 http://t.csdnimg.cn/ozVwT 数据库 SQL程序语言有四种类型&#xff0c;对数据库的基本操作都属于这四类&#xff0c;它们分别为&#xff1b;数据定义语言(DDL)、数据查询语言&#xff08;DQL&#xff09;、数据操纵语言&#xff08;DML&#xff09;、数据控制语言…

领夹麦配LDR6028,电力持久畅聊畅!

#无线麦克风#麦克风&#xff0c;对于大多数人来说&#xff0c;并不陌生。然而&#xff0c;领夹式麦克风&#xff0c;这个看似小巧的音频设备&#xff0c;或许在日常生活中并不常为我们所见。但在自媒体行业、新闻记者等领域&#xff0c;它却是不可或缺的好帮手。这款领夹式麦克…

管理类联考–复试–英文面试–问题--规划介绍原因做法--纯英文版

借鉴 https://www.bilibili.com/video/BV1Dk4y187zN/?p4&spm_id_from333.880.my_history.page.clickhttps://www.bilibili.com/video/BV1Dk4y187zN/?p4&spm_id_from333.880.my_history.page.click https://ttsreader.com/zh/https://ttsreader.com/zh/ 规划 视频版…

2024年NOC大赛创客智慧(西瓜创客)图形化编程真题模拟试卷包含答案

详细题目看顶部资源 答案解析 一、选择题 1、C 该段代码是将变量的值翻倍,运行之后变量的值是之前的两倍。变量的值是否改变取决于初始值是否为 0,所以船都不正确 2、C A 透项为让角色说话,不可以广播消息: B 选项为播放一段声音,不可以广播消息; C透项为广播消息,正确: …