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.mfbz.cn/a/479397.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024不起眼的“致富”野路子,不想打工了,做做这些暴利创业项目。2024个人创业做什么项目好;最适合白手起家的创业项目

经济大环境差,并不代表就没有机会。相反,主流经济不好正是另一些人所看重的千载难逢的机会。就像股票市场一样,有人靠做多赚钱,有人靠做空赚钱。下面我们就来分析一下哪些行业会在这个时候崛起。 首先二手行业会迅速崛起&#xff…

东芝复印机3115 日志清除

以管理员登录,默认的用户名是admin,密码123456. 点日志中的导出日志,逐个清除日志。

陪诊APP开发价格的价格是多少

随着社会的发展,人们的生活节奏越来越快,对于医疗服务的需求也在不断增加。特别是在老年人口逐渐增多的今天,陪诊服务成为越来越多人关注的焦点。那么,陪诊APP的开发价格需要多少钱呢?本文将从以下几个方面进行详细分析…

Android 地图SDK 去除缩放

问题 Android 地图SDK 去除缩放 详细问题 笔者进行Android 项目开发,接入高德地图SDK。但是默认在地图右下角有高德地图缩放按钮,现需要去除该按钮 预期效果 解决方案 mMapView.getMap().getUiSettings().setZoomControlsEnabled(false);代码含义解…

视频素材库哪里最好

哈哈,大家好!今天我要给大家带来的是视频素材库哪里最好的搞笑推荐,让你的视频创作更加轻松有趣! 视频素材库哪里最好?首先来说说蛙学网这个网站简直就是中国风视频素材的宝库!如果你想让你的视频有点中国味…

QT常见数据类型和类的使用

qDebug //基本打印 qDebug() << "Hello" << 123;//类似printf的打印int num 20;char str[20]"hello world";qDebug("如果只写在括号里&#xff0c;是不需要QDebug头文件的 %d %s", num, str);//打印十六进制数组 #define HexPrint…

紧急声明!致歉

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 致歉 首先&#xff0c;给大家说声抱歉&#xff01; 最近mxxWechatBot的服务器一直不稳定&#xff0c;有很多原因&#xff0c; 比如说服务器到期了&#xff0c;讲服务器临时切换到家里&am…

【Review+预测】测试架构演进的曲折之路

文章目录 前言 一、“原始”阶段 二、“小打小闹”阶段 三、“小米加步枪”阶段 四、“摩托化部队”阶段 五、“骑兵连”阶段 六、“海军陆战队”阶段 七、“社区型组织”阶段 前言 近期公司的测试团队需要重新组织安排&#xff0c;本着谦虚谨慎的态度&#xff0c;我从…

基于python+vue 的一加剧场管理系统的设计与实现flask-django-nodejs-php

二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针对这一需求设…

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

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

牛客小白月赛89(A~C)

小白赛怎么这么难打&#xff0c;是什么小白&#xff0c;我的世界小白吗。 A. 伊甸之花 给你一个数组 a&#xff0c;问你是否找出一个 不等于 a 的数组 b&#xff0c;满足 其中数值都要在 [1,m] 的范围内 直接在 a 数组上修改&#xff0c;可以发现如果改了 a[1],a[2]&#xff…

Oh My Bug || PHPmyAdmin导入csv文件时,502报错

解决&#xff1a; 在宝塔面板文件配置中加入一下代码 location / { proxy_pass http://localhost:888; } location /backend-api { rewrite ^/backend-api(.*)$ $1 break; proxy_pass http://你的ip地址; }

DP:斐波那契数列模型

创作不易&#xff0c;感谢三连支持 &#xff01; 斐波那契数列用于一维探索的单峰函数之中&#xff0c;用于求解最优值的方法。其主要优势为&#xff0c;在第一次迭代的时候求解两个函数值&#xff0c;之后每次迭代只需求解一次 。 一、第N个泰波那契数 . - 力扣&#xff08;…

简介:iframe 沙箱+WebComponent 容器

前言 HTML 内联框架元素 (<iframe>) 表示嵌套的browsing context。它能够将另一个 HTML 页面嵌入到当前页面中。 每个嵌入的浏览上下文&#xff08;embedded browsing context&#xff09;都有自己的会话历史记录 (session history)和DOM 树。包含嵌入内容的浏览上下文称…

【史上最全面arduino esp32教程】SPI层次结构SPI协议与SPI控制器结构

文章目录 前言一、SPI 程序层次1.1 硬件原理图1.2 硬件框图1.3 软件层次 二、SPI协议2.1 硬件连线2.2 如何访问SPI设备2.3 SPI 框图 总结 前言 欢迎阅读本篇文章&#xff0c;将为您介绍Arduino ESP32上的SPI通信协议。SPI&#xff08;Serial Peripheral Interface&#xff09;…

Matlab快捷键与函数

注释&#xff1a;注释对于代码的重要性我们就不做过多的解释了。不做注释的代码不是好代码。选中要注释的语句&#xff0c;按快捷键CtrlR,或者在命令行窗口上面的注释地方可以进行注释。当然也可以直接在语句前面“%”就可以&#xff08;注意&#xff1a;一定要用英文符号&…

Matlab与高光谱遥感:环境监测的新时代

光谱和图像是人们观察世界的两种方式&#xff0c;高光谱遥感通过“图谱合一”的技术创新将两者结合起来&#xff0c;大大提高了人们对客观世界的认知能力&#xff0c;本来在宽波段遥感中不可探测的物质&#xff0c;在高光谱遥感中能被探测。以高光谱遥感为核心&#xff0c;构建…

Windows10安装SSH

Linux运维工具-ywtool 目录 1. 打开设置2. 应用3.管理可选功能4.添加功能5.安装OpenSSH服务器6.测试是否安装成功 1. 打开设置 windows桌面按下"win l"键调出"设置"2. 应用 点击"应用"3.管理可选功能 点击"管理可选功能"4.添加功能…

定制红酒:品质与口感,双重保障

在葡萄酒的世界里&#xff0c;云仓酒庄的洒派定制红酒以其卓着的品质和迷人的口感&#xff0c;成为了无数品鉴者的心头好。这款红酒&#xff0c;不仅是对品质的追求&#xff0c;更是对生活的热爱和品味的体现。 云仓酒庄深知品质是红酒的灵魂&#xff0c;因此对洒派定制红酒的品…

SQL日期函数

文章目录 1.获取日期时间函数1.1 获取当前日期时间1.2 获取当前日期1.3 获取当前时间 2.日期格式化★★★2.1 日期转指定格式字符串2.2 字符串转日期 3.日期间隔3.1 增加日期间隔 ★★★3.2 减去一个时间间隔★★★3.3 日期相差天数&#xff08;天&#xff09;3.4 相差时间&…
最新文章