计算机网络面试题——第三篇

1. TCP超时重传机制是为了解决什么问题

因为TCP是一种面向连接的协议,需要保证数据可靠传输。而在数据传输过程中,由于网络阻塞、链路错误等原因,数据包可能会丢失或者延迟到达目的地。因此,若未在指定时间内收到对方的确认应答(ACK),则认为数据包可能丢失,此时,会触发超时重传机制,重新发送该数据包,以确保数据的可靠到达。

扩展:
1. TCP ACK确认号
TCP的可靠性是靠确认号的,比如我发给你1、2、3、4这4个包,你告诉我现在要5那说明前面4个包都收到了。不过,这里要注意、SeqNum和ACK都是以字节数为单位的。也就是说假设收到了1、2、4但是3没有收到,此时不能ack 5,如果回了5那么发送方就以为5之前的都收到了。所以,只能回复确认最大连续收到的包,也就是3.

2. 超时重传的时间RTO
RTO是指TCP数据报文段发出去后,经过一定时间没有收到其确认报文,就会重新发送该报文段的时间阈值。TCP协议通过采样RTT(往返时延)的时间和波动范围,不断更新,动态调整RTO的值。

2. TCP有超时重传为什么还需要快速重传机制

因为超时重传局限性,他是按时间来驱动的,如果是网络状况真的不好的情况下,超时重传没问题,但是,如果网络状况好的时候,只是恰巧丢包了,那么等长时间就没必要。

所以,引入了数据驱动的重传叫快速重传,他的设计初衷是为了在检索到丢包的情况下,尽快重传丢失的数据包,而不必等待超时计时器的触发。

他通过检测三个或者更多的重复的ACK,认为数据包丢失 ,从而触发立即重传。在这里插入图片描述
通过快速重传,TCP能够更快的恢复丢失的数据包,减少重传等待时间。提升数据传输的整体效率,特别是在网络条件良好的情况下。

3. TCP的SACK的引入是为了解决什么问题

传统的TCP使用累计确认(ACK)机制,只能确认到达的连续数据段,无法有效告知发送方中间某些数据段的丢失或者乱序。结果是发送方只能依赖超时或者重复ACK来重传数据。这可能导致不必要的重传,浪费带宽、降低效率。

SACK(选择性确认),他的引入是为了解决发送方不知道该重传哪些数据的问题。使接收方能够告知发送方已收到的非连续数据段。这样,发送方只需重传确实丢失的数据段,而不是整个发送窗口,从而提高传输效率。
在这里插入图片描述
SACK就是接收方会回传他已经收到的数据,这样发送方就知道哪些数据对方已经收到了,所以就可以选择性的发送丢失的数据。如上图,通过ACK告知我接下来要5500开始的数据,并一直更新SACK,6000-6500收到了,6000-7000收到了。6000-7500收到了,发送方很明确的知道5500-5999的那一波数据丢失了,应该重传。

4. TCP滑动窗口的作用是什么

TCP滑动窗口机制的主要作用是实现流量控制,即协调发送方和接收方的数据传输速率。确保发送方不会发送超出接收方处理能力的数据量,防止接收端缓冲区溢出。

滑动窗口允许发送方在未收到前一个数据包的确认前继续发送多个数据包,从而提高网络吞吐量,减少等待时间,实现高效的数据流传输。

扩展
滑动窗口详细分析
网络是复杂多变的,有时候就会阻塞住,有时候又很通畅。需要根据情况来控制一下发送速率。发送方需要知道接收方的情况,好控制一下发送的速率。不至于蒙着头一个劲的发然后接收方都接受不过来。因此,TCP有个滑动窗口来做流量控制,就是接收方告诉发送方我还能接受多少数据,然后发送方就可以根据这个信息来进行数据的发送。

