网络面试题整理
TCP通讯原理:三次握手,四次挥手
TCP(Transmission Control Protocol)通信中的"三次握手"和"四次挥手"是建立和终止TCP连接时的标准过程,用于确保数据的可靠传输和连接的正确关闭。
三次握手(Three-Way Handshake):
-
第一步 - 客户端发送请求:
- 客户端发送一个SYN(同步)标志位的TCP数据包到服务器,用来请求建立连接。
- 此时,客户端进入"SYN_SENT"状态,等待服务器的响应。
-
第二步 - 服务器确认请求:
- 服务器收到客户端的SYN数据包后,会发送一个包含SYN和ACK(确认)标志位的数据包作为响应。
- 此时,服务器进入"SYN_RCVD"状态,表示它已经同意建立连接。
-
第三步 - 客户端确认连接:
- 客户端收到服务器的响应后,发送一个带有ACK标志位的数据包给服务器。
- 此时,客户端和服务器都进入"ESTABLISHED"状态,连接已建立,双方可以开始进行数据传输。
四次挥手(Four-Way Handshake):
-
第一步 - 客户端发起关闭:
- 客户端发送一个带有FIN(结束)标志位的数据包给服务器,表示它要关闭连接,但仍然可以接收数据。
- 此时,客户端进入"FIN_WAIT_1"状态,等待服务器的确认。
-
第二步 - 服务器确认关闭:
- 服务器收到客户端的FIN数据包后,发送一个带有ACK标志位的数据包作为响应,表示它接受了客户端的关闭请求。
- 此时,服务器进入"CLOSE_WAIT"状态,客户端进入"FIN_WAIT_2"状态。
-
第三步 - 服务器发起关闭:
- 服务器发送一个带有FIN标志位的数据包给客户端,表示服务器也准备关闭连接。
- 此时,服务器进入"LAST_ACK"状态。
-
第四步 - 客户端确认关闭:
- 客户端收到服务器的FIN数据包后,发送一个带有ACK标志位的数据包作为确认。
- 此时,客户端进入"TIME_WAIT"状态,等待一段时间后才完全关闭连接。
- 服务器收到客户端的确认后,进入"CLOSED"状态,连接完全关闭。
这个四步挥手的过程确保了双方都有机会完成未完成的数据传输,以及关闭连接,同时避免了数据的丢失和不完整的传输。挥手完成后,双方的连接被完全关闭。
服务器设置"CLOSE_WAIT"状态的目的是啥?
服务器在设置"CLOSE_WAIT"状态的目的是等待客户端确认关闭连接。在TCP连接的四次挥手过程中,服务器在发送关闭请求后进入"CLOSE_WAIT"状态,这表示服务器已经发送了一个带有FIN标志位的数据包,告诉客户端它要关闭连接。服务器进入这个状态是为了等待客户端的确认,以确保连接被双方正确地关闭。
"CLOSE_WAIT"状态是暂时的,通常在服务器端只会停留很短的时间,直到收到客户端的确认,然后服务器会进入"CLOSED"状态,连接被完全关闭。这个等待确认的过程允许服务器确保客户端已经成功收到了服务器的关闭请求,以避免数据的丢失或不完整的传输。
总之,服务器设置"CLOSE_WAIT"状态是为了在关闭连接时等待客户端的确认,以确保连接被正确地关闭,从而维护数据的完整性和可靠性。这是TCP连接管理中的一个重要步骤,确保数据可靠传输和连接的正常终止。
UTF-8是怎么进行编码的?
UTF-8(Unicode Transformation Format - 8-bit)是一种可变长度字符编码方式,用于表示Unicode字符集中的字符。UTF-8编码的规则相对简单,它根据字符的Unicode码点值的范围来确定使用多少字节来表示一个字符。以下是UTF-8的编码规则:
-
ASCII字符(U+0000到U+007F):
- ASCII字符使用单个字节(8位)进行编码,最高位(最左边的位)为0。
- 例如,字母A的Unicode码点是U+0041,它在UTF-8中编码为01000001。
-
通用多字节编码:
- 大多数Unicode字符使用多字节进行编码。
- 每个多字节序列以一个字节的起始字节开始,这个字节中的高位位表示此序列的长度。
- 例如,两字节序列以110xxxxx 10xxxxxx开始,三字节序列以1110xxxx 10xxxxxx 10xxxxxx开始,四字节序列以11110xxx 10xxxxxx 10xxxxxx 10xxxxxx开始。
- 剩余的字节都以10xxxxxx开始。
-
字符值:
- 多字节序列中的x位用于存储字符的值,组成了Unicode码点。
- 字符值的范围根据字节序列的长度不同而变化,不同长度的字节序列可以表示不同范围的Unicode字符。
下面是一些UTF-8编码的示例:
- 字母A(U+0041)编码为01000001。
- 欧元符号€(U+20AC)编码为11100010 10000010 10101100。
- 中文字符“你”(U+4F60)编码为11100100 10111101 10010000。
- 表情符号😀(U+1F600)编码为11110000 10011111 10011000 10000000。
UTF-8编码的灵活性使其成为一种广泛使用的字符编码方式,因为它可以表示所有Unicode字符,包括ASCII字符,同时保持了向后兼容性。这意味着如果一个UTF-8文本只包含ASCII字符,那么它与ASCII编码是一致的。
http是怎么传递参数的
HTTP请求可以传递参数以向服务器发送数据或请求特定资源。HTTP请求中传递参数的主要方法包括:
-
查询字符串参数:
- 在URL中使用查询字符串传递参数,通常是在URL的问号后面,多个参数之间使用"&"符号分隔。
- 例如:
http://example.com/resource?param1=value1¶m2=value2
- 在GET请求中,参数通常以明文形式附加在URL上,因此对于敏感信息来说不安全。
- 用于传递少量参数,如搜索关键字或分页信息。
-
请求头参数:
- 可以在HTTP请求的头部(Header)中添加自定义参数,这些参数以键值对的形式出现。
- 例如,可以在请求头中添加Authorization头以进行身份验证,或者在Accept头中指定响应的内容类型。
- 用于传递与请求相关的元信息和控制参数。
-
请求体参数:
- 在POST、PUT等HTTP请求方法中,可以将参数放置在请求体(Request Body)中。
- 参数通常以表单数据、JSON、XML等格式进行编码,并在请求头中指定Content-Type来表示数据类型。
- 用于传递大量参数或包含复杂结构的参数。
-
URL路径参数:
- 有时,参数可以作为URL路径的一部分来传递。
- 例如:
http://example.com/resource/value1/value2
,其中"value1"和"value2"可以被服务器解析为参数。 - 用于RESTful风格的API设计中,用于传递资源标识符或参数。
-
Cookie参数:
- 可以使用Cookie来在HTTP请求之间保持状态信息。
- 服务器可以设置Cookie并在客户端之间传递,客户端会将Cookie自动包含在后续的HTTP请求中。
- 用于跟踪用户会话和存储客户端状态信息。
-
会话参数:
- 通过使用会话(Session)来存储和管理参数,通常在服务器端。
- 客户端在登录后会获得一个会话标识符(Session ID),该标识符用于关联客户端与服务器端的会话数据。
- 用于保持用户状态和在多个请求之间共享数据。
HTTP请求的参数传递方式取决于应用程序的需求和设计。不同的HTTP框架和库可能提供不同的方式来处理参数。在处理HTTP请求时,服务器通常会解析请求中的参数,并根据参数的内容执行相应的操作或返回响应。
用户名和密码等参数是怎么传递,为什么这么传递?
用户名和密码等敏感信息在网络通信中需要以安全的方式传递,以保护用户的隐私和安全。通常,这些信息是在身份验证过程中传递的,以下是一些常见的传递方法以及为什么要这样传递的原因:
-
HTTP基本认证:
- 用户名和密码可以通过HTTP基本认证传递,这是HTTP协议的一种内置身份验证机制。
- 客户端将用户名和密码编码为Base64字符串,并将其添加到HTTP请求头的"Authorization"字段中。
- 这种方法简单易用,但不是最安全的方式,因为Base64编码不是加密,容易受到窃听攻击。
- 常用于简单的身份验证,但不建议在非安全环境中使用。
-
HTTPS:
- 使用HTTPS(HTTP Secure)协议来传递用户名和密码以及其他敏感信息,以加密数据传输。
- HTTPS使用TLS/SSL加密来保护通信,确保传输的数据在传输过程中是安全的。
- 这是一种最安全的传递敏感信息的方式,常用于登录和传输敏感数据,因为它提供了端到端的加密和安全性。
-
表单认证:
- 用户名和密码可以通过HTML表单输入,并通过POST请求将它们发送到服务器。
- 服务器接收到POST请求后,会验证用户提供的用户名和密码是否正确。
- 这通常用于Web应用程序的登录页面,用户可以安全地输入其凭据。
-
令牌认证:
- 用户信息可以通过令牌(Token)进行传递,用户在登录后会获得一个令牌,然后将令牌包含在每个后续请求的头部或请求参数中。
- 服务器使用令牌来验证用户的身份,而不需要在每个请求中传递明文的用户名和密码。
- 令牌可以具有一定的生命周期,并且可以存储在安全的方式中,减少了暴露密码的风险。
-
OAuth认证:
- OAuth是一种开放标准,允许用户授权第三方应用程序访问他们的资源,而不需要将密码传递给第三方应用。
- 用户在OAuth中进行授权,然后服务器生成访问令牌,第三方应用程序使用该令牌来访问受保护的资源。
- OAuth提供了一种安全的方式来授权和传递用户信息,而无需直接传递用户名和密码。
这些方法的选择取决于应用程序的需求和安全性要求。在设计和实施身份验证和数据传输方案时,必须考虑安全性,并选择适当的方法来保护用户信息。HTTPS是一种常用的方式,因为它提供了端到端的数据加密和完整性保护。同时,令牌认证和OAuth等方法也提供了安全且便于管理的方式来处理用户凭据和授权。
如果前端禁用token或者cookies,这样的敏感信息怎么传递
如果前端禁用了使用token或cookies等传递敏感信息的方式,仍然需要传递敏感信息,可以考虑以下替代方法:
-
在请求头中使用自定义头部:
- 可以在HTTP请求头中添加自定义的头部字段,将敏感信息放入这些头部字段中。但请注意,这仍然不是最安全的方式,因为头部字段仍然可以被窃听或中间人攻击所威胁。
-
请求参数加密:
- 将敏感信息加密后,作为请求的参数进行传递。前端和后端必须使用相同的加密算法和密钥来加密和解密数据。
- 这可以提供一定程度的保护,但仍然可能受到中间人攻击的威胁。
-
使用单次令牌(One-Time Token):
- 生成一次性令牌,令牌只能用一次,并且在使用后立即失效。这样可以降低令牌泄露的风险。
- 服务器和客户端之间必须共享一种机制来生成和验证这些一次性令牌。
-
IP地址限制:
- 对于一些情况下,可以限制只有特定IP地址或IP地址范围的请求能够访问敏感信息,以增加访问的限制。
-
使用其他安全传输层:
- 使用其他安全传输层,如VPN(Virtual Private Network)或专用网络连接,以确保数据传输的安全性。
需要强调的是,这些方法仍然可能存在一些安全风险,因此在选择和实施替代方法时,需要根据应用程序的具体需求和安全性要求进行仔细的评估和设计。最佳的安全实践通常包括使用HTTPS、令牌认证、OAuth等安全机制,以确保敏感信息在传输过程中得到保护。
websocket 链接在请求头中是怎么标识的?
WebSocket连接在HTTP请求头中通过特定的头部字段来标识。在建立WebSocket连接时,客户端会发送一个HTTP请求,其中包含一些特殊的头部字段来指示要升级到WebSocket连接。以下是标识WebSocket连接的HTTP请求头部字段:
-
Upgrade:
- 客户端在HTTP请求头中包含一个"Upgrade"字段,其值设置为"websocket",表示客户端希望升级到WebSocket连接。
- 示例:
Upgrade: websocket
-
Connection:
- 客户端还包含一个"Connection"字段,其值设置为"Upgrade",表示客户端希望升级连接。
- 示例:
Connection: Upgrade
-
Sec-WebSocket-Key:
- 客户端生成一个随机的16字节的值,并将其转换为Base64编码后放在"Sec-WebSocket-Key"字段中,以确保服务器可以验证WebSocket握手请求的合法性。
- 示例:
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
-
Sec-WebSocket-Version:
- 客户端在"Sec-WebSocket-Version"字段中指定所使用的WebSocket协议的版本号。
- 示例:
Sec-WebSocket-Version: 13
-
其他头部字段:
- 除了上述字段外,还可以包含其他自定义的头部字段,以在建立WebSocket连接时传递额外的信息。
当服务器收到包含上述标识字段的HTTP请求后,如果支持WebSocket协议并接受WebSocket连接,它将响应一个HTTP 101 Switching Protocols状态码,表示已成功升级到WebSocket连接。此后,客户端和服务器之间的通信将通过WebSocket协议进行,而不再是HTTP。
下面是一个WebSocket协议升级的示例HTTP请求头:
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
请注意,WebSocket连接的建立过程需要遵循WebSocket协议的标准规范,包括特定的字段和状态码,以确保安全和正确的协议升级。一旦建立WebSocket连接,客户端和服务器之间的数据传输将以全双工的方式进行,允许双方实时地进行双向通信。
相关文章:

