您的位置 首页 知识

网络管理员面试题(这里有60道计算机网络面试题请你查收,面试就这么简单?(下)(31-61))

网络管理员面试题

本文已在个人Github开源项目:PythonGuide中收录,其中包含Python各个方向的自学编程路线、面试题集合/面经及系列技术文章等,并且不断收集了上百本著名的计算机书籍pdf版本,会不断的更新与完善开源项目…
pdf版本:在61道题都写完的时候再整理出来吧,关注作者,获取pdf版本
本文作者:海森堡

在面试之中,计算机网络一直都是面试中的重点,所以大家对于这一块的掌握也是非常的重要,下面的面经是我在准备面试的时候,看到过的面经总结而来的,问题都收集好了,但是还没整理好。
关注作者,持续获得最新的面经消息!
后期还会推出,操作系统和算法的常见面试题,希望能给大家带来帮助!
PDF版本已经出来啦!
在公众号:CookDev回复 计算机网络 即可获取到
或者在我的github仓库:https://github.com/hellgoddess/PythonGuide 获取
31 TCP 协议如何保证可靠传输?
应用数据被分割成 TCP 认为最适合发送的数据块。
TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
**校验和:**TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
TCP 的接收端会丢弃重复的数据。
**流量控制:**TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。(TCP 利用滑动窗口实现流量控制)
**拥塞控制:**当网络拥塞时,减少数据的发送。
**ARQ协议:**也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
**超时重传:**当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
32 应用层常见协议知道多少?了解几个?
HTTP,SNMP,FTP,SMTP,DNS,Talent,详细的见上面的介绍
33 TCP头部报文字段介绍几个?各自的功能?
序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。
确认应答号:指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决不丢包的问题。
控制位:
ACK:该位为 1 时,「确认应答」的字段变为有效,TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1 。
RST:该位为 1 时,表示 TCP 连接中出现异常必须强制断开连接。
SYN:该位为 1 时,表示希望建立连接,并在其「序列号」的字段进行序列号初始值的设定。
FIN:该位为 1 时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换 FIN 位为 1 的 TCP 段。
参考链接:https://www.cnblogs.com/xiaolincoding/p/12638546.html
34 TCP头部中有哪些信息?
序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。
确认应答号:指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决不丢包的问题。
控制位:
ACK:该位为 1 时,「确认应答」的字段变为有效,TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1 。
RST:该位为 1 时,表示 TCP 连接中出现异常必须强制断开连接。
SYN:该位为 1 时,表示希望建立连接,并在其「序列号」的字段进行序列号初始值的设定。
FIN:该位为 1 时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换 FIN 位为 1 的 TCP 段。
35 谈谈DNS解析过程,具体一点
第一步:检查浏览器缓存中是否缓存过该域名对应的IP地址
第二步:如果在浏览器缓存中没有找到IP,那么将继续查找本机系统是否缓存过IP
第三步:向本地域名解析服务系统发起域名解析的请求
第四步:向根域名解析服务器发起域名解析请求
第五步:根域名服务器返回gTLD域名解析服务器地址
第六步:向gTLD服务器发起解析请求
第七步:gTLD服务器接收请求并返回Name Server服务器
第八步:Name Server服务器返回IP地址给本地服务器
第九步:本地域名服务器缓存解析结果
第十步:返回解析结果给用户
更详细见:https://cloud.tencent.com/developer/news/324975
36 一个TCP连接可以对应几个HTTP请求?
HTTP/1.0 :一个tcp连接只能发一个http请求。每次服务端返回响应后TCP连接会断开。HTTP/1.1: 默认开启Connection: keep-alive,一个TCP连接可以发多个http请求,但是多个请求是串行执行。(注意区别TCP的keep-alive) HTTP/2: 引入了多路复用技术 和二进制分帧,同个域名下的请求只需要占用一个 TCP 连接,请求和响应是并行执行。
37 DNS查询方式有哪些?
递归查询 (Recursive query)
递归查询是这么一种查询方式,一般发生在 Client 请求 DNS Server。Client 发出一个域名解析的请求,DNS Server 必须返回对应的 IP 地址,或者返回找不到的错误。
迭代查询 (Iterative query)
迭代查询一般发生在 DNS Server 之间,当 Client 发出域名解析的请求后,DNS Server 需要给予最佳答案,这个最佳答案可能是”距离最近”的顶级域名服务器,也能是权威域名服务器。无论如何,Client 需要对返回结果再次发起请求,知道获得最终结果。
38 什么是ARP协议,RARP呢?
ARP协议:地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时,将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
RARP协议:反向地址转换协议。反向地址转换协议(RARP)允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。网络管理员在局域网的网关路由器里创建一个表以映射物理地址(MAC)和与其对应的 IP 地址。当设置一台新的机器时,其 RARP 客户机程序需要向路由器上的 RARP 服务器请求相应的 IP 地址。假设在路由表中已经设置了一个记录,RARP 服务器将会返回 IP 地址给机器,此机器就会存储起来以便日后使用。RARP 可以使用于以太网、光纤分布式数据接口及令牌环 LAN等。
39 HTTP的缺点有哪些?
通信使用明文,内容可能会被窃听;
不验证通信方的身份,因此有可能遭遇伪装;
无法证明报文的完整性,有可能已遭篡改;
40 数据链路层常见协议?可以说一下吗?
见问题19图有详细介绍
41 Ping命令基于哪一层协议的原理是什么?
ping 命令是基于 ICMP 协议来工作的,「 ICMP 」全称为 Internet 控制报文协议(Internet Control Message Protocol)。ping 命令会发送一份ICMP回显请求报文给目标主机,并等待目标主机返回ICMP回显应答。因为ICMP协议会要求目标主机在收到消息之后,必须返回ICMP应答消息给源主机,如果源主机在一定时间内收到了目标主机的应答,则表明两台主机之间网络是可达的。
42 CSRF攻击?你知道吗?
跨站点请求伪造,指攻击者通过跨站请求,以合法的用户的身份进行非法操作。可以这么理解CSRF攻击:攻击者盗用你的身份,以你的名义向第三方网站发送恶意请求。CRSF能做的事情包括利用你的身份发邮件,发短信,进行交易转账,甚至盗取账号信息。
43 如何防范CSRF攻击
验证 HTTP Referer 字段
使用验证码
在请求地址中添加token并验证
在HTTP 头中自定义属性并验证
参考链接:https://www.jianshu.com/p/b99dc31f1e9f
44 常见的HTTP状态码有哪些?
HTTP常见状态码
2xx
200 OK:表示从客户端发送给服务器的请求被正常处理并返回;
204 No Content:表示客户端发送给客户端的请求得到了成功处理,但在返回的响应报文中不含实体的主体部分(没有资源可以返回);
206 Patial Content:表示客户端进行了范围请求,并且服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容。
3xx
301 Moved Permanently:永久性重定向,表示请求的资源被分配了新的URL,之后应使用更改的URL;
302 Found:临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL;
304 Not Modified:表示客户端发送附带条件(是指采用GET方法的请求报文中包含if-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部)的请求时,服务器端允许访问资源,但是请求为满足条件的情况下返回改状态码;
4xx
400 Bad Request:表示请求报文中存在语法错误;
403 Forbidden:服务器拒绝该次访问(访问权限出现问题)
404 Not Found:表示服务器上无法找到请求的资源,除此之外,也可以在服务器拒绝请求但不想给拒绝原因时使用;
5xx
500 Internal Server Error与 400 类型,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道。
501 Not Implemented表示客户端请求的功能还不支持
502 Bad Gateway通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
503 Service Unavailable表示服务器当前很忙,暂时无法响应服务器,类似“网络服务正忙,请稍
后重试”的意思。
45 HTTP缓存?
46 MTU和MSS分别是什么?
MTU(Maximum Transmission Unit)最大传输单元,在TCP/IP协议族中,指的是IP数据报能经过一个物理网络的最大报文长度,其中包括了IP首部(从20个字节到60个字节不等),一般以太网的MTU设为1500字节,加上以太帧首部的长度14字节,也就是一个以太帧不会超过1500+14 = 1514字节。
MSS(Maximum Segment Size,最大报文段大小,指的是TCP报文(一种IP协议的上层协议)的最大数据报长度,其中不包括TCP首部长度。MSS由TCP链接的过程中由双方协商得出,其中SYN字段中的选项部分包括了这个信息。如果MSS+TCP首部+IP首部大于MTU,那么IP报文就会存在分片,如果小于,那么就可以不需要分片正常发送。一般来说,MSS = MTU – IP首部大小 – TCP首部大小
47 DDos 攻击了解吗?
DDoS全称Distributed Denial of Service,中文意思为“分布式拒绝服务”,就是利用大量合法的分布式服务器对目标发送请求,从而导致正常合法用户无法获得服务。通俗点讲就是利用网络节点资源如:IDC服务器、个人PC、手机、智能设备、打印机、摄像头等对目标发起大量攻击请求,从而导致服务器拥塞而无法对外提供正常服务,只能宣布game over
举个例子:
某饭店可以容纳100人同时就餐,某日有个商家恶意竞争,雇佣了200人来这个饭店坐着不吃不喝,导致饭店满满当当无法正常营业。
48 在浏览器中输入url地址后显示主页的过程?
1、输入地址
当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能得 url 了,他会从历史记录,书签等地方,找到已经输入的字符串可能对应的 url,然后给出智能提示,让你可以补全url地址。对于 google的chrome 的浏览器,他甚至会直接从缓存中把网页展示出来,就是说,你还没有按下 enter,页面就出来了。
2、浏览器查找域名的 IP 地址
1、请求一旦发起,浏览器首先要做的事情就是解析这个域名,一般来说,浏览器会首先查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用 hosts 文件里面的 ip 地址。
2、如果在本地的 hosts 文件没有能够找到对应的 ip 地址,浏览器会发出一个 DNS请求到本地DNS服务器 。本地DNS服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动。
3、查询你输入的网址的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果,此过程是递归的方式进行查询。如果没有,本地DNS服务器还要向DNS根服务器进行查询。
4、根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。这种过程是迭代的过程。
5、本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。
6、最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。
3、浏览器向 web 服务器发送一个 HTTP 请求
拿到域名对应的IP地址之后,浏览器会以一个随机端口(1024<端口<65535)向服务器的WEB程序(常用的有httpd,nginx等)80端口发起TCP的连接请求。这个连接请求到达服务器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核的模块)的过滤,最终到达WEB程序,最终建立了TCP/IP的连接。
4、服务器处理请求
经过前面的重重步骤,我们终于将我们的http请求发送到了服务器这里,其实前面的重定向已经是到达服务器了,那么,服务器是如何处理我们的请求的呢?
后端从在固定的端口接收到TCP报文开始,它会对TCP连接进行处理,对HTTP协议进行解析,并按照报文格式进一步封装成HTTP Request对象,供上层使用。
一些大一点的网站会将你的请求到反向代理服务器中,因为当网站访问量非常大,网站越来越慢,一台服务器已经不够用了。于是将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。
此时,客户端不是直接通过HTTP协议访问某网站应用服务器,而是先请求到Nginx,Nginx再请求应用服务器,然后将结果返回给客户端,这里Nginx的作用是反向代理服务器。同时也带来了一个好处,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。
5、服务器返回一个 HTTP 响应
经过前面的6个步骤,服务器收到了我们的请求,也处理我们的请求,到这一步,它会把它的处理结果返回,也就是返回一个HTPP响应。
6、浏览器显示 HTML
在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了,浏览器是如何把页面呈现在屏幕上的呢?不同浏览器可能解析的过程不太一样,这里我们只介绍webkit的渲染过程,下图对应的就是WebKit渲染的过程,这个过程包括:

