计算机网络八股整理(二)

计算机网络八股整理(二)

应用层

1:dns的全称了解过吗?

dns全称domain-name-system,翻译过来就是域名系统,是在计算机网络中将域名转换成ip地址的分布式数据库系统;

域名服务器的层级类似一个树状结构:从上到下分别是根dns服务器,顶级域dns服务器和权威dns服务器;因为是一个树状结构,所以任意一个服务器可以找到根dns服务器从而找到任意目标dns服务器;

2:dns域名解析的工作流程?

首先客户端获取域名后去访问本地dns服务器,查看本地dns服务器缓存的表格中有没有对应的域名,没有的话

本地dns服务器就会去问根dns服务器,根dns服务器不会进行域名解析,而是指路,根dns服务器告诉本地dns服务器域名的顶级域dns服务器的地址,然后本地dns服务器去访问顶级域dns服务器,顶级域dns服务器就会指路给权威dns服务器,再去访问权威dns服务器,权威dns服务器会告诉本地dns服务器对应的ip地址,然后本地dns服务器就会将IP地址返回给客户端,客户端就能与服务器建立连接;

3:dns默认的端口是多少

dns默认的端口是53;

4:dns底层使用了udp还是tcp;

dns底层使用了udp传输协议,因为udp低延迟,简单快速,轻量级更适合dns这种需要快速响应的域名解析服务;

1:低延迟:因为udp是一种无连接的传输协议,不需要在传输前建立连接,延迟更低;

2:简单快速:因为udp不需要做连接管理和流量控制所以传输速度快;

3:轻量级:是因为udp头部较小;

虽然使用udp可能会造成丢包或者数据不完整,但是对于dns来说这些风险可以容忍,dns通过一些机制来保证数据的可靠性,比如超时重发,请求重试,缓存等;

5:http是不是无状态的?

http是无状态的,每次请求都是独立,且多次请求之间不会共享数据;

可以使用会话跟踪技术,如cookie,和session来跟踪用户状态,从而实现一定程度上的状态保持;

6:携带cookie的http请求是有状态的还是无状态的?cookie是http协议族的一部分,那为啥还说http是无状态的?

携带cookie的http请求可以实现在一定程度上的状态保持,因为cookie是在客户端保存会话信息和状态信息的一种机制。在发送http请求的时候携带上cookie,服务端读取cookie中的信息可以用来保持用户特定状态。所以虽然http是无状态的,但是可以通过cookie来实现一定程度上的状态保持;

cookie是http协议族的一部分,但是http协议设计的初衷就是无状态的请求,每个请求都是相互独立的,而cookie是一种补充机制,可以使用cookie来实现一定程度上的状态保持;

7:cookie和session有什么区别?

cookie和session在存储位置,数据容量,安全性,生命周期等方面有一定的区别:

1:存储位置:cookie存储在客户端,每次请求时都会携带cookie到服务端。session存储在服务端,由服务端分发session ID,通过cookie或者是url重写将session ID发送给客户端,客户端在访问时就携带上session ID,服务器根据sessionID找到对应的session;

2:数据容量:cookie存储在客户端,容量一般是4kb,而且浏览器不允许同一个域名有过多的cookie;而session存储在服务端,理论上没有容量限制,主要取决于服务器的内存;

3:安全性:cookie存储在客户端,可能会收到xss攻击;session存储在客户端,比cookie安全性强一些,但也可能受到session劫持和会话固定攻击;

4:生命周期:cookie可以设置过期时间,超过过期时间cookie会失效,也可以设置会话cookie,即浏览器关闭时,cookie失效;

session在客户端关闭浏览器时失效,也可以设置过期时间;

拓展1:cookie和session的优缺点?

cookie的优点:是http中支持的;

cookie的缺点:1:只有在浏览器中可用,移动设备等不可用;2:不安全,用户可以禁用cookie;3:不支持跨域;

session的优点:存储在服务器中,安全;

session的缺点:1:只存储在单台服务器中,在集群环境下,进行负载均衡后可能会不可用。2:cookie的缺点;

8:cookie,session,token的区别:

1:session存储在服务端,可以理解为一个状态列表,拥有唯一的标识符sessionID,通常存储在cookie。客户端发送请求时在cookie中携带sessionID, 服务端根据列表查询对应的session数据,依赖于cookie;

2:cookie类似于令牌,携带sessionID,存储于客户端,由浏览器自动添加;

3:token也是一种令牌,将用户的信息进行加密后,发送给用户,用户下次请求需要在cookie或者其他位置携带token,服务端进行解密后就能获取用户信息,通常由开发者手动添加;

9:如果客户端禁用了cookie,session还能使用吗?