网络面试题整理
TCP通讯原理:三次握手,四次挥手 TCP(Transmission Control Protocol)通信中的"三次握手"和"四次挥手"是建立和终止TCP连接时的标准过程,用于确保数据的可靠传输和连接的正确关闭。 三次握手&…...

Liquid Studio 2023.2 Crack
Liquid Studio 提供了用于XML和JSON开发 的高级工具包以及Web 服务测试、数据映射和数据转换工具。 开发环境包含一整套用于设计 XML 和 JSON 数据结构和模式的工具。这些工具提供编辑、验证和高级转换功能。对于新手或专家来说,直观的界面和全面的功能将帮助您节省…...

企业架构LNMP学习笔记8
1、 运维人员需要考虑安全性、稳定性。 安装: 解压进入到目录: shell > tar zxf php-7.2.12.tar.gz shell > cd php-7.2.12 安装依赖软件: yum -y install libxml2-devel libjpeg-devel libpng-devel freetype-devel curl-devel op…...

简单使用_matlab生成数据帧
文章目录 生成数据帧参考 生成数据帧 代码如下,代码很简单,有几点要注意, 较高版本的MATLAB中支持0x的写法使用bitand进行位运算使用strcat函数进行字符串拼接时,如果需要插入空格,要使用双引号 cmd_ay(1) 0x33; …...

