Linux【网络基础】IP协议

文章目录

  • 一、IP协议
    • (1)IP地址协议概念和理解
    • (2)IP地址协议格式
    • (3)网络号和主机号
    • (4)地址管理
      • (一)分配IP地址方法
      • (二)CIDR分配IP地址
      • (三)子网划分
      • (四)特殊类IP地址
      • (五)IP地址的数量限制
    • (5)私有IP地址和公网IP地址
    • (6)路由选择

一、IP协议

(1)IP地址协议概念和理解

IP是InternetProtocol(网际互连协议)的缩写,是TCP/IP体系中的网络层协议。设计IP的目的是提高网络的可扩展性:
一是解决互联网问题,实现大规模、异构网络的互联互通;
二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据报传输服务。
如下图:
在这里插入图片描述
因为目前IP协议主流的版本有IPV4和IPV6,但是IPV6目前不够普及,并且泛用性小,所以我这篇博客主要写的是具有代表性的IPV4。
分析
IP到底做了什么?扮演的是什么角色?
IP地址核心工作:
IP层的作用是定位主机,具有一个将数据A从主机跨网络送到B主机的能力。有能力不一定能做到,只是体现在有非常大的概率,其实本质上它只是一个行动者,而tcp给它提供策略,让它可靠地将数据A从主机跨网络可靠地送到B主机。
路径选择中,目标IP非常重要,决定我们路径如何走,就如唐僧去西天取经,别问他从哪来,他说从东土大唐来(源IP地址),到西天(目标IP地址)取经,而如果问他上一站从哪来,比如他说从女儿国来,这个是MAC地址(后面说)。
但是他具体去的是雷音寺(目标主机),IP=目标网络+目标主机
主机: 配有IP地址, 但是不进行路由控制的设备;
路由器: 即配有IP地址, 又能进行路由控制;
节点: 主机和路由器的统称

(2)IP地址协议格式

4位首部长度 和TCP报头中的4位首部长度一样,代表的是IP报头的长度是多少个4字节,4位比特位能够表示的最大数字是15,即IP头部的最大长度是15*4 = 60字节16位总长度 指的是IP数据报整体占多少个字节。用总长度-报头即为有效载荷
在这里插入图片描述
4位版本号:用来标识IP首部的版本号,常见的即为IPV4和IPV6,各个版本的首部格式都有所不同。
4位首部长度:表示IP首部的长度,单位为4字节即32位,因为首部长度具有4位,所能表示的最大数据为15即2^4 - 1,所以IP首部的最大长度为15 * 4 = 60字节,因为首部长度最少为5(除选项),所以IP首部的最小长度为20字节。
8位服务类型:用来表明服务质量。目前0-2位弃用,7位保留。3-6位为TOS字段,分别为最低延迟、最大吞吐、最大可靠性、(这四位合并也代表着最大安全)。
16位数据报长度:标志IP首部与发送数据的长度之和,大小为2^16,即64K,65535。因为IPV4的报头和数据总大小为65535字节,但是数据中又包含了上层(传输层)传下来的数据,所以会将上层如UDP协议数据的大小限制在65535-20(ip协议首部)- 8(UDP协议首部)。IPV6则没有这个问题。
16位标识:标识当前分片属于哪一个完整的上层报文,用于分片重组。因为受限于数据链路层的MTU限制,如果IP报文大于MTU,却又符合数据报长度字段,此时就会在网络层进行数据的分片,将数据拆分开来发送,之后再重组,唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的
在这里插入图片描述

3位标志位:第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话,最后一个分片置为1, 其他是0. 类似于一个结束标记。

第一位表示保留位。
第二位表示禁止分片。
第三位表示分片是否结束。
1:表示后面还有分片
0:表示后面没有分片

13位片偏移:当分片后的数据在对端重组时,用来确认该分片在原始报文中的位置。因为13位能够标识的最大大小为8192,而数据报长度为65535,也就是16位。所以要想用13来标识16位,就将片偏移的单位设置为了8个字节,所以也就是说,例如当前片偏移位1000,则说明在原始数据中的1000*8 = 8000处。就相当于在原始数据的偏移量。
8位生存时间:报文的最长生命周期(也代表着可以中转的路由器数量),每经过一次路由器就会减一,为0则直接丢弃。主要用于防止路由环路问题(多个路由互相连接,形成转发环路,数据在环路中不断的转发)。
数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL-= 1, 一直减到0还没到达, 那么就丢弃了.。
8位协议:记录传输层所使用的协议,用于数据分用时,选择上层解析协议。
16位校验和:使用CRC进行校验, 来鉴别头部是否损坏。
32位源IP地址/目的IP地址:表示发送端/接收端的IP地址,用于标识通信的两台主机。
0-40字节选项:主要协商和描述一些信息,如安全级别,源路径,路径记录,时间戳。因为IP首部大小最高为60字节,而前面必须的有20字节,所以选项的大小可以为0-40字节。
填充位:保证IP首部大小为4字节的整数倍,不够则填充。