默认情况下,禁用了cookie之后session是无法正常使用的,因为sessionID的传递依赖于cookie;

但是可用使用别的方法传递sessionID:

1:url重写:将sessionID拼接在url中,服务端通过解析url获取sessionID,但是这样使url不是那么整洁;而且如果用户分享连接可能会泄露sessionID;

2:隐藏表单字段:将sessionID存储在html表单的隐藏字段中,服务端通过解析表单字段获取sessionID,但是这种情况只能用于表单提交的情况,不能用于链接点击和ajax请求;

10:如果我把数据存储到localstorage中或者是cookie中有什么区别?

数据容量:cookie存储在客户端,一般容量大小在4kb,而localstorage的容量更大可以达到几MB;

数据发送:发送请求时,会携带cookie从而实现多次请求之间的数据共享。而localstrorage只会存储在客户端浏览器中,不会自动发送出去,一般可以用来同一域名多个页面的数据共享;

安全性:cookie会发送到服务端,有被窃听的风险,安全性不高,而localstotage存储在服务器端一般较安全;

生命周期:cookie可以设置过期时间,超过过期时间就会失效,而localstorage持久化存储在服务端,一般需要手动删除或者使用代码删除;

11:什么数据应该存储在cookie中,什么数据应该存储在localstorage?

cookie适用于服务端和客户端传递数据,跨域访问,设置过期时间,localstorage适合存储大量数据,相同域名下的不同页面共享数据,永久存储数据;

12:jwt令牌和传统令牌有什么区别?

1:无状态性:jwt令牌是无状态的,它不会存储在服务端中。jwt包含了一些必要信息,如用户身份,权限信息;

2:安全性:jwt通过密钥对令牌进行签名,保证了密钥的完整和真实性,只有持有密钥才能对令牌进行解析;

3:跨域访问:jwt存储在请求头或者参数中,无需cookie就能进行跨域访问;

13:jwt令牌包含哪些部分?

jwt令牌包含头部,载荷,和签名:

头部由签名算法和令牌类型组成;

有效载荷为自定义信息;

签名是将头部,载荷和密钥通过算法进行计算而来的字符串;

其中头部和载荷都是JSON格式通过base64编码成字符串;

14:jwt为什么能解决集群部署?什么是集群部署?

在传统的令牌和cookie中,请求将令牌或者cookie保存在服务器内存或者数据库中,如果是集群部署,每次访问的服务器不同,cookie和令牌都要重新获取,比如要用户重新登录,这带来了额外的开销;

而jwt是无状态的,服务端无需存储jwt相关信息,jwt存储了一些必要信息如用户身份和权限,集群中的服务器只要解析jwt的内容就能获取相关信息用来维持特定状态;解决了集群部署的问题;

15:jwt的缺点是什么?

jwt一旦派发出去在失效之前都是有效,无法进行撤销;

如果解决这个问题,我们可以使用内存数据库比如redis,创建一个黑名单,将想要其失效的jwt加入到黑名单中,这样每次在使用jwt之前都会判断jwt是否在黑名单中;

16:jwt如果泄露了怎么办,如何解决?

1:及时失效令牌:让旧的令牌失效无法使用;

2:刷新令牌:刷新令牌获取新的令牌,让旧的失效;

3:黑名单:服务端维护黑名单,将旧的令牌加入黑名单;

17:前端是如何存储jwt的?

jwt存储在客户端,可以存储在localstotrage中,也可以存储在cookie,sessionstotrage中;

各自的优缺点:

1:localstotrage:

优点:存储空间大,一般都有几MB,而且不随着请求发送到服务端,所以不会出现在http缓存和日志中;

缺点:可能会受到xss攻击,恶意的javascpirt可以盗取jwt;

2:sessionstotrage:

优点:和localstotrage一样存储空间大,窗口关闭会清除缓存,一定程度上降低了泄露的风险;

缺点:每次刷新和打开新标签页使用同样的应用都要重新登录影响用户体验;

3:cookie:

优点:可以使用httponly来防止javaspript的访问,降低xss的风险。也可以设置secure标志来使用https发送请求,提高了安全性;

缺点:存储空间小只有4kb,而且每次访问会携带,增加性能负担;

18:都有http协议了为什么还会有rpc?

1:首先rpc本质上不是一种协议,是一种调用方式,像grpc,thrift才算是协议,他们是实现了rpc调用的协议。一般用于程序员像调用本地方法一样调用远程方法;

2:对于有多端服务的软件来说,对外一般用http,rpc用于集群不同服务之间的调用;

3:rpc出现的比http早,且性能要比http1.1要强;

4:虽然http2.0的性能对http1.1有提升,可能比rpc性能还有还要好,但是是近几年才推出,不太可能替代rpc;

