网络面试题整理

TCP通讯原理:三次握手,四次挥手

TCP(Transmission Control Protocol)通信中的"三次握手"和"四次挥手"是建立和终止TCP连接时的标准过程,用于确保数据的可靠传输和连接的正确关闭。

三次握手(Three-Way Handshake)

  1. 第一步 - 客户端发送请求

    • 客户端发送一个SYN(同步)标志位的TCP数据包到服务器,用来请求建立连接。
    • 此时,客户端进入"SYN_SENT"状态,等待服务器的响应。
  2. 第二步 - 服务器确认请求

    • 服务器收到客户端的SYN数据包后,会发送一个包含SYN和ACK(确认)标志位的数据包作为响应。
    • 此时,服务器进入"SYN_RCVD"状态,表示它已经同意建立连接。
  3. 第三步 - 客户端确认连接

    • 客户端收到服务器的响应后,发送一个带有ACK标志位的数据包给服务器。
    • 此时,客户端和服务器都进入"ESTABLISHED"状态,连接已建立,双方可以开始进行数据传输。

四次挥手(Four-Way Handshake)

  1. 第一步 - 客户端发起关闭

    • 客户端发送一个带有FIN(结束)标志位的数据包给服务器,表示它要关闭连接,但仍然可以接收数据。
    • 此时,客户端进入"FIN_WAIT_1"状态,等待服务器的确认。
  2. 第二步 - 服务器确认关闭

    • 服务器收到客户端的FIN数据包后,发送一个带有ACK标志位的数据包作为响应,表示它接受了客户端的关闭请求。
    • 此时,服务器进入"CLOSE_WAIT"状态,客户端进入"FIN_WAIT_2"状态。
  3. 第三步 - 服务器发起关闭

    • 服务器发送一个带有FIN标志位的数据包给客户端,表示服务器也准备关闭连接。
    • 此时,服务器进入"LAST_ACK"状态。
  4. 第四步 - 客户端确认关闭

    • 客户端收到服务器的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的编码规则:

  1. ASCII字符(U+0000到U+007F):

    • ASCII字符使用单个字节(8位)进行编码,最高位(最左边的位)为0。
    • 例如,字母A的Unicode码点是U+0041,它在UTF-8中编码为01000001。
  2. 通用多字节编码

    • 大多数Unicode字符使用多字节进行编码。
    • 每个多字节序列以一个字节的起始字节开始,这个字节中的高位位表示此序列的长度。
    • 例如,两字节序列以110xxxxx 10xxxxxx开始,三字节序列以1110xxxx 10xxxxxx 10xxxxxx开始,四字节序列以11110xxx 10xxxxxx 10xxxxxx 10xxxxxx开始。
    • 剩余的字节都以10xxxxxx开始。
  3. 字符值

    • 多字节序列中的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请求中传递参数的主要方法包括:

  1. 查询字符串参数

    • 在URL中使用查询字符串传递参数,通常是在URL的问号后面,多个参数之间使用"&"符号分隔。
    • 例如:http://example.com/resource?param1=value1&param2=value2
    • 在GET请求中,参数通常以明文形式附加在URL上,因此对于敏感信息来说不安全。
    • 用于传递少量参数,如搜索关键字或分页信息。
  2. 请求头参数

    • 可以在HTTP请求的头部(Header)中添加自定义参数,这些参数以键值对的形式出现。
    • 例如,可以在请求头中添加Authorization头以进行身份验证,或者在Accept头中指定响应的内容类型。
    • 用于传递与请求相关的元信息和控制参数。
  3. 请求体参数

    • 在POST、PUT等HTTP请求方法中,可以将参数放置在请求体(Request Body)中。
    • 参数通常以表单数据、JSON、XML等格式进行编码,并在请求头中指定Content-Type来表示数据类型。
    • 用于传递大量参数或包含复杂结构的参数。
  4. URL路径参数

    • 有时,参数可以作为URL路径的一部分来传递。
    • 例如:http://example.com/resource/value1/value2,其中"value1"和"value2"可以被服务器解析为参数。
    • 用于RESTful风格的API设计中,用于传递资源标识符或参数。
  5. Cookie参数

    • 可以使用Cookie来在HTTP请求之间保持状态信息。
    • 服务器可以设置Cookie并在客户端之间传递,客户端会将Cookie自动包含在后续的HTTP请求中。
    • 用于跟踪用户会话和存储客户端状态信息。
  6. 会话参数

    • 通过使用会话(Session)来存储和管理参数,通常在服务器端。
    • 客户端在登录后会获得一个会话标识符(Session ID),该标识符用于关联客户端与服务器端的会话数据。
    • 用于保持用户状态和在多个请求之间共享数据。