8位服务类型图:
在这里插入图片描述
3位标志位图:
在这里插入图片描述
问题:
说明:
1.回忆前提:MTU
MTU是数据链路层对到达数据链路层数据大小的规定。数据链路层进行发送数据的时候,是严格遵照MTU进行发送的。数据链路层发送到数据大小一定不会超过MTU
数据链路层就会要求网络层ip协议给数据链路层提交的数据大小不能超过MTU
2.如果IP协议传输的数据大于数据链路层对于数据的限制(MTU),IP协议需要将数据进行分片传输。将大于MTU的数据报,进行切分,以满足MTU的要求。
16位总长度能够标识的数据最大为65536Byte,如果传输层递交给网络层ip协议的数据超过65536Byte,如何做处理?
在网络层的ip协议进行分片传输。
1.每一条数据都是独立的ip数据报
2. 当这些ip数据报传输到对端之后,对端针对ip协议个数头部的16位标识,3位标志,13位片偏移来组装同一条数据报
TCP需要ip协议进行分片?
不需要进行分片,因为TCP协议在传输数据的时候,严格按照MSS进行传输,而MSS一定是小于MTU的,而一般网卡的MTU都是1500字节,换句话说,TCP在每次传输数据的时候都是不会超过1500字节的。因此,MSS是远远小于65536字节的,因此也就不会触发ip协议进行分片传输。
UDP需要ip协议进行分片吗?
有可能需要进行分片,因为UDP协议是没有类似于MSS存在的,因此,UDP的数据的最大长度是65536字节,网络层递交给数据链路层大小必须小于MTU的,因此,一旦UDP递交给网络层ip协议的数据加上ip协议报头之后,总长度大于了当前主机的MTU大小时,就会需要进行分片传输。
注:因为UDP协议是不可靠的,在ip数据报转发的时候,都有自己的路由转发路径,可能会造成丢失。
分片丢了会重发分片还是所有数据一起重发?
有分片, 则代表一定是UDP数据进行分片了。
第一个:
分片 传输一定是UDP数据 +UDP协议是不保证可靠 +ip协议也是不保证可靠重发:
只能从应用层协议触发重传,所有数据一起重发

(3)网络号和主机号

ip地址=网络号和主机号
网络号:保证互相连接的两个网段具有不同的标识
主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号
在这里插入图片描述
不同的子网其实就是把网络号相同的主机放到一起。
如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复。
通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的IP地址都不相同。

(4)地址管理

(一)分配IP地址方法

手动管理子网内的IP解决
有一种技术叫做DHCP, 能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便。
一般的路由器都带有DHCP功能. 因此路由器也可以看做一个DHCP服务器。
过去曾经提出一种划分网络号和主机号的方案, 把所有IP 地址分为五类
A类:
在这里插入图片描述
B类:
在这里插入图片描述
C类:
在这里插入图片描述
ABCDE:
在这里插入图片描述
A类: 0.0.0.0到127.255.255.255
B类: 128.0.0.0到191.255.255.255
C类: 192.0.0.0到223.255.255.255
D类: 224.0.0.0到239.255.255.255
E类: 240.0.0.0到247.255.255.255

(二)CIDR分配IP地址

但是这种划分方法是具有局限性的,因为A类太多(几千万个主机不可能用得完),而C类太少(254个一下就用完了)。所以政府、企业、学校等组织都去申请较为适中的B类地址,但是在实际使用中,不可能每一个组织都能用满,所以造成了大量IP地址的浪费。
例如, 申请了一个B类地址, 理论上一个子网内能允许6万5千多个主机. A类地址的子网内的主机数更多。
然而实际网络架设中, 不会存在一个子网内有这么多的情况. 因此大量的IP地址都被浪费掉了。
所以为了解决这种情况。
就提出了新的划分方法:CIDR(Classless Interdomain Routing)

  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号。
  • 子网掩码也是一个32位的正整数. 通常用一串 “0” 来结尾。
  • 将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号。
  • 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关。

