traceroute安装和使用测试端口联通

traceroute安装和使用测试端口联通默认Linux发现版是安装了traceroute工具的,但记忆里好像7.0后变成了tracepath命令,这里我们手动安装traceroute命令工具【下载traceroute并解压】下载地址:https://pkgs.org/download/traceroute下载路由跟踪,2.0.22-2.el7.x86_64.rpm;tar包内没找到编译工具,哪个小伙伴安装过,欢迎指教。[安装]…

一、前言

默认Linux发现版是安装了traceroute工具的,但记忆里好像7.0后变成了tracepath命令,这里我们手动安装traceroute命令工具

二、traceroute下载安装

下载地址:https://pkgs.org/download/traceroute
下载路由跟踪,2.0.22-2.el7.x86_64.rpm;tar包内没找到编译工具,哪个小伙伴安装过,欢迎指教。

在这里插入图片描述
安装:

在这里插入图片描述
由上图可知本地或远程主机端口80无法建立连接,而且在第3跳20段该端口数据流就被阻断;可考虑修改端口尝试;

三、 命令使用

traceroute [-n] -T -p <目标端口号> Host

参数说明:

-n 直接使用 IP 地址而非主机名称(禁用 DNS 反查)。

-T 通过 TCP 探测。

-p 探测目标端口号。

Host 目标服务器域名或 IP。

注:Windows 环境下,您可通过 tracetcp 进行端口可用性探测。通过发送 TCP 数据包进行链路探测,以分析是否有链路中间节点对目标端口做了阻断。这之前需要先安装 winpcap library;
下载地址:https://github.com/0xcafed00d/tracetcp/releases/tracetcp release v1.0.3
winpcap已停止更新,下载地址:https://www.winpcap.org/install/default.htm;
官方建议下载npcap,其本身也是基于wincap,下载地址https://nmap.org/npcap/,可以在最多5个系统上使用免费版本的Npcap(但不能在外部重新分发)(免费许可证详细信息)。它也可以在无限制系统上使用,只能与Nmap 和/或Wireshark一起使用。只需运行可执行安装程序。

其他参数:

  -4                          Use IPv4
  -6                          Use IPv6
  -d  --debug                 Enable socket level debugging
  -F  --dont-fragment         Do not fragment packets
  -f first_ttl  --first=first_ttl
                              Start from the first_ttl hop (instead from 1)
  -g gate,...  --gateway=gate,...
                              Route packets through the specified gateway
                              (maximum 8 for IPv4 and 127 for IPv6)
  -I  --icmp                  Use ICMP ECHO for tracerouting
  -T  --tcp                   Use TCP SYN for tracerouting (default port is 80)
  -i device  --interface=device
                              Specify a network interface to operate with
  -m max_ttl  --max-hops=max_ttl
                              Set the max number of hops (max TTL to be
                              reached). Default is 30
  -N squeries  --sim-queries=squeries
                              Set the number of probes to be tried
                              simultaneously (default is 16)
  -n                          Do not resolve IP addresses to their domain names
  -p port  --port=port        Set the destination port to use. It is either
                              initial udp port value for "default" method
                              (incremented by each probe, default is 33434), or
                              initial seq for "icmp" (incremented as well,
                              default from 1), or some constant destination
                              port for other methods (with default of 80 for
                              "tcp", 53 for "udp", etc.)
  -t tos  --tos=tos           Set the TOS (IPv4 type of service) or TC (IPv6
                              traffic class) value for outgoing packets
  -l flow_label  --flowlabel=flow_label
                              Use specified flow_label for IPv6 packets
  -w waittime  --wait=waittime
                              Set the number of seconds to wait for response to
                              a probe (default is 5.0). Non-integer (float
                              point) values allowed too
  -q nqueries  --queries=nqueries
                              Set the number of probes per each hop. Default is
                              3
  -r                          Bypass the normal routing and send directly to a
                              host on an attached network
  -s src_addr  --source=src_addr
                              Use source src_addr for outgoing packets
  -z sendwait  --sendwait=sendwait
                              Minimal time interval between probes (default 0).
                              If the value is more than 10, then it specifies a
                              number in milliseconds, else it is a number of
                              seconds (float point values allowed too)
  -e  --extensions            Show ICMP extensions (if present), including MPLS
  -A  --as-path-lookups       Perform AS path lookups in routing registries and
                              print results directly after the corresponding
                              addresses
  -M name  --module=name      Use specified module (either builtin or external)
                              for traceroute operations. Most methods have
                              their shortcuts (`-I' means `-M icmp' etc.)
  -O OPTS,...  --options=OPTS,...
                              Use module-specific option OPTS for the
                              traceroute module. Several OPTS allowed,
                              separated by comma. If OPTS is "help", print info
                              about available options
  --sport=num                 Use source port num for outgoing packets. Implies
                              `-N 1'
  --fwmark=num                Set firewall mark for outgoing packets
  -U  --udp                   Use UDP to particular port for tracerouting
                              (instead of increasing the port per each probe),
                              default port is 53
  -UL                         Use UDPLITE for tracerouting (default dest port
                              is 53)
  -D  --dccp                  Use DCCP Request for tracerouting (default port
                              is 33434)
  -P prot  --protocol=prot    Use raw packet of protocol prot for tracerouting
  --mtu                       Discover MTU along the path being traced. Implies
                              `-F -N 1'
  --back                      Guess the number of hops in the backward path and
                              print if it differs
  -V  --version               Print version info and exit
  --help                      Read this help and exit
Arguments:
 host          The host to traceroute to
 packetlen     The full packet length (default is the length of an IP header plus 40). 

在这里插入图片描述

输出结果说明:
1)在traceroute中出现!H,指响应时间为*哦。。。从对方没有收到包也就没响应;!h就是主机不可达的意思

