高级java每日一道面试题-2024年8月07日-网络篇-你对TCP的三次握手了解多少?
如果有遗漏,评论区告诉我进行补充
面试官: 你对TCP的三次握手了解多少?
我回答:
TCP(Transmission Control Protocol)的三次握手是TCP建立连接的过程,它是TCP/IP协议族中一个关键的概念。三次握手确保了双方之间的连接是双向的,并且能够正常发送和接收数据。下面是详细的三次握手过程:
第一次握手(SYN=1, seq=x)
- 客户端发送SYN标志的数据包:客户端(主动发起连接的一方)首先发送一个SYN(Synchronize)标志位被设置的TCP数据包到服务器。这个数据包包含了客户端的初始序号(ISN, Initial Sequence Number),这个序号用于之后的数据包确认和排序。
第二次握手(SYN=1, ACK=1, seq=y, ack=x+1)
- 服务器响应SYN-ACK:服务器在接收到客户端的SYN数据包后,如果同意建立连接,就会发送一个SYN-ACK(Synchronize-Acknowledge)数据包作为响应。这个数据包包含了服务器的初始序号,并且确认了客户端的序号(ACK, Acknowledgment)。此时,服务器进入SYN_RECEIVED状态。
第三次握手(ACK=1, seq=x+1, ack=y+1)
- 客户端发送ACK:客户端接收到服务器的SYN-ACK数据包后,发送一个ACK数据包确认服务器的序号。这个数据包不包含数据,仅仅是一个确认,表明客户端已经接收到服务器的SYN-ACK,现在双方都可以开始发送数据了。此时,客户端和服务器都进入ESTABLISHED状态,连接建立完成。
为什么需要三次握手?
三次握手的主要目的是确保双方都能够正常接收和发送数据,以及同步序列号。如果省略了任何一步,可能会导致以下问题:
-
确认丢失:如果第二次或第三次握手的ACK数据包丢失,连接一方可能认为连接没有建立成功,而另一方可能已经准备好接收数据,这会导致数据丢失或乱序。
-
同步序列号:序列号的同步是为了保证数据包的正确排序和确认。如果序列号不同步,接收方可能无法正确地组装数据流。
关于三次握手的额外说明
-
超时重传:如果在三次握手过程中任何一个数据包没有得到响应,发送方会重传这个数据包,直到收到响应或达到最大重传次数。
-
SYN Flood攻击:三次握手过程可能被恶意利用,如SYN Flood攻击,攻击者发送大量的SYN数据包给服务器,但不发送后续的ACK,导致服务器的半开放连接积压,消耗服务器资源,最终可能导致服务器无法响应合法的连接请求。
总结
TCP的三次握手是TCP/IP协议中建立可靠连接的重要机制。通过三次握手,可以确保客户端和服务器之间的通信能力正常,避免旧连接和重复连接的影响,同步双方的初始序列号,从而保证后续数据传输的可靠性和有序性。在Java高级面试中,对TCP三次握手的深入理解是展现面试者网络基础知识扎实程度的重要方面。
相关文章:
高级java每日一道面试题-2024年8月07日-网络篇-你对TCP的三次握手了解多少?
如果有遗漏,评论区告诉我进行补充 面试官: 你对TCP的三次握手了解多少? 我回答: TCP(Transmission Control Protocol)的三次握手是TCP建立连接的过程,它是TCP/IP协议族中一个关键的概念。三次握手确保了双方之间的连接是双向的࿰…...
vite.config.ts中proxy的rewrite理解
服务器配置都是在开发情况下适用!! // 服务器配置 server: {//允许IP访问host: "0.0.0.0",//应用端口(默认:3000)port: Number(env.VITE_APP_PORT),// 运行是否自动打开浏览器open: true,// 代理配置proxy:…...
大数据环境下用户数据隐私安全防护系统的设计与实现(论文+源码)_kaic
摘 要 现如今互联网已在世界范围内广泛的应用和发展,特别是移动互联网Web 技术快速发展,然而最近几年经常发生互联网用户信息泄露及财产损失问题,网络安全漏洞严重威胁Web应用程序安全及互联网用户的网络使用安全,因此现急需一…...
基于springboot+vue+uniapp的“口腔助手”小程序
开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…...
算法刷题之链表
// 单链表 struct ListNode {int val; // 节点上存储的元素ListNode *next; // 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数 };ListNode* head new ListNode(5); 重要方法:虚拟头节点 个人方法:指针转为数组…...
C# 设计模式之适配器模式
总目录 前言 在实际的开发过程中,由于需求的变化和扩展,我们的代码也需要做相应的扩展。想象这样一个场景,原项目中接口返回的数据是XML格式的数据,但现在来了一个新客户,它期望接口返回的数据类型为json格式的。想要…...
BFS实现迷宫最短路径
结合队列的知识利用 广度优先遍历,通过对能走的路径的记录以及对走过路径的标记,进行多条路搜查 一、理论基础 如下图的迷宫: 选取所走方向(针对某一个位置)下,右,上,左࿰…...
Linux IPC解析:匿名命名管道与共享内存
目录 一.IPC机制介绍二.匿名与命名管道1.匿名管道2.命名管道3.日志 三.共享内存三.System V 标准1.System V简介2.IPC在内核的数据结构设计3.信号量 一.IPC机制介绍 IPC(Inter-Process Communication,进程间通信)是计算机系统中不同进程之间交…...
Codeforces Round 964 (Div. 4) A~G
封面原图 画师ideolo A - AB Again? 题意 给你一个两位数,把他的个位和十位加起来 代码 #include <bits/stdc.h> using namespace std; typedef long long ll; typedef double db; typedef pair<int,int> pii; typedef pair<ll,ll> pll;voi…...
单体应用提高性能和处理高并发-使用缓存
要在单体应用中实现高并发,并利用缓存技术来提高性能,需要深入了解缓存的应用场景、选择合适的缓存工具,以及在具体代码中实现缓存策略。以下是详细说明如何在单体应用中使用缓存来处理高并发的内容,包括常见的缓存框架和实际的代…...
ollama教程——使用LangChain调用Ollama接口实现ReAct
ollama入门系列教程简介与目录 相关文章: Ollama教程——入门:开启本地大型语言模型开发之旅Ollama教程——模型:如何将模型高效导入到Ollama框架Ollama教程——兼容OpenAI API:高效利用兼容OpenAI的API进行AI项目开发Ollama教程——使用LangChain:Ollama与LangChain的强强…...
【Bug分析】Keil报错:error: #18:expected a “)“问题解决
【Bug分析】Keil报错:error: #18:expected a “)”问题解决 前言bug查找bug解决方法小结 前言 keil编译时出现一个问题,缺少一个右括号。然后仔细查看代码,并没有括号缺失。 如下,代码括号正常。 bug查找 站内文章…...
MAC上设置快捷打开终端以及如何运用剪切快捷键
在Mac上设置一个快捷键,在当前文件夹中打开终端,你可以使用Automator创建一个服务,然后将其分配给一个快捷键。以下是步骤: 1. 创建Automator服务 打开 Automator(你可以在应用程序文件夹中找到它,或使用…...
linux docker安装 gitlab后忘记root密码如何找回
1. docker ps - a 查看当前gitlab 当前的id2. docker exec -it gitlab /bin/bash 进入docker git 容器中【gitlab 注意可以上图中的name,也可以是id都可以的】,如下图3.gitlab-rails console -e production 输入该指令,启动Ruby on Rails控制台&…...
C语言典型例题27
《C程序设计教程(第四版)——谭浩强》 习题2.4 用下面的scanf函数输入数据 使a3,b7,x8.5,y71.8,c1A,c2a。问在键盘上怎么输入 代码 //《C程序设计教程(第四版)——谭浩强》 //习题2.4 用下面的scanf函数输入数据,使…...
clion开发stm32f4系列(一)————移植rt-thread os系统
前言 本次使用的rt-thread的版本为5.0.2基于rt-thread sudio生成的源码进行拷贝和修改工程基于上次创建工程的项目进行修改。本次工程只是用了serial和pin组件,其他后面用到再进行添加 拷贝rt-thread源码库 通过CMakeLists来进行管理 顶级(rt-thread目录) cmake_minimum_req…...
计算机网络(网络层)
网络层概述 网络层是干什么的? 网络层的主要任务是实现不同异构网络互连,进而实现数据包在各网络之间的传输相比于数据链路层的以太网通信,网络层则是将一个个数据链路层连接的以太网通过路由器连接起来。从而实现不同数据链路层的互联。 这…...
Python3 第六十六课 -- CGI编程
目录 一. 什么是 CGI 二. 网页浏览 三. CGI 架构图 四. Web服务器支持及配置 五. 第一个CGI程序 5.1. HTTP 头部 5.2. CGI 环境变量 六. GET和POST方法 6.1. 使用GET方法传输数据 6.1.1. 简单的url实例:GET方法 6.1.2. 简单的表单实例:GET方法…...
【Unity23种设计模式】之状态模式
首先创建一个项目 打开项目后复制至3个场景 命名为 创建一个空物体 命名为GameLoop 创建一个脚本GameLoop.cs 编写代码如下 将代码挂载至空物体GameLoop 将三个场景拖拽至Scenes In Build 分析下状态模式的类图 我们创新类图中的代码 编写ISceneState.cs 编写三个状态子类继承构…...
二叉树刷题,bfs刷题
有些题目,你按照拍脑袋的方式去做,可能发现需要在递归代码中调用其他递归函数计算字数的信息。一般来说,出现这种情况时你可以考虑用后序遍历的思维方式来优化算法,利用后序遍历传递子树的信息,避免过高的时间复杂度。…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