现在的IP地址都是经过CIDR方式分配的, 不存在A类,B类,C类IP地址的说法,IP地址是路由器设备给连接上的机器分配的, 分配IP地址的时候, 会分配上子网掩码。
如下例:
子网掩码就是一段连续的二进制1。子网掩码与IP地址相与则能得到网络号,而子网掩码取反则能得到主机号的范围,取反之后,有多少比特位为1,则表示当前子网当中的ip地址使用了多少个比特位当作是主机号。
例子:
在这里插入图片描述

(三)子网划分

可以把基于每类的IP网络进一步分成更小的网络,每个子网由路由器界定并分配一个新的子网网络地址,子网地址是借用基于每类的网络地址的主机部分创建的。划分子网后,通过使用掩码,把子网隐藏起来,使得从外部看网络没有变化,这就是子网掩码。
例题:
某单位申请到一个C类网络地址:192.168.2.0/24,该单位有4个部门,希望从这个网络中平均划分出四个子网,请列出每个子网的网络号,子网掩码,IP地址范围,从8位中取两位来作为网络号,所以子网掩码为,而192.168.2.00 ->0
192.168.2.01->64
192.168.2.10 ->128
192.168.2.11->192

根据每个子网需要的主机数为62台,可以计算出每个子网的子网掩码为26位(因为2^6=64,而实际可用主机数为62,所以需要6位二进制位来表示主机号)。
子网1
网络号:192.168.2.0
子网掩码:255.255.255.192
IP地址范围:192.168.2.1 - 192.168.2.62
子网2
网络号:192.168.2.64
子网掩码:255.255.255.192
IP地址范围:192.168.2.65 - 192.168.2.126
子网3:
网络号:192.168.2.128
子网掩码:255.255.255.192
IP地址范围:192.168.2.129 - 192.168.2.190
子网4
网络号:192.168.2.192
子网掩码:255.255.255.192
IP地址范围:192.168.2.193 - 192.168.2.254

在每个子网中,第一个IP地址和最后一个IP地址分别为网络号和广播地址,所以可用的主机数量为62台。

(四)特殊类IP地址

在一个网段中都会有一个网络号的和广播号,即 192.0.0.0 ~ 192.0.0.255
网络号:主机号全为0的ip地址,就为该网段中的网络号
广播号:主机号中全为1的ip地址,就为该网段中的广播号
127.0.0.1 :本地回环网卡地址(通常用来测试自己机器的网络连通性)
0.0.0.0:代表本地所有的网卡地址

(五)IP地址的数量限制

因为IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 2的32次方个IP地址, 大约是43亿左右. 而TCP/IP协议规定, 每个主机都需要有一个IP地址,这意味着, 一共只有43亿台主机能接入网络么?
实际上, 由于一些特殊的IP地址的存在, 数量远不足43亿; 另外IP地址并非是按照主机台数来配置的, 而是每一个网卡都需要配置一个或多个IP地址。
CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然不够用.。
有三种方式来解决
1、动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到的IP地址不一定是相同的。
3、IPv6: IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容,IPv6用16字节128位来表示一个IP地址; 但是目前IPv6还没有普及。
2、NAT技术(后面博客会单独介绍)。

(5)私有IP地址和公网IP地址

如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上 使用任意的IP地址都可以,但是RFC 1918规定了用于组建局域网的私有IP地址。

10.* ,前8位是网络号,共16,777,216个地址
172.16.到172.31.,前12位是网络号,共1,048,576个地址
192.168.*,前16位是网络号,共65,536个地址 包含在这个范围中的, 都成为私有IP, 其余的则称为全局 IP(或公网IP);

在我们通过ipconfig查看本机IP地址时,往往看到的都是192.168.0.x。其实这个是我们的私有ip地址,比如在一定的区域内,划分出了很多个网段,而这些网段下也就是我们的私网ip,这个ip地址仅仅用于我们内部的通信。
简单来说,在这个大的网络下,可能存在无数个这样的子网,也就是为什么我们无论在家,还是在学校等地方,所看到的ip地址几乎是一样的。

这个私有的ip地址只能内部通信,如果要与外部通信,就需要借助到NAT技术来将私有的IP地址转换为公有的IP地址。也就是说,这个网络下的所有私有,都需要用统一的公网IP地址来外部通信。

(6)路由选择