四、其他网络探测工具

4.1、ping命令

ping是通过ICMP(网络控制信息协议InternetControl Message Protocol)协议回复请求以检测主机是否存在。

注:默认情况下,Linux系统的TTL值为64或255,WindowsNT/2000/XP系统的TTL值为128,Windows98系统的TTL值为32,UNIX主机的TTL值为255。因此一般TTL值可按如下估算:

100~130ms之间,Windows系统 ;
240~255ms之间,UNIX/Linux系统。

结果说明:

(1) Request timed out (包从主机出去了)
主要是主机路由表中具有到达目标的路由,且arp广播,最终有找到arp到达路由的下一跳mac地址,而因为其他中间原因不可到达或者目标设置防火墙等原因没有回应,这时候会出现超时。 可能情况:
1.对方已关机,或者网络上根本没有这个地址。
2.对方与自己不在同一网段内,通过路由也无法找到对方,但有时对方确实是存在的,当然不存在也是返回超时的信息。
3.对方确实存在,但设置了ICMP数据包过滤(比如防火墙设置)。这时可以用带参数 -a 的Ping命令探测对方,如果能得到对方的NETBIOS名称,则说明对方是存在的,是有防火墙设置,如果得不到,多半是对方不存在或关机,或不在同一网段内。
4.错误设置IP地址

(2) Destination host Unreachable (包无法从主机出去)
主要是路由表中具到达目标的路由,且arp广播,最终没有找到arp到达路由的下一跳mac地址,则会出现目标不可达。可能情况:
1.对方与自己不在同一网段内,而自己又未设置默认的路由。
2.网线 出了故障

“destination host unreachable”和 “time out”的区别:
如果所经过的路由器的路由表中具有到达目标的路由,而目标因为其他原因不可到达,这时候会出现“time out”,如果路由表中连到达目标的路由都没有,那就会出现“destination host unreachable”。

(3) Network is unreachable
主要是路由表中没有到达目标的路由,一般是缺少默认路由出现的。

(4) Bad IP address
这个信息表示您可能没有连接到DNS服务器,所以无法解析这个IP地址,也可能是IP地址不存在。

(5) Source quench received
这个信息比较特殊,它出现的机率很少。它表示对方或中途的服务器繁忙无法回应。

(6) Unknown host (不知名主机)
这种出错表该远程主机的名字不能被域名服务器(DNS)转换成IP地址。故障原因:
1.域名服务器有故障,
2.输入域名不正确,
3.或者网络管理员的系统与远程主机之间的通信线路有障。

(7) No answer——无响应
这种故障说明本地系统有一条通向中心主机的路由,但却接收不到它发给该中心主机的任何信息。故障原因可能是下列之一:
1.中心主机没有工作;
2.本地或中心主机网络配置不正确;
3.本地或中心的路由器没有工作;
4.通信线路有故障;
5.中心主机存在路由选择问题。
\
(8) no rout to host:网卡工作不正常。
(9) transmit fai led ,error code:10043网卡驱动不正常。
(10) Ping 127.0.0.1:127.0.0.1是本地循环地址
如果本地址无法Ping通,则表明本地机TCP/IP协议不能正常工作。

4.2、fping命令

不同与ping的是,fping可以在命令行中指定要ping的主机数量范围,也可以指定含有要ping的主机列表文件,实现对范围内主机的扫描/探活。fping给一个主机发送完数据包后,马上给下一个主机发送数据包,实现多主机同时ping。如果某一主机ping通,则此主机将被打上标记,并从等待列表中移除,如果没ping通,说明主机无法到达,主机仍然留在等待列表中,等待后续操作。fping的第一个ping包的seq是0,可以作为特征

sudo apt install fping  [On Debian/Ubuntu]
sudo yum install fping  [On CentOS/RHEL]
sudo dnf install fping  [On Fedora 22+]
sudo pacman -S fping    [On Arch Linux]

wget http://www.fping.org/dist/fping-5.1.tar.gz #源码包
tar -xvf fping-4.0.tar.gz
cd fping-4.0/
./configure
make && make install

fping -g 172.1.15.0/24
fping -g 172.1.15.0 172.1.15.200
fping -f filename
fping -A -u -c 4 172.1.15.1 172.1.15.3 172.1.15.10

命令参数:

-a :显示可ping通的目标
-A :将目标以ip地址的形式显示
-b :ping 数据包的大小。(默认为56)
-c :ping每个目标的次数 (默认为1)
-e :显示返回数据包所费时间
-f :从文件获取目标列表( – 表示从标准输入)(不能与 -g 同时使用)
-g :通过指定开始和结束地址来生成目标列表(例如:./fping –g 192.168.1.0 192.168.1.255)或者一个IP/掩码形式(例如:./fping –g 192.168.1.0/24)
-u :显示不可到达的目标
-l :循环发送ping

4.3、端口扫描Nmap

nmap扫描当前主机开放端口,默认是1-10000。

wget https://nmap.org/dist/nmap-7.93-1.x86_64.rpm
wget https://nmap.org/dist/nmap-7.93.tar.bz2 #源码包
cd nmap-7.93
./configure
make
su root
make install
#sP ping 扫描
nmap -sP 10.149.1.0-255 -n   2>/dev/null
nmap -sP 10.149.1.0/24 -n   2>/dev/null
nmap -sP 10.149.1.0/24 -n   2>/dev/null |grep address

#sU UDP扫描
nmap -sU 192.168.1.0

#sS SYN半开放扫描
最大的好处是不会进行三次握手,只需要发送SYN即可获取对方主机信息,不会留下日志信息,默认是TCP syn
nmap -sS 192.168.1.0