HTTP请求的参数传递方式取决于应用程序的需求和设计。不同的HTTP框架和库可能提供不同的方式来处理参数。在处理HTTP请求时,服务器通常会解析请求中的参数,并根据参数的内容执行相应的操作或返回响应。

用户名和密码等参数是怎么传递,为什么这么传递?

用户名和密码等敏感信息在网络通信中需要以安全的方式传递,以保护用户的隐私和安全。通常,这些信息是在身份验证过程中传递的,以下是一些常见的传递方法以及为什么要这样传递的原因:

  1. HTTP基本认证

    • 用户名和密码可以通过HTTP基本认证传递,这是HTTP协议的一种内置身份验证机制。
    • 客户端将用户名和密码编码为Base64字符串,并将其添加到HTTP请求头的"Authorization"字段中。
    • 这种方法简单易用,但不是最安全的方式,因为Base64编码不是加密,容易受到窃听攻击。
    • 常用于简单的身份验证,但不建议在非安全环境中使用。
  2. HTTPS

    • 使用HTTPS(HTTP Secure)协议来传递用户名和密码以及其他敏感信息,以加密数据传输。
    • HTTPS使用TLS/SSL加密来保护通信,确保传输的数据在传输过程中是安全的。
    • 这是一种最安全的传递敏感信息的方式,常用于登录和传输敏感数据,因为它提供了端到端的加密和安全性。
  3. 表单认证

    • 用户名和密码可以通过HTML表单输入,并通过POST请求将它们发送到服务器。
    • 服务器接收到POST请求后,会验证用户提供的用户名和密码是否正确。
    • 这通常用于Web应用程序的登录页面,用户可以安全地输入其凭据。
  4. 令牌认证

    • 用户信息可以通过令牌(Token)进行传递,用户在登录后会获得一个令牌,然后将令牌包含在每个后续请求的头部或请求参数中。
    • 服务器使用令牌来验证用户的身份,而不需要在每个请求中传递明文的用户名和密码。
    • 令牌可以具有一定的生命周期,并且可以存储在安全的方式中,减少了暴露密码的风险。
  5. OAuth认证

    • OAuth是一种开放标准,允许用户授权第三方应用程序访问他们的资源,而不需要将密码传递给第三方应用。
    • 用户在OAuth中进行授权,然后服务器生成访问令牌,第三方应用程序使用该令牌来访问受保护的资源。
    • OAuth提供了一种安全的方式来授权和传递用户信息,而无需直接传递用户名和密码。

这些方法的选择取决于应用程序的需求和安全性要求。在设计和实施身份验证和数据传输方案时,必须考虑安全性,并选择适当的方法来保护用户信息。HTTPS是一种常用的方式,因为它提供了端到端的数据加密和完整性保护。同时,令牌认证和OAuth等方法也提供了安全且便于管理的方式来处理用户凭据和授权。

如果前端禁用token或者cookies,这样的敏感信息怎么传递

如果前端禁用了使用token或cookies等传递敏感信息的方式,仍然需要传递敏感信息,可以考虑以下替代方法:

  1. 在请求头中使用自定义头部

    • 可以在HTTP请求头中添加自定义的头部字段,将敏感信息放入这些头部字段中。但请注意,这仍然不是最安全的方式,因为头部字段仍然可以被窃听或中间人攻击所威胁。
  2. 请求参数加密

    • 将敏感信息加密后,作为请求的参数进行传递。前端和后端必须使用相同的加密算法和密钥来加密和解密数据。
    • 这可以提供一定程度的保护,但仍然可能受到中间人攻击的威胁。
  3. 使用单次令牌(One-Time Token)

    • 生成一次性令牌,令牌只能用一次,并且在使用后立即失效。这样可以降低令牌泄露的风险。
    • 服务器和客户端之间必须共享一种机制来生成和验证这些一次性令牌。
  4. IP地址限制

    • 对于一些情况下,可以限制只有特定IP地址或IP地址范围的请求能够访问敏感信息,以增加访问的限制。
  5. 使用其他安全传输层

    • 使用其他安全传输层,如VPN(Virtual Private Network)或专用网络连接,以确保数据传输的安全性。

