接口测试-计算机网络基础扫盲
一、小白学习接口测试基础大纲
(1)计算机网络基础
1. 熟悉常见的网络协议 (前文已经初步学习了解过)
2. 网络模型
OSI七层模型,TCP/IP四层模型(这篇文章将会简要的介绍,下面会在JavaEE初阶文章中详细介绍)
3. IP地址和端口
IP地址:用于标识网络中的设备
端口号:用于区分同一设备上不同的应用程序或服务
在接口测试中需要通过IP地址和端口号定位接口和服务(这篇文章也会介绍,后续JavaEE初阶文章也会提到)
(2)接口基础
1. 接口类型
RESTful API 、SOAP 接口
2. 接口文档
阅读和理解接口文档,文档包含(接口URL,请求方法GET...,请求参数,响应参数,返回状态码)
3. 请求和响应
掌握接口请求和响应的基本概念(请求头,请求体,响应头,响应体的内容和作用)
(3)编程语言基础
1. python
基本语法,数据类型,控制结构,函数和类的概念,常用的第三方库(requests库用于发送HTTP请求,JSON库用于处理JSON数据)
2. Java
面向对象编程,异常处理,输入输出流,常用的HTTP客户端库(比如 HttpClient),websocket网络编程
(4)数据库基础
1. 数据库类型
关系型数据库:(MySQL,Oracle,SQL Server )以表格形式粗存数据,具有严格的结构和关系
非关系型数据库:(MongoDB,Redis)以文档,键值对等形式存储数据,具有灵活的结构和高可扩展性
2. SQL语句
在接口测试中,经常需要验证接口对数据库的影响。掌握CRUD(哈哈)
(5)测试工具和框架
Postman,单元测试的TestNG,Junit,此外Jmeter也可以用来进行接口测试
(6)测试用例和缺陷管理
这部分在学习完工具框架后进行学习
二、TCP/IP 四层模型
1. 网络接口层(Network Interface Layer)
- 功能:网络接口层也被称为链路层,它负责将网络层的数据包封装成适合在物理网络中传输的帧,并通过物理介质(如网线、无线信号等)进行传输。同时,它还负责接收来自物理网络的帧,并将其解封装为网络层的数据包。
- 包含内容:该层涵盖了物理网络的各种技术和协议,如以太网、Wi-Fi、令牌环网等。不同的物理网络可能有不同的帧格式和传输规则,网络接口层需要根据具体的物理网络进行适配。
- 示例:在以太网中,网络接口层会在网络层数据包的基础上添加以太网帧头和帧尾,其中帧头包含了源 MAC 地址、目的 MAC 地址和帧类型等信息,帧尾包含了校验信息,用于检测数据在传输过程中是否发生错误。
以太网帧头在网络传输中的意义
局域网内设备通信
在局域网环境中,以太网帧头使得不同设备之间能够进行直接的通信。同一局域网内的主机、交换机等设备可以通过 MAC 地址相互识别和通信。例如,当一台计算机要向同一局域网内的另一台计算机发送文件时,它会在数据前面加上以太网帧头,填写对方的 MAC 地址,然后将帧发送到网络中。交换机根据帧头中的目的 MAC 地址将帧转发到相应的端口,从而实现数据的传输。
跨网络通信中的作用(去找本局域网的网关)
当主机要与其他网络中的设备通信时,数据需要通过网关进行转发。主机在发送数据时,会将数据封装成以太网帧,并在帧头中填写网关的 MAC 地址。数据到达网关后,网关会根据帧头中的信息进行处理,然后将数据转发到目标网络。在目标网络中,数据同样以以太网帧的形式传输,通过帧头中的目的 MAC 地址找到最终的接收设备。
网络设备识别与转发(交换机 网桥)
网络中的各种设备,如交换机、网桥等,都是基于以太网帧头中的 MAC 地址进行数据转发和过滤的。交换机通过学习 MAC 地址和端口的映射关系,能够快速准确地将帧转发到正确的端口。因此,以太网帧头是网络设备正常工作的基础,确保了数据在网络中的高效传输。
2. 网络层(Network Layer)
- 功能:网络层主要负责将数据包从源主机传输到目的主机,它解决了不同网络之间的路由问题。网络层会根据数据包的目的 IP 地址,通过路由算法选择最佳的传输路径,并将数据包转发到下一个节点。
- 主要协议:网络层的核心协议是互联网协议(IP),包括 IPv4 和 IPv6。IP 协议定义了数据包的格式和寻址方式,使得数据包能够在全球范围内进行传输。此外,网络层还包括一些辅助协议,如互联网控制报文协议(ICMP),用于在网络设备之间传递控制信息和错误报告。
- 示例:当你在浏览器中输入一个网站的域名时,计算机首先会将域名解析为对应的 IP 地址,然后网络层会根据这个 IP 地址封装数据包,并通过路由器将数据包转发到目标网站所在的服务器。
3. 传输层(Transport Layer)
- 功能:传输层负责为应用程序提供端到端的通信服务,它确保数据在源主机和目的主机之间的可靠传输。传输层会将应用层的数据进行分段,并为每个分段添加头部信息,包括源端口号、目的端口号、序列号等,以便在目的主机上进行重组和排序。
- 主要协议:传输层有两个重要的协议,即传输控制协议(TCP)和用户数据报协议(UDP)。TCP 是一种面向连接的、可靠的传输协议,它通过三次握手建立连接、四次挥手关闭连接,并使用确认机制、重传机制等保证数据的可靠传输。UDP 是一种无连接的、不可靠的传输协议,它不保证数据的可靠到达,但具有传输速度快、开销小的特点,适用于对实时性要求较高的应用,如音频、视频流等。
- 示例:当你使用浏览器访问一个网页时,浏览器和服务器之间通常会使用 TCP 协议建立连接,确保网页数据能够完整、准确地传输到你的浏览器中。而在一些在线游戏中,可能会使用 UDP 协议来传输游戏数据,以减少延迟,提高游戏的流畅性。
4. 应用层(Application Layer)
- 功能:应用层是用户直接接触的一层,它为用户提供各种网络应用服务。应用层的协议定义了应用程序之间的通信规则和数据格式,使得不同的应用程序能够在网络上进行交互。
- 常见协议:应用层包含了众多的协议,如超文本传输协议(HTTP)、文件传输协议(FTP)、简单邮件传输协议(SMTP)、邮局协议(POP3)、域名系统(DNS)等。HTTP 用于在 Web 浏览器和 Web 服务器之间传输网页数据;FTP 用于文件的上传和下载;SMTP 和 POP3 用于电子邮件的发送和接收;DNS 用于将域名解析为对应的 IP 地址。
- 示例:当你在浏览器中输入一个网址并按下回车键时,浏览器会使用 HTTP 协议向对应的 Web 服务器发送请求,服务器接收到请求后,会使用 HTTP 协议将网页数据返回给浏览器,浏览器再将网页内容显示在屏幕上。
三、数据在网络拓扑中是如何传输的
step 1:数据封装 从应用层到数据链路层
step 2:在网络拓扑中传输
- 局域网内传输
- 交换机转发:在局域网中,数据帧首先到达连接源设备的交换机。交换机根据帧头中的目的 MAC 地址,查找其内部的 MAC 地址和端口映射表,将数据帧转发到对应的端口。如果映射表中没有该目的 MAC 地址的记录,交换机则会向除接收端口外的所有端口广播该数据帧。当目的设备响应后,交换机会学习到该目的设备的 MAC 地址和对应的端口,并更新 MAC 地址表。
- 设备接收:目的设备接收到数据帧后,会检查帧头中的目的 MAC 地址是否与自己的 MAC 地址匹配。如果匹配,则接收该数据帧,并去掉帧头和帧尾,将 IP 数据包传递给网络层进行处理。(在这里先是向上来到路由器的网络层然后再向下来到物理层 1 2 3 2 1)
- 跨网络传输
- 路由器转发:当数据需要传输到不同的网络时,会经过路由器。路由器根据 IP 数据包中的目的 IP 地址,查找其路由表,确定最佳的传输路径,并将数据包转发到下一个网络节点。路由表记录了网络地址和对应的下一跳地址信息。
- 网关作用:网关是不同网络之间的连接点,它可以实现不同协议之间的转换和数据转发。例如,当数据从局域网传输到广域网时,网关会将局域网的数据包转换为适合广域网传输的格式,并转发到广域网中。
step 3 : 数据解封装 从数据链路层到应用层。目的设备的网络接口卡(NIC)接收到数据帧后,检查帧尾的校验信息,若校验无误,则去掉帧头和帧尾,将 IP 数据包传递给网络层。
四、物理端口和逻辑端口
物理端口
- 概念:路由器的物理端口是路由器上实际存在的接口,用于连接其他网络设备,如计算机、交换机、调制解调器等,通过这些端口实现不同网络之间的物理连接和数据传输。
- 常见类型
- 以太网端口:这是最常见的物理端口类型,通常用于连接局域网中的设备,如计算机、交换机等。以太网端口又可分为百兆端口、千兆端口甚至万兆端口,端口速率决定了数据传输的速度。例如,家庭路由器上一般会有多个以太网端口,用户可以使用网线将电脑连接到这些端口,实现上网功能。(这个口对局域网内 对内)
- 广域网(WAN)端口:用于连接外部网络,如互联网服务提供商(ISP)的网络。通过 WAN 端口,路由器可以将局域网内的设备连接到互联网。例如,将调制解调器(如 ADSL 调制解调器、光纤猫等)通过网线连接到路由器的 WAN 端口,就可以让局域网内的设备访问互联网。(这个口出来是走到大马路上了 对外进入广域网传输)
- 其他端口:一些专业路由器还可能具备其他类型的端口,如串口,可用于连接特定的网络设备或进行设备的配置和管理;光纤端口,用于高速、远距离的数据传输等。
逻辑端口
访问局域网内某个服务器的某个服务
五、源设备如何知道其所在局域网的网关所在路由器的 IP 地址
1.手动配置
- 配置过程:网络管理员或用户可以手动为源设备(如计算机、智能手机等)指定网关的 IP 地址。在设备的网络设置中,通常会有专门的选项用于输入网关的 IP 地址。例如,在 Windows 操作系统中,用户可以通过 “网络连接” 设置界面,找到对应的网络连接,手动输入网关的 IP 地址。
- 适用场景:这种方式适用于小型网络或对网络配置有特定要求的场景。在一些企业网络中,为了确保网络的安全性和稳定性,网络管理员会手动为每台设备配置网关 IP 地址,以便对网络流量进行精确控制。
DHCP(动态主机配置协议)分配
- 工作原理:DHCP 是一种广泛应用的网络协议,用于自动分配 IP 地址、子网掩码、网关 IP 地址等网络配置信息。当源设备连接到网络时,它会向 DHCP 服务器发送一个 DHCP 发现请求(DHCP Discover)。DHCP 服务器接收到请求后,会从可用的 IP 地址池中选择一个 IP 地址,并将网关 IP 地址、子网掩码等配置信息一起分配给源设备,通过 DHCP 提供消息(DHCP Offer)发送给源设备。源设备接收并使用这些配置信息完成网络配置。
- 适用场景:DHCP 适用于大型网络,如企业办公网络、学校校园网络等。在这些网络中,设备数量众多,手动配置网络参数会非常繁琐且容易出错。使用 DHCP 可以实现网络配置的自动化,提高网络管理的效率。
无状态自动配置(IPv6)
- 工作原理:在 IPv6 网络中,源设备可以通过无状态自动配置机制获取网关信息。当设备连接到网络时,它会监听网络上的路由器发送的路由通告消息(Router Advertisement)。这些消息中包含了网络前缀、默认网关等信息。源设备根据这些信息自动生成自己的 IPv6 地址,并获取默认网关的 IPv6 地址。
- 适用场景:随着 IPv6 的逐渐普及,无状态自动配置在 IPv6 网络中得到了广泛应用。它简化了 IPv6 网络的配置过程,使得设备能够更方便地接入网络。
六、以太网为啥知道要把数据传递到默认网关呢
- 示例:假设设备 A 的 IP 地址是 192.168.1.100,子网掩码是 255.255.255.0,这意味着它所在的子网范围是 192.168.1.0/24。当设备 A 要向 IP 地址为 192.168.2.50 的设备 B 发送消息时,设备 A 通过比较发现设备 B 的 IP 地址不在自己的子网内,于是判断需要将消息发送给网关进行转发。
七、源设备和默认网关通信
概念
- IP 地址:通常是一个 32 位的 IPv4 地址(如 192.168.1.1)或 128 位的 IPv6 地址。IP 地址具有层次性和逻辑性,可用于路由选择,帮助数据包在不同网络之间进行传输。
- MAC 地址:数据链路层的物理地址,全球唯一,固化在网络接口卡(NIC)中。它由 48 位二进制数组成,通常以十六进制表示(如 00:11:22:33:44:55)。MAC 地址用于在局域网内唯一标识一个网络设备,确保数据帧能够准确地从一个设备传输到另一个设备。
总结
1、当源设备需要与默认网关进行通信时,它知道默认网关的 IP 地址
2、ARP请求广播 询问拥有该 IP 地址(默认网关 IP 地址)的设备的 MAC 地址
3、默认网关收到请求后,会回复一个包含其 MAC 地址的 ARP 响应
4、源设备接收到响应后,会将默认网关的 IP 地址和对应的 MAC 地址记录到自己的 ARP 缓存表中,建立起 IP 地址和 MAC 地址的映射关系。
八、端口号
定义与作用
- 定义:端口号是一个 16 位的整数,取值范围从 0 到 65535。它是传输层协议(如 TCP 和 UDP)的一部分,用于标识一台主机上进行通信的不同应用程序或服务。
- 作用:在网络通信中,IP 地址用于标识网络中的不同设备,而端口号则用于标识设备上的不同应用程序或服务。通过 IP 地址和端口号的组合,数据包可以准确地从源主机的特定应用程序发送到目标主机的特定应用程序。
端口号在不同传输层协议中的使用
- TCP(传输控制协议)
- TCP 是一种面向连接的、可靠的传输协议。在 TCP 通信中,每个连接都由源 IP 地址、源端口号、目标 IP 地址和目标端口号唯一标识。客户端和服务器在建立连接时,会通过三次握手过程来协商端口号和其他连接参数。一旦连接建立,双方就可以通过这个连接进行可靠的数据传输。
- UDP(用户数据报协议)
- UDP 是一种无连接的、不可靠的传输协议。在 UDP 通信中,每个数据包都包含源端口号和目标端口号,但不需要建立连接。UDP 适用于对实时性要求较高、对数据准确性要求相对较低的应用场景,如视频流、音频流、实时游戏等。
九、端口是如何分配的
1. 服务器端端口分配
知名端口(Well - Known Ports)
- 范围:0 到 1023。
- 分配方式:这些端口是由互联网号码分配机构(IANA)进行统一管理和分配的。IANA 会根据一些标准化的网络协议和服务,为其指定特定的端口号。例如,HTTP 协议使用 80 端口,HTTPS 协议使用 443 端口,FTP 协议使用 20 和 21 端口等。由于这些端口号是固定分配给特定服务的,服务器在提供这些标准服务时,通常会监听这些固定的知名端口,以便客户端能够准确地连接到相应的服务。
- 示例代码(Java 实现简单 HTTP 服务器监听 80 端口):
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
public class SimpleHttpServer {
public static void main(String[] args) throws IOException {
// 创建一个 HTTP 服务器,监听 80 端口
HttpServer server = HttpServer.create(new InetSocketAddress(80), 0);
server.createContext("/", new MyHandler());
server.setExecutor(null);
server.start();
}
static class MyHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
String response = "Hello, World!";
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
}
注册端口(Registered Ports)
- 范围:1024 到 49151。
- 分配方式:应用程序开发者或服务提供商可以向 IANA 申请注册特定的端口号,以用于他们开发的应用程序或提供的服务。例如,MySQL 数据库默认使用 3306 端口,Oracle 数据库默认使用 1521 端口。服务器在运行这些特定的应用程序时,会监听已注册的端口,客户端通过该端口与服务器上的相应应用程序进行通信。
- 示例代码(Java 实现简单的自定义服务监听 3333 端口):
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class CustomServer {
public static void main(String[] args) {
try {
// 创建 ServerSocket 对象,监听 3333 端口
ServerSocket serverSocket = new ServerSocket(3333);
System.out.println("Server is listening on port 3333");
while (true) {
// 等待客户端连接
Socket socket = serverSocket.accept();
// 获取输入流和输出流
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
// 简单处理客户端请求
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
String request = new String(buffer, 0, length);
System.out.println("Received request: " + request);
String response = "Server received your request";
outputStream.write(response.getBytes());
// 关闭资源
inputStream.close();
outputStream.close();
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. 客户端端口分配
动态或私有端口(Dynamic or Private Ports)
- 范围:49152 到 65535。
- 分配方式:当客户端应用程序需要与服务器进行通信时,操作系统会自动从这个范围内选择一个可用的端口号作为客户端的源端口号。这个过程是由操作系统内核完成的,客户端应用程序通常不需要手动指定源端口号。操作系统会确保每次分配的端口号在当前系统中是唯一的,避免端口冲突。
- 示例代码(Java 客户端连接服务器并自动分配端口):
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try {
// 连接到服务器的 IP 地址和端口号
String serverIP = "127.0.0.1";
int serverPort = 3333;
// 创建 Socket 对象,连接到服务器,操作系统会自动分配客户端端口
Socket socket = new Socket(serverIP, serverPort);
// 获取输出流,向服务器发送数据
OutputStream outputStream = socket.getOutputStream();
String message = "Hello, Server!";
outputStream.write(message.getBytes());
// 关闭资源
outputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务器端的端口分配通常是根据服务的类型和注册情况来确定的。
而客户端的端口分配则由操作系统自动完成,以确保网络通信的正常进行。