nmap -O  -sV -A 4  192.168.1.0
nmap -traceroute 192.168.1.0
nmap --script 脚本

4.4、链路探测工具:tracepath命令;traceroute命令; tracert

默认四层使用UDP协议发送探测数据包,而某些设备仅安装了tracepath,tracepath比traceroute更基础,同时tracepath不需要root权限。

traceroute[参数][主机]

#示例
sudo apt install traceroute
traceroute -m 10 jb51.net           #把跳数设置为10次;
traceroute -n jb51.net              #注:显示IP地址,不查主机名。
traceroute -p 6888 jb51.net         #注:探测包使用的基本UDP端口设置6888
traceroute -q 4 jb51.net            #注:把探测包的个数设置为值4;
traceroute -r jb51.net              #注:绕过正常的路由表,直接发送到网络相连的主机;
traceroute -w 5 jb51.net            #注:把对外发探测包的等待响应时间设置为5秒;
traceroute -T www.baidu.com         #使用tcp进行trace
traceroute -T -p 443 www.baidu.com  #trace 443端口

traceroute 180.101.49.12 			#默认使用udp
traceroute 180.101.49.12 -I 		#指定icmp
traceroute 180.101.49.12 -T 		#指定tcp,默认80端口
traceroute -T -p 443 180.101.49.12 	#指定tcp,端口443
traceroute -T --sport=30000 www.baidu.com -q 10 -n  #执行tcp测试,源端口30000,测试10个,不进行反向解析

命令参数:

-I 使用ICMP回应取代UDP资料信息。
-T –tcp Use TCP SYN for tracerouting (default port is 80)
-p port –port=port Set the destination port to use.
-i 指定网络接口,对于多个网络接口有用。比如 -i eth1 或-i ppp1等;
-m 把在外发探测试包中所用的最大生存期设置为max-ttl次转发,默认值为30次;
-n 显示IP地址,不查主机名。当DNS不起作用时常用到这个参数;
-p port 探测包使用的基本UDP端口设置为port ,默认值是33434
-q n 在每次设置生存期时,把探测包的个数设置为值n,默认时为3;
-r 绕过正常的路由表,直接发送到网络相连的主机;
-w n 把对外发探测包的等待响应时间设置为n秒,默认值为3秒;
-d 使用Socket层级的排错功能。
-f 设置第一个检测数据包的存活数值TTL的大小。
-F 设置勿离断位。
-g 设置来源路由网关,最多可设置8个。
-s 设置本地主机送出数据包的IP地址。
-t 设置检测数据包的TOS数值。
-v 详细显示指令的执行过程。
-x 开启或关闭数据包的正确性检验。

1)tracert和traceroute区别:

1>、racert工作原理及过程
1.tracert向目的地址发送ICMP request报文,且第一个ICMP request的TTL值为1;中间的路由设备收到报文后,因为TTL值为0,返回ICMP超时报文;本机由此获得下一跳信息。
2.逐步增加TTL,获取到过路路由的全部IP。
3.ICMP request报文到达目的地址,目的地址设备回复ICMP replay。

2> traceroute工作原理及过程
1.traceroute向目的地址的某端口(大于30000)发送UDP报文,第一个报文的TTL值为1;中间的路由设备收到报文后,因为TTL值为0,返回ICMP超时报文;本机由此获得下一跳信息。目的端口从33434开始,每一个报文会把目的端口增加1,直到33534,目的是为了区分返回的报文对应哪个发出的报文。
2.逐步增加TTL,获取到过路路由的全部IP。
3.UDP报文到达目的地址,目的地址回复ICMP端口不可达报文。
3> 总结:
1、共同点:基本原理都是利用IP报文的TTL字段。
2、不同点:tracert是使用ICMP Echo Request报文去实现;traceroute是使用UDP报文去实现,所以最后一跳设备返回的报文也不同:tracert返回ICMP replay;traceroute返回的则是ICMP 端口不可达;

2)Tracepath与Traceroute比较

tracepath和之间的主要区别在于traceroute可用选项和用户权限。Tracepath使用 UDP 数据包跟踪到指定目的地的路径。Traceroute将网络路径映射到指定的目的地,部分选项需要root权限。

4.5、链路探测+统计:mtr命令

MTR 是一个强大的网络诊断工具,像 traceroute + ping 命令的组合,管理员能够用它诊断和隔离网络错误,并向上游提供商提供有关网络状态的有用报告。mtr 默认使用ICMP协议发送探测数据包。若使用TCP或者UDP 发送数据包,需另外指定指定可选项。

mtr -i 0.1 -n -c 100 www.baidu.com  #每0.1秒返回一次结果,ping100次,并且不对IP地址做域名解析
mtr -rwc 50 -i 0.2 www.baidu.com   
mtr -i 0.1 -n -c 100 -T www.baidu.com 
mtr -i 0.1 -rn -c 100 -T www.baidu.com            #使用tcp进行探测
mtr -i 0.1 -rn -c 100 -T -P 443 www.baidu.com     #探测tcp 443端口
mtr -rc 100 -i 0.1 www.baidu.com

#输出参数的解释:
        Loss% – 丢包率,单位是”%”;
        Snt – sent包的数量
        Last – 最后一个包的延时
        Avg – 所有包的平均延时
        Best – 延时最小的包
        Wrst – 延时最大的包
        StDev – 标准偏差

命令参数:

-n no-dns(或简写为-n) #不对IP地址做域名解析
-s #用来指定ping数据包的大小
-i #使用这个参数来设置ICMP返回之间的要求默认是1秒
-a #来设置发送数据包的IP地址 这个对一个主机由多个IP地址是有用的
-r/-–report #报告模式显示(仅显示结果,不动态显示)
-c #每秒发送多少包,默认为10个。英文是(–report-cycles COUNT)
-w #选项标志使用长版本的主机名,您可以看到每个跳的完整主机名(–report-wide的缩写)
-4 #IPv4
-6 #IPv6
mtr 默认使用ICMP协议发送探测数据包。
若使用TCP或者UDP 发送数据包。需另外指定指定可选项
-u –udp #Use UDP datagrams instead of ICMP ECHO.
-T –tcp #Use TCP SYN packets instead of ICMP ECHO. PACKETSIZE is ignored, since SYN packets can not contain data.
-P PORT –port PORT #The target port number for TCP traces.

4.6、Netcat命令(nc命令)

netcat 是网络工具中的瑞士军刀,它能通过 TCP 和 UDP 在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。

ncat [options] [hostname] [port]

nc -z -v -n 172.31.100.7 21-25       #连接超时?
nc -nvz 180.101.49.11 80            #测试成功
nc -vz www.baidu.com 443 #可以运行在 TCP 或者 UDP 模式,默认是 TCP,-u 参数调整为 UDP。
nc -l 1567        #netcat 命令在 1567 端口启动了一个 TCP 服务器,所有的标准输出和输入会输出到该端口。输出和输入都在此 Shell 中展示。
nc 172.31.100.7 1567    #nc client使用这条命令连接到nc server
nc -l 1567 < file.txt                #使用nc命令,启动作为server端,导入文件
nc -n 172.31.100.7 1567 > file.txt    #使用nc命令连接到server端,获取文件并进行保存

nc -l 1567 > file.txt                #当然也可以反过来操作
nc 172.31.100.23 1567 < file.txt
tar -cvf – dir_name | nc -l 1567            #server端,先打包,再发送
nc -n 172.31.100.7 1567 | tar -xvf -        #client端,先接收,再解压

tar -cvf – dir_name| bzip2 -z | nc -l 1567            #增加了一步压缩命令
nc -n 172.31.100.7 1567 | bzip2 -d |tar -xvf -
nc localhost 1567 | mcrypt –flush –bare -F -q -d -m ecb > file.txt        #使用 mcrypt 工具加密数据。
mcrypt –flush –bare -F -q -m ecb < file.txt | nc -l 1567                #使用 mcrypt 工具解密数据
cat video.avi | nc -l 1567 #视频流
nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 -       

命令参数:

-d 脱离命令窗口,在后台运行,常用于后门建立过程。
-e 执行某个程序,常用于后门建立过程
-G gateway 设置网关,常用于突破内网限制
-g num 路由跳数
-i sec 设置发送每一行数据的时间间隔
-l 设置netcat处于监听状态等待连接。
-L 设置netcat处于监听状态等待连接,当客户端断开,服务端依旧回到等待状态。
-n 设置netcat只识别ip地址,不要使用DNS反向查询IP地址的域名。
-o file 设置传输十六进制的数据。
-p port 设置本地监听的端口号。
-r 设置netcat随机化的端口号。
-s addr 设置netcat源地址。
-t 回复telnet的请求数据包。
-u 设置netcat使用UDP模式
-v 显示错误提示信息
-w secs 设置连接超时秒数。
-z 设置扫描模式,表示发送的数据包中不包含任何payload,使用 0 I/O,连接成功后立即关闭连接, 不进行数据交换。

4.7、telnet命令

telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。但仍然有很多别的系统可能采用了telnet方式来提供远程登录,因此弄清楚telnet客户端的使用方式仍是很有必要的。telnet命令还可做别的用途,比如确定远程服务的状态,比如确定远程服务器的某个端口是否能访问。

实例1:远程服务器无法访问
telnet 192.168.120.209
Trying 192.168.120.209...
telnet: connect to address 192.168.120.209: No route to host
telnet: Unable to connect to remote host: No route to host

处理这种情况方法:
            (1)确认ip地址是否正确?
            (2)确认ip地址对应的主机是否已经开机?
            (3)如果主机已经启动,确认路由设置是否设置正确?(使用route命令查看),比如默认路由问题,如果有的话就不要再手动指定了
            (4)如果主机已经启动,确认主机上是否开启了telnet服务?(使用netstat命令查看,TCP的23端口是否有LISTEN状态的行)
            (5)如果主机已经启动telnet服务,确认防火墙是否放开了23端口的访问?(使用iptables-save查看)
            
实例2:域名无法解析
telnet www.baidu.com
www.baidu.com/telnet: Temporary failure in name resolution

处理这种情况方法:
            (1)确认域名是否正确
            (2)确认本机的域名解析有关的设置是否正确(/etc/resolv.conf中nameserver的设置是否正确,如果没有,可以使用nameserver 8.8.8.8)
            (3)确认防火墙是否放开了UDP53端口的访问(DNS使用UDP协议,端口53,使用iptables-save查看)

实例3:Connection refused
telnet 192.168.120.206
Trying 192.168.120.206...
telnet: connect to address 192.168.120.206: Connection refused
telnet: Unable to connect to remote host: Connection refused

处理这种情况:
            (1)确认ip地址或者主机名是否正确?
            (2)确认端口是否正确,是否默认的23端口

命令参数:

-8 允许使用8位字符资料,包括输入与输出。
-a 尝试自动登入远端系统。
-b<主机别名> 使用别名指定远端主机名称。
-c 不读取用户专属目录里的.telnetrc文件。
-d 启动排错模式。
-e<脱离字符> 设置脱离字符。
-E 滤除脱离字符。
-f 此参数的效果和指定”-F”参数相同。
-F 使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机。
-k<域名> 使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。
-K 不自动登入远端主机。
-l<用户名称> 指定要登入远端主机的用户名称。
-L 允许输出8位字符资料。
-n<记录文件> 指定文件记录相关信息。
-r 使用类似rlogin指令的用户界面。
-S<服务类型> 设置telnet连线所需的IP TOS信息。
-x 假设主机有支持数据加密的功能,就使用它。
-X<认证形态> 关闭指定的认证形态。