已经有滑动窗口了为什么还要拥塞控制
滑动窗口仅根据接收方的处理能力进行调节,主要防止接收端因处理不及时导致的数据丢失或者拥塞。而拥塞控制是为了防止网络本身的拥塞情况,即在网络中出现过载时,网络中途路由器和链路的负载仍可能造成数据丢失或者延迟,因此,需要拥塞控制机制来应对。

5. 说说TCP拥塞控制的步骤

  1. 慢启动:发送方在连接建立初期,缓慢增加数据发送速率。初始的拥塞窗口(cwnd)通常为一个MSS(最大报文段大小),然后在每次收到ACK后成倍的增加cwnd,直到达到慢启动阈值或者监测到网络拥塞。
  2. 拥塞避免:当cwnd达到阈值后,tcp进入拥塞避免阶段,拥塞窗口的增长速度从指数变为线性增长,即每个RTT(往返时间)增加一个MSS。这一阶段旨在避免激烈的拥塞反应,保持网络稳定性。
  3. 快速重传:发送方在收到三个重复的ACK后,立即重传被认为丢失的报文段,而无需等待超时。这减少了重传的延迟,迅速应对数据丢失。
  4. 快速恢复:在快速重传后,TCP不进入慢启动,而是减小cwnd到阈值的一般,然后开始线性增长cwnd,以快速恢复到丢包前的传输速率。
    在这里插入图片描述

6. ARP和RARP分别是什么?有什么区别?

ARP将IP地址转换为MAC地址,工作在网络层和数据链路层之间,主要 用于在局域网中确定一个特定IP地址对应的物理地址。 因为最终需要找到MAC地址才能跟具体的设备通信。

RARP用于将MAC地址转换为IP地址,比如一些设备启动的时候,需要根据RARO得知分配给他的ip是什么。

7. TCP/IP四层模型是什么

TCP/IP四层模型是一个分层网络通信模型,将网络通信过程分为四个层次,这四个层次分别是:网络接口层、网络层、传输层和应用层。

  • 网络接口层负责在计算机和网络硬件之间传输数据,负责在物理网络上发送和接受数据帧,包括以太网,wifi等协议。
  • 网络层通过ip协议提供数据包的路由和转发
  • 传输层:负责在两个主机之间提供端到端的通信服务,常见的有tcp、udp
  • 应用层通过各种协议提供网络应用程序的功能,如http、ftp等

8. OSI七层模型是什么

  • 应用层:用户交互界面,提供网络服务,如http、ftp、smtp
  • 表示层:数据格式转换,加密、解密,如jpeg、ssl/tls等
  • 会话层:建立、管理、终止会话
  • 传输层:可靠传输,流量控制,错误检测,如TCP、UDP等
  • 网络层:路径选择和逻辑地址管理,如ip、icmp等
  • 数据链路层:物理地址(MAC)寻址,错误检测与纠正。
  • 物理层:比特流传输。

9. Cookie、Session、Token之间有什么区别

  1. Cookie
    Cookie是存储在用户浏览器的一个小型数据文件,用于跟踪和保存用户的状态信息。主要用于保持用户登录状态、跟踪用户行为、存储用户偏好等。
    保存在浏览器端。
  2. Session
    Session是服务端保存用户状态的机制,每个用户会话都有一个唯一的session id。主要用于跟踪用户在服务器上的状态信息,例如登录状态和购物车内容。
    存储在服务器端,然后对应的sessionId通过Cookie保存在客户端浏览器中。
  3. Token
    Token本质上是一种加密的字符串,用于身份验证和授权,可以包含用户信息和权限,用于验证用户身份或者授权访问资源。认证后,后端服务会返回token,存储在客户端,后续客户端访问服务端需要带上这个token。

使用场景区别

  • Cookie:主要用于客户端状态的简单存储和追踪
  • Session:用于服务器端的复杂状态管理,特别是在需要存储大量会话数据时
  • Token:用于无状态的认证和授权,特别是在分布式和跨域环境下。

10. JWT Token

