route命令

什么是路由?

计算机之间的数据传输必须经过网络,网络可以直接连接两台计算机,也可以通过一个一个的节点去连接。路由可以理解为互联网的中转站,网络中的数据包就是通过哦一个一个的路由转发到目的地。

路由分类

静态动态路由

Linux机器上配置的都是静态路由,由运维人民通过route命令去管理。

动态路由无需人为干预,由路由器、交换机自动分配规则而来。

route命令

route命令可以对路由表进行操作

用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。

在Linux系统中设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的ip地址设置为Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在/etc/rc.local中添加route命令来保证该路由设置永久有效。

语法

1
route [option] [参数]

选项

1
2
3
4
5
6
7
-A:设置地址类型;
-C:打印将Linux核心的路由缓存;
-v:详细信息模式;
-n:不执行DNS反向查找,直接显示数字形式的IP地址;
-e:netstat格式显示路由表;
-net:到一个网络的路由表;
-host:到一个主机的路由表。

参数

1
2
3
4
5
6
7
Add:增加指定的路由记录;
Del:删除指定的路由记录;
Target:目的网络或目的主机;
gw:设置默认网关;
mss:设置TCP的最大区块长度(MSS),单位MB;
window:指定通过路由表的TCP连接的TCP窗口大小;
dev:路由记录所表示的网络接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost ~]# route --help
Usage: route [-nNvee] [-FC] [<AF>] List kernel routing tables
route [-v] [-FC] {add|del|flush} ... Modify routing table for AF.

route {-h|--help} [<AF>] Detailed usage syntax for specified AF.
route {-V|--version} Display version/author and exit.

-v, --verbose be verbose
-n, --numeric don't resolve names
-e, --extend display other/more information
-F, --fib display Forwarding Information Base (default)
-C, --cache display routing cache instead of FIB

<AF>=Use -4, -6, '-A <af>' or '--<af>'; default: inet
List of possible address families (which support routing):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)

路由命令案例

查看路由表信息

1
route
1
2
3
4
5
[root@localhost ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 100 0 0 ens33
192.168.41.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33

加上-n参数,将defaultgateway显示出具体的

(即不进行DNS解析的路由表查看)

1
route -n
1
2
3
4
5
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.41.2 0.0.0.0 UG 100 0 0 ens33
192.168.41.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33

参数解析

  • Destination:网络号,network;
  • Gateway:网关地址,网络是通过该IP出口,如果显示0.0.0.0的IP表示该路由信息,是从本机转发出去的;
  • Genmask:子网掩码地址的表示,IP地址配合子网掩码才是一个完整的网络信息;
  • Flags:路由标记,表当前的网络状态
    • U:up运行状态
    • G:表示这是一个网关路由器
    • H:表示这个网关是一个主机
    • !:表示这个路由已经被禁止

删除默认路由

default

1
route del default

添加网关地址

1
route add default gw <网关ip>

IP命令

ip命令是iproute软件包中的强大网络管理工具。

ip命令案例

查看网络设备信息

1
2
3
ip address show
#简写
ip a
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]# ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:28:0f:b1 brd ff:ff:ff:ff:ff:ff
inet 192.168.41.100/24 brd 192.168.41.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::101b:ff83:d95:16/64 scope link noprefixroute
valid_lft forever preferred_lft forever

指定设备ens33

1
ip link show dev ens33
1
2
3
[root@localhost ~]# ip link show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:28:0f:b1 brd ff:ff:ff:ff:ff:ff

显示详细的数据包收发信息

-s参数

1
ip -s link show dev ens33
1
2
3
4
5
6
7
[root@localhost ~]# ip -s link show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:28:0f:b1 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
625634 8994 0 0 0 0
TX: bytes packets errors dropped carrier collsns
5411590 16327 0 0 0 0

关闭/激活网络设备

关闭

作用和使用ifconfig <网络设备> down相同

1
ip link set <网络设备> down 

激活

1
ip link set <网络设备> up

修改网卡MAC信息

都是类似ifconfig

1
ip link set ens33 address <MAC地址>

添加/删除ip地址

删除,将add改为del即可

