linux命令之ip route

本文详细介绍了Linux的iproute命令,包括其基本用法、路由类型、服务类型(TOS)、路由表ID、路由属性(如MTU、nexthop等),以及如何通过命令调整路由参数,如设置RTT值。
摘要由CSDN通过智能技术生成

一、ip route 用于配置和管理Linux的路由表

        通过ip route命令,管理员可以查看、添加、删除或修改Linux系统的路由表,从而决定数据包如何在网络中传输。

# ip route help
Usage: ip route { list | flush } SELECTOR
       ip route save SELECTOR
       ip route restore
       ip route showdump
       ip route get ADDRESS [ from ADDRESS iif STRING ]
                            [ oif STRING ] [ tos TOS ]
                            [ mark NUMBER ] [ vrf NAME ]
                            [ uid NUMBER ]
       ip route { add | del | change | append | replace } ROUTE
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
            [ table TABLE_ID ] [ vrf NAME ] [ proto RTPROTO ]
            [ type TYPE ] [ scope SCOPE ]
ROUTE := NODE_SPEC [ INFO_SPEC ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
             [ table TABLE_ID ] [ proto RTPROTO ]
             [ scope SCOPE ] [ metric METRIC ]
INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...
NH := [ encap ENCAPTYPE ENCAPHDR ] [ via [ FAMILY ] ADDRESS ]
            [ dev STRING ] [ weight NUMBER ] NHFLAGS
FAMILY := [ inet | inet6 | ipx | dnet | mpls | bridge | link ]
OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ] [ as [ to ] ADDRESS ]
           [ rtt TIME ] [ rttvar TIME ] [ reordering NUMBER ]
           [ window NUMBER ] [ cwnd NUMBER ] [ initcwnd NUMBER ]
           [ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ]
           [ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ]
           [ features FEATURES ] [ quickack BOOL ] [ congctl NAME ]
           [ pref PREF ] [ expires TIME ]
TYPE := { unicast | local | broadcast | multicast | throw |
          unreachable | prohibit | blackhole | nat }
TABLE_ID := [ local | main | default | all | NUMBER ]
SCOPE := [ host | link | global | NUMBER ]
NHFLAGS := [ onlink | pervasive ]
RTPROTO := [ kernel | boot | static | NUMBER ]
PREF := [ low | medium | high ]
TIME := NUMBER[s|ms]
BOOL := [1|0]
FEATURES := ecn
ENCAPTYPE := [ mpls | ip | ip6 ]
ENCAPHDR := [ MPLSLABEL ]

二、ip route { add | del | change | append | replace } ROUTE

ROUTE := NODE_SPEC [ INFO_SPEC ]

        1.1 NODE_SPEC:节点规格

          参数解析:

         [ TYPE ] PREFIX [ tos TOS ][ table TABLE_ID ] [ proto RTPROTO ][ scope SCOPE ] [ metric METRIC ]

  • [ TYPE ]
路由类型
{ unicast | local | broadcast | multicast | throw | unreachable | prohibit | blackhole | nat }

unicast,单播路由条目描述到路由前缀所涵盖的目的地的实际路径。
unreachable,这些目的地是无法到达的。丢弃数据包,生成不可访问的ICMP消息主机。本地发件人得到一个EHOSTUNEACH错误。
blackhole,黑洞路由这些目的地是无法到达的。数据包被静默丢弃。本地发送者得到一个EINVAL错误。
prohibit,这些目的地是无法到达的。丢弃数据包并生成ICMP消息通信,该ICMP消息通信在管理上被禁止。本地发件人得到一个EACCES错误。
local,目的地分配给此主机。数据包被环回并在本地传送。
broadcast,目的地是广播地址。数据包作为链路广播发送。
throw,与策略规则一起使用的特殊控制路径。如果选择这样的路由,则将终止此表中的查找,假装没有找到路由。如果没有策略路由,则相当于路由表中没有路由。丢包并生成不可到达的ICMP消息网。本地发送者得到一个ENETUNEACH错误。
nat,一条特殊的NAT路线。前缀覆盖的目的地被认为是虚拟地址(或外部地址),需要在转发之前转换为真实地址(或内部地址)。选择要转换到的地址,并附带属性警告:Linux2.6中不再支持路由NAT。
via,anycast,未实现目标是分配给此主机的任意广播地址。它们主要等同于本地地址,但有一个不同之处:当将这些地址用作任何数据包的源地址时,这些地址是无效的。
multicast,用于多播路由的一种特殊类型。它不存在于普通路由表中。
  •  [ tos TOS ] 