uni-app语音转文字功能demo(同声传译)
目录 首先去微信开发者官网申请一下同声传译的插件 微信公众平台 在文件中开始引用: 首先去微信开发者官网申请一下同声传译的插件 微信公众平台 后续使用的时候可以看详情里面的信息进行使用 在文件中开始引用: 注意!!在这个…...

vue2+element-ui批量导入方法并判断上传的文件是否为xls或xlsx
业务需求: 代码结构: <el-dialogtitle"批量导入":close-on-click-modal"true"close"close()":visible"true"width"35%":center"true"><div class"el-dialog-div"><!-- 头部区域布局 -…...

【FPGA】通俗理解从VGA显示到HDMI显示
注:大部分参考内容来自“征途Pro《FPGA Verilog开发实战指南——基于Altera EP4CE10》2021.7.10(上)” 贴个下载地址: 野火FPGA-Altera-EP4CE10征途开发板_核心板 — 野火产品资料下载中心 文档 hdmi显示器驱动设计与验证 — …...

【SpringMVC】参数传递与用户请求和响应
目录 一、Postman 工具使用 1.1 Postman安装 1.2 Postman的使用 1.2.1 创建WorkSpace工作空间 1.2.2 创建请求 二、参数传递 2.1 添加 Slf4j 依赖 2.2 普通传参 知识点1:RequestMapping 知识点2:RequestParam 2.3 路径传参 知识点3࿱…...