1
ip address add <ip>/<子网掩码位数> dev <网络设备>
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
[root@localhost ~]# ip address add 192.168.41.132/24 dev ens33
您在 /var/spool/mail/root 中有新邮件
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:28:0f:b1 brd ff:ff:ff:ff:ff:ff
inet 192.168.41.100/24 brd 192.168.41.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.41.132/24 scope global secondary ens33
valid_lft forever preferred_lft forever
inet6 fe80::101b:ff83:d95:16/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@localhost ~]# ping 192.168.41.132
PING 192.168.41.132 (192.168.41.132) 56(84) bytes of data.
64 bytes from 192.168.41.132: icmp_seq=1 ttl=64 time=0.030 ms
64 bytes from 192.168.41.132: icmp_seq=2 ttl=64 time=0.036 ms
^C
--- 192.168.41.132 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.030/0.033/0.036/0.003 ms

ping 添加的ip发现可以ping通!

使用label参数还可以给添加的ip添加别名

1
ip address add 192.168.41.133/24 dev ens33 label ens33:1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost ~]# ip address add 192.168.41.133/24 dev ens33 label ens33:1
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:28:0f:b1 brd ff:ff:ff:ff:ff:ff
inet 192.168.41.100/24 brd 192.168.41.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.41.132/24 scope global secondary ens33
valid_lft forever preferred_lft forever
inet 192.168.41.133/24 scope global secondary ens33:1
valid_lft forever preferred_lft forever
inet6 fe80::101b:ff83:d95:16/64 scope link noprefixroute
valid_lft forever preferred_lft forever

通过ip命令查看路由表

1
ip route
1
2
3
[root@localhost ~]# ip route
default via 192.168.41.2 dev ens33 proto static metric 100
192.168.41.0/24 dev ens33 proto kernel scope link src 192.168.41.100 metric 100

ip检查arp缓存

显示网络邻居信息

检查MAC地址信息

1
ip neighbour
1
2
3
[root@localhost ~]# ip neighbour
192.168.41.2 dev ens33 lladdr 00:50:56:fb:e5:4c STALE
192.168.41.1 dev ens33 lladdr 00:50:56:c0:00:08 REACHABLE

还可以直接通过arp命令查看arp缓存

1
arp
1
2
3
4
[root@localhost ~]# arp
Address HWtype HWaddress Flags Mask Iface
gateway ether 00:50:56:fb:e5:4c C ens33
192.168.41.1 ether 00:50:56:c0:00:08 C ens33

取消主机名解析

1
arp -n
1
2
3
4
[root@localhost ~]# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.41.2 ether 00:50:56:fb:e5:4c C ens33
192.168.41.1 ether 00:50:56:c0:00:08 C ens33

netstat命令

显示网络连接情况,路由表信息,端口状态等等信息

语法

1
netstat [option]

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
-a或--all:显示所有连线中的Socket;
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
-c或--continuous:持续列出网络状态;
-C或--cache:显示路由器配置的快取信息;
-e或--extend:显示网络其他相关信息;
-F或--fib:显示FIB;
-g或--groups:显示多重广播功能群组组员名单;
-h或--help:在线帮助;
-i或--interfaces:显示网络界面信息表单;
-l或--listening:显示监控中的服务器的Socket;
-M或--masquerade:显示伪装的网络连线;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
-o或--timers:显示计时器;
-p或--programs:显示正在使用Socket的程序识别码和程序名称;
-r或--route:显示Routing Table;
-s或--statistice:显示网络工作信息统计表;
-t或--tcp:显示TCP传输协议的连线状况;
-u或--udp:显示UDP传输协议的连线状况;
-v或--verbose:显示指令执行过程;
-V或--version:显示版本信息;
-w或--raw:显示RAW传输协议的连线状况;
-x或--unix:此参数的效果和指定"-A unix"参数相同;
--ip或--inet:此参数的效果和指定"-A inet"参数相同。

netstat命令案例

查看所有的网络连接情况

1
netstat -an

由于显示结果过多,这里只展示一部分