#服务类型
TOS要么是8位十六进制数字,要么是/usr/lib/iproute2/rt_dsfieldor 或/etc/iproute2/rt_dsfield文件中标识符.
# cat  /etc/iproute2/rt_dsfield
# Differentiated field values
# These include the DSCP and unused bits
0x0     default
# Newer RFC2597 values
0x28    AF11
0x30    AF12
0x38    AF13
0x48    AF21
0x50    AF22
0x58    AF23
0x68    AF31
0x70    AF32
0x78    AF33
0x88    AF41
0x90    AF42
0x98    AF43
# Older values RFC2474
0x20    CS1
0x40    CS2
0x60    CS3
0x80    CS4
0xA0    CS5
0xC0    CS6
0xE0    CS7
# RFC 2598
0xB8    EF

# Deprecated values dropped upstream
# Kept in RHEL for backwards-compatibility
0x00   default
0x10   lowdelay
0x08   throughput
0x04   reliability
# This value overlap with ECT, do not use it!
0x02   mincost
# These values seems do not want to die, Cisco likes them by a strange reason.
0x20   priority
0x40   immediate
0x60   flash
0x80   flash-override
0xa0   critical
0xc0   internet
0xe0   network
  • [ table TABLE_ID ]
#路由表ID
TABLE ID可能是数字或字符串来自/usr/lib/iproute2/rt_tables或/etc/iproute2/rt_tables(如果存在则优先)。
如果省略此参数,则IP假定主表,但本地路由、广播路由和NAT路由除外,默认情况下这些路由被放入本地表中。
# cat /etc/iproute2/rt_tables
#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
  • [ proto RTPROTO ]
#RTPROTO := [ kernel | boot | static | ra | NUMBER]
            [ 内核自动配置 | 系统初始化时配置 | 静态 | 路由协议动态发现 | 或使用协议数字 ]
解释文件:/etc/iproute2/rt_protosor 或/etc/iproute2/rt_protos(hasprecedenceifexists)
# Reserved protocols.
#
0       unspec
1       redirect
2       kernel
3       boot
4       static
8       gated
9       ra
10      mrt
11      zebra
12      bird
13      dnrouted
14      xorp
15      ntk
16      dhcp
42      babel

#
#       Used by me for gated
#
254     gated/aggr
253     gated/bgp
252     gated/ospf
251     gated/ospfase
250     gated/rip
249     gated/static
248     gated/conn
247     gated/inet
246     gated/default
            
  • [ scope SCOPE ]
#地址有效的区域的范围
SCOPE := [ host | link | global | NUMBER ]

host,该地址仅在此主机内有效。
link,该地址是本地链接,即它仅在此设备上有效。
global,地址全局有效。
site,(仅IPv 6)该地址为站点本地地址,即该地址在此站点内有效。

详见:
/usr/lib/iproute2/rt_scopesor 或 /etc/iproute2/rt_scopes (hasprecedenceifexists)

# reserved values
#
0       global
255     nowhere
254     host
253     link
#
# pseudo-reserved
#
200     site
  • [ metric METRIC ]
#路由的首选值
1.2 INFO_SPEC:参数规格

      参数解析:

      NH OPTIONS FLAGS [ nexthop NH ]...

  • NH