19:http长连接和websocket的区别?

1:全双工和半双工:tcp是全双工的协议,虽然http1.1是基于tcp协议,但是http1.1是半双工协议,对于服务端主动推送服务端的场景不太友好,所以需要使用全双工协议websocket;

2:应用场景:http1.1是基于请求应答的协议,由客户端主动发送请求,服务端响应,服务端不能主动发送数据。对于一些简单场景可用通过定时轮询或者长轮询来实现服务器主动推送;对于需要频繁进行通信的场景可以使用websocket双向通讯协议;

20:nginx负载均衡的算法有哪些?

1:轮询:按照顺序依次将请求分配给后端服务器;这个算法最简单,但是无法处理服务器访问速度突然变慢或者客户端有连续访问需求的场景;

2:ip哈希:通过ip的哈希结果来分配后端服务器,同一个IP始终分配给同一台服务器;适用于保持同一个客户端的请求一直方式给同一个服务器的场景如会话保持。

3:url哈希:根据url的哈希结果来分配后端服务器,一个url定向发送给后端的一个服务器;

4:最短响应时间:根据响应时间来分配请求,优先分配给响应时间最短的后端服务器。

5:加权轮询:根据权重将请求分配给后端服务器,权重越大的分配的请求越多,适用于后端服务器性能不同的场景,可以提高高性能服务器的利用率;

21:nginx位于七层网络结构的那一层?

nginx位于应用层,因为主要处理http请求和响应;

实现负载均衡和反向代理;

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

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

相关文章

工业AI质检 AI质检智能系统 尤劲恩(上海)信息科技有限公司

来的现代化工厂,将逐步被无人化车间取代,无人工厂除了产线自动化,其无人质检将是绕不开的话题。尤劲恩致力于帮助工业制造领域上下游工厂减员增效、提高品质效率,真正实现无人质检IQC/IPQC/OQC的在线质检系统。分析生产环节真实品…

C 语言数组与函数:核心要点深度剖析与高效编程秘籍

我的个人主页 我的专栏:C语言,希望能帮助到大家!!!点赞❤ 收藏❤ 目录 引言数组基础 2.1 数组的定义与初始化 2.2 一维数组的基本操作 2.3 二维数组及其应用 2.4 数组与指针的关系函数基础 3.1 函数的定义与调用 3.2…

XML JSON

XML 与 JSON 结构 XML(eXtensible Markup Language) 1. 定义 XML 是一种标记语言,用于描述数据的结构和内容。主要用于数据存储与交换。 2. 特点 可扩展性:用户可以自定义标签。层次化结构:数据以树形结构组织&…

蓝桥杯备赛笔记(一)

这里的笔记是关于蓝桥杯关键知识点的记录,有别于基础语法,很多内容只要求会用就行,无需深入掌握。 文章目录 前言一、编程基础1.1 C基础格式和版本选择1.2 输入输出cin和cout: 1.3 string以下是字符串的一些简介:字符串…

[代码随想录Day24打卡] 93.复原IP地址 78.子集 90.子集II

93.复原IP地址 一个合法的IP地址是什么样的: 有3个’.分割得到4个数,每个数第一个数不能是0,不能含有非法字符,不能大于255。 这个是否属于合法IP相当于一个分割问题,把一串字符串分割成4部分,分别判断每…

v-for产生 You may have an infinite update loop in a component render function

参考文章&#xff1a; 报错解析 [Vue warn]: You may have an infinite update loop in a component render function. 另外一个解决方法 例如: MyList 是一个数组&#xff0c;我希望将排序后的结果返回进行for循环&#xff0c;因此设计了一个myMethon函数 <div v-for"…

中国前首富胡志标亮相创客匠人盛会,点燃创始人 IP 新思维火花

创客匠人正式官宣&#xff01;原爱多VCD创始人、中国前首富胡志标受邀出席创客匠人5000人“全球创始人IP领袖高峰论坛”&#xff0c;将与我们携手共赴这场商业巅峰盛宴。 由创客匠人打造的“全球创始人IP领袖高峰论坛”将在2024年12月26日-28日在厦门市国际博览会议中心如期举…

qsort函数详解+代码展示

文章目录 概要系列文章目录前言(1) 定义(2) 使用&#xff08;举例子 上代码&#xff09;1、定义数组&#xff1a;2、定义比较函数&#xff1a;3、调用 qsort&#xff1a;4、输出结果&#xff1a; (3) 注意事项 小结 概要 本篇博客将详细地介绍qsort排序函数&#xff0c;&#x…

CSS之3D转换

