以下命令,★★★为必会内容,★★为了解内容。
Linux 网络命令涉及到以下几部分:
- 网络配置: ifconfig、 ip
- 连通性探测: ping、 traceroute、 telnet、 mtr
- 网络连接: netstat、 ss、 nc、 lsof
- 流量统计: ifstat、 sar、 iftop
- 交换与路由: arp、 arping、 vconfig、 route
- 防火墙: iptables、 ipset
- 域名: host、 nslookup、 dig、 whois
- 抓包: tcpdump
- 虚拟设备: tunctl、 brctl、 ovs
网络配置
最重要的两个工具就是 ifconfig 和 ip,这两个工具分别来自两个工具包 net-tools 和 iproute2,其中, net-tools 包还包含如 route、 netstat、 tc、 ifstat 等等常用的工具,不过, net-tools 包已经逐步在被 iproute2 包替换。
ifconfig ★★★
ifconfig命令常用于显示网络设备信息(比如 IP 地址、收发包及丢包情况等),以及修改网络设备的配置(如启停网卡,修改网卡 MTU,修改 IP、MAC 地址等)。
语法:
ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<网络设备类型><硬件地址>][io_addr<I/O地址>][irq<IRQ地址>][media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]
参数说明:
- add<地址> 设置网络设备IPv6的IP地址。
- del<地址> 删除网络设备IPv6的IP地址。
- down 关闭指定的网络设备。
- <hw<网络设备类型><硬件地址> 设置网络设备的类型与硬件地址。
- io_addr<I/O地址> 设置网络设备的I/O地址。
- irq<IRQ地址> 设置网络设备的IRQ。
- media<网络媒介类型> 设置网络设备的媒介类型。
- mem_start<内存地址> 设置网络设备在主内存所占用的起始地址。
- metric<数目> 指定在计算数据包的转送次数时,所要加上的数目。
- mtu<字节> 设置网络设备的MTU。
- netmask<子网掩码> 设置网络设备的子网掩码。
- tunnel<地址> 建立IPv4与IPv6之间的隧道通信地址。
- up 启动指定的网络设备。
- -broadcast<地址> 将要送往指定地址的数据包当成广播数据包来处理。
- -pointopoint<地址> 与指定地址的网络设备建立直接连线,此模式具有保密功能。
- -promisc 关闭或启动指定网络设备的promiscuous模式。
- [IP地址] 指定网络设备的IP地址。
- [网络设备] 指定网络设备的名称。
实例
显示网络设备信息
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:56:0A:0B:0C
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe0a:b0c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:172220 errors:0 dropped:0 overruns:0 frame:0
TX packets:132379 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:87101880 (83.0 MiB) TX bytes:41576123 (39.6 MiB)
Interrupt:185 Base address:0x2024
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2022 errors:0 dropped:0 overruns:0 frame:0
TX packets:2022 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2459063 (2.3 MiB) TX bytes:2459063 (2.3 MiB)
启动关闭指定网卡
# ifconfig eth0 down
# ifconfig eth0 up
为网卡配置和删除IPv6地址
# ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 //为网卡设置IPv6地址
# ifconfig eth0 del 33ffe:3240:800:1005::2/ 64 //为网卡删除IPv6地址
用ifconfig修改MAC地址
# ifconfig eth0 down //关闭网卡
# ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE //修改MAC地址
# ifconfig eth0 up //启动网卡
# ifconfig eth1 hw ether 00:1D:1C:1D:1E //关闭网卡并修改MAC地址
# ifconfig eth1 up //启动网卡
配置IP地址
# ifconfig eth0 192.168.1.56
//给eth0网卡配置IP地址
# ifconfig eth0 192.168.1.56 netmask 255.255.255.0
// 给eth0网卡配置IP地址,并加上子掩码
# ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255
// 给eth0网卡配置IP地址,加上子掩码,加上个广播地址
启用和关闭ARP协议
# ifconfig eth0 arp //开启
# ifconfig eth0 -arp //关闭
设置最大传输单元
# ifconfig eth0 mtu 1500
//设置能通过的最大数据包大小为 1500 bytes
ip ★★★
ip命令是iproute2软件包里面的一个强大的网络配置工具,和ifconfig类似,但功能更强大。ip命令可以用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的网络配置工具。另外,ifconfig 在 net-tools中是一个已被废弃使用的命令,许多年前就已经没有维护了。
语法
ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]
OPTIONS 选项
所有的选项都是以-字符开头,分为长、短两种形式。
-V,-Version 打印ip的版本并退出。
-s,-stats,-statistics 输出更为详尽的信息。如果这个选项出现两次或者多次,输出的信息将更为详尽。
-f,-family 强制使用指定的协议种类,包括:inet、inet6或者link。如果没有足够的信息告诉ip使用的协议种类,ip就会使用默认值inet或者any。link比较特殊,它表示不涉及任何网络协议。
-4 是-family inet的简写,指定使用的网络层协议是IPv4协议。
-6 是-family inet6的简写,指定使用的网络层协议是IPv6协议。
-0 是-family link的简写,表示不涉及任何网络协议。
-o,-oneline 输出信息每行记录单行输出,即使内容较多也不换行显示。如果你需要使用wc、grep等工具处理ip的输出,会用到这个选项。
-r,-resolve 查询域名解析系统,用获得的主机名代替主机IP地址。
OBJECT是你要管理或者获取信息的对象。
目前ip认识的对象包括:
link 网络设备
address 一个设备的协议(IP或者IPV6)地址
neighbour ARP或者NDISC缓冲区条目
route 路由表条目
rule 路由策略数据库中的规则
maddress 多播地址
mroute 多播路由缓冲区条目
tunnel IP上的通道
另外,所有的对象名都可以简写,例如:address可以简写为addr,甚至是a。
COMMAND设置
针对指定对象执行的操作,它和对象的类型有关。
一般情况下,ip支持对象的增加(add)、删除(delete)和展示(show或者list)。
有些对象不支持所有这些操作,或者有其它的一些命令。
对于所有的对象,用户可以使用help命令获得帮助,这个命令会列出这个对象支持的命令和参数的语法。
如果没有指定对象的操作命令,ip会使用默认的命令。一般情况下,默认命令是list,如果对象不能列出,就会执行help命令。
ARGUMENTS 命令参数
ARGUMENTS是命令的一些参数,它们倚赖于对象和命令。
ip支持两种类型的参数:flag和parameter。
flag由一个关键词组成;parameter由一个关键词加一个数值组成。
为了方便,每个命令都有一个可以忽略的默认参数。
例如,参数dev是ip link命令的默认参数,因此ip link ls eth0 等于 ip link ls dev eth0
实例
ip link show # 显示网络接口信息
ip link set eth0 up # 开启网卡
ip link set eth0 down # 关闭网卡
ip link set eth0 promisc on # 开启网卡的混合模式
ip link set eth0 promisc offi # 关闭网卡的混个模式
ip link set eth0 txqueuelen 1200 # 设置网卡队列长度
ip link set eth0 mtu 1400 # 设置网卡最大传输单元
ip addr show # 显示网卡IP信息
ip addr add 192.168.0.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1
ip addr del 192.168.0.1/24 dev eth0 # 删除eth0网卡IP地址
ip route show # 显示系统路由
ip route add default via 192.168.1.254 # 设置系统默认路由
ip route list # 查看路由信息
ip route add 192.168.4.0/24 via 192.168.0.254 dev eth0 # 设置192.168.4.0网段的网关为192.168.0.254,数据走eth0接口
ip route add default via 192.168.0.254 dev eth0 # 设置默认网关为192.168.0.254
ip route del 192.168.4.0/24 # 删除192.168.4.0网段的网关
ip route del default # 删除默认路由
ip route delete 192.168.1.0/24 dev eth0 # 删除路由
# 用ip命令显示网络设备的运行状态
[root@localhost ~]# ip link list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:00:1e:52 brd ff:ff:ff:ff:ff:ff
# 显示更加详细的设备信息
[root@localhost ~]# ip -s link list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
5082831 56145 0 0 0 0
TX: bytes packets errors dropped carrier collsns
5082831 56145 0 0 0 0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
3641655380 62027099 0 0 0 0
TX: bytes packets errors dropped carrier collsns
6155236 89160 0 0 0 0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:00:1e:52 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
2562136822 488237847 0 0 0 0
TX: bytes packets errors dropped carrier collsns
3486617396 9691081 0 0 0 0
# 显示核心路由表
[root@localhost ~]# ip route list
112.124.12.0/22 dev eth1 proto kernel scope link src 112.124.15.130
10.160.0.0/20 dev eth0 proto kernel scope link src 10.160.7.81
192.168.0.0/16 via 10.160.15.247 dev eth0
172.16.0.0/12 via 10.160.15.247 dev eth0
10.0.0.0/8 via 10.160.15.247 dev eth0
default via 112.124.15.247 dev eth1
# 显示邻居表
[root@localhost ~]# ip neigh list
112.124.15.247 dev eth1 lladdr 00:00:0c:9f:f3:88 REACHABLE
10.160.15.247 dev eth0 lladdr 00:00:0c:9f:f2:c0 STALE
# 获取主机所有网络接口
ip link | grep -E '^[0-9]' | awk -F: '{print $2}'
连通性探测
连通性探测即为使用工具探测两个网络节点之间的连通性,常用的有 ping、 telnet、 traceroute、 tracepath、 mtr 等工具。
ping ★★★
ping命令是用于排除故障,测试和诊断网络连接问题的最常用的命令之一。
执行ping指令会使用ICMP传输协议,发出要求回应的信息,若指定目标主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
使用ping命令,我们可以确定远程目标IP是处于活动状态还是非活动状态,找到与目标通信的往返延迟并检查是否存在数据包丢失。
ping命令是iputils
(或iputils-ping
)程序包的一部分,该程序包已预先安装在绝大多数Linux发行版上。ping命令也可用于Windows,MacOSX和FreeBSD。
语法
ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]
参数
- -d 使用Socket的SO_DEBUG功能。
- -c<完成次数> 设置完成要求回应的次数。
- -w timeout 这个选项仅和 -c 选项一起才能起作用。指定超时时间(发送最后一个信息包后)。
- -f 极限检测。
- -i<间隔秒数> 指定收发信息的间隔时间。
- -I<网络界面> 使用指定的网络接口送出数据包。( 大写的i )
- -l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
- -n 只输出数值。
- -p<范本样式> 设置填满数据包的范本样式。
- -q 不显示指令执行过程,开头和结尾的相关信息除外。
- -r 忽略普通的Routing Table,直接将数据包送到远端主机上。
- -R 记录路由过程。
- -s<数据包大小> 设置数据包的大小。
- -t<存活数值> 设置存活数值TTL的大小。
- -v 详细显示指令的执行过程。
示例
PING google.com (172.217.22.206) 56(84) bytes of data.
64 bytes from muc11s01-in-f14.1e100.net (172.217.22.206): icmp_seq=1 ttl=53 time=40.2 ms
64 bytes from muc11s01-in-f14.1e100.net (172.217.22.206): icmp_seq=2 ttl=53 time=41.8 ms
64 bytes from muc11s01-in-f14.1e100.net (172.217.22.206): icmp_seq=3 ttl=53 time=47.4 ms
64 bytes from muc11s01-in-f14.1e100.net (172.217.22.206): icmp_seq=4 ttl=53 time=41.4 ms
^C
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 7ms
rtt min/avg/max/mdev = 40.163/42.700/47.408/2.790 ms
ping命令将域名解析为一个IP地址,并开始将ICMP包发送到目标IP。如果目标IP可达,它将响应回复并且ping命令将打印包含以下字段的行:
- 数据字节数。默认值为56,转换为64个ICMP数据字节 -
64 bytes
- 目的地的IP地址 -
from muc11s01-in-f14.1e100.net (172.217.22.206)
- 每个数据包的ICMP序列号。
icmp_seq=1
- 生存的时间。-
ttl=53
- ping时间(以毫秒为单位)是数据包到达主机的往返时间。 -
time=41.4 ms
默认情况下,发送新报文的时间间隔为1秒。
命令停止后,会显示一个统计信息,包括丢包百分比。数据包丢失意味着数据在网络中的某个位置被丢弃,表明网络中存在问题。如果丢包,您可以使用traceroute
命令识别丢包发生的位置。
如果ping没有返回答复,则表示未建立网络通信。如果发生这种情况,并不总是意味着目标IP不活动,某些主机可能阻止ICMP流量或防火墙设置为不响应ping请求。
成功时,ping命令退出代码是0
,否则将退出代码1
或2
。
telnet ★★★
telnet 通常用作登录远程主机和管理,以及测试服务器ip端口是否连通。
telnet因为采用明文传送报文,安全性不好,目前很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。
语法
telnet [-8acdEfFKLrx][-b<主机别名>][-e<脱离字符>][-k<域名>][-l<用户名称>][-n<记录文件>][-S<服务类型>][-X<认证形态>][主机名称或IP地址<通信端口>]
参数
- -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<认证形态> 关闭指定的认证形态。
- 远程主机:指定要登录进行管理的远程主机;
- 端口:指定TELNET协议使用的端口号。
实例
telnet 10.101.28.56 8080
Trying 10.101.28.56...
Connected to bogon.
Escape character is '^]'.
成功连接到 10.101.28.56 的 88 端口,说明该端口已经打开。
traceroute ★★
traceroute 主要用来探测从源主机到目标主机之间的每一跳路由节点,通常和 ping 结合起来排查网络故障, ping 测连通性和网速,如果网络不通,可以借由 traceroute 进一步排查是哪个路由节点出问题了。如果网络卡顿,也可以判断出哪里是瓶颈。
traceroute通过发送小的数据包(预设数据包大小是40Bytes)到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其ip地址。
语法
traceroute [-dFlnrvx][-f<存活数值>][-g<网关>...][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小]
参数
- -d 使用Socket层级的排错功能。
- -f<存活数值> 设置第一个检测数据包的存活数值TTL的大小。
- -F 设置勿离断位。
- -g<网关> 设置来源路由网关,最多可设置8个。
- -i<网络界面> 使用指定的网络界面送出数据包。
- -I 使用ICMP回应取代UDP资料信息。
- -m<存活数值> 设置检测数据包的最大存活数值TTL的大小。
- -n 直接使用IP地址而非主机名称。
- -p<通信端口> 设置UDP传输协议的通信端口。
- -r 忽略普通的Routing Table,直接将数据包送到远端主机上。
- -s<来源地址> 设置本地主机送出数据包的IP地址。
- -t<服务类型> 设置检测数据包的TOS数值。
- -v 详细显示指令的执行过程。
- -w<超时秒数> 设置等待远端主机回报的时间。
- -x 开启或关闭数据包的正确性检验。
实例
traceroute www.58.com
traceroute to www.58.com (211.151.111.30), 30 hops max, 40 byte packets
1 unknown (192.168.2.1) 3.453 ms 3.801 ms 3.937 ms
2 221.6.45.33 (221.6.45.33) 7.768 ms 7.816 ms 7.840 ms
3 221.6.0.233 (221.6.0.233) 13.784 ms 13.827 ms 221.6.9.81 (221.6.9.81) 9.758 ms
4 221.6.2.169 (221.6.2.169) 11.777 ms 122.96.66.13 (122.96.66.13) 34.952 ms 221.6.2.53 (221.6.2.53) 41.372 ms
5 219.158.96.149 (219.158.96.149) 39.167 ms 39.210 ms 39.238 ms
6 123.126.0.194 (123.126.0.194) 37.270 ms 123.126.0.66 (123.126.0.66) 37.163 ms 37.441 ms
7 124.65.57.26 (124.65.57.26) 42.787 ms 42.799 ms 42.809 ms
8 61.148.146.210 (61.148.146.210) 30.176 ms 61.148.154.98 (61.148.154.98) 32.613 ms 32.675 ms
9 202.106.42.102 (202.106.42.102) 44.563 ms 44.600 ms 44.627 ms
10 210.77.139.150 (210.77.139.150) 53.302 ms 53.233 ms 53.032 ms
11 211.151.104.6 (211.151.104.6) 39.585 ms 39.502 ms 39.598 ms
12 211.151.111.30 (211.151.111.30) 35.161 ms 35.938 ms 36.005 ms
说明
记录序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是ms,即为探测数据包向每个网关发送三个数据包后,网关响应后返回的时间。发送数据包的数量可以通过-q
配置,如果用traceroute -q 4 www.58.com
,则表示向每个网关发送4个数据包。
有时我们traceroute主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到相关的数据包的返回数据。
有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您可以加-n
参数来避免DNS解析,以IP格式输出数据。
如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,可以用traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于快速解决问题。
类似的工具还有一个 tracepath。
mtr ★★
mtr 全称 my traceroute,是一个集大成的工具,它集成了 ping、 traceroute、 nslookup 的功能,诊断网络问题非常方便。
traceroute默认使用UDP数据包探测,而mtr默认使用ICMP报文探测,ICMP在某些路由节点的优先级要比其他数据包低,所以测试得到的数据可能低于实际情况。
mtr 支持 实时刷新 数据。
语法
mtr [参数] [主机名称或IP地址]
参数
-n no-dns(或简写为-n) :不对IP地址做域名反解析
-s :用来指定ping数据包的大小
-i :使用这个参数来设置ICMP返回之间的要求默认是1秒
-a :来设置发送数据包的IP地址 这个对一个主机由多个IP地址是有用的
-r :已报告模式显示,非实时刷新,一次性打印 10个包的统计结果
-c :每秒发送多少包,默认为10个。英文是(–report-cycles COUNT)
–report :结果显示,并不动态显示
-4 IPv4
-6 IPv6
实例
sudo mtr www.baidu.com
My traceroute [v0.93]
bogon (172.16.10.130) 2020-05-28T11:59:19+0800
Keys: Help Display mode Restart statistics Order of fields quit
Packets Pings
Host Loss% Snt Last Avg Best Wrst StDev
1. (waiting for reply)
2. bogon 0.0% 24 2.3 2.1 1.7 4.2 0.6
3. 36.112.79.81 0.0% 24 4.3 5.1 2.4 8.4 1.8
4. bj141-161-113.bjtelecom.net 50.0% 24 3.6 7.2 3.3 36.1 9.5
5. 36.110.244.46 83.3% 24 4.6 4.2 3.6 4.7 0.5
6. 36.110.246.242 4.3% 24 4.6 9.3 4.4 84.0 16.8
7. 220.181.17.150 0.0% 24 4.4 7.2 4.0 29.3 5.8
8. (waiting for reply)
9. (waiting for reply)
10. (waiting for reply)
11. 220.181.38.150 0.0% 24 3.7 4.6 3.7 10.1 1.4
参数解释:
- 第一列是IP地址
- 丢包率:Loss
- 已发送的包数:Snt
- 最后一个包的延时:Last
- 平均延时:Avg
- 最低延时:Best
- 最差延时:Wrst
- 方差(稳定性):StDev
Linux中的网络管理命令(下)