JWT是一种用于在各方之间传递安全信息的紧凑,URL安全的令牌格式。在用户登录后,服务器生成JWT并返回给客户端。客户端在后续请求中通过HTTP头部(通常是Authorization头)发送该JWT,服务器验证JWT的有效性以进行用户身份验证。

因为他的无状态性,常用于分布式系统和微服务架构中。

其结构主要包括三个部分:Header、Payload和Signature。

JWT的工作原理可以总结为以下几个步骤:

  • Header:描述令牌的元数据,通常包含令牌的类型(JWT)和所使用的签名算法(如HMAC).
  • Payload:包含声明,即传递的数据。这些数据通常包含用户信息和其他相关数据。
  • Signature:将Header和Payload用指定的算法进行签名,以验证JWT的真实性和完整性。签名确保了令牌内容在传输过程中未被篡改。

JWT的优点

  • 自包含:JWT中包含了所有必要的信息,因此,在验证时不需要查询数据库,提升了性能
  • 跨语言:JWT是基于JSON的,几乎所有编程语言都支持他的生成和解析。

1. 如何废除一个过期的JWT
因为JWT是无状态的,一般服务器并不保存已签发的JWT,所以服务器无法主动撤销一个已经签发的。不过可以通过其他方式来实现。

  • 使用黑名单
    实现思路:在服务器端维护一个黑名单,该列表包含所有已经被废除的JWT标识符,每次服务器验证JWT时,除了验证签名和其他标准信息外,还需要检查该JWT是否在黑名单中。
    优点:可以精确废除特定的JWT,不影响其他合法的JWT。
    缺点:需要在服务器端存储和管理黑名单,违背了JWT的无状态特性,增加了系统复杂度。

  • 使用版本控制
    实现思路: 在用户信息中引入一个“Token版本号”的字段,每次生成JWT时,将这个版本号作为JWT的一部分。当需要废除某个用户的JWT时,只需要将用户的版本号递增,在服务器验证JWT时,检查JWT中的版本号和用户当前的版本号是否匹配。

  • 结合状态信息
    实现思路:在某些场景下, 可以在服务器端结合一些状态信息来决定JWT是否有效。例如,在用户注销或者更改密码时,更新服务器上的某些状态。当用户发出请求时,除了验证JWT外,服务器还检查这些状态是否符合要求。
    2. JWT和Session的对比

  • 无状态认证:JWT通常用于无状态认证,即服务器不存储会话数据。

  • 扩展性:由于JWT不依赖服务器存储,因此在分布式系统中更具扩展性。

11. 什么是DNS

DNS(域名系统)是一个用于将域名转换为IP地址的互联网基础服务。当用户输入一个域名时,DNS服务器会查询该域名对应的IP地址,并将结果返回给用户。这样,用户就可以通过易记的域名访问网站,而不需要记录复杂的IP地址。

除此之外,DNS还有负载均衡能力,通过将域名解析到多个IP地址,DNS可以帮助分散流量,进行负载均衡,提高服务的可靠性和性能。

互联网中的域名地址,分为多级结构:最顶级是根域,然后是顶级域,如 .com、.org 接着是二级域(taobao.com),以及子域(www.taobao.com)。
DNS服务器和客户端会缓存DNS查询结果,以减少查询时间和降低对DNS服务器的负载。缓存的内容会在一定时间后过期,具体取决于DNS记录的生成时间(TTL)设置。
1. DNS的工作流程

  1. 域名解析请求:用户在浏览器输入一个域名,浏览器首先检查本地缓存是否有该域名的IP地址。
  2. 递归DNS解析:如果本地缓存中没有所需的IP地址,浏览器会向配置的递归DNS服务器发送请求。
  3. 查询根域名服务器:递归DNS服务器会查询根域名服务器以获取顶级域的DNS服务器地址,跟域名服务器负责将请求转发到对应的顶级域服务器。
  4. 查询顶级域服务器:跟域名服务器将请求转发到对应的顶级域服务器(如.com、.net) ,这些服务器负责处理特定顶级域的请求。
  5. 查询权威DNS服务器:顶级域名服务器将请求转发到域名对应的权威DNS服务器(如taobao.com),权威DNS服务器拥有该域名的最终DNS记录。
  6. 返回IP地址:权威DNS服务器返回与域名对应的IP地址给递归DNS服务器,然后递归DNS服务器将该IP地址返回给用户的浏览器。
  7. 缓存和访问:浏览器缓存该IP地址以供后续请求使用,并通过IP地址连接到目标服务器以访问网站。

