哈喽大家好,我是chowley,QALog创始人,测试开发工程师
这次的测试八股系列专栏由我来主写,给大家带来亿点点硬货,今天是计网系列的第一篇,我总结了市面上主流的测试核心八股,废话少说直接开整!
下面是本期目录:
Q1:介绍一下OSI七层模型、每层的作用
从下往上:
-
物理层(Physical Layer):负责在物理媒介上透明的传输原始比特流,确保比特流能够在通信媒介上稳定、可靠地传输,而不对传输的数据进行任何形式的处理,主要关注数据的传输速率、电压等物理特性。
-
数据链路层(Data Link Layer):处理节点之间的数据帧传输,确保在通信实体之间可靠地传输数据。
它有两个特性:
(1)帧编码的目的是为了确保数据能够正确地在物理媒介上传输,并且接收端能够正确地解码和处理接收到的数据。
(2)误差纠正控制通过在数据帧中添加冗余信息(如校验位、奇偶校验等)来检测和纠正这些错误,从而提高数据传输的可靠性和准确性。 -
网络层(Network Layer):负责数据包的路由和转发,实现不同网络之间的通信,如 IP 协议就在这一层工作。
路由算法可以分为静态路由和动态路由两种类型:
(1)静态路由(Static Routing):管理员手动配置路由表,指定每个目标网络的下一跳路由器。这种方式适用于网络拓扑结构稳定的情况,但不适合大型或动态网络。
(2)动态路由(Dynamic Routing):路由器之间通过路由协议(如RIP、OSPF、BGP等)交换路由信息,根据网络状态动态调整路由表。动态路由能够自适应网络变化,适用于大型复杂网络。 -
传输层(Transport Layer):提供端到端的数据传输服务,负责数据的可靠传输和流量控制,如 TCP 协议。
-
会话层(Session Layer):负责建立、管理和终止会话,为应用程序之间的通信提供服务。保证了通信的可靠性和有效性,使得不同终端的程序之间能够进行有效的数据交换。
-
表示层(Presentation Layer):处理数据的表示格式,确保一个系统的应用层数据可以被另一个系统理解。涉及到编解码、加密解密、压缩解压缩等。
-
应用层(Application Layer):为用户提供应用服务,是用户直接接触的网络层,常见的应用有 HTTP、FTP、SMTP 等。
OSI层级按照功能划分,每一层都有特定的任务和责任,层级之间协同工作以实现用户数据的传输和通信。
Q2:讲一下计网中常用的协议有哪些?
我以市面上主流的五层模型来讲解:
-
物理层:主要协议有 RS-232、RS-485、Ethernet 等,用于在物理媒介上传输比特流。
-
数据链路层:主要协议有以太网(Ethernet)、PPP(Point-to-Point Protocol)、HDLC(High-Level Data Link Control)等,用于在直接相连的节点之间传输数据帧。
-
网络层:主要协议有 IP(Internet Protocol)、ICMP(Internet Control Message Protocol)、ARP(Address Resolution Protocol)等,用于在不同网络之间传输数据包,并处理数据包的路由和转发。
-
传输层:主要协议有 TCP(Transmission Control Protocol)、UDP(User Datagram Protocol)等,用于在端到端的通信中提供可靠的数据传输服务。
-
应用层:主要协议有 HTTP(HyperText Transfer Protocol)、FTP(File Transfer Protocol)、SMTP(Simple Mail Transfer Protocol)等,用于不同应用之间的数据交换和通信。
这些协议在计算机网络中起着至关重要的作用,通过协议规定了数据的传输格式、通信规则和传输方式,保证了网络通信的正常进行。
Q3:TCP/IP模型呢?
TCP/IP 模型是一个将网络通信划分为四个层次的参考模型,与 OSI 模型类似,但具有更简单的结构。它包括以下四层:
-
应用层:提供用户应用程序间的通信。包括 HTTP、FTP、SMTP 等协议。
-
传输层:负责端到端的通信。包括 TCP 和 UDP 协议。
-
网络层:负责将数据包从源主机传输到目的主机。包括 IP、ICMP、ARP 等协议。
-
链路层:负责将数据帧从一个节点传输到相邻节点。包括以太网、PPP 等协议。
TCP/IP 模型中的每一层都有特定的功能和责任,协同工作以实现网络通信。与 OSI 模型不同,TCP/IP 模型将会话层、表示层和物理层的功能合并到了应用层和链路层中,使得模型结构更简单、更实用。
Q4:说一下HTTP和HTTPS的区别
HTTP(HyperText Transfer Protocol)和 HTTPS(HTTP Secure)是用于传输数据的两种协议,它们之间的主要区别在于安全性和加密方式:
-
安全性:HTTP 是一种不安全的协议,数据传输是明文的,容易被窃听和篡改。而 HTTPS 则通过 SSL/TLS 协议加密数据传输,运行在TCP上,提供了更高的安全性,能够有效防止数据被窃听和篡改。
-
加密方式:HTTPS 使用 SSL(Secure Sockets Layer)或 TLS(Transport Layer Security)协议来加密数据传输。SSL/TLS 使用公钥加密和私钥解密的方式,保证数据在传输过程中的机密性和完整性。
-
端口号:HTTP 默认使用端口 80 进行通信,而 HTTPS 默认使用端口 443。
-
URL 形式:HTTP 的 URL 以 "http://" 开头,而 HTTPS 的 URL 以 "https://" 开头。
总的来说,HTTPS 比 HTTP 更安全,适用于对数据传输安全性要求较高的场景,如网上支付、用户登录等。
Q5:介绍一下HTTP状态码
HTTP 状态码是服务器向客户端返回的一个三位数字代码,用于表示服务器对请求的处理结果。常见的 HTTP 状态码有以下几类:
-
1xx(信息性状态码):表示请求已被接收,继续处理。
-
2xx(成功状态码):表示请求已成功被服务器接收、理解、并接受。
-
200 OK:请求成功。常用于 GET 和 POST 请求。
-
-
3xx(重定向状态码):表示需要客户端进一步的操作才能完成请求。
-
301 Moved Permanently:永久重定向,请求的资源已被永久移到新位置。
-
302 Found:临时重定向,请求的资源已被临时移到新位置。
-
-
4xx(客户端错误状态码):表示客户端发出的请求有错误。
-
400 Bad Request:客户端请求存在问题(如请求方法错误、参数不合理等),服务器无法理解。
-
401 Unauthorized:请求要求用户的身份认证,通过后才能访问资源。
-
403 Forbidden:服务器理解客户端的请求,但是拒绝执行此请求。
-
404 Not Found:服务器无法找到请求的资源(或不存在)。
-
-
5xx(服务器错误状态码):表示服务器在处理请求时发生了错误。
-
500 Internal Server Error:服务器遇到了一个未曾预料的状况,导致无法完成对请求的处理。
-
503 Service Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常(当前很忙)。
-
熟悉HTTP 状态码可以帮助测试人员,快速定位和解决网络请求中出现的问题,对于调试和排查网络请求错误非常有用。
插播一条广告:
我们正在组建测试开发方向的求职交流社区,如果您对软件质量管理、团队效率提高内容感兴趣,可以在「QALog公众号-菜单栏-社区内推-交流群」,加入了解。
广告结束,继续拷打!
Q6:结合网络模型,说一下URL的请求过程
URL(Uniform Resource Locator)是用于定位和访问互联网资源的地址,其请求过程可以结合网络模型(比如 TCP/IP 模型)来解释。
一个简单的 URL 请求过程:
-
应用层:用户在浏览器中输入 URL,浏览器根据 URL 中的协议(比如 HTTP、HTTPS)选择相应的传输协议。
-
传输层:浏览器通过传输层协议(如 TCP)与服务器建立连接。TCP 协议负责将数据可靠地传输到目标服务器。
-
网络层:根据 URL 中的主机名(如 baidu.com),浏览器通过DNS 解析获取服务器的 IP 地址,并使用 IP 协议找到目标服务器。
-
数据链路层:数据被封装成数据帧,在物理媒介上传输。
-
物理层:数据在物理媒介上传输,比如通过以太网、Wi-Fi 等传输方式。
-
服务器端:服务器接收到请求后,根据 URL 中的路径和其他信息,处理请求并返回相应的数据。
-
反向传输:服务器将响应数据封装成数据包,并通过网络层、传输层传输到客户端。
-
客户端:客户端接收到响应数据后,根据协议解析数据,并在应用层上显示给用户。
这样,通过网络模型的各层协议,浏览器和服务器之间就完成了一次 URL 请求和响应的过程。
Q7:简单讲一下HTTP不同版本之间的区别和各自的特点
HTTP的版本包括 HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2 和 HTTP/3,它们之间的区别主要体现在性能、功能和协议特性上:
-
HTTP/0.9:
最早的版本,只支持 GET 方法,没有头部信息,服务器收到请求后返回 HTML 格式的文档。
没有状态管理机制,每个请求都是独立的,无法维护客户端的状态。 -
HTTP/1.0:
引入了头部信息,支持更多的请求方法,如 POST、PUT、DELETE 等。
支持状态码、缓存控制等功能,使得通信更加可靠和灵活。 -
HTTP/1.1:
引入了持久连接(Persistent Connections),减少了建立和关闭连接的开销,提高了性能。
引入了管道化(Pipeline),允许客户端发送多个请求,而不必等待响应,提高了并发性能。
引入了 Host 头部字段,支持在同一个 IP 地址上托管多个域名。 -
HTTP/2:
采用了二进制协议,取代了 HTTP/1.x 中的文本协议,减少了数据传输的开销。
引入了多路复用(Multiplexing),允许在同一个连接上并行发送多个请求和响应,提高了并发性能。
支持头部压缩(Header Compression),减少了头部信息的传输大小,提高了性能。 -
HTTP/3:
基于 UDP 协议,通过 QUIC 协议实现,以减少 TCP 连接的握手时间。
支持 0-RTT(Zero Round Trip Time Resumption),在一定条件下可以实现零往返时间连接。
引入了拥塞控制、丢包恢复等机制,以提高传输的稳定性和可靠性。
总的来说,随着 HTTP 版本的不断更新,HTTP 协议在性能、功能和安全性方面得到了不断的改进和提升,使得 Web 应用能够更加高效、快速地进行通信和数据传输。
Q8:HTTP有哪些请求方法?介绍一下它们各自的作用
HTTP 协议常见的请求方法包括以下几种:
-
GET:请求获取指定资源的表示形式。使用 GET 方法应该只用于获取数据,而不应该对服务器产生其他影响。例如,请求一个网页、图片或其他资源。
-
POST:向指定资源提交数据,请求服务器进行处理。POST 请求可能会导致新的资源的创建或已有资源的修改。常用于提交表单数据,如用户登录、注册等。
-
PUT:请求服务器存储一个资源,并用请求的数据替代指定的资源。如果指定的资源不存在,则创建一个新的资源。
-
DELETE:请求服务器删除指定的资源。
-
HEAD:类似于 GET 请求,但服务器只返回头部信息,不返回实体的主体部分。用于获取资源的元信息,如资源的大小、类型等,而不获取实际的内容。
-
OPTIONS:请求获取服务器支持的 HTTP 方法。客户端可以通过该方法来查询服务器支持的方法,用于跨域请求时的预检请求。
-
TRACE:回显服务器收到的请求,主要用于测试或诊断。
-
CONNECT:建立一个到服务器的隧道,用于代理服务器。
Q9:GET和POST有啥区别?
GET 和 POST 是 HTTP 协议中最常用的两种请求方法,它们之间的主要区别如下:
-
数据传输方式:
GET:通过 URL 参数传输数据,数据会附加在 URL 后面,以
?key1=value1&key2=value2
的形式出现。
POST:通过请求体传输数据,数据不会附加在 URL 中,而是作为请求的一部分发送。 -
数据长度限制:
GET:由于数据是作为 URL 参数传输的,受浏览器和服务器对 URL 长度的限制,传输的数据量较小,一般不超过 2048 个字符。
POST:由于数据是作为请求体传输的,通常没有长度限制,可以传输大量数据。 -
安全性:
GET:因为数据是以明文形式出现在 URL 中,所以不适合传输敏感信息,如密码等。
POST:由于数据是作为请求体传输的,相对于 GET 更安全,适合传输敏感信息。 -
缓存处理:
GET:请求会被浏览器缓存,可以通过浏览器的历史记录来访问。
POST:请求不会被浏览器缓存,需要重新提交数据。 -
幂等性:
GET:请求是幂等的,多次请求相同的 URL 会得到相同的结果,不会对服务器产生影响。
POST:请求不是幂等的,多次请求相同的 URL 可能会对服务器产生不同的影响,比如重复提交订单。
GET 适合用于获取数据,POST 适合用于提交数据。在选择使用哪种方法时,应根据具体的需求和数据传输方式来决定。
Q10:幂等性是啥意思?怎么保证一个按钮的幂等性?
幂等性是指对同一操作的多次执行所产生的影响相同,即使操作被执行多次也不会产生额外的影响。在 HTTP 协议中,幂等性指的是对同一个 URL 的多次请求所产生的结果是相同的。
要保证一个按钮的幂等性,可以采取以下措施:
-
GET 请求幂等性:对于纯粹的数据获取操作,如查看页面、检索数据等,可以使用 GET 请求,因为 GET 请求是幂等的,多次请求同一个 URL 不会产生额外的影响。
-
使用唯一标识符(UID):对于需要修改或删除数据的操作,可以在请求中包含一个唯一标识符(如资源的 ID),服务器根据这个标识符来识别要修改或删除的资源,保证多次请求不会产生冲突。
-
使用重复提交检测:在客户端或服务器端进行重复提交检测,防止同一个请求被多次提交。
-
使用事务:在数据库操作中,可以使用事务来保证操作的原子性,即使操作被执行多次也不会产生额外的影响。
总结
本篇内容我主要串联了计算机网络体系、每层的作用和常用协议、以及HTTP的相关重要知识点等内容,如果您觉得写得还不错,欢迎关注《QALog校招测试八股—计网篇》系列,后面会持续更新!
以上就是本文的全部内容,如有问题可留言讨论或分享给您的朋友一起学习!
我们正在组建测试开发方向的求职交流社区,如果您对软件质量管理、团队效率提高内容感兴趣,可以在「QALog公众号-菜单栏-社区内推-交流群」,加入了解。
欢迎点赞、评论、收藏,it's important for me.
Searching for QALog