1
2
3
4
5
6
7
8
9
10
[root@VM-4-8-centos ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
tcp 0 0 10.0.4.8:39810 101.91.61.154:9988 ESTABLISHED
tcp 0 0 10.0.4.8:38550 169.254.0.138:8086 ESTABLISHED
tcp 0 64 10.0.4.8:22 60.255.73.42:15384 ESTABLISHE

常见字段解释

  • Proto :嵌套字所用协议;
  • Recv-Q :连接该嵌套字的用户,还未拷贝的字节数;
  • Send-Q :远程主机还未确认的字节数;
  • Local Address:套接字本地地址和端口号;
  • Foreign Address :套接字的远程主机地址和端口号;
  • State:套接字的运行情况,Listen表示监听中。(12种状态详解
    • 常见状态即CONNECTED连接状态。在原模式中没有状态,在用户数据报协议中也经常没有状态,于是状态列可以空出来。若有状态,通常取值为:[4]
    • LISTEN侦听来自远方的TCP端口的连接请求[4]
    • SYN-SENT在发送连接请求后等待匹配的连接请求[4]
    • SYN-RECEIVED在收到和发送一个连接请求后等待对方对连接请求的确认[4]
    • ESTABLISHED代表一个打开的连接[4]
    • FIN-WAIT-1等待远程TCP连接中断请求,或先前的连接中断请求的确认[4]
    • FIN-WAIT-2从远程TCP等待连接中断请求[4]
    • CLOSE-WAIT等待从本地用户发来的连接中断请求[4]
    • CLOSING等待远程TCP对连接中断的确认[4]
    • LAST-ACK等待原来的发向远程TCP的连接中断请求的确认[4]
    • TIME-WAIT等待足够的时间以确保远程TCP接收到连接中断请求的确认[4]
    • CLOSED没有任何连接状态[4]
    • UNKNOWN套接字状态未知

常用参数组合

查看正在运行的端口情况

ss命令中同样适用

1
-tunlp

-t,tcp连接情况

-u,udp连接情况

-n,不进行dns解析

-l,正在监听中的套接字情况

-p,显示进程和进程名情况

1
netstat -tunlp
1
2
3
4
5
6
[root@VM-4-8-centos ~]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 19760/nginx: master
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 5709/pure-ftpd (SER
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1342/sshd

查看路由表信息

等同于route/ip route

1
netstat -rn

-r

-n

1
2
3
4
5
6
[root@VM-4-8-centos ~]# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.0.4.1 0.0.0.0 UG 0 0 0 eth0
10.0.4.0 0.0.0.0 255.255.252.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0

显示网络的接口情况

1
netstat -i
1
2
3
4
5
6
[root@VM-4-8-centos ~]# netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 33714997 0 0 0 39153872 0 0 0 BMRU
lo 65536 39481 0 0 0 39481 0 0 0 LRU

字段解释
  • Iface :网络接口名称
  • MTU:Maximum Trasmission Unit 最大传输单元
  • Met: Metric,度量值 , 供某些操作系统用,用于计算一条路由的成本
  • RX-OK :接收时,正确的数据包数。
  • RX-ERR :接收时,产生错误的数据包数。
  • RX-DRP :接收时,丢弃的数据包数。
  • RX-OVR :接收时,由于过速(在数据传输中,由于接收设备不能接收按照发送速率传送来的数据而使数据丢失)而丢失的数据包数。
  • TX-OK :发送时,正确的数据包数。
  • TX-ERR :发送时,产生错误的数据包数。
  • TX-DRP :发送时,丢弃的数据包数。
  • TX-OVR :发送时,由于过速而丢失的数据包数。
  • Flg :标志。
    • B 已经设置了一个广播地址。
    • L 该接口是一个回送设备。(回环地址)
    • M 接收所有数据包(混乱模式)。
    • N 避免跟踪。
    • O 在该接口上,禁用ARP。
    • P 这是一个点到点链接。
    • R 接口正在运行。
    • U 接口处于“活动”状态。

查看服务器监听

1
2
3
4
netstat -tunlp |grep 33066
netstat -tunlp |grep 80
netstat -tunlp |grep 443
netstat -tunlp |grep <常用端口>

ss命令

centos7出现的,可能需要安装iproute工具包。

netstat命令用法相同

比 netstat 好用的socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息

安装

1
yum install iproute -y

ss命令案例

查看服务器监听

1
ss -tunlp|grep <常见端口>