2. DNS记录类型

  • A记录:将域名映射到IPv4地址。
  • AAAA记录:将域名映射到IPv6地址。
  • CNAME记录:将一个域名别名指向另一个域名
  • MX记录:定义邮件服务器的地址,用于电子邮件的传输。
  • TXT记录:存储任意文本信息,通常用于验证和安全设置
  • NS记录:定义域名的权威DNS服务器。

12. 什么是CDN

CDN是一个由多个地理位置分散的服务器节点组成的分布式网络架构,用于加速互联网内容的分发。

当用户请求内容时,CDN会根据用户的地理位置,将请求转发到最近的缓存服务器上,这样可以减少数据传输的延迟,提高用户访问速度,同时减轻服务器的负载。

CDN通常用于加速静态内容的访问,提高网络的性能和用户体验。

  1. CDN的通俗理解
    如果网站服务器部署在北京,香港的用户访问该网站,由于物理距离的缘故,时延相对而言会比较大,导致体验上并不是很好。并且当用户量比较大的时候,全国各地所有请求都涌向北京的服务器,网络的主干道就会被阻塞。这其实就是所谓的“热点”问题,可以采用 分流 的操作解决这个问题。
    主服务器部署在北京不变,但是全国各地都建立一些缓存站,这些缓存站可以缓存一些主服务器上变化不频繁的资源,比如css/js/图片等静态资源。当用户访问网站的时候,根据就近原则,选择一个距离他最近的缓存站。
    如果缓存站找不到,那么就回源到源站,也就是缓存站回去北京的服务器要数据,然后将这些数据缓存到本地且返回给用户。
    当然,一些热点的数据也可以让源站主动推送给缓存站,进行 缓存预热。这样,就减少了回源的操作,使得高峰时期服务器更加平稳。
    动态数据怎么办
    静态的按照上面说的路子走,动态的则是根据内部的一些调度算法,智能的选择最优回源路径去请求源站,节省请求的时间。

2.CDN基础结构
在这里插入图片描述
所谓CDN缓存节点就是上面说的缓存站,然后还是一个很重要的GSLB(全局负载均衡器)
这个GSLB实现的主要功能就是:根据就近原则,选择一个距离他最近的缓存站。简单来说,就是请求转发,转发到最近的站。

GSLB转发机制有三种实现

  • 基于DNS解析
  • 基于HTTP重定向
  • 基于IP路由
    业界实现转发的主流技术是DNS解析,因为DNS有缓存以及负载均衡能力。