三维坐标系 三维坐标系其实就是指立体空间&#xff0c;立体空间是由3个轴共同组成的。 x轴:水平向右注意:x右边是正值&#xff0c;左边是负值 y轴:垂直向下注意:y下面是正值&#xff0c;上面是负值 z轴:垂直屏幕注意:往外面是正值&#xff0c;往里面是负值 3D移动 translat…

2024年nvm保姆级安装教程

需求&#xff1a;当前我的nodejs的版本是6.14.10&#xff0c;想切换为更高的版本。故使用nvm工具来实现不同node版本之间的切换 目录 一、删除node二、nvm安装三、配置nvm镜像四、安装所需要的nodejs版本nvm常用命令 一、删除node 第一步&#xff1a;首先在控制面板删除node.j…

Python编程语言中的优雅艺术:数值分隔符的巧妙运用

在Python编程的世界里&#xff0c;有许多精巧的设计让代码更优雅、更易读。今天要分享的是一个看似简单却能大幅提升代码可读性的特性 —— 数值分隔符。这个特性从Python 3.6版本开始引入&#xff0c;它用一种极其优雅的方式解决了大数值表示的难题。 数值分隔符的本质与应用…

JS-06-事件监听

事件监听 当鼠标进行操作的时候能够对网页页面进行操作。 事件绑定 常见事件 onload: 当某个页面或者元素加载完成之后执行指定的代码块 onclick:鼠标单机的时候就执行指定的代码块 onblur\onfocus:鼠标点击的时候光标在的地方就是获得焦点否则失去焦点 onkeydown:绑定键盘…

Adaboost集成学习 | Python实现基于NuSVR-Adaboost多输入单输出回归预测

目录 效果一览基本介绍程序设计参考资料效果一览 基本介绍 基于NuSVR-Adaboost多输入单输出回归预测python代码 NuSVR是一种支持向量回归(SVR)算法的变体,用于解决回归问题。SVR是一种监督学习方法,它用于预测连续目标变量,而不是分类标签。NuSVR在SVR的基础上引入了一个…

数据结构C语言描述5(图文结合)--队列,数组、链式、优先队列的实现

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法&#xff1b;有C基础即可跟着学习&#xff0c;代码均可运行&#xff1b;准备考研的也可跟着写&#xff0c;个人感觉&#xff0c;如果时间充裕&#xff0c;手写一遍比看书、刷题管用很多&#xff0c;这也是本人采用纯C语言…

ADS9-V2EBZ 评估板

ADS9-V2EBZ 评估板 概览 优势和特点 Xilinx Kintex Ultrascale XCKU15P-2FFVE1517E FPGA。 1 个 FMC 连接器。 20 个 28 Gbps 收发器&#xff0c;由一 (1) 个 FMC 连接器提供支持 HMC DRAM 简单 USB 3.0 端口接口。 随附两张微型 SD 卡&#xff0c;“TRX”用于 ADRV9026 评估…

深入探讨 Redis 持久化机制:原理、配置与优化策略

文章目录 一、引言二、Redis持久化概述三、RDB&#xff08;Redis DataBase&#xff09;持久化1、RDB概念与工作原理2、RDB的配置选项3、RDB优化配置项4、RDB的优势与劣势 三、AOF&#xff08;Append-Only File&#xff09;持久化1、AOF概念与工作原理2、AOF的三种写回策略3、Re…

【回文数组——另类递推】

题目 代码 #include <bits/stdc.h> using namespace std; using ll long long; const int N 1e510; int a[N], b[N]; int main() {int n;cin >> n;for(int i 1; i < n; i)cin >> a[i];for(int i 1; i < n / 2; i)b[i] a[i] - a[n1-i];ll ans 0;…

scala统计词频

package test23import java.io.PrintWriter import scala.io.Source object test {def main(args: Array[String]): Unit {//从文件1.txt中&#xff0c;读取内容val content Source.fromFile("1.txt").mkStringprintln(content)//把字符串中的每个单词&#xff0c;…

数据结构——排序算法第二幕(交换排序:冒泡排序、快速排序(三种版本) 归并排序:归并排序(分治))超详细!!!!

文章目录 前言一、交换排序1.1 冒泡排序1.2 快速排序1.2.1 hoare版本 快排1.2.2 挖坑法 快排1.2.3 lomuto前后指针 快排 二、归并排序总结 前言 继上篇学习了排序的前面两个部分:直接插入排序和选择排序 今天我们来学习排序中常用的交换排序以及非常稳定的归并排序 快排可是有多…

Android基本概念及控件

Android是Google公司基于Linux平台开发的主要应用于智能手机及平板电脑的操作系统。 ART模式与Dalvik模式最大的不同在于:在启用ART模式后&#xff0c;系统在安装应用程序的时候会进行一次预编译&#xff0c;并先将代码转换为机器语言存储在本地,这样在运行程序时就不会每次都…