Android图形-Hardware Composer HAL
目录 一、引言 二、概览 三、实现HWC 3.1 为什么是HWC? 3.2 HWC的支持需求 3.3 HWC的实现思路 3.4 HWC的基元 3.5 HIDL接口 3.6 函数指针 3.7 图层和屏幕句柄 3.8 屏幕合成操作 3.9 多个屏幕 3.10 虚拟屏幕合成 3.10.1 模式 3.10.2 输出格式 3.11 同…...

P1093 [NOIP2007 普及组] 奖学金
题目描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前 5 5 5 名学生发奖学金。期末,每个学生都有 3 3 3 门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排…...

C#模拟PLC设备运行
涉及:控件数据绑定,动画效果 using System; using System.Windows.Forms;namespace PLCUI {public partial class MainForm : Form{ public MainForm(){InitializeComponent();}private void MainForm_Load(object sender, EventArgs e){// 方式2&#x…...

LeetCode 每日一题 2023/8/28-2023/9/3
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 8/28 57. 插入区间8/29 823. 带因子的二叉树8/30 1654. 到家的最少跳跃次数8/31 1761. 一个图中连通三元组的最小度数9/1 2240. 买钢笔和铅笔的方案数9/2 2511. 最多可以摧…...

Python Tkinter Multiple Windows 教程
一、说明 在这个Python Tkinter教程中,我们将学习如何在Python Tkinter中创建多个窗口,我们还将介绍与多个窗口相关的不同示例。而且,我们将介绍这些主题。 Python Tkinter multiple windows使用多个窗口的 Python Tkinter 用户注册Python Tk…...

【Arduino24】8*8点阵实验
硬件准备 8*8点阵:1个 旋钮电位器:1个 面包板:1块 杜邦线:若干 硬件连线 软件程序 //定义引脚 #define xKnob_pin A0 //x轴旋钮的引脚 #define yKnob_pin A1 //y轴旋钮的引脚 const int row_pin[8] { 6, 11, 10, 3, 17, 4…...

2023年09月数据库流行度最新排名
点击查看最新数据库流行度最新排名(每月更新) 2023年09月数据库流行度最新排名 TOP DB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的 一个数据库被搜索的次数越多,这个数据库就被认为越受欢迎。这是一个领先指标。原始数…...

jenkins快速跑通helloworld任务
jenkins新建helloworld示例 左上角“新建任务” 输入名称,选择第一个创建: 可以选择众多执行脚本,这里选择shell: 随后弹出一个窗口,将下面脚本填入: #!/bin/bashecho start... for i in {1..10}doecho $i…...

win10中安装ros
参考: Windows 10上安装ROS noetic平台_windows ros noetic_高精度计算机视觉的博客-CSDN博客...

问道管理:光刻胶概念再度活跃,广信材料两连板,蓝英装备等涨停
光刻胶概念6日盘中再度活泼,截至发稿,扬帆新材、广信资料、蓝英配备“20cm”涨停,盛剑环境亦涨停,高盟新材涨超9%,同益股份、容大感光涨超5%。 值得注意的是,广信资料已连续两个交易日涨停。公司近来在成绩…...

InstructPix2Pix(CVPR2023)-图像编辑论文解读
文章目录 1.摘要2.背景3.算法3.1 生成多模态训练集3.1.1生成指令及成对caption3.1.2 依据成对的caption生成成对的图像 3.2 InstructPix2Pix 4.实验结果4.1基线比较4.2消融实验 5.结论 论文: 《InstructPix2Pix: Learning to Follow Image Editing Instructions》 …...

基于神经网络结合紫外差分光谱的二氧化硫浓度定量预测
基于神经网络结合紫外差分光谱的二氧化硫浓度定量预测 前言一、代码运行1. 解压数据2. 导包3. 读取数据4. 构建网络5. 设置优化器6. 模型训练7. 可视化loss8. 模型验证 二、结果展示三、总结作者简介 前言 二氧化硫(SO2)是一种常见的环境污染物ÿ…...

一个新工具 nolyfill
名字的意思, 我自己的理解 no(po)lyfill 正如它的名字, 不要再用补丁了, 当然这里说的是过时的补丁。 polyfill 是补丁的意思 为什么要用这个插件 文档原文: 当您通过安装最新的 Node.js LTS 来接受最新的功能和安全修复时,像eslint-plugin-import、…...

vue的第2篇 开发环境vscode的安装以及创建项目空间
一 环境的搭建 1.1常见前端开发ide 1.2 安装vs.code 1.下载地址:Visual Studio Code - Code Editing. Redefined 2.进行安装 1.2.1 vscode的中文插件安装 1.在搜索框输入“chinese” 2.安装完成重启,如下变成中文 1.2.2 修改工作区的颜色 选中[浅色]…...

Java之包装类的详细解析
包装类 5.1 概述 Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使…...

SpringBoot项目防止接口重复提交(简单拦截器实现方案)
基于SpringBoot框架来开发业务后台项目时,接口重复提交是一个常见的问题。为了避免这个问题,我们可以通过自定义拦截器实现一个后台拦截接口重复提交的功能,本文将介绍如何使用基于SpringBoot实现这个功能。 首先,我们需要引入一…...

C语言 数据结构与算法 I
C语言-数据结构与算法 C语言基础 因为之前写算法都是用C,也有了些C基础,变量常量数据类型就跳过去吧。 首先是环境,学C时候用Clion,C语言也用它写吧~ 新建项目,选C执行文件,语言标准。。。就先默认C99吧…...

PHP指定时间戳/日期加一天,一年,一周,一月
PHP指定时间戳加上1天,1周,1月,一年其实是不需要用上什么函数的!指定时间戳本身就是数字整型,我们只需要再计算1天,1周它的秒数相加即可! 博主搜索php指定时间戳加一天一年,结果许多…...

前端框架 vue-admin-template的搭建运行
一介绍 1.1 下载地址 vue-element-admin是基于element-ui 的一套后台管理系统集成方案。 GitHub - PanJiaChen/vue-element-admin: :tada: A magical vue admin https://panjiachen.github.io/vue-element-admin 1.2 node.js的安装 地址下载node.js 1.6版本 CNPM Binari…...

Git—版本控制系统
git版本控制系统 1、什么是版本控制2、常见的版本控制工具3、版本控制分类3.1、本地版本控制3.2、集中版本控制 SVN3.3、分布式版本控制 Git 4、Git与SVN的主要区别5、Git环境配置6、启动Git7、常用的Linux命令8、Git配置9、设置用户名与邮箱(用户标识,必…...

【MySQL基础|第一篇】——谈谈SQL中的DDL语句
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】🎈 本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论区讨论💌 前言ÿ…...

移动安全测试框架-MobSF WINDOWS 环境搭建
安装python python-3.11.5-amd64.exe 安装Win64OpenSSL-3_1_2.exe 安装VisualStudioSetup.exe github下载安装包 https://github.com/MobSF/Mobile-Security-Framework-MobSF/archive/refs/heads/master.zip GitHub - MobSF/Mobile-Security-Framework-MobSF: Mobile Secur…...