13. 从网络角度看,用户从输入网址到网页显示,期间发生了什么

  1. 浏览器解析URL:浏览器会解析URL,根据请求信息生成对应的HTTP请求报文。
  2. DNS解析:请求需要知晓服务器域名对应的IP地址才能通信,浏览器会检查本地缓存、操作系统缓存、甚至路由器缓存,如果未命中缓存,浏览器向配置的DNS服务器发送查询请求。DNS服务器递归查询最终返回IP地址。
  3. TCP或者UDP:接着浏览器会调用socket库委托协议栈工作,根据指定的情况选择TCP或者UDP。如果使用TCP,需要通过三次握手建立连接,需要在数据发送前通过三次握手和服务端建立连接。此时得到了封装了HTTP数据的TCP数据包。
  4. IP:在TCP数据包的基础上,在封装源地址IP和目标地址IP等信息,得到网络包。有了IP就能在多个网络节点中确定数据包的传输路径,最终找到目标服务器。
  5. MAC:得到网络包后,需要在IP头部的前面加上mac头部,封装发送方MAC地址和接收方MAC地址。MAC用来确保子网内设备两点之间的通信寻址。
  6. 网卡:这个时候,网络包还是存储在内存中的二进制数据,需要网卡把二进制数据转换为电信号,通过网线进行传输。
  7. 交换机:通过网线会连接到交换机,交换机是二层网络设备。工作在mac层,他会根据数据包的mac头找到另一个设备连接在交换机的哪个端口,然后传输。如果找不到对应的端口,则会向交换机上的所有端口广播。
  8. 路由器:路由器也是进行转发,他是三层网络设备,包含IP层,利用路由器,数据在不同网络节点之间转发,最后到达服务器。
  9. 层层验证:服务器确认MAC地址匹配、IP地址匹配,如果是TCP协议则看看序列号是否匹配,若匹配,根据对应的端口号找到监听进程,此时服务器上对应的应用就接收到数据了。
  10. 服务器处理:服务器收到请求后,处理相应的业务逻辑,生成HTTP响应,这期间可能涉及到读取数据库、访问文件系统等。最终会生成响应给客户端(又是一层层的封装TCP、IP、MAC等头部数据,得到最终的数据包),从网卡到交换机到路由器。。。。
  11. 浏览器接收响应并渲染页面:经过多个路由器转发后,浏览器最终会接收到服务器返回的响应,进行页面渲染展示。

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

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

相关文章

protobufJavascrip编码解码演示

protobuf&Javascrip编码解码演示 start 写一下 protobuf 相关知识记录在 python 环境和 js 环境中如何处理 protobuf。 1. protobuf是什么? 1.1 介绍 Protocol Buffers(简称Protobuf) ,是Google出品的序列化框架,与开发语言无关&…

【数据结构】邻接表

一、概念 邻接表是一个顺序存储与链式存储相结合的数据结构,用于描述一个图中所有节点之间的关系。 若是一个稠密图,我们可以选择使用邻接矩阵;但当图较稀疏时,邻接矩阵就显得比较浪费空间了,此时我们就可以换成邻接…

JavaSE——认识异常

1.概念 在生活中,人有时会生病,在程序中也是一样,程序猿是一帮办事严谨、追求完美的高科技人才。在日常开发中,绞尽脑汁将代码写的尽善尽美,在程序运行过程中,难免会出现一些奇奇怪怪的问题。有时通过代码很…

【Unity】Unity中接入Admob聚合广告平台,可通过中介接入 AppLovin,Unity Ads,Meta等渠道的广告

一、下载Google Admob的SDK插件 到Google Admob官网中,切换到Unity平台 进来之后是这样,注意后面有Unity标识,然后点击下载,跳转到github中,下载最新的Admob插件sdk,导入到Unity中 二、阅读官方文档&…

【Linux】Screen的使用:新建、退出、再登陆

Linux screen 命令详解与使用指南 在Linux系统中,screen 是允许用户在单个终端会话中运行多个进程,并能在会话之间切换。 适用情况:screen 特别适用于远程登录(如通过SSH)时,确保即使网络连接断开&#x…

国产化ERP是什么?与SAP相比有何优势所在?

前段时间和一个工厂老板聊起来,他正为公司的 ERP 系统发愁呢。他们企业现在用的系统有点跟不上发展节奏了,在考虑换新的。但到底是继续选国际大牌 SAP 呢,还是试试国产化的 ERP 呢?这可真是个难题。这也不是他一家企业的困扰&…

如何通过钢筋计来优化施工安全