五、压力测试类

在这里插入图片描述
常见网络性能指标:

**响应时间:**是指系统对请求作出响应的时间。
延时:表示从网络请求发出后,一直到收到远端响应,所需要的时间延迟。在不同场景中,这一指标可能会有不同含义。比如,它可以表示,建立连接需要的时间(比如 TCP 握手延时),或一个数据包往返所需的时间(比如 RTT)。


**带宽:**表示链路的最大传输速率,单位通常为 b/s (比特 / 秒)。
吞吐量:表示单位时间内成功传输的数据量,单位通常为 b/s(比特 / 秒)或者 B/s(字节 / 秒)。吞吐量受带宽限制,而吞吐量 / 带宽,也就是该网络的使用率。
流量/bps:bps 比特率,是指单位时间内传送的比特(bit)数,单位为bps(bit per second)


PPS:是 Packet Per Second(包 / 秒)的缩写,表示以网络包为单位的传输速率。PPS 通常用来评估网络的转发能力,比如硬件交换机,通常可以达到线性转发(即 PPS 可以达到或者接近理论最大值)。而基于 Linux 服务器的转发,则容易受网络包大小的影响。


CPS 秒新建连接数:每秒新建连接数-Connection Per Second (CPS)每秒新建连接数定义了新建连接的速率。当新建连接的速率超过规格定义的每秒新建连接数时,新建连接请求将被丢弃。


QPS每秒查询率(Query Per Second):每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准.在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。

示例eg:每秒请求量。假如每秒请求量10万,假如机器为16核,那么启16个线程同时工作, 那么每个线程同时的请求量= 10万/ 16核 = 6250QPS。
按照二八原则,一天24小时,忙时=240.2 = 4.8小时。
则平均一天总请求量=4.8 * 3600 10万QPS = 172亿8千万。
那么每秒请求10万并发量,每天就能达到172亿的PV。
丢包率: 如果客端端发10万请求,服务端只处理了8万,那么就丢了2万。丢包率=2/10 = 20%。丢包率是越小越好,最好是没有。去除,网络丢包,那么就要考虑内核里的丢包 问题,因此要考虑网卡的吞吐量,同一时间发大多请求过来,内核会不会处理不过来, 导致丢包。
重传率(重新传输的网络包比例);
并发用户数:并发用户数是指系统可以同时承载的正常使用系统功能的用户的数量。
高并发连接指的是连接的数量。对服务端来说,一个套接字对就是一个连接,连接和本地 文件描述符无关,不受本地文件描述符限制,只跟内存有关,假设一个套接字占用服务器8k内存,那么1G内存=1024
1024/8 = 131072。因此连接数跟内存有关。1G = 10万左右连接,当然这是理论,实际要去除内核占用,其他进程占用,和本进程其他占用。假设一个机器32G内存,那个撑个100万个连接是没有问题的。如果是单个进程100万连,那就更牛B了,但一般都不会这么做,因为如果此进程宕了,那么,所有业务都影响了。所以一般都会分布到不同进程,不同机器,一个进程出问题了,不会影响其他进程的处理。

PV : 每天的总访问量pave view,
PV = QPS * (24
0.2) * 3600 (二八原则)


5.1、网络接口层和网络层的性能测试:pktgen工具

网络接口层和网络层,它们主要负责网络包的封装、寻址、路由以及发送和接收。在这两个网络协议层中,最重要的性能指标:每秒可处理的网络包数 PPS;Linux 内核自带的高性能网络测试工具 pktgen。pktgen 作为一个内核线程来运行,需要你加载 pktgen 内核模块后,再通过 /proc 文件系统来交互。pktgen 在每个 CPU 上启动一个内核线程,并可以通过 /proc/net/pktgen 下面的同名文件,跟这些线程交互;而 pgctrl 则主要用来控制这次测试的开启和停止。
在使用 pktgen 测试网络性能时,需要先给每个内核线程 kpktgend_X 以及测试网卡,配置 pktgen 选项,然后再通过 pgctrl 启动测试。

$ modprobe pktgen       #如果 modprobe 命令执行失败,说明你的内核没有配置 CONFIG_NET_PKTGEN 选项。这就需要你配置 pktgen 内核模块(即 CONFIG_NET_PKTGEN=m)后,重新编译内核,才可以使用。
$ ps -ef | grep pktgen | grep -v grep
$ ls /proc/net/pktgen/
kpktgend_0  kpktgend_1  pgctrl

5.2、Windows 防火墙测试、端口扫描 hping3

1 防火墙测试
    hping3 -S -c 1000000 -a 10.10.10.10 -p 21 10.10.10.10   #以 LandAttack 方式测试目标防火墙 (Land Attack 是将发送源地址设置为与目标地址相同,诱使目标机与自己不停地建立连接):

2 端口扫描
    hping3 -I eth0 -S 192.168.10.1 -p 80        #探测目标机的80端口是否开放