需要强调的是,这些方法仍然可能存在一些安全风险,因此在选择和实施替代方法时,需要根据应用程序的具体需求和安全性要求进行仔细的评估和设计。最佳的安全实践通常包括使用HTTPS、令牌认证、OAuth等安全机制,以确保敏感信息在传输过程中得到保护。

websocket 链接在请求头中是怎么标识的?

WebSocket连接在HTTP请求头中通过特定的头部字段来标识。在建立WebSocket连接时,客户端会发送一个HTTP请求,其中包含一些特殊的头部字段来指示要升级到WebSocket连接。以下是标识WebSocket连接的HTTP请求头部字段:

  1. Upgrade

    • 客户端在HTTP请求头中包含一个"Upgrade"字段,其值设置为"websocket",表示客户端希望升级到WebSocket连接。
    • 示例:Upgrade: websocket
  2. Connection

    • 客户端还包含一个"Connection"字段,其值设置为"Upgrade",表示客户端希望升级连接。
    • 示例:Connection: Upgrade
  3. Sec-WebSocket-Key

    • 客户端生成一个随机的16字节的值,并将其转换为Base64编码后放在"Sec-WebSocket-Key"字段中,以确保服务器可以验证WebSocket握手请求的合法性。
    • 示例:Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
  4. Sec-WebSocket-Version

    • 客户端在"Sec-WebSocket-Version"字段中指定所使用的WebSocket协议的版本号。
    • 示例:Sec-WebSocket-Version: 13
  5. 其他头部字段

    • 除了上述字段外,还可以包含其他自定义的头部字段,以在建立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连接,客户端和服务器之间的数据传输将以全双工的方式进行,允许双方实时地进行双向通信。

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

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

相关文章

【LeetCode】2511.最多可以摧毁的敌人城堡数目

题目 给你一个长度为 n ,下标从 0 开始的整数数组 forts ,表示一些城堡。forts[i] 可以是 -1 ,0 或者 1 ,其中: -1 表示第 i 个位置 没有 城堡。0 表示第 i 个位置有一个 敌人 的城堡。1 表示第 i 个位置有一个你控制…

Python 加密解密实战:非对称与对称,如何在实际应用中各显神通?

建议阅读原文链接,效果更佳 Python 加密解密实战:非对称与对称,如何在实际应用中各显神通? 1.非对称加密的实际应用 在 Python 世界中,非对称加密算法,如 RSA,的应用已经越来越广泛&#xff0…

【STM32】学习笔记-SPI通信

SPI通信 SPI通信(Serial Peripheral Interface)是一种同步的串行通信协议,用于在微控制器、传感器、存储器、数字信号处理器等之间进行通信。SPI通信协议需要使用4个线路进行通信:时钟线(SCLK)、主输入/主输出线(MISO)、主输出/主…

Elasticsearch、Kibana以及Java操作ES 的快速使用

docker 安装elastic search 、 kibana(可视化管理elastic search) docker pull elasticsearch:7.12.1 docker pull kibana:7.12.1创建docker自定义网络 docker自定义网络可以使得容器之间使用容器名网络互连,默认的网络不会有这功能。 一定…

聚焦磷酸铁锂产线革新,宏工科技一站式解决方案

兼顾了低成本与安全性两大属性,磷酸铁锂市场在全球范围内持续升温,并有望保持较高的景气度。巨大的需求空间之下,行业对于锂电装备企业的自动化与智能化水平、整线交付能力、产品效率与稳定性等均提出了新的要求。 以宏工科技股份有限公司&a…

ES查询报错内容长度超过104857600