在现代建筑工程中,施工安全一直是首要关注的问题。特别是在高层建筑、桥梁和地下工程等复杂结构中,确保钢筋的正确安装和稳定性能,直接关系到工程的整体安全性和耐久性。钢筋计作为一种专门用于测量和监测钢筋应力和应变的设备,其…

使用node+prisma+socket+vue3实现一个群聊功能,拓展功能:使用lottie实现入场动画

使用nodeprisma和vue3实现一个群聊功能 后端代码编写 node环境初始化 新建一个空文件夹node,初始化node环境 npm init -y修改 packages.json,添加 type 为 module,删除 main {"name": "node","version": …

【C语言复习】分支和循环

【C语言复习】分支和循环 1. if语句1.1 if1.2 else1.3分支中包含多条语句1.4嵌套if1.5悬空else问题 2.关系操作符3. 条件操作符4.逻辑操作符:&& 、|| 、!4.1 逻辑取反运算符4.2 与运算符4.3或运算符4.4 练习:闰年的判断4.5短路 5.switch 语句5.1…

python爬虫 - 进阶正则表达式

🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、匹配中文 (一)匹配单个中文字符 (二…

Java项目实战II基于Java+Spring Boot+MySQL的服装销售平台(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在当今数字…

uniapp-小程序开发0-1笔记大全

uniapp官网: https://uniapp.dcloud.net.cn/tutorial/syntax-js.html uniapp插件市场: https://ext.dcloud.net.cn/ uviewui类库: https://www.uviewui.com/ 柱状、扇形、仪表盘库: https://www.ucharts.cn/v2/#/ CSS样式&…

硬件开发笔记(三十一):TPS54331电源设计(四):PCB布板12V转5V电路、12V转3.0V和12V转4V电路

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/142757509 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

ansible 流程控制

目录 1.流程控制 2.handlers触发器 2.1使用handlers案例 3.when 判断 3.1 案例1 用于给task设置条件 满足或者不满足运行对应模块 3.2 案例2 如果系统是centos则安装sl,cowsay 如果是unbantu则安装cmatrix 4.循环 4.1案例 1.流程控制 hand…

Git客户端使用之TortoiseGit和Git

git客户端有两个分别是TortoiseGit和Git Git用于命令行TortoiseGit用于图形界面。无论是Git还是TortoisGit都需要生成公/私钥与github/gitlab建立加密才能使用。 一、先介绍Git的安装与使用 1、下载与安装 安装Git-2.21.0-64-bit.exe(去官网下载最新版64位的),安…

SpringMVC2~~~

目录 数据格式化 基本数据类型可以和字符串自动转换 特殊数据类型和字符串间的转换 验证及国际化 自定义验证错误信息 细节 数据类型转换校验核心类DataBinder 工作机制 取消某个属性的绑定 中文乱码处理 处理json和HttpMessageConverter 处理Json-ResponseBody 处理…

Python精选200Tips:186-190

针对序列(时间、文本)数据的网络结构 续 P186-- 双向LSTM(Bidirectional Long Short-Term Memory 2005)(1)模型结构说明(2)创新性说明(3)示例代码:IMDB电影评论情感分析 …

通义灵码 Visual Studio 下载安装指南(附安装包)

文章目录 前言一、下载和安装指南方法 1:从插件市场安装方法 2:下载安装包安装方法 3:登录并开启智能编码之旅 二、使用指南总结 前言 通义灵码是基于通义大模型的智能编程辅助工具,它提供了多种强大的功能,旨在助力开…

【ProtoBuf】基础使用与编译

文章目录 ProtoBuf的使用基本使用指定proto3语法package声明符定义消息(message)定义消息字段字段唯一编号 编译序列化与反序列化序列化与反序列化使用 ProtoBuf的使用 流程如下: 编写 .proto文件,定义结构对象(message)及属性内容使用 protoc 编译器编…

[Halcon矩阵] 通过手眼标定矩阵计算相机旋转角度

📢博客主页:https://loewen.blog.csdn.net📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉📢现…