3 Idle扫描
    Idle 扫描 (Idle Scanning) 是一种匿名扫描远程主机的方式,该方式也是由 Hping3 的作者 Salvatore Sanfilippo 发明的,目前 Idle 扫描在 Nmap 中也有实现。
    该扫描原理是:寻找一台 idle 主机 (该主机没有任何的网络流量,并且 IPID 是逐个增长的),攻击端主机先向 idle 主机发送探测包,从回复包中获取其 IPID。冒充 idle 主机的 IP 地址向远程主机的端口发送 SYN 包 (此处假设为 SYN 包),此时如果远程主机的目的端口开放,那么会回复 SYN/ACK,此时 idle 主机收到 SYN/ACK 后回复 RST 包。然后攻击端主机再向 idle 主机发送探测包,获取其 IPID。那么对比两次的 IPID 值,我们就可以判断远程主机是否回复了数据包,从而间接地推测其端口状态。

4 拒绝服务攻击DOS
    hping3 -I eth0 -a 192.168.10.99 -S 192.168.10.33 -p 80 -i u1000 #对目标机发起大量 SYN 连接,伪造源地址为 192.168.10.99,并使用1000微秒的间隔发送各个 SYN 包
    hping3 -S -p 80 -i u1 192.168.1.160         

5 DDOS攻击 (分布式拒绝服务攻击)
    hping3 -c 10000 -d 120 --udp -w 64 -p 80 --flood --rand-source www.baidu.com        #UDP ddos攻击
    hping3 -c 10000 -d 120 --icmp -w 64 -p 80 --flood --rand-source www.baidu.com       #ICMP ddos攻击
    hping3 -c 10000 -d 120 -S -w 64 -p 80 --flood --rand-source www.baidu.com           #SYN ddos攻击
    hping3 -c 10000 -d 120 -A -w 64 -p 80 --flood --rand-source www.baidu.com           #ACK ddos攻击

6 木马功能
    如果 Hping3 能够在远程主机上启动,那么可以作为木马程序启动监听端口,并在建立连接后打开 shell 通信。与 netcat 的后门功能类似。

7 文件传输
    Hping3 支持通过 TCP/UDP/ICMP 等包来进行文件传输。相当于借助 TCP/UDP/ICMP 包建立隐秘隧道通讯。实现方式是开启监听端口,对检测到的签名 (签名为用户指定的字符串) 的内容进行相应的解析。

5.3、带宽压测:TCP、UDP

Iperf 是一个 TCP/IP 和 UDP/IP 的性能测量工具,通过调谐各种参数可以测试TCP的最大带宽,并报告带宽、延迟,最大段和最大传输单元大小等统计信息。注:iperf3不支持双工模式测试。

带宽测试通常采用UDP模式,因为能测出极限带宽、时延抖动、丢包率。在进行测试时,首先以链路理论带宽作为数据发送速率进行测试,例如,从客户端到服务器之间的链路的理论带宽为100Mbps,先用 -b 100M进行测试,然后根据测试结果(包括实际带宽,时延抖动和丢包率),再以实际带宽作为数据发送速率进行测试,会发现时延抖动和丢包率比第一次好很多,重复测试几次,就能得出稳定的实际带宽。

Iperf工作原理:

Iperf主要的功能是测试基于特定路径的TCP连接的性能,我们知道TCP连接调整最基本的措施是调整TCP窗口的大小,窗口大小控制在任何节点网络中可以存在的数据大小。如果该值太小,发送者将会在某段时间处于空闲状态,从而影响发送的性能。TCP窗口大小的理论值为链路瓶颈带宽与往返时延的乘积:

TCP_Window=Bottleneck_BandwidthRound_Trip_Time
例如链路瓶颈带宽为45Mbps,往返时延为42ms(可以通过ping来测试),那么窗口的理论值为:
45Mbps
42ms=(45e6)(42*e-3)=1890000 bits=230KByte
调节窗口大小即可以理论值为基准,在该值上慢慢增大或减少,即可获得最好的结果。

Iperf测试TCP带宽的原理:

在客户端和服务器端建立连接(三次握手)后,客户端发送一定大小的数据报,并记下发送的时间, 或者客户端在一定的时间内发送数据,并记下发送的总数据。带宽的大小等于发送的总数据除以发送的总时间。对服务器端来说,就是在连接建立时间内,接收的总数据除以所花时间即为服务器端所测得的带宽。MSS的大小通过TCP内核接口函数直接获得。

Iperf测试UDP的性能:

客户端可以指定UDP数据流的速率。客户端发送数据时,将根据客户提供的速率计算数据报发送之间的时延。另外客户还可以指定发送数据报的大小。每个发送的数据报包含一个ID号,用来惟一地标识该报文。服务器端则根据该ID号来确定数据报丢失和乱序。当把UDP报文大小设置可以将整个报文放入IP层的包(packet)内时,那么UDP所测得的报文丢失数据即为IP层包的丢失数据。这提供了一个有效的测试包丢失情况的方法。数据报传输延迟抖动 (Jitter)的测试由服务器端完成,客户发送的报文数据包含有发送时间戳,服务器端根据该时间信息和接收到报文的时间戳来计算传输延迟抖动。传输延迟抖动反映传输过程中是否平滑。由于它是一个相对值,所以并不需要客户端和服务器端时间同步。

1、UDP 模式
    服务器端配置
        iperf -u -s

    客户端配置 
        iperf -u -c 192.168.1.1 -b 100M -t 60        #在udp模式下,以100Mbps为数据发送速率,客户端到服务器192.168.1.1上传带宽测试,测试时间为60秒。
        iperf -u -c 192.168.1.1 -b 5M -P 30 -t 60    #客户端同时向服务器端发起30个连接线程,以5Mbps为数据发送速率。
        iperf -u -c 192.168.1.1 -b 100M -d -t 60    #以100M为数据发送速率,进行上下行带宽测试。