解析html以构建dom树 -> 构建render树 -> 布局render树 -> 绘制render树

浏览器在解析html文件时,会”自上而下“加载,并在加载过程中进行解析渲染。在解析过程中,如果遇到请求外部资源时,如图片、外链的CSS、iconfont等,请求过程是异步的,并不会影响html文档进行加载。
解析过程中,浏览器首先会解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。这个过程比较复杂,涉及到两个概念: reflow(回流)和repain(重绘)。
DOM节点中的各个元素都是以盒模型的形式存在,这些都需要浏览器去计算其位置和大小等,这个过程称为relow;当盒模型的位置,大小以及其他属性,如颜色,字体,等确定下来之后,浏览器便开始绘制内容,这个过程称为repain。
页面在首次加载时必然会经历reflow和repain。reflow和repain过程是非常消耗性能的,尤其是在移动设备上,它会破坏用户体验,有时会造成页面卡顿。所以我们应该尽可能少的减少reflow和repain。
当文档加载过程中遇到js文件,html文档会挂起渲染(加载解析渲染同步)的线程,不仅要等待文档中js文件加载完毕,还要等待解析执行完毕,才可以恢复html文档的渲染线程。因为JS有可能会修改DOM,最为经典的document.write,这意味着,在JS执行完成前,后续所有资源的下载可能是没有必要的,这是js阻塞后续资源下载的根本原因。所以我明平时的代码中,js是放在html文档末尾的。
JS的解析是由浏览器中的JS解析引擎完成的,比如谷歌的是V8。JS是单线程运行,也就是说,在同一个时间内只能做一件事,所有的任务都需要排队,前一个任务结束,后一个任务才能开始。但是又存在某些任务比较耗时,如IO读写等,所以需要一种机制可以先执行排在后面的任务,这就是:同步任务(synchronous)和异步任务(asynchronous)。
JS的执行机制就可以看做是一个主线程加上一个任务队列(task queue)。同步任务就是放在主线程上执行的任务,异步任务是放在任务队列中的任务。所有的同步任务在主线程上执行,形成一个执行栈;异步任务有了运行结果就会在任务队列中放置一个事件;脚本运行时先依次运行执行栈,然后会从任务队列里提取事件,运行任务队列中的任务,这个过程是不断重复的,所以又叫做事件循环(Event loop)。
7、浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频、视频、CSS、JS等等)
其实这个步骤可以并列在步骤8中,在浏览器显示HTML时,它会注意到需要获取其他地址内容的标签。这时,浏览器会发送一个获取请求来重新获得这些文件。比如我要获取外图片,CSS,JS文件等,类似于下面的链接:
49 页面加载不出来的原因?
引起此问题的原因:1.网络断开了 2.后端页面无法加载 3.网页被劫持了 4.DNS无法解析网址 5.服务器负载过大 6.供应商网络出口出现问题
建议分为前端,后端。分开答更有层次感
50 IP地址的分类
在这五类IP地址中,我们最常使用的是A类、B类和C类地址。(1)A类地址
A类地址第1字节为网络号,其它3个字节为主机号。
A类地址的网络号第一位固定为0,网络号只有7位可以使用,可以指派的网络号是2^7-2 = 126个。
网络号全是0(0000 0000)的IP地址是保留地址,意思是“本网络”。
网络号是127(0111 1111)的IP地址也是保留地址,作为本地环回软件测试。
A类地址的主机号占3个字节,每个A类网络中的最大主机数是2^24-2个。
主机号全是0的IP地址表示是“本主机”所连接到的单个网络。
主机号全是1的IP地址表示是该网络上的所有主机。
(2)B类地址 B类地址的前两个字节为网络号,后两个字节为主机号。
B类地址的网络号第一、二位固定为10,网络号有14位可以使用,可以指派的网络号是2^14-1个。
B类地址网络号为128.0(1000 000 ?0000 0000)的IP地址是不指派的,所以可指派的网络号需要减一。
B类地址的主机号占2个字节,每个B类网络中的最大主机数是2^16-2个。
主机号全是0的IP地址表示是“本主机”所连接到的单个网络。
主机号全是1的IP地址表示是该网络上的所有主机。
(3)C类地址 C类地址的前三个字节为网络号,最后一个字节为主机号。
C类地址的网络号第一、二、三位固定为110,网络号有21位可以使用,可以指派的网络号是2^21-1个。
C类地址网络号为192.0.0(1000 000 ?0000 0000 ?0000 0000)的IP地址是不指派的,所以可指派的网络号需要减一。
C类地址的主机号占1个字节,每个C类网络中的最大主机数是2^8-2个。
主机号全是0的IP地址表示是“本主机”所连接到的单个网络。
主机号全是1的IP地址表示是该网络上的所有主机。
51 XSS攻击防护防范
XSS的原理为恶意攻击者往Web页面里插入JavaScript恶意代码。当用户浏览到写入JavaScript之时,被嵌入Web网页里面的JavaScript恶意代码就会自动被执行,从而达到恶意攻击用户的目的,例如盗取各类用户帐号、网站挂马、盗窃企业重要信息等。
52 SQL注入
Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。
53 HTTP长连接、短连接
在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。
但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
54 ICMP 是什么协议?处于哪一层?
ICMP协议是IP层的附属协议,是介于IP层和TCP层之间的协议,一般认为属于IP层协议。IP协议用它来 ?与其他主机或路由器交换错误报文和其他的一些网络情况。在ICMP包重携带了控制信息和故障恢复信 ?息。主要用于路由器主机向其他路由器或者主机发送出错报文的控制信息
55 TCP和UDP的使用场景是什么?
常见使用TCP协议的应用:1.浏览器使用的:HTTP 2.FlashFXP:FTP 3.Outlook:POP,SMTP 4.QQ文件传输
UDP 文件传输协议 对当前网络通讯质量要求不高的时候,要求网络通讯速度尽量的快,这时就使用UDP 日常生活中常见使用UDP协议:1.QQ语音 2.QQ视频 3.TFTP
56保活计时器的作用?
57 谈谈你对滑动窗口的了解?
58 谈下 HTTP 1.0 和 2.0、3.0 的主要变化?
image-20210221192649710

