【JAVA基础--计算机网络】--TCP三次握手+四次挥手
三次握手+四次挥手
- 写在前面
- 1. 三次握手
- 1.1 作用: 为了在不可靠的信道上建立起可靠的连接;
- 1.2 建立过程
- 1.3 面试提问
- 2. 四次挥手
- 2.1 作用:为了在不可靠的网络信道中进行可靠的连接断开确认
- 2.2 断开过程
- 2.3 面试提问
写在前面
三次握手建立连接;四次挥手断开连接;
TCP协议里的标识:
SYN :Synchronization
(同步)
ACK:Acknowledgment
(确认)
FIN:Finish
(结束)
1. 三次握手
1.1 作用: 为了在不可靠的信道上建立起可靠的连接;
1.2 建立过程
当客户端向服务端发起连接请求时候:
- 先发一包连接请求数据(
SYN
包)来询问能否与服务端建立连接,这包数据我们叫做SYN
包:(想和你同步); - 如果对端同意连接就会回复一包
SYN+ACK
包(确认同步); - 客户端收到之后回复一包
ACK
包(确认)。
注:自己的序号用对方的确认号; 自己的确认号 用对方的序号+1
1.3 面试提问
问题1
:为什么是三次握手而不是两次握手or四次握手?
答:
目的:握手是为了确认双方的接收与发送能力是否正常
-
第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的;
-
第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常;
-
第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常;
- 如果是两次握手,服务端并不能确认客户端的接收能力是否正常;而且为了防止已经失效的请求报文,突然又传到服务器引起错误
- 三次握手是两端建立连接的所需要的最小收发包的次数,所以四次握手就没有必要了
问题2
:两次握手可能产生的问题?
答:假设采取两次握手,客户端向服务端发起一个报文SYN1,因为某些未知错误,并未到达服务器,在中间某个网络节点产生了滞留;而为了建立连接客户端会重新发送一个SYN包,我们称之为SYN2,这次正常送达服务端,并且回复SYN+ACK后建立连接;这时阻塞的网络节点突然恢复,把SYN1重新发给了服务端,服务端就会误认为是客户端发起了新的连接;
服务端认为是两个连接,客户端认为是一个连接,造成了状态不一致的问题;
2. 四次挥手
握手之后就建立连接——连接建立好以后,客户端就可以发送http请求——然后服务端响应内容;
因为TCP协议是全双工的,所以两端都可以发送关闭请求;
2.1 作用:为了在不可靠的网络信道中进行可靠的连接断开确认
2.2 断开过程
- 第一次挥手:客户端发送
FIN+ACK
(确认结束) - 第二次挥手:服务端回复
ACK
(确认)因为服务端可能还存在未发送完毕的数据所以还需要等待数据全部发送完以后回复确认结束,也就是第三次挥手; - 第三次挥手:服务端回复
FIN+ACK
(确认结束); - 第四次挥手:客户端回复
ACK
(确认);进入超时等待状态
2.3 面试提问
问题1
:为什么客户端在回复ACK
包之后还需要等待超时时间?
答:
目的:为了在不可靠的网络信道中进行可靠的连接断开确认;
原因:因为如果客户端在发送完最后一包ACK
包就释放了连接的话,一旦ACK
包在网络中丢失,服务端就会一直停留在最后确认状态;若发送完最后一包AC
K包,再等待一段时间,此时如果服务端没有收到ACK
包,就会重发FIN包;客户端会响应这个FIN包,且重发ACK
包,并刷新超时时间
相关文章:
【JAVA基础--计算机网络】--TCP三次握手+四次挥手
三次握手四次挥手 写在前面1. 三次握手1.1 作用: 为了在不可靠的信道上建立起可靠的连接;1.2 建立过程1.3 面试提问 2. 四次挥手2.1 作用:为了在不可靠的网络信道中进行可靠的连接断开确认2.2 断开过程2.3 面试提问 写在前面 三次握手建立连…...
最新靠谱可用的-Mac-环境下-FFmpeg-环境搭建
最近在尝试搭建 FFmpeg 开发环境时遇到一个蛋疼的事,Google 了 N 篇文章竟然没有一篇是可以跑起来的! 少部分教程是给出了自我矛盾的配置(是的,按照贴出来的代码和配置,他自己都跑不起来),大部…...
【漏洞复现】Hikvision SPON IP网络对讲广播系统存在命令执行漏洞CVE-2023-6895
漏洞描述 Hikvision Intercom Broadcasting System是中国海康威视(Hikvision)公司的一个对讲广播系统。 Hikvision Intercom Broadcasting System是中国海康威视(Hikvision)公司的一个对讲广播系统。Hikvision Intercom Broadcasting System 3.0.3_20201113_RELEASE(HIK)版…...
微软为Windows内置记事本应用开发AI功能;2024年15个 AI 语音生成器
🦉 AI新闻 🚀 微软为Windows内置记事本应用开发AI功能 摘要:微软正在开发一个新的生成式AI功能,名为"Cowriter",用于Windows内置的记事本应用。该功能类似于画图应用中的"Cocreator"功能&#x…...
【C++进阶06】红黑树图文详解及C++模拟实现红黑树
一、红黑树的概念及性质 1.1 红黑树的概念 AVL树用平衡因子让树达到高度平衡 红黑树可以认为是AVL树的改良 通过给每个节点标记颜色让树接近平衡 以减少树在插入节点的旋转 在每个结点新增一个存储位表示结点颜色 可以是Red或Black 通过对任何一条从根到叶子的路径上 各个结点…...
2023年最严重的10起0Day漏洞攻击事件
根据谷歌公司威胁分析小组去年 7 月发布的报告显示,2022 年全球共有 41 个 0day 漏洞被利用和披露。而研究人员普遍认为,2023 年被利用的 0Day 漏洞数量会比 2022 年更高,这些危险的漏洞被广泛用于商业间谍活动、网络攻击活动以及数据勒索攻击…...
Linux之Iptables简易应用
文档形成时期:2009-2024年 和iptables打交道有15年了,经过无数实践后,形成一个简易应用文档。 文档主题是简易应用,所以其原理不详述了。 因软件世界之复杂和个人能力之限,难免疏漏和错误,欢迎指正。 文章目…...
树状结构查询 - 华为OD统一考试
OD统一考试 分值: 200分 题解: Java / Python / C++ 题目描述 通常使用多行的节点、父节点表示一棵树,比如: 西安 陕西 陕西 中国 江西 中国 中国 亚洲 泰国 亚洲 输入一个节点之后,请打印出来树中他的所有下层节点。 输入描述 第一行输入行数,下面是多行数据,每行以…...
版本控制系统教程
1.Git的基本介绍 1.1 Git的概念 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件.Git与常用的版本控制工具CVS,Subversion等不同ÿ…...
Java多线程并发篇----第十篇
系列文章目录 文章目录 系列文章目录前言一、start 与 run 区别二、JAVA 后台线程三、什么是乐观锁前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、start 与 r…...
模型\视图一般步骤:为什么经常要用“选择模型”QItemSelectionModel?
一、“使用视图”一般的步骤: //1.创建 模型(这里是数据模型!) tabModelnew QSqlTableModel(this,DB);//数据表 //2.设置 视图的模型(这里是数据模型!) ui->tableView->setModel(tabModel); 模型种类: QStringListModel…...
C#,愚弄数(Hoax Number)的计算方法与源代码
一、愚弄数(Hoax Number) 愚弄数(Hoax Number)是一种组合数字, 其数字总和等于其不同质因数的数字总和。 注:1不被视为质数, 因此它不包含在不同质因数的总和中。 有些愚弄数(Hoax Number)数字也…...
c JPEG编码,此程序没有处现MCU中亮度分量的排序
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h> #include <linux/videodev2.h> //v4l2 头文件 #include <strin…...
前端规范扩展
前端编程规范是基于原有vue2基础上那套《编码风格及标准》上,应用于vue3、typescript、vite2基础上延伸出来的扩展补充,持续完善 一、编码规范 ESLint 代码检测工具 Pretter 代码格式化工具配合双校验代码 Git 规范 - 编码工具 vscode 同步参考文档中…...
【AI视野·今日NLP 自然语言处理论文速览 第七十二期】Mon, 8 Jan 2024
AI视野今日CS.NLP 自然语言处理论文速览 Mon, 8 Jan 2024 Totally 17 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers DeepSeek LLM: Scaling Open-Source Language Models with Longtermism Authors DeepSeek AI Xiao Bi, Deli Ch…...
RT-Thread基于AT32单片机的CAN应用
1 硬件电路 2 RT-Thread驱动配置 RT-Studio中没有CAN相关的图形配置,需要手动修改board.h。在board.h的末尾,增加相关的BSP配置。 #define RT_CAN_USING_HDR #define BSP_USING_CAN13 IO配置 at32_msp.c中的IO配置是PB9和PB10,掌上实验室V…...
LeetCode---121双周赛---数位dp
题目列表 2996. 大于等于顺序前缀和的最小缺失整数 2997. 使数组异或和等于 K 的最少操作次数 2998. 使 X 和 Y 相等的最少操作次数 2999. 统计强大整数的数目 一、大于等于顺序前缀和的最小缺失整数 简单的模拟题,只要按照题目的要求去写代码即可,…...
RT-Thread I/O设备模型
I/O设备模型 绝大部分的嵌入式系统都包括一些I/O(Input/Output,输入/输出)设备,例如仪器上的数据显示屏、工业设备上的串口通信、数据采集设备上用于保存数据的Flash或SD卡,以及网络设备的以太网接口等,都…...
CloudCompare——拟合空间球
目录 1.拟合球2.软件操作3.算法源码4.相关代码 本文由CSDN点云侠原创,CloudCompare——拟合空间球,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 1.拟合球 源码里用到了四点定球,…...
哪个牌子的护眼台灯适合学生?2024护眼台灯推荐
不知道各位父母对孩子的视力健康有没有关注,我国儿童青少年的近视率高达52.7%,也就是说,平均是个儿童中就有五个儿童存在视力问题,而且近视发生年龄提前至3到7岁。作为一名眼部护理博主,孩子从小看书、看屏幕起&#x…...
适用于动态 IT 环境的服务器流量监控软件
服务器在网络性能中起着至关重要的作用,这意味着保持其最佳容量至关重要。企业需要将 AI、ML 和云技术融入其 IT 中,从而提供充分的敏捷性、安全性和灵活性,在这方面,服务器流量监控已成为当务之急。通过定期监控通信、跟踪流量上…...
Java的Jar包和War包
在Java中,JAR(Java Archive)和WAR(Web Archive)都是用于打包和分发Java应用程序的压缩文件格式。它们在不同的应用场景中使用: JAR(Java Archive): 用途: 主要…...
第二十一章 javascript数据代理(数据劫持)
文章目录 一、数据劫持对象的访问器属性 二、Object.defineProperty()三、Proxy()四、补充1. Object类新增方法2. Array类新增方法 一、数据劫持 数据劫持:能够拦截到数据被使用或被修改的时机,在这个时机除了可以获取数据的值或对数据的值进行修改之外…...
苹果电脑RAW图像处理软件Capture One Pro 22 mac软件介绍
Capture One Pro 22 for mac是一款专业的RAW文件转换器和图像编辑软件,拥有更新的处理引擎、市场领先的性能和强大的新功能,可为 500 多台高端相机提供具有美丽色彩和令人难以置信的细节的终极图像质量。 Capture One Pro 22 for Mac版软件介绍 Capture…...
phpcms v9后台添加草稿箱功能
一、后台添加文章模板phpcms/modules/content/templates/content_add.tpl.php中94行增加”保存草稿“按钮: <div class"button"><input value"<?php echo L(save_draft);?>" type"submit" name"dosubmit_draf…...
机器人持续学习基准LIBERO系列5——获取显示深度图
0.前置 机器人持续学习基准LIBERO系列1——基本介绍与安装测试机器人持续学习基准LIBERO系列2——路径与基准基本信息机器人持续学习基准LIBERO系列3——相机画面可视化及单步移动更新机器人持续学习基准LIBERO系列4——robosuite最基本demo 1.更改环境设置 LIBERO-master/l…...
Java 面试题 - 多线程并发篇
线程基础 创建线程有几种方式 继承Thread类 可以创建一个继承自Thread类的子类,并重写其run()方法来定义线程的行为。然后可以通过创建该子类的实例来启动线程。 示例代码: class MyThread extends Thread {public void run() {// 定义线程的行为} …...
2401d,讨论d串滑动参数
原文 因为对编译时执行的i串的兴趣,我一直在考虑搞个通用用例,而不是相关i串的用例. 滑动模板参数 请考虑以下模板: void pluto(string s)() {pragma(msg, s); } void test() {pluto!"hello"(); }因为s是编译时参数,这编译,而pragma(msg,s) 期望s为编译时值. voi…...
etcd官方docker镜像及dockerfile问题处理
解决下我之前etcd使用docker镜像启动的坑 1、问题镜像docker-file: 这个dockerfile看着看不出来问题,但如果有人真的执行我之前两篇文章的文件,就会有问题,什么问题呢,无法连接到etcd,由于我是刚装上docker,排查了一圈,包括docker网络及是否是本地docker的网络问题,…...
2023 IoTDB Summit:天谋科技高级开发工程师苏宇荣《汇其流:如何用 IoTDB 流处理框架玩转端边云融合》...
12 月 3 日,2023 IoTDB 用户大会在北京成功举行,收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题,多位学术泰斗、企业代表、开发者,深度分享了工业物联网时序数据库 IoTDB 的技术创新…...
如何免费创建一个自己的网站/建立网站流程
终于想写点技术blog了转载于:https://blog.51cto.com/6417790/1113717...
阿克苏网站建设咨询/淘宝推广怎么做
一、get请求 在iOS下进行网络编程主要分为以下三步http://blog.csdn.net/magical_code/article/details/51103226 客户端向服务器发送请求,请求方式有两种:一种get请求,一种post请求。 get请求是将信息直接拼接在URL后面,在真正开…...
正规的佛山网站建设/谷歌推广新手教程
首先登录服务器:Linux1.修改配置文件vi /etc/my.cnf在[mysqld]的段中加上一句skip-grant-tables2.保存重启 mysqlservice mysqld restart3.修改root密码[rootjason bin]# mysqlmysql>use mysqlReading table information for completion of table and column nam…...
wordpress伪静态自定义/百度推广平台登录网址
什么是JDBC?JDBC程序的具体实现步骤JDBC的全称是Java数据库连接(Java Database Connectivity),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。应…...
dw做的网站怎么让别人看到/seo推广教程seo高级教程
NPM版本问题报错的解决方案 在安装项目依赖时,很大可能会遇到安装不成功的问题,其中有一个很大的原因,可能就是因为你的npm版本导致的。 1.npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree 2.ERESOLVE unabl…...
怎么做专门卖二手衣服的网站/网站项目开发流程
javaweb 配置tomcat到eclipse 1 在已经下载好Tomcat的基础上,先创建javaweb工程 2 3 4 打开server控制台 5 6 将web工程放到服务器上 7 8 二:2, 页面的响应事件需要和后台的java代码关联起来 a) Servlet是sun用来开发动态web资源的…...