2、TCP模式
    服务器端配置    
        iperf -s

    客户端
        iperf -c 192.168.1.1 -t 60                    #在tcp模式下,客户端到服务器192.168.1.1上传带宽测试,测试时间为60秒。
        iperf -c 192.168.1.1 -P 30 -t 60            #客户端同时向服务器端发起30个连接线程。
        iperf -c 192.168.1.1 -d -t 60                #进行上下行带宽测试。

命令参数:

1、server端参数:
-s 指定server端
-p 指定端口(要和客户端一致)
-B 绑定ip地址
-u udp协议,,默认是tcp协议
-i sec 以秒为单位显示报告间隔。#iperf是client端向server端发送数据;server端显示的是接收速率
-o 将报告和错误信息输出到文件eg:iperf -c 222.35.11.23 -o c:/iperflog.txt

2、 client端参数:
-c 指定client端
-p 指定端口(要和服务器端一致)
-B 绑定客户端的ip地址
-4 指定ipv4
-f 格式化带宽数输出
-n 指定传输的字节数
-b 使用带宽数量
-u 指定udp协议
-w TCP滑动窗口的大小
-i sec 以秒为单位显示报告间隔。client 显示的是发送速率

5.4、Netperf 网络性能测试

Netperf 是一种网络性能测量工具,主要基于 TCP 或 UDP 的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf 工具以 client/server 方式工作。server 端是 netserver,用来侦听来自 client 端的连接,client 端是 netperf ,用来向 server 发起网络测试。

wget -c "https://codeload.github.com/HewlettPackard/netperf/tar.gz/netperf-2.5.0" -O netperf-2.5.0.tar.gz
tar xvf netperf-2.5.0.tar.gz 
cd netperf-netperf-2.5.0/
./configure 
make && make install
netperf -h   #有输出说明安装成功

#示例
netperf -H 192.168.1.12  #查看输出结果吞吐量(Throughput,单位10^6bits/sec,除以8换算成Mbit/s,也就是带宽),下载速度理论上是带宽的八分之一

5.5、应用层压测工具ab

ab 是 Apache Benchmark 的缩写,它的用途就是对 HTTP 服务端发起测试,以获得性能指标(Benchmark)。它是一个轻量级的工具,因为相对其他重量级的工具比如 LoadRunner 或者 JMeter 来说,ab 只要一行命令就可以发起压测了ab 本身不是独立安装的,而是在 apache2-utils 工具包里。

apt install apache2-utils
ab -c 100 -n 10000 目标URL #-c 100 这个参数,让 ab 发起了 100 个并发的请求,-n 10000 指定了总共发送的请求量。如果目标 URL 只是站点名本身,还是需要在结尾处加上“>/”,要不然 ab 会报这个错误:ab: invalid URL
ab -k -c 100 -n 10000 目标URL   #-k 参数是启用长连接
ab -c 10 -n 100 https://www.baidu.com/abc  #压测baidu,10 个并发,一共 100 次请求

1) 发送get请求

ab -n1 -c1 "http://192.168.32.46:8081/"   #n 要执行请求数,默认会执行一个请求;-c 一次执行多个请求的数量,默认是一次一个请求。
ab -n 200 -c 20 -k http://127.0.0.1:8080/mai?id=101

2)发送Post请求

ab -n 2000 -c 200 -k -p ~/postfile -T application/x-www-form-urlencoded http://127.0.0.1:8080/test   #发送post请求,要把参数存到一个文件里,这个文件叫postfile(这个文件名字可以随便取,没有扩展名),然后写-p 后面跟文件的路径。

ab -n1 -c1   -p "/root/gzf/ab_test/post.txt" -T "application/json" "http://192.168.32.76:81/tokenServer/get/token"

 ab -n100 -c100 -t 900 -v4 -p "C:\Apache24\parameter\browse_getPage.txt" -T "application/x-www-form-urlencoded; charset=UTF-8" -H “Cookie: Hm_lvt_6b1cbafa30155b9daeb173be8dc6476b=1525749629,1525768065,1525772656,1525827834; 80e9091559d17e2f58a5956172b00223=557d09269486be42f25c255a7cc2f26f; 4ec65e89eca3bfb0931cdef9658e0fed=aad85e8637ba2d2dd102915939661bec; Hm_lpvt_6b1cbafa30155b9daeb173be8dc6476b=1525846910” http://localhost/Browse/getPage #-p 包含数据到POST的文件。 还请记住设置-T,-T Content-type用于POST / PUT数据的内容类型内容类型标题,例如:'application/x-www-form-urlencoded' 默认是'text/plain'

命令参数:

-n(常用) 发出x个请求
-c(常用) 并发一次发出的多个请求数,也就是模拟x个并发
-t(常用) 将花费在基准测试上的时间限制为最长秒,在x秒内发请求
-s(常用) 等待每个响应的最大超时秒数,默认30秒
-p(常用) 发送POST请求时需要上传的文件,此外还必须设置-T参数。
-u(常用) 发送PUT请求时需要上传的文件,此外还必须设置-T参数。
-T(常用) 内容类型用于POST/PUT数据的内容类型标题,默认值为text/plain。例如:application/x-www-form-urlencoded,
-k(常用) 使用HTTP KeepAlive功能
-b TCP发送/接收缓冲区的窗口大小(字节)
-B 地址进行传出连接时要绑定到的地址
-v 打印版本号并退出
-w 在HTML表格中打印结果
-i 使用HEAD而不是GET
-x 要作为表属性插入的字符串
-y 要作为tr属性插入的字符串
-z 要作为td或th属性插入的字符串
-C 添加cookie,例如“Apache=1234”。(可重复)
-H 添加任意标题行,例如“接受编码:gzip”
-A 添加基本的WWW身份验证,属性是以冒号分隔的用户名和密码。
-P 添加基本代理身份验证,属性是以冒号分隔的用户名和密码。
-X 要使用的代理服务器和端口号
-V 打印版本号并退出
-d 不要在表格中显示已送达的百分位数。
-S 不显示服务于表格的百分位数。不显示置信度估计器和警告。
-q 执行超过150个请求时不显示进度
-l 接受可变文档长度(用于动态页面)
-g 将收集的数据输出到gnuplot格式文件。
-e 输出提供百分比的CSV文件
-r 套接字接收错误时不退出。
-m 方法名
-h 显示帮助信息
-n 要执行请求数,默认会执行一个请求
-c 一次执行多个请求的数量,默认是一次一个请求。
-t 用于基准测试的最大秒数,使用它在固定的总时间内对服务器进行基准测试。默认情况下,没有时间限制。
-s 超时之前等待的最大秒数。 默认值是30秒。
-b TCP发送/接收缓冲区的大小,以字节为单位。
-B 进行传出连接时要绑定的地址。
-p 包含数据到POST的文件。 还请记住设置-T。
-u 包含PUT数据的文件。 还请记住设置-T 。
-T Content-type用于POST / PUT数据的内容类型内容类型标题,例如:‘application/x-www-form-urlencoded’ 默认是’text/plain’
-v verbosity 要打印多少个疑难解答信息,设置详细级别 – 4和以上打印标题信息,3和以上打印响应代码(404,200等),2和以上打印警告和信息。
-w 在HTML表格中打印结果。
-i 使用HEAD代替GET。
-x 用作<table>的属性的字符串。 属性被插入<table here>。
-y 用作<tr>的属性的字符串。
-z 用作<td>的属性的字符串。
-C 将cookie添加到请求。 参数通常采用名称=值对的形式。 这个字段是可重复的。
-H attribute 例如 ‘Accept-Encoding: gzip’ 插入所有普通标题行之后。(重复)
-A 添加基本的WWW认证,该属性是一个冒号分隔的用户名和密码,auth-username:password
-P 添加基本代理验证,属性是一个冒号分隔的用户名和密码,proxy-auth-username:password
-X 使用代理服务器和端口号。
-V 打印版本号并退出。
-k 使用HTTP KeepAlive功能。
-d 不要显示百分点服务表。
-S 不要显示信心估计和警告。
-q 做超过150个请求时不要显示进度。
-g 将收集的数据输出到gnuplot格式文件。
-e 输出提供百分比的CSV文件。
-r 不要退出套接字接收错误。
-h 显示使用情况信息(此消息)。
-Z 密码套件指定SSL / TLS密码套件(请参阅openssl密码)
-f 指定SSL / TLS协议 (SSL3, TLS1, TLS1.1, TLS1.2 or ALL)

5.6、应用程序的实际性能压测:wrk

当你用 iperf 或者 ab 等测试工具,得到 TCP、HTTP 等的性能数据;但这些数据不能表示应用程序的实际性能,比如,你的应用程序基于 HTTP 协议,为最终用户提供一个 Web 服务。这时,使用 ab 工具,可以得到某个页面的访问性能,但这个结果跟用户的实际请求,很可能不一致。因为用户请求往往会附带着各种各种的负载(payload),而这些负载会影响 Web 应用程序内部的处理逻辑,从而影响最终性能。为了得到应用程序的实际性能,就要求性能工具本身可以模拟用户的请求负载,可以用 wrk、TCPCopy、Jmeter 或者 LoadRunner 等实现这个目标。

其中,wrk是一种现代HTTP基准测试工具,能够在单个多核CPU上运行时产生大量负载。它结合了多线程设计和可扩展的事件通知系统,如epoll和kqueue,以及使用了redis的’ae’事件循环,可以用很少的线程压出很大的并发量。wrk 最大的优势,是其内置的 LuaJIT,可以用来实现复杂场景的性能测试。wrk 在调用 Lua 脚本时,可以将 HTTP 请求分为三个阶段,即 setup、running、done;wrk 需要掉用 Lua 脚本,来构造请求负载。这对于大部分场景来说,可能已经足够了 。不过,它的缺点也正是,所有东西都需要代码来构造,并且工具本身不提供 GUI 环境。像 Jmeter 或者 LoadRunner(商业产品),则针对复杂场景提供了脚本录制、回放、GUI 等更丰富的功能,使用起来也更加方便。

git clone https://github.com/wg/wrk.git wrk
cd wrk
make
ln -s /xxx/xxx/wrk /usr/local/bin

#示例
wrk -t10 -c30 -d 2s -T5s --latency http://www.baidu.com  #t:需要模拟的线程数;-c:需要模拟的连接数;-d:测试的持续时间;--timeout 或 -T:超时的时间 ;--latency:显示延迟统计;-s 或 --script: lua脚本,使用方法往下看;-H, --header: 添加http header, 比如. "User-Agent: wrk"
wrk -c 1000 -t 2 http://192.168.0.30/    # -c表示并发连接数1000,-t表示线程数为2
wrk -c 1000 -t 2 -s auth.lua http://192.168.0.30/   #

命令参数:

-t:需要模拟的线程数
-c:需要模拟的连接数
-d:测试的持续时间
–timeout 或 -T:超时的时间
–latency:显示延迟统计
-s 或 –script: lua脚本,使用方法往下看
-H, –header: 添加http header, 比如. “User-Agent: wrk”

1)网络性能指标:延迟、bps、pps、qps、丢包率、并发数等获取

延迟: ping hping3 ab工具
带宽: iperf
bps: pktgen工具 iperf ab工具 sar工具
pps: pktgen工具 wrk工具 sar工具
qps: ab工具 wrk工具
连接数: netstat/ss
连接跟总数: conntrack

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/35488.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注