HTTP1.0 HTTP 1.1主要区别

1.长连接
HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接。
HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长
2.支持管道传输
支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。
但 HTTP/1.1 还是有性能瓶颈:
请求 / 响应头部(Header)未经压缩就发送,首部信息越多延迟越大。只能压缩 Body 的部分;
发送冗长的首部。每次互相发送相同的首部造成的浪费较多;
服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据,也就是队头阻塞;
没有请求优先级控制;
请求只能从客户端开始,服务器只能被动响应。

HTTP2.0

1.多路复用
HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。
当然HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。
TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功过,则慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应就会变慢。所以最好能使用一个建立好的连接,并且这个连接可以支持瞬时并发的请求。
2.头部压缩
HTTP/2 会压缩头(Header)如果你同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的部分。
这就是所谓的 HPACK 算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。
3.二进制分帧
HTTP2.0通过在应用层和传输层之间增加一个二进制分层帧,突破了HTTP1.1的性能限制,改进传输性能。
4.服务器推送
服务器除了最初请求的响应外,服务器还可以额外向客户端推送资源,而无需客户端明确的需求。

HTTP2.0有哪些缺陷?HTTP3.0做了哪些优化?

HTTP/2 主要的问题在于,多个 HTTP 请求在复用一个 TCP 连接,下层的 TCP 协议是不知道有多少个
HTTP 请求的。所以一旦发生了丢包现象,就会触发 TCP 的重传机制,这样在一个 TCP 连接中的所有****的 HTTP 请求都必须等待这个丢了的包被重传回来。
HTTP/1.1 中的管道( pipeline)传输中如果有一个请求阻塞了,那么队列后请求也统统被阻塞住了
HTTP/2 多个请求复用一个TCP连接,一旦发生丢包,就会阻塞住所有的 HTTP 请求。
这都是基于 TCP 传输层的问题,所以 HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP!
UDP 发生是不管顺序,也不管丢包的,所以不会出现 HTTP/1.1 的队头阻塞 和 HTTP/2 的一个丢包全部重传问题。
大家都知道 UDP 是不可靠传输的,但基于 UDP 的 QUIC 协议 可以实现类似 TCP 的可靠性传输。
QUIC 有自己的一套机制可以保证传输的可靠性的。当某个流发生丢包时,只会阻塞这个流,其他流不会受到影响。
TLS3 升级成了最新的 1.3 版本,头部压缩算法也升级成了 QPack 。
HTTPS 要建立一个连接,要花费 6 次交互,先是建立三次握手,然后是 TLS/1.3 的三次握手。QUIC 直接把以往的 TCP 和 TLS/1.3 的 6 次交互合并成了 3 次,减少了交互次数。
所以, QUIC 是一个在 UDP 之上的伪 TCP + TLS + HTTP/2 的多路复用的协议。
我之前在虎牙实习的时候,在虎牙内部很多地方已经在慢慢的使用HTTP3.0了,可能在不久的未来,HTTP3.0会慢慢普及,但长路漫漫!
59 TCP粘包问题是什么?你会如何去解决它?
TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。
出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。
措施:
(1)对于发送方引起的粘包现象,用户可通过编程设置来避免,TCP提供了强制数据立即传送的操作指令push,TCP软件收到该操作指令后,就立即将本段数据发送出去,而不必等待发送缓冲区满;
(2)对于接收方引起的粘包,则可通过优化程序设计、精简接收进程工作量、提高接收进程优先级等措施,使其及时接收数据,从而尽量避免出现粘包现象;
(3)由接收方控制,将一包数据按结构字段,人为控制分多次接收,然后合并,通过这种手段来避免粘包。
60 可以解释一下RTO,RTT和超时重传分别是什么吗?
RTT(Round-Trip Time 往返时延)RTT 就是数据从网络一端传送到另一端所需的时间,也就是包的往返时间。
超时重传时间是以 RTO (Retransmission Timeout 超时重传时间)表示。
61 TCP第三次握手可以传输数据吗?
第三次握手的时候,是可以携带数据的。但是,第一次、第二次握手不可以携带数据
为什么这样呢?大家可以想一个问题,假如第一次握手可以携带数据的话,如果有人要恶意攻击服务器,那他每次都在第一次握手中的 SYN 报文中放入大量的数据。因为攻击者根本就不理服务器的接收、发送能力是否正常,然后疯狂着重复发 SYN 报文的话,这会让服务器花费很多时间、内存空间来接收这些报文。
也就是说,第一次握手不可以放数据,其中一个简单的原因就是会让服务器更加容易受到攻击了。而对于第三次的话,此时客户端已经处于 ESTABLISHED 状态。对于客户端来说,他已经建立起连接了,并且也已经知道服务器的接收、发送能力是正常的了,所以能携带数据也没啥毛病。
参考链接:https://yuanrengu.blog.csdn.net/article/details/102366854?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=1619590277244_00144&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

网络管理员面试题相关文章

版权声明