IP网络层的主要作用是“实现终端节点之间的通信”。这种终端节点之间的通信也叫“点对点通信”。
IP网络层的下一层——数据链路层的主要作用是在互连同一种数据链路的节点之间进行包传递。而一旦跨越多种数据链路,就需要借助网络层。网络层可以跨越不同的数据链路,即使是在不同的数据链路上也能实现两端节点之间的数据包传输。
在这里插入图片描述

首先要知道一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP)
1.路由选择是在为网络数据选择合适的设备进行转发,
2.路由器上面的网口,
WAN : 是当前路由器连接上级路由器的网口
LAN : 是子网内机器连接本路由器的网口。
在这里插入图片描述
路由器LAN口连接的主机, 都从属于当前这个路由器的子网中,从图中可以看出从运营商机房(101.1.1.1)拉出的网线插在了家用路由器的WAN口上,个人设备是插在家用路由器的LAN口上。
也就是说,每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点。这样的运营商路由器可能会有很多级, 最外层的运营商路由器, WAN口IP就是一个公网IP了,子网内的主机需要和外网进行通信时,路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级替换, 最终数据包中的IP地址成为一个公网IP这种技术称为NAT(Network Address Translation,网络地址转换)。

路由设备中都会有一个路由表,路由表记录了当前的路由项,路由器是如何进行网络转发。如下图:
在这里插入图片描述
首先用网络数据中的目的ip和路由项当中的子网掩码进行按位与操作(需要注意的是,该目的ip先和非网关的路由项进行操作,最后再和网关路由项进行操作)。
其次将按位与操作的结果和路由项的Destination进行对比
1 如果说没有对比上,则代表该条数据不是往该子网当中进行转发,会通过默认网关,发送到上级路由。
2 如果说对比上了,则代表该条数据是往该子网当中的某一个主机进行转发
的,隐含意思是该目的主机和源主机主机处于一个子网当中。

路由的过程, 就是这样一跳一跳(Hop by Hop) “问路” 的过程。所谓 “一跳” 就是数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间,IP数据包的传输过程也和问路一样。当IP数据包, 到达路由器时, 路由器会先查看目的IP。
路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器。依次反复, 一直到达目标IP地址
为什么要有子网划分?
互联网中的每一台主机都要隶属于一个子网,为了方便定位主机,排除效率高,因为每次路由都要在路由表里面进行查找所对应的IP地址看它属于哪个子网进而快速直接或间接定位,而查找的本质是排除,有了子网他可以排除一批路由器或子网。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/18472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】类和对象(上)

1.面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题 C是基于面向对象的,关注的是对象,将意见事情拆分为不同的对象,靠对象之间的交互完成。 …

慕课网Go-4.package、单元测试、并发编程