#隧道属性附加
NH := [ encap ENCAPTYPE ENCAPHDR ] [ via [ FAMILY ] ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS

ENCAPTYPE是一个字符串,指定支持的封装类型。即封装类型MPLS、IP 封装(Geneve、GRE、VXLAN、...)、bpf、seg6(封装类型 IPv6段路由)、seg6local(本地 SRv6 分段处理)、ioam6(封装类型 IPv6 IOAM)、xfrm(封装类型 XFRM)。
ENCAPHDR是一组封装属性特定于ENCAPTYPE。
NHFLAGS配置为onlink、pervasive。
  • OPTIONS
OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ] [ as [ to ] ADDRESS ]
           [ rtt TIME ] [ rttvar TIME ] [ reordering NUMBER ]
           [ window NUMBER ] [ cwnd NUMBER ] [ initcwnd NUMBER ]
           [ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ]
           [ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ]
           [ features FEATURES ] [ quickack BOOL ] [ congctl NAME ]
           [ pref PREF ] [ expires TIME ]

1.mtu MTU 或mtu lock MTU,沿着到达目的地的路径的MTU。
如果未使用修饰符lock,则由于路径MTU发现,内核可能更新MTU。
如果使用修饰符lock,则不会尝试路径MTU发现,所有数据包都将在IPv4情况下不使用DF位发送,或者在IPv6中碎片到MTU。
2.advmss NUMBER (内核2.3.15+),建议mss大小。MSS("最大分段大小")用于建立TCP连接协商。
如果未给出,Linux将使用从第1跳设备MTU中计算出来的默认值。(如果到达这些目的地的路径是不对称的,则这种猜测可能不准确。)
3.rtt TIME,初始的RTT('往返时间')估计。如果使用s、sec或secs后缀指定秒,使用ms、msec或msecs指定毫秒。
4.rttvar TIME,(内核2.3.15+),初始的RTT方差算法估计。值与上述RTT指定的值相同。
5.reordering NUMBER,到达此目标的路径上的最大乱序值(级别)。如果未给出,Linux将使用sysctl中"net/ipv4/tcp_reordering"所选择的值。
6.window NUMBER,TCP向这些目的地通告的最大窗口,以字节为单位。它限制了TCP对端允许发送给我们的最大数据突发。
7.cwnd NUMBER,阻塞窗口的限制。如果不使用lock标志(cwnd lock NUMBER),则忽略它。
8.initcwnd NUMBER,目的地址TCP连接的MSS中的初始化拥塞窗口(CWND)大小。
9.ssthresh NUMBER,初始慢启动阈值配置。
10.realms REALM,指定此路由的域。REALMID可能是文件/usr/lib/iproute2/rt_realmsor或/etc/iproute2/rt_realms 数字或字符串。
11.rto_min TIME,连接TCP的最小TCP重传超时时间。
12.initrwnd NUMBER,连接的初始化接收窗口大小。
13.features FEATURES,(内核版本3.18+)支持新特性,如tcp_ecn等。
14.quickack BOOL,启用或禁用快速确认。
15.congctl NAME,对目的地址设置特定的TCP拥塞控制算法。
如果没有指定,Linux使用当前全局默认TCP拥塞控制算法,或者来自应用程序。
如果不使用修饰符lock,应用程序仍然可以覆盖建议的拥塞控制算法目的地。 
如果使用修饰符lock (congctl lock NAME),则不允许应用程序覆盖指定的拥塞控制算法目的地,因此它将被强制/保证使用所提出的算法。
16.pref PREF,配置low、medium、high。
17.expires TIME,(内核4.4+)路由失效时间,仅支持IPv6。
  • FLAGS
  • [ nexthop NH ]

三、命令案例解析

1.获取当前系统的连接参数情况:

# ss -i | grep -A 1 "xxx.xxx.xxx.xxx"
tcp    ESTAB      0      0      192.168.0.xxx:xxx                xxx.xxx.xxx.xxx:7357
         cubic wscale:8,7 rto:217 rtt:16.137/14.49 ato:40 mss:1460 rcvmss:1120 advmss:1460 cwnd:10 bytes_acked:3281 bytes_received:1836 segs_out:17 segs_in:16 send 7.2Mbps lastsnd:42405 lastrcv:42702 lastack:42357 pacing_rate 14.5Mbps rcv_space:29200

其中rtt:16.137/14.49为rtt的均值和中位数。
    rto:217,重传计时器为217。

#默认路由指向192.168.0.1
# ip route
default via 192.168.0.1 dev eth0 proto dhcp metric 100

2.通过ip route命令调整rtt值

#ip route change 192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.16 metric 100 rtt 10ms
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值