项目场景: 使用 ElasticsearchRestTemplate 或者使用 RestHighLevelClient 查询 ES 报错 内容长度超过 104857600 问题描述 ES 查询报错 entiity content is too long xxx for the configured buffer limit 104857600 Overridepublic void esQuery() {restHighL…

LiveGBS流媒体平台GB/T28181功能-支持数据库切换为高斯数据库信创瀚高数据信创数据库

LiveGBS流媒体平台GB/T28181功能-支持数据库切换为高斯数据库信创瀚高数据信创数据库 1、如何配置切换高斯数据库?2、如何配置切换信创瀚高数据库?3、搭建GB28181视频直播平台 1、如何配置切换高斯数据库? livecms.ini -> [db]下面添加配…

优思学院|亲和图案例:寻找六西格玛的项目

什么是亲和图? 亲和图(Affinity Diagram)主要功能在於分类归纳,协助在一堆杂乱无章的资料之中,有系统的归纳出几个大类,以利后续作业。通常先利用头脑风暴(Brainstorming)方式得到大…

视频监控/视频云存储EasyCVR平台接入华为ivs3800平台提示400报错,如何解决?

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,视频云存储/安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频…

并行计算之计算平台体系结构(流水线,异构处理器与异构并行)

并行计算粒度 分布式并行(多主机,多进程) : MPI 共享存储式并行 (多线程) :OpenMP OpenCL OpenACC 指令级并行 CPU流水线 CPU流水线 指将一条指令的执行过程划分为多个阶段,使得在每个时钟周期内能够并行执行多条指令&#…

CSS中图片旋转超出父元素解决办法

下面的两种解决办法都会导致图片缩小&#xff0c;可以给图片进行初始化的宽高设置 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">…

使用 Web HID API 在浏览器中进行HID设备交互(纯前端)

文章目录 目的基础说明示例工程&#xff08;HID透传测试工具&#xff09;总结 目的 最近再搞HID透传 《STM32 USB使用记录&#xff1a;HID类设备&#xff08;后篇&#xff09;》 。 市面上的各种测试工具都或多或少存在问题&#xff0c;所以就自己写一个工具进行测试。目前来…

Java设计模式之原型模式

原型模式&#xff08;Prototype Pattern&#xff09;是用于创建重复的对象&#xff0c;同时又能保证性能。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式之一。 这种模式是实现了一个原型接口&#xff0c;该接口用于创建当前对象的克隆。当直接…

uni-app 客服按钮可上下拖动动

项目需求&#xff1a; 因为悬浮客服有时候会遮挡住界面内容&#xff0c;故需要对悬浮的气泡弹窗做可拖动操作 movable-area&#xff1a;可拖动区域 movable-view&#xff1a;可移动的视图容器&#xff0c;在页面中可以拖拽滑动或双指缩放。 属性说明 属性名类型默认值说…

四川玖璨电子商务有限公司:短视频有什么运营

根据短视频有什么运营&#xff0c;短视频的拍摄工具多种多样。无论是在手机上拍摄还是使用专业摄影设备&#xff0c;拍摄短视频的目的都是为了吸引观众的注意力和提升内容的质量。从小花费到高投入&#xff0c;在不断发展的短视频行业中&#xff0c;拍摄方法也得到了不断创新和…

QT的补充知识

一、文件 QFile QT提供了QFile类用于对文件进行读写操作&#xff0c;也提供了其他的两个类&#xff1a;文本流&#xff08;QTextSream&#xff09;和数据流&#xff08;QDataStream&#xff09; 文本流&#xff08;QTextSream&#xff09;&#xff1a;用于对文本数据的处理&am…

Redis未授权访问漏洞复现

Redis 简单使用 Redis 未设置密码&#xff0c;客户端工具可以直接链接。 Redis 是非关系型数据库系统&#xff0c;没有库表列的逻辑结构&#xff0c;仅仅以键值对的方式存储数据。 先启动容器 Redis 未设置密码&#xff0c;客户端工具可以直接链接 https://github.com/xk11z/…

Redis的数据类型到底有什么奥秘

这里我们先只介绍五种常用的数据类型~ 目录 1、string 2、hash 3、list 4、set 5、zset 6、示例 1、string 数据类型&#xff1a;string内部编码&#xff1a;raw、int、embstr 说明&#xff1a; raw是最基本的字符串--底层是一个char数组&#xff08;此处的char是一个字…

【Element】Vue+Element表单校验详解

Element表单校验 作为一个后端开发&#xff0c;总结一下实际工作中表单校验的场景和用法。 Element官网&#xff1a;https://element.eleme.cn/#/zh-CN/component/form 代码地址&#xff1a;https://gitee.com/kkmy/kw-microservices/tree/master/kw-ui/kwsphere 常用表单校验场…

Java 中数据结构HashSet的用法

Java HashSet HashSet 基于 HashMap 来实现的&#xff0c;是一个不允许有重复元素的集合。 HashSet 允许有 null 值。 HashSet 是无序的&#xff0c;即不会记录插入的顺序。 HashSet 不是线程安全的&#xff0c; 如果多个线程尝试同时修改 HashSet&#xff0c;则最终结果是…