【面试突击】计算机网络面试实战(下)

发布时间:2024年01月16日

🌈🌈🌈🌈🌈🌈🌈🌈
欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术 的推送
发送 资料 可领取 深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景中间件系列笔记编程高频电子书

文章导读地址:点击查看文章导读!

感谢你的关注!

🍁🍁🍁🍁🍁🍁🍁🍁

Https 的工作原理

Http 的内容是明文传输的,铭文数据经过中间代理服务器、路由器、wifi 热点等多个物理节点,如果被劫持会导致传输内容完全暴露,因此需要对信息进行加密

Https 是一种通过计算机网络进行安全通信的传输协议,Https 经由 Http 进行通信,利用 SSL/TLS 来加密数据包,HTTPS 在内容传输的加密上使用的是 对称加密非对称加密 只作用在证书验证阶段

Https 的信任基于预先安装在操作系统中的证书颁发机构(CA)

那么通过 Https 进行通信的流程如下:

证书验证阶段

  1. 浏览器发起 Https 请求
  2. 服务端返回 Https 证书
  3. 客户端验证证书是否合法,如果不合法则提示告警

数据传输阶段

  1. 当证书验证合法后,在本地生成随机数
  2. 通过公钥加密随机数,并把加密后的随机数传输到服务端
  3. 服务端通过私钥对随机数进行解密
  4. 服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后传输

具体的一些细节可以了解一下,我也发现了一篇比较好的文章,可以看一下:彻底搞懂HTTPS的加密原理

为什么要网络分层?

网络分层可以简化复杂性,提高 模块化程度可维护性

分层之后,各个层次负责特定的功能,每一层不需要关心上层或下层的具体细节,如果需要修改,直接对某个层进行修改即可,不会影响到其他层,这种模块化设计可以使网络系统扩展性更强

并且在网络出现问题时,由于分层的设计,可以根据每一层的职责更容易地定位到问题所在的层次,而不需要了解整个系统

网络模型中各层都有哪些协议?

物理层和数据链路层比较偏向于底层,就不说了

网络层主要的协议有:

  • IP 协议:互联网协议(IP)是网络层的核心协议,负责将数据包从源地址传输到目的地址
  • ICMP 协议:互联网控制消息协议(ICMP)用于在网络设备之间传递控制消息,如错误报告、网络不可达、重定向等。它帮助网络设备诊断和处理网络问题
  • IGMP 协议:互联网组管理协议(IGMP)用于在主机和相邻的路由器之间建立多播组成员关系。它允许主机加入或离开多播组,以便接收特定类型的数据包
  • OSPF 协议:开放最短路径优先(OSPF)是一种内部网关协议(IGP),用于在自治系统(AS)内部的路由器之间交换路由信息,以确定最短路径

传输层主要的协议有:

  • TCP 协议:传输控制协议(TCP)提供了一种可靠的、面向连接的服务。它确保数据按顺序到达目的地,并且没有丢失或损坏
  • UDP 协议:用户数据报协议(UDP)提供了一种无连接、不可靠的服务。它比TCP更快,但不保证数据的完整性和顺序

会话层主要的协议有:

  • RPC(Remote Procedure Call):远程过程调用(RPC)允许程序在一个网络上的客户端请求另一个网络上的服务器执行特定的任务或操作
  • NCP 协议:网络控制协议(NCP)是早期网络协议,用于在客户端和服务器之间建立会话。它在现代网络中已经很少使用

表示层主要的协议有:

  • ASCII:美国信息交换标准代码(ASCII)是一种字符编码标准,用于表示文本数据
  • JPEG:联合图像专家组(JPEG)是一种用于压缩图像的格式,它提供了良好的图像质量和相对较小的文件大小
  • GIF:图形交换格式(GIF)是另一种图像格式,支持动画和透明背景

应用层:

  • FTP:文件传输协议(FTP)用于在网络上传输文件
  • Http:超文本传输协议(HTTP)用于网页的传输,是互联网上最常用的协议之一
  • SMTP:简单邮件传输协议(SMTP)用于发送电子邮件
  • SSH:安全外壳协议(SSH)提供了一种加密的网络服务,用于安全地访问远程计算机
  • DNS:域名系统(DNS)用于将人类可读的域名转换为IP地址,使得用户可以通过网址而不是IP地址来访问网站

三次握手

TCP 三次握手和四次挥手也是网络中比较常问的问题,因为两台机器之间需要通信就需要去建立 TCP 连接,建立 TCP 连接就是通过 TCP 三次握手建立的,通过四次挥手关闭 TCP 连接

TCP 三次握手和四次挥手的细节这里就不说了,之前写过一篇文章,TCP 三次握手和四次挥手

那么面试官可能会问,问什么一定要三次握手呢?

首先,简单来理解的话,通过三次握手,客户端和服务器端都可以证明自己的 接收发送 能力都是正常的,之后才可以正常通信

如果非要举出一个例子,在谢希仁版《计算机网络》中是这样说的,如果 client 发送的第一个 SYN 包并没有丢失,只是在网络中滞留,以致于延误到连接释放以后的某个时间才到达 server。本来这是一个早已失效的报文,但 server 收到此失效报文后,就误认为是 client 再次发出的一个新的连接,于是向 client 发出 SYN+ACK 包,如果不采用三次握手,只要 server 发出 SYN+ACK 包,就建立连接,会导致 client 没有发出建立连接的请求,因此不会理会 server 的 SYN+ACK 包,但是 server 却以为新的连接建立好了,并一直等待 client 发送数据,导致资源被浪费

那么为什么不四次握手呢?

因为三次握手后,建立正常通信就没有问题了,没有必要再继续握手,浪费网络资源

HTTP 是基于 TCP 还是 UDP 呢?

HTTP 协议在 HTTP/1.1 和 HTTP/2 版本都是 基于 TCP 协议 的,而 HTTP/3 是 基于 UDP 协议 传输的,可以根据浏览器查看 HTTP 协议到底是哪个版本的

F12 打开控制台,右键记得选择 Protocol,h2 则代表是 HTTP/2 版本的

在这里插入图片描述

HTTP/1 、HTTP/2 和 HTTP/3 的区别如下:

  • HTTP/1(1997 年推出) 有连接无法复用、队头阻塞、协议开销大和安全因素等多个缺陷
  • HTTP/2(2015 年推出) 通过多路复用、二进制流与 Header 压缩等技术,极大地提高了性能,但是还是存在一些问题
  • HTTP/3(2022 年发布标准) 抛弃 TCP 协议,以全新的视角重新设计 HTTP。其底层支撑是 QUIC 协议,该协议基于 UDP,有 UDP 特有的优势,同时它又取了 TCP 中的精华,实现了即快又可靠的协议

虽然 HTTP/3 版本出现了,但是我们通过浏览器发现,常用的版本还是 HTTP/1.1 和 HTTP/2,为什么呢?(历史原因,比较老的系统使用的还是 1.1 和 2 版本较多,不过目前版本 3 也在逐步推广)

在这里插入图片描述

文章来源:https://blog.csdn.net/qq_45260619/article/details/135621368
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。