一、网络管理命令套件
在Linux下提供了两套网络管理命令套件,一种是net-tools,一种是iproute2。先提供一种图展示一下net-tools跟iproute2各自提供的网络基础管理命令。
Net-tools 包含一系列程序,构成了 Linux 网络的基础。如今许多系统管理员仍结合使用ifconfig、route、arp和netstat等命令行工具(它们统称为net-tools),管理和排查各种网络配置。这类工具原先起源于BSD TCP/IP工具箱,旨在配置老式Linux内核的网络功能。自2001年以后,它在Linux社区的发展就止步不前了。Arch Linux和CentOS/RHEL 7等一些Linux发行版已经弃用了net-tools,其他发行版计划弃用net-tools,改而使用iproute2。
iproute2是另一个系列的网络配置工具,它旨在取代net-tools的功能。net-tools可以通过procfs(/proc)和ioctl系统调用,访问和更改内核网络配置,iproute2则通过网络链路套接字接口与内核进行联系。/proc接口比网络链路接口来得更笨拙。抛开性能不讲,iproute2的用户界面比net-tools的用户界面要来得直观。比如说,网络资源(比如链路、IP地址、路由和隧道等)用“对象”抽象进行了恰当的定义,你可以使用一致的语法来管理不同的对象。最重要的是,迄今为止iproute2一直在积极开发当中。
如果你仍在使用net-tools,是时候改用iproute2了,如果你想跟上Linux内核的最新最好的网络功能特性,更是如此。很可能有好多操作可以用iproute2来实现,却无法用net-tools来实现,无论是基于源的路由、服务质量、虚拟局域网(VLAN)、绑定,还是网桥其他什么操作。另外值得一提的是,网络管理器等更高级网络配置工具依赖iproute2。另外在CentOS7中如果你默认最小化安装系统,那么则不会提供net-tools套件而是直接使用iproute2套件,预示着什么你懂得?
安装及内置命令查看
net-tools
1 |
[root@localhost ~]# yum install net-tools |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@localhost ~]# rpm -ql net-tools /bin/netstat /sbin/arp /sbin/ether-wake /sbin/ifconfig /sbin/ipmaddr /sbin/iptunnel /sbin/mii-diag /sbin/mii-tool /sbin/nameif /sbin/plipconfig /sbin/route /sbin/slattach |
iproute2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
$ yum install iproute $ rpm -ql iproute /etc/iproute2 /etc/iproute2/ematch_map /etc/iproute2/group /etc/iproute2/rt_dsfield /etc/iproute2/rt_protos /etc/iproute2/rt_realms /etc/iproute2/rt_scopes /etc/iproute2/rt_tables /etc/sysconfig/cbq /etc/sysconfig/cbq/avpkt /etc/sysconfig/cbq/cbq-0000.example /usr/lib64/tc /usr/lib64/tc/experimental.dist /usr/lib64/tc/m_ipt.so /usr/lib64/tc/m_xt.so /usr/lib64/tc/normal.dist /usr/lib64/tc/pareto.dist /usr/lib64/tc/paretonormal.dist /usr/sbin/arpd /usr/sbin/bridge /usr/sbin/cbq /usr/sbin/ctstat /usr/sbin/genl /usr/sbin/ifcfg /usr/sbin/ifstat /usr/sbin/ip /usr/sbin/lnstat /usr/sbin/nstat /usr/sbin/routef /usr/sbin/routel /usr/sbin/rtacct /usr/sbin/rtmon /usr/sbin/rtpr /usr/sbin/rtstat /usr/sbin/ss /usr/sbin/tc |
二、net-tools套件网络管理命令
ifconfig:用于显示或配置网络设备(网络接口卡)的命令,英文全称是network interfaces configuring。
1 |
$ ifconfig [网络设备] [可选参数] |
[网络设备]
网络设备就是你要设置的网卡名称,如eth0、eth1等。
[可选参数]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
up #开启网络设备; down #关闭网络设备; arp #设定网络设备是否支持arp协议; -promisc #设置是否支持网卡的promiscuous模式,如果选择此参数,网卡将接收网络中发给它所有的数据包; -allmulti #设置是否支持多播模式,如果选择此参数,网卡将接收网络中所有的多播数据包; -a #显示全部接口信息; -s #显示摘要信息(类似于netstat -i); mtu <字节数> #设置网卡的最大传输单元(bytes),默认1500; address #为网卡设置IPv4地址; netmask <子网掩码> #设置网卡的子网掩码; -broadcast <地址> #为指定网卡设置广播协议; multicast #为网卡设置组播标志; txqueuelen <长度> #为网卡设置传输列队的长度; add #给指定网卡配置IPv6地址; del #删除指定网卡的IPv6地址; |
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# 显示全部接口信息,包括IP地址、物理地址、子网掩码、广播地址等等; $ ifconfig # 显示指定接口信息; $ ifconfig eth0 # 为eth0接口设置IP地址,临时生效; $ ifconfig eth0 192.168.10.1 netmask 255.255.255.0 # 一个网卡设置多IP,为eth0网卡设置别名即可; $ ifconfig eth0:0 192.168.10.2 netmask 255.255.255.0 # 开启指定网卡; $ ifconfig eth0 up # 关闭指定网卡; $ ifconfig eth0 down |
arp:显示和修改“地址解析协议 (ARP)”缓存中的项目。
显示和修改“地址解析协议 (ARP)”缓存中的项目。ARP 缓存中包含一个或多个表,它们用于存储 IP 地址及其经过解析的以太网或令牌环物理地址。计算机上安装的每一个以太网或令牌环网络适配器都有自己单独的表。
1 |
$ arp [OPTIONS] |
[OPTIONS]
1 2 3 4 |
-v #显示详细信息; -n #以数字地址形式显示; -s hostname hw_addr #手工加入hostname的地址映射; -s hostname hw_addr #手工加入hostname的地址映射; |
示例
1 2 3 4 5 |
$ arp -v Address HWtype HWaddress Flags Mask Iface 10.116.23.247 ether 70:f9:6d:ee:67:af C eth0 112.74.99.247 ether 70:f9:6d:ee:67:af C eth1 Entries: 2 Skipped: 0 Found: 2 |
route:用于显示和操作IP路由表。
Route命令是用于操作基于内核ip路由表,它的主要作用是创建一个静态路由让指定一个主机或者一个网络通过一个网络接口,如eth0。当使用”add”或者”del”参数时,路由表被修改,如果没有参数,则显示路由表当前的内容。
1 |
$ route [OPTIONS] [CMD] |
[OPTIONS]
1 2 3 4 5 6 7 |
-c #显示更多信息; -n #以数字显示路由信息; -v #显示详细的处理信息; -F #显示发送信息; -C #显示路由缓存; -f #清除所有网关入口的路由表; -p #与add命令一起使用时使路由具有永久性; |
[CMD]
1 2 3 4 5 6 7 8 9 10 11 |
add #添加一条新路由; del #删除一条路由; -net #目标地址是一个网络; -host #目标地址是一个主机; netmask #当添加一个网络路由时,需要使用网络掩码; gw #路由数据包通过网关,注意,你指定的网关必须能够达到; metric #设置路由跳数; destination #指定该路由的网络目标; mask netmask #指定与网络目标相关的网络掩码(也被称作子网掩码); gateway #指定网络目标定义的地址集和子网掩码可以到达的前进或下一跃点IP地址; metric metric #为路由指定一个整数成本值标(从1至9999),当在路由表(与转发的数据包目标地址最匹配)的多个路由中进行选择时可以使用 ; |
示例
1)查看本机路由信息以数字显示
1 |
$ route -n |
2)添加一条默认路由,临时生效
1 2 3 |
$ route add default gw 192.168.10.1 # 或 $ route add –net 0.0.0.0 gw 192.168.10.1 |
3)对指定网卡添加一条默认路由
1 2 3 |
$ route add default dev eth0 gw 192.168.10.1 # 或 $ route add –net 0.0.0.0 dev eth0 gw 192.168.10.1 |
4)删除一条路由
1 2 3 |
$ route del default gw 192.168.10.1 # 或 $ route del –net 0.0.0.0 gw 192.168.10.1 |
对于路由想要设置长久有效,可以在设置IP地址的文件中添加一个网关,或者可以创建一个文件,用于保存路由信息永久生效。文件的创建与格式如下:
1 2 3 |
/etc/sysconfig/network-scripts/route-eth# DESTNATION via NEXTHOP 192.168.10.0/24 via 10.10.10.1 |
netstat:用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
1 |
$ netstat [OPTIONS] |
[OPTIONS]
1 2 3 4 5 6 7 8 9 10 |
-a #(all)显示所有选项,默认不显示LISTEN相关; -t #(tcp)仅显示tcp相关选项; -u #(udp)仅显示udp相关选项; -n #拒绝显示别名,能显示数字的全部转化成数字; -l #仅列出有在Listen(监听)的服務状态; -p #显示建立相关链接的程序名; -r #显示路由信息,路由表; -e #显示扩展信息,例如uid等; -s #按各个协议进行统计; -c #每隔一个固定时间,执行该netstat命令; |
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到。
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# 列出所有tcp端口; $ netstat -atnp # 列出所有udp端口; $ netstat -aunp # 列出所有处于监听状态的Sockets; $ netstat -lnp # 只列出所有监听tcp端口; $ netstat -ltnp # 只列出所有监听UNIX端口; $ netstat -lxnp # 显示所有端口的统计信息; $ netstat -snp # 显示TCP或UDP端口的统计信息; $ netstat -stnp $ netstat -sunp # 持续输出netstat信息,netstat将每隔一秒输出网络信息; $ netstat -cnp # 显示核心路由信息; $ netstat -rn # 显示网络接口列表; $ netstat -i |
三、iproute2套件网络管理命令
ip:支持设置IP、路由、策略路由,监控等。
Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig是net-tools套件中已被废弃使用的一个命令,许多年前就已经没有维护了。iproute2套件里提供了许多增强功能的命令,ip命令即是其中之一。目前在大多数Linux发行版中已经预装了iproute2套件,以及ifconfig套件,命令都可以使用。但最好还是学习iproute2套件,以后的趋势。CentOS7目前最小化安装系统以及不支持net-tools套件了,需要自己手动安装。
1 |
ip [OPTIONS] OBJECT {command | help} |
[OPTIONS] { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |-f[amily] { inet | inet6 | ipx | dnet | bridge | link } |-o[neline] | -t[imestamp] | -b[atch] [filename] |-rc[vbuf] [size]}
1 2 3 |
-V #查看ip命令套件的版本; -s #显示网卡统计数据,-s -s更详细信息; -d #显示详细信息; |
OBJECT { link | addr | addrlabel | route | rule | neigh | ntable |tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm |netns | l2tp | tcp_metrics | token | netconf }
link:网络接口属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# 查看网卡信息; $ ip link $ ip link show eth# # 查看网卡数据统计信息; $ ip -s link show # 开启或关闭网卡; $ ip link set eth# up|down # 开启或关闭网卡的ARP功能; $ ip link set eth# arp on|off # 开启或关闭网卡的多播功能; $ ip link set eth# multicast on|off # 更改网卡名称当前生效; $ ip link set eth# name eth# # 更改mtu大小; $ ip link set eth# mtu # # 开启或关闭接口混杂模式(抓包使用); $ ip link set eth# promisc on|off |
addr:协议地址,此命令等于net-tools提供的ifconfig命令
1 2 3 4 5 6 7 8 |
# 添加IP地址(可以添加多个IP并给别名); $ ip addr add IP/MASK dev eth# label eth#:# # 删除此网卡的IP地址; $ ip addr del IP/MASK dev eth# # 清除一个网卡的所有地址; $ ip addr flush eth#<br> |
route:路由管理,此命令等于net-tools提供的route命令
1 2 3 4 5 6 |
# 查看路由信息; $ ip route show # 设置路由; $ ip route add to 10.0.0.0/8 dev eth# via 172.16.16.1 $ ip route del to 10.0.0.0/8 dev eth# via 172.16.16.1<br> |
neigh:查看ARP条目,此命令类似net-tools提供的arp命令
1 2 |
# 查看ARP条目,可以查看接入你所在的局域网的设备的MAC地址对应的IP地址条目; $ ip neigh |
PS:上面介绍了一些常用对象,更多的一些对象自行查看帮助,对于你不清楚的指令,直接使用ip help查看帮助,也可以针对某个单独指令查看帮助,如ip link help。
ss:获取网络连接统计信息,此命令类似于netstat命令。
ss(Socket Statistics的缩写)命令可以用来获取socket统计信息,此命令输出的结果类似于netstat输出的内容,但它能显示更多更详细的TCP连接状态的信息,且比netstat更快速高效。它使用了TCP协议栈中tcp_diag(是一个用于分析统计的模块),能直接从获得第一手内核信息,这就使得ss命令快捷高效。在没有tcp_diag,ss也可以正常运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$ ss [OPTIONS] -h,--help #帮助信息 -V,--version #程序版本信息 -n,--numeric #不解析服务名称,以数字显示 -r,--resolve #解析主机名 -a,--all #显示所有套接字(sockets) -l,--listening #显示监听状态的套接字(sockets) -o,--options #显示计时器信息 -e,--extended #显示详细的套接字(sockets)信息 -m,--memory #显示套接字(socket)的内存使用情况 -p,--processes #显示使用套接字(socket)的进程 -i,--info #显示TCP内部信息 -s,--summary #显示套接字(socket)使用概况 -4,--ipv4 #仅显示IPv4的套接字(sockets) -6,--ipv6 #仅显示IPv6的套接字(sockets) -0,--packet #显示PACKET 套接字(socket) -t,--tcp #仅显示TCP套接字(sockets) -u,--udp #仅显示UCP套接字(sockets) -d,--dccp #仅显示DCCP套接字(sockets) -w,--raw #仅显示RAW套接字(sockets) -x,--unix #仅显示Unix套接字(sockets) |
实例1:显示所有established网络连接
1 2 3 |
$ ss State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 172.16.17.240:ssh |
实例2:显示所有网络连接的状态信息
1 2 3 4 5 6 7 8 9 10 11 |
$ ss -s Total: 1036 (kernel 1040) TCP: 21 (estab 1, closed 2, orphaned 0, synrecv 0, timewait 0/0), ports 14 Transport Total IP IPv6 * 1040 - - RAW 0 0 0 UDP 12 9 3 TCP 19 11 8 INET 31 20 11 FRAG 0 0 0 |
四、其他实用网络管理命令
nload:对网卡流量做监控的工具
1 2 3 4 5 |
$ tar zxvf nload-0.7.2.tar.gz $ cd nload-0.7.2 $ ./configure $ make && make install $ nload eth0 |
或者通过epel安装:
1 2 |
$ yum install release-epel $ yum install nload |
iftop:对流量详细情况做实时监控的工具
1 2 3 4 5 6 7 8 9 10 11 |
-i #设定监测的网卡,如:# iftop -i eth1; -B #以bytes为单位显示流量(默认是bits),如:iftop –B; -n #使host信息默认直接都显示IP,如:iftop –n; -N #使端口信息默认直接都显示端口号,如: iftop –N; -F #显示特定网段的进出流量,如:iftop -F 10.10.1.0/24或iftop -F 10.10.1.0/255.255.255.0; -h #(display this message),帮助,显示参数信息; -p #使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息; -b #使流量图形条默认就显示; -f #过滤计算包用的; -P #使host信息及端口信息默认就都显示; -m #设置界面最上边的刻度的最大值,刻度分五个大段显示,例:iftop -m 100M; |
iperf:网络性能评估工具
iperf是一个基于TCP/IP和UDP/IP的网络性能测试工具,它可以用来测量网络带宽和网络质量,还可以提供网络延迟抖动、数据包丢失率、最大传输单元等统计信息。系统管理人员可以根据这些信息从而定位网络问题。
安装
1 2 3 4 |
$ tar xvf iperf-3.0.tar.gz $ cd iperf $ make $ make install |
使用方式
1 2 3 4 5 6 7 8 9 |
$ iperf3 [options] -h #显示帮助信息; -s #将iperf以服务器端启动,默认端口是5201; -c #将iperf以客户端模式启动; -t #指定传输数据包的总时间。iperf将在指定的时间内,重复发送指定长度的数据包。默认是10s; -p #指定客户端跟服务器之间使用的线程数,默认是1,需要客户端与服务器同时使用此参数。会加快数据包的传输速度; -n #指定传输数据包的字节数。支持K,M,G; -i #指定每次报告之间的时间间隔,单位为秒,默认值时1; -F #指定文件作为数据流进行贷款测试; |
要使用iperf,首先启动一个服务器端,这里假定服务器端的IP地址为192.168.10.1,在此服务器上运行“iperf3 -s”即可启动iperf的服务器端模式。并打开端口5201。此时就可以在任意另一台服务器作为客户端执行iperf功能。以此来测试。
1 2 3 4 5 6 7 8 9 10 11 |
# 测试网卡的最大吞吐量和网卡平均带宽值。默认测试时间为10s,每1s报告一次; $ iperf3 –c 192.168.10.1 # 同样测试网卡,但是默认测试时间改为20s,每5s报告一次; $ iperf3 –c 192.168.10.1 –t 20 –i 5 # 测试网卡,指定一个5G的数据包,且每10s报告一次; $ iperf3 –c 192.168.10.1 -i 10 –n 500000000 # 客户端发送特定文件来测试网络; $ iperfs –c 192.168.10.1 –F web.tar.gz –i 5 –t 20<br> |