面试常问网络协议

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。面试常问网络协议,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

字节一面中,被问http和https的区别以及加密流程,ARP协议以及寻址过程,当时也都回答了,小问题还是很多。小米的面试中,也被问到ICMP协议的流程。大厂对于网络协议方面的拷打还是比较严格的,值得引起关注。直接总结以防下次被狂问。

HTTP 1.1 / HTTPS / HTTP 2.0 / HTTP 3.0

HTTP 1.1
优点:1.简单,其基本的报文格式为header+body。
2.其协议里的各类请求方法、状态码等各组成部分没有被固定,可自定义扩展。例如HTTPS就是在HTTP层和TCP层之间增加了SSL/TLS层。
缺点:1.无状态,服务器不会去记录HTTP的状态。
2.明文传输,信息容易被窃取。
3.请求/响应头部未经压缩就发送,只能压缩Body部分。
4.请求只能从客户端开始,服务端只能被动响应。
特点:1.基于TCP/IP,使用了[请求-应答]的通信模式。
2.长连接,持久连接,相较于HTTP 1.0的短链接,此方式减少了TCP连接的重复性。
3.管道网络传输,一个TCP连接中,客户端可以发送多个请求,第一个请求出去了,不等其返回就可以发送第二个。但是服务器必须按照接受请求的顺序发送对这些管道化请求的响应。
4.解决了请求的队头阻塞,但是没有解决响应的队头阻塞。

HTTPS
HTTPS在HTTP层与TCP层之间加入SSL/TLS层。
利用混合加密的方式实现信息机密性,利用摘要算法实现完整性,并将服务器公钥加入到数字证书中。
大致流程为:客户端向服务器索要并验证服务器的公钥,双方协商生产会话密钥,双方采用会话密钥进行加密通信。

TLS四次握手阶段

1.客户端向服务器发起加密请求,客户端生成随机数(Random1)发送给服务器。
2.服务器收到请求后,向客户端响应,同时生成随机数(Random2)连同服务器数字证书发送给客户端。
3.客户端收到回应,会验证数字证书真实性,若没有问题,从数字证书中取出服务器公钥,用此公钥加密报文,并向服务器发送以下信息:一个随机数(key),客户端结束通知。此时,客户端与服务端都拥有了三个随机数,各自生成本次通信的会话密钥。
4.服务端收到客户端发送的随机数(key)后,计算出本次通信的会话密钥,然后向客户端发送信息:服务端握手结束通知。接下来,双方进入加密通信。

HTTP 2的优化
HTTP 2协议基于HTTPS,相较于HTTP 1.1,其性能提升集中于以下几个方面:
1.头部压缩
如果同时发出多个请求,或许头部相似,那么协议会消除重复部分。例如HPACK算法。
2.二进制格式
HTTP 2不再像HTTP 1.1中纯文本形式的报文,而是采用二进制格式,头部信息与数据体都是二进制,统称为帧:头信息帧和数据帧。
3.并发传输
引入了Stream概念,多个Stream复用一条TCP连接,一个Stream包含多个Message,Message对应HTTP 1中的请求或者响应。Message中包含一个或者多个Frame,Frame是HTTP 2最小单位,以二进制压缩格式存放HTTP 1中的内容。
4.服务器推送
一定程度改善了[请求-应答]工作模式,服务器可以主动向客户端发送信息,双方都可以建立Stream。

缺点:
HTTP 2基于TCP协议传输数据,TCP是字节流协议,必须保证收到字节数据是完整且连续,只要一个字节的数据没有到达,那么内核就不会将缓存区的数据返回给HTTP应用。那么数据就只能存在于内核缓存区中。因此,HTTP 2还是存在队头阻塞问题。

HTTP 3的优化
HTTP 3把HTTP下层的TCP协议换成UDP,UDP发送不管顺序,也不管丢包,基于UDP的QUIC协议可以实现类似TCP的可靠传输。
QUIC特点:
1.无队头阻塞
QUIC 协议也有类似 HTTP/2 Stream 与多路复用的概念,也是可以在同一条连接上并发传输多个 Stream。QUIC 有自己的一套机制可以保证传输的可靠性的。当某个流发生丢包时,只会阻塞这个流,其他流不会受到影响,不存在队头阻塞问题。
2.更快连接建立
在HTTP 2中TCP和TLS是分层的,需要分批次握手,先TCP握手,再TLS握手。但是QUIC内部包含了TLS,仅需1个RTT就可以同时完成建立连接与密钥协商。
3.连接迁移
基于TCP的HTTP协议,通过四元组确定一条TCP连接,当移动设备的网络从 4G 切换到 WIFI 时,意味着 IP 地址变化了,那么就必须要断开连接,然后重新建立连接。而QUIC通过连接ID标记通信的两个端点,达到连接迁移功能。

DNS

查询服务器域名对应的IP地址。DNS中域名通过句号来分隔,越靠右的位置层级越高。域名的层级关系类似一个树状结构:根DNS服务器(.)–>顶级域DNS服务器(.com)–>权威DNS服务器(xxx.com)。
每次域名解析会先查询缓存,首先查询的是浏览器,其次查询操作系统,再去hosts文件查询,若都没有,再去本地DNS服务器查询。

ARP

地址解析协议,通过目的IP地址得到目的MAC地址。ARP协议在以太网中以广播形式,获得MAC地址。考虑每次都广播获取,比较麻烦。操作系统会将查询结果放到ARP缓存的内存空间中。每次发包之前,先查询ARP缓存,若不存在目的MAC地址,则发送ARP广播查询。

ICMP

告知网络包传送过程中产生的错误以及各种控制信息。像常用的命令ping等都体现了ICMP。
ping命令的作用以及流程:
其作用为查询某个网络节点的连通性。通过返回的差错信息来判断哪个环节出现问题。
1.向目的服务器发送回显请求
向目的服务器上执行ping命令,主机会构建一个 ICMP 回显请求消息数据包。
2. 目的服务器发送回显应答
目的服务器收到回显请求数据包后,会向发送方发送回显请求。
3.发送方服务器显示相关数据
如果发送方服务器可以接收到回显应答数据包,可以认为目的服务器正常工作。

主要来源:小林coding

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/184540.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!