package 1_1_User.go package usertype User struct {Name string }1_1_UserGet.go package userfunc GetCourse(c User) string {return c.Name }1_1_UserMain.go package mainimport ("fmt"Userch03 "goproj/IMOOC/ch03/user"//别名,防止同名…

uniapp跨域解决

uniapp跨域解决 跨域是什么 跨域指的是浏览器不能执行其他网站的脚本,当一个网页去请求另一个域名的资源时,域名、端口、协议任一不同,就会存在跨域。跨域是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。 报错…

Wi-Fi 6技术详解

1. 介绍 Wi-Fi 6,也称为802.11ax,是Wi-Fi技术的最新标准。它是对之前标准Wi-Fi 5(802.11ac)的升级和改进,旨在提供更高的速度、更大的容量、更好的性能和更高的可靠性。Wi-Fi 6技术的引入为无线网络带来了革命性的变化…

机柜PDU的选购也有大学问——与机柜PDU相关的那些事儿

在各行各业数据中心机房供配电建设过程中,机柜专用PDU电源插座看似是一个较为简单的用电设备,事实上又不那么简单。机柜PDU,是为安装在机柜内部的IT设备提供电源分配、管理的末端配电设备,在不同的工作场合对于PDU的规格要求也是不…

寻找峰值——力扣162

文章目录 题目描述法一 寻找最大值法二 二分法 题目描述 法一 寻找最大值 int findPeakElement(vector<int>& nums){return max_element(nums.begin(), nums.end()) - nums.begin();}法二 二分法 int findPeakElement(vector<int>& nums) {int l 0, r n…

目标检测中 anchor base和anchor free

目标检测中两种不同anchor的生成 趋势&#xff1a;anchor free越来越受到实时性检测的青睐&#xff0c;&#xff0c;&#xff0c;

二分图匹配算法

二分图匹配算法是一种用于解决二分图最大匹配问题的算法。 二分图&#xff1a; 在圖論中&#xff0c;二部圖&#xff08;bipartite graph&#xff09;是一類特殊的圖&#xff0c;又稱為、偶图、雙分圖。二分圖的頂點可以分成兩個互斥的独立集 U 和 V 的圖&#xff0c;使得所有…

机器人科普--AGILOX 叉车

机器人科普--AGILOX 叉车 1 概述2 导航3 驱动轮组4 叉举参考 1 概述 AGILOX 叉车&#xff0c;不需要画地图路径&#xff0c;很厉害。 2 导航 中间路径自由导航&#xff0c;末端规划出轨迹路线&#xff0c;并使用优良的控制器做轨迹追踪。 AGILOX &#xff5c; 10 Min setu…

Spring依赖注入

文章目录 前言1.依赖注入简介2. setter注入3. 构造器注入4. 自动装配 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客&#xff0c;方便日后回顾。当然&#xff0c;如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚&#xff0…

商城免费搭建之java商城 开源java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c bbc

&#xfeff; 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、R…

TCP拥塞控制详解 | 1. 概述

网络传输问题本质上是对网络资源的共享和复用问题&#xff0c;因此拥塞控制是网络工程领域的核心问题之一&#xff0c;并且随着互联网和数据中心流量的爆炸式增长&#xff0c;相关算法和机制出现了很多创新&#xff0c;本系列是免费电子书《TCP Congestion Control: A Systems …

vue3搭建Arco design UI框架

技术&#xff1a;Vue3.2.40 UI框架&#xff1a;Arco design 2.44.7 需要安装:yarn 1.22.19 和npm 8.19.4 1.第一步安装本地全局arco脚手架 管理员运行CMD npm i -g arco-cli安装成功后如下&#xff1a; 2.第二步在需要存放项目的文件夹拉取项目 我这里把项目存放在 D:\W…

计算机网络基础(静态路由,动态路由,公网IP,私网IP,NAT技术)

文章目录 一&#xff1a;静态路由和动态路由二&#xff1a;静态路由的配置路由信息的方式演示三&#xff1a;默认路由四&#xff1a;公网IP和私网IP和NAT技术的基本理解 一&#xff1a;静态路由和动态路由 在说静态路由和动态路由前&#xff0c;我们需要来了解一下&#xff0…

【 Redis】的乱码问题

问题描述&#xff1a; 使用RedisTemplate存储的数据&#xff0c;在 redis-cli 客户端查看时&#xff0c;key 和 value 都会携带类似\xac\xad\这样的字符串。 原因&#xff1a; 由于默认使用了 jdk 的序列化方式。以下是支持的序列化方式 项目一般都会有缓存&#xff0c;常常…

go练习 day01

DTO: note_dto.go package dtoimport "king/model"type NoteAddDTO struct {ID uintTitle string json:"title" form:"title" binding:"required" message:"标题不能为空"Content string json:"conten…

Live Market做世界C端用户数据的耕耘,数据和流量的价值呈现

在数字化时代&#xff0c;数据成为了推动经济增长和商业发展的重要资源&#xff0c;而流量则是数据价值的体现和传递媒介。随着全球互联网的普及和移动设备的智能化&#xff0c;C端用户数据的收集和分析变得尤为重要。在这个领域&#xff0c;有一家专注于世界C端用户数据耕耘的…

分享18个用于处理 null、NaN 和undefined 的 JS 代码片段

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏:《 VUE 》 《 javaScript 》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 目录 前言 内容 &#x1f4df; 1. 检查是否为null&#xff1a; &#x1f4df; 2. 检查undefined&#xff1a; &#x1…

【uniapp 样式】使用setStorageSync存储历史搜索记录

<template><view><view class"zhuangbox u-flex"><u--inputplaceholder"请输入关键字搜索"border"surround"shapecircleprefixIcon"search"prefixIconStyle"font-size: 22px;color: #909399"v-model&q…

测试|LoadRunner安装及介绍

测试|LoadRunner安装及介绍 文章目录 测试|LoadRunner安装及介绍1.什么是LoadRunner2.LoadRunner特点3.LoadRunner基本概念4.LoadRunner三大组件之间关系LoadRunner安装1.安装包2.安装loadrunner 1.什么是LoadRunner LoadRunner是用来模拟用户负载完成性能测试的工具。 它适用…