计算机网络面试知识点
计算机网络面试知识点
Juns计算机网络
OSI 七层模型
TCP 和 UDP 的区别
- tcp 面向连接,发送数据之前必须两端连接,建立可靠连接,仅支持点对点,面向字节流,有拥塞控制
- udp 无连接,不需要三次握手,想法数据直接发,能单播,多播,广播,面向报文,不可靠,高效
gpt
- 连接导向 vs 无连接:
- TCP 是面向连接的协议,建立连接后才能传输数据,数据传输前需要进行三次握手建立连接。
- UDP 则是无连接的协议,不需要建立连接即可直接传输数据。
- 可靠性:
- TCP 提供可靠的数据传输,通过 TCP 建立的连接可以保证数据的有序性、不丢失、不重复,同时还提供拥塞控制和流量控制机制。
- UDP 则没有可靠性保证,数据传输时可能会发生丢失、重复等情况,但是由于没有连接建立和拥塞控制等机制,UDP 传输速度较快。
- 基于字节流 vs 基于数据包:
- TCP 是基于字节流的协议,应用层传输的数据被分割成 TCP 报文段进行传输,而 TCP 对于传输数据的大小并没有限制,能够保证数据的可靠性和有序性。
- UDP 则是基于数据包的协议,应用层传输的数据被封装成 UDP 数据包进行传输,每个 UDP 数据包的大小有限制,大数据量的数据传输需要进行分包。
- 适用场景:
- TCP 适合要求数据传输可靠、不允许数据丢失和重复的场景,如文件传输、电子邮件等;
- UDP 适合对数据传输速度要求较高、对数据可靠性要求不高的场景,如视频、音频等。
总之,TCP 是一种面向连接、可靠的、基于字节流的协议,UDP 是一种无连接、不可靠、基于数据包的协议。
输入 url 地址到浏览器完成渲染的过程
这个问题属于老生常谈的经典问题了 下面给出面试简单版作答
- 浏览器地址栏输入 URL 并回车
- 浏览器查找当前 URL 是否存在缓存,并比较缓存是否过期
- DNS 解析 URL 对应的 IP
- 根据 IP 建立 TCP 连接(三次握手)
- 发送 http 请求
- 服务器处理请求,浏览器接受 HTTP 响应
- 浏览器解析并渲染页面
- 关闭 TCP 连接(四次挥手)
史上最详细的经典面试题 从输入 URL 到看到页面发生了什么?
【offer 收割机之面试必备】一篇非常全面的 从 URL 输入到页面展现的全过程 精华梳理 - 掘金 (juejin.cn)
http1.1 和 http2 的区别
HTTP/1.1 和 HTTP/2 是 HTTP 协议的两个主要版本。下面是它们之间的一些主要区别:
- 多路复用:
- HTTP/1.1 在同一时间只能传输一个请求/响应,因此需要建立多个 TCP 连接来处理多个请求/响应。
- HTTP/2 通过“多路复用”技术,可以在一个连接上同时传输多个请求/响应。
- 头部压缩:
- HTTP/2 使用头部压缩技术,减少了 HTTP 头部的大小,从而减少了带宽的使用和延迟。
- 服务器推送:
- HTTP/2 允许服务器在客户端请求之前主动推送资源,这样可以加速页面加载。
- 二进制分帧:
- HTTP/2 在应用层和传输层之间引入了一个二进制分帧层,将请求和响应分成多个帧,每个帧都有自己的帧头,可以在一个连接中同时传输多个帧,从而实现多路复用。
总的来说,HTTP/2 相比 HTTP/1.1 在性能方面有了很大的提升,特别是对于复杂的 Web 应用程序和高负载的网站,HTTP/2 可以显著减少延迟和带宽消耗,提高用户体验。
三次握手
第一次握手:客户端向服务器发送 SYN,seq
- SYN 报文
- 客户端初始化随机序列号(seq)
第二次握手:服务器收到请求后,向客户端发送 SYN,ACK,seq,ack
- SYN 报文,ACK 报文
- 服务端的初始化随机序列号 seq
- ack(=客户端发来的序列号+1,表示收到了)
第三次握手:客户端收到了服务器的确认应答后,向服务器发送 ACK,seq,ack
- 确认应答 ACK 报文
- seq,值为二次握手客户端发来的 ack 的值
- ack,值为服务端的序列号+1,表示收到了
四次挥手
服务端和客户端都可以发起
第一次挥手:A 发起回收请求,发送 FIN,seq
第二次挥手:B 收到了 FIN,返回 ACK,ack=seq+1
第三次挥手:B 发送 FIN
**第四次挥手:**A 收到了 FIN,发送 ACK
http 和 https 的区别
HTTP:超文本传输协议 HTTPS:在 HTTP 下加入SSL 协议,即安全版的 HTTP
HTTPS 的 SSL 加密是在传输层实现的
HTTPS 协议的主要作用:建立一个信息安全通道,来确保数组的传输,确保网站的真实性。
- 加密: HTTPS 是 HTTP 协议的更加安全的版本,通过使用 SSL/TLS 进行加密传输的数据;
- 连接方式: HTTP(三次握手)和 HTTPS (三次握手+数字证书)连接方式不一样;
- 端口: HTTP 默认的端口是 80 和 HTTPS 默认端口是 443
开销:HTTPS 协议需要到 CA 申请证书,一般免费证书很少,需要交费;
资源消耗:HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 ssl 加密传输协议,需要消耗更多的 CPU 和内存资源;
端口不同:HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443;
安全性:HTTP 的连接很简单,是无状态的;HTTPS 协议是由 TSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。
https 的优缺点
- 优点:
- 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
- HTTPS 协议是由 SSL + HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性;
- HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
- 缺点:
HTTPS 协议握手阶段比较费时,会使页面的加载时间延长近 50%,增加 10% 到 20% 的耗电;
HTTPS 连接缓存不如 HTTP 高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;
SSL 证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用;
SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗;
HTTPS 协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。
https 加密过程
https 通信的过程氛围两个阶段:握手和数据传输
握手阶段:
客户端向服务器发送 SSL/TLS 版本,加密算法列表,随机数等信息
服务器返回整数,写上加密算法,生成随机数等,并且通过数字签名确保证书的正确
客户端更具证书验证服务器身份,生成随机数,用公钥加密传输数据
服务器用私钥解密拿到随机数
然后生成会话密钥
客户端使用 https url 访问服务器,则要求 web 服务器建立 ssl 连接
web 服务器收到客户端请求之后,会将网站的证书传输给客户端
客户端和服务器协商 SSL 连接的安全等级
通过双方确立的安全等级建立会话密钥,然后通过网站的公钥加密会话密钥,并传送给网站
web 服务器通过自己的私钥解密出会话密钥
web 服务器通过会话密钥与客户端之间通信
- 客户端发起 HTTPS 请求,连接到服务器的 443 端口。
- 服务器将自己的数字证书(包含公钥)发送给客户端。
- 客户端收到数字证书后,验证证书的合法性,包括验证证书的颁发机构和有效期。
- 客户端生成一个随机的对称加密密钥,并使用服务器的公钥对其进行加密,发送给服务器。
- 服务器使用自己的私钥解密客户端发送的密钥,获取到对称加密密钥。
- 服务器和客户端都拥有了相同的对称加密密钥,之后的通信将使用该密钥进行加密和解密。
http 状态码
1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。 平时遇到比较常见的状态码有:200, 204, 301, 302, 304, 400, 401, 403, 404, 422, 500
常见状态码区别
200 成功
请求成功,通常服务器提供了需要的资源。
204 无内容
服务器成功处理了请求,但没有返回任何内容。
301 永久移动
请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 临时移动
服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
304 未修改
自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
400 错误请求
服务器不理解请求的语法。
401 未授权
请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403 禁止
服务器拒绝请求。
404 未找到
服务器找不到请求的网页。
422 无法处理
请求格式正确,但是由于含有语义错误,无法响应
500 服务器内部错误
服务器遇到错误,无法完成请求。
WebSocket 建立过程
- 客户端发送一个 HTTP 请求,其中包含 Upgrade 头部,指定要升级的协议为 WebSocket。
- 服务器收到请求后,进行协议升级的处理,验证是否支持 WebSocket 协议。
- 如果服务器支持 WebSocket 协议,它将返回一个 HTTP 响应,其中包含 Upgrade 头部,表示同意升级为 WebSocket 协议。
- 客户端收到服务器的响应后,也会发送一个 HTTP 响应,表示同意升级为 WebSocket 协议。
- 客户端和服务器之间建立了 WebSocket 连接,后续的通信将使用 WebSocket 协议进行。