FeelingLife FeelingLife
首页
  • Go

    • Go基础知识
  • Python

    • Python进阶
  • 操作系统
  • 计算机网络
  • MySQL
  • 学习笔记
  • 常用到的算法
  • Docker
  • Kubernetes
  • Observability
  • 容器底层
其他技术
  • 友情链接
  • 收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

xuqil

一介帆夫
首页
  • Go

    • Go基础知识
  • Python

    • Python进阶
  • 操作系统
  • 计算机网络
  • MySQL
  • 学习笔记
  • 常用到的算法
  • Docker
  • Kubernetes
  • Observability
  • 容器底层
其他技术
  • 友情链接
  • 收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 应用层
  • 运输层
  • 抓包

  • 网络编程

    • Linux的IO模型
    • select、poll和epoll
    • sendfile、aio和directIO
    • ip命令的使用
      • 用法
      • ip link 网络设备配置
      • ip address IP 地址管理
      • ip route 路由表管理
      • ip netns 网络命名空间
  • 云网络

  • 虚拟网络

  • 常见面试题
  • 《计算机网络知识》
  • 网络编程
xuqil
2024-11-02
目录

ip命令的使用

# ip命令的使用

官网:http://www.policyrouting.org/

ip 命令是 Linux 中用于网络配置的强大工具,整合了ifconfig和route命令,用于取代旧的 ifconfig 命令。以下是一些常用的 ip 命令及其用法:

# 用法

$ ip --help
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip [ -force ] -batch filename
where  OBJECT := { address | addrlabel | fou | help | ila | ioam | l2tp | link |
                   macsec | maddress | monitor | mptcp | mroute | mrule |
                   neighbor | neighbour | netconf | netns | nexthop | ntable |
                   ntbl | route | rule | sr | tap | tcpmetrics |
                   token | tunnel | tuntap | vrf | xfrm }
       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
                    -h[uman-readable] | -iec | -j[son] | -p[retty] |
                    -f[amily] { inet | inet6 | mpls | bridge | link } |
                    -4 | -6 | -M | -B | -0 |
                    -l[oops] { maximum-addr-flush-attempts } | -br[ief] |
                    -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |
                    -rc[vbuf] [size] | -n[etns] name | -N[umeric] | -a[ll] |
                    -c[olor]}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

OPTIONS选项

  • -V:显示指令版本信息;

    $ ip -V
    ip utility, iproute2-5.15.0, libbpf 0.5.0
    
    1
    2
  • -s:输出统计信息;可以使用多个-s来显示更多的信息;

    $ ip -s link show 
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        RX:  bytes packets errors dropped  missed   mcast           
             14454     184      0       0       0       0 
        TX:  bytes packets errors dropped carrier collsns           
             14454     184      0       0       0       0 
    
    1
    2
    3
    4
    5
    6
    7
  • -d:输出更多详细信息;

    $ ip -d link
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0 minmtu 0 maxmtu 0 addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
        link/ether 00:0c:29:84:84:1c brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 46 maxmtu 16110 addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 parentbus pci parentdev 0000:02:01.0 
        altname enp2s1
    
    1
    2
    3
    4
    5
    6
  • -r:显示主机时,不使用 IP 地址,而使用主机的域名;

    $ ip -r 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 localhost/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ip6-localhost/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether 00:0c:29:84:84:1c brd ff:ff:ff:ff:ff:ff
        altname enp2s1
        inet 11.dev.com/24 brd 192.168.122.255 scope global ens33
           valid_lft forever preferred_lft forever
        inet6 dev/64 scope link 
           valid_lft forever preferred_lft forever
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
  • -h:更友好地输出,搭配-s;

    ~$ ip -h -s link
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        RX:  bytes packets errors dropped  missed   mcast           
             16.0k     199      0       0       0       0 
        TX:  bytes packets errors dropped carrier collsns           
             16.0k     199      0       0       0       0 
    
    1
    2
    3
    4
    5
    6
    7
  • -j:以JSON形式输出;

    $ ip -j link show lo
    [{"ifindex":1,"ifname":"lo","flags":["LOOPBACK","UP","LOWER_UP"],"mtu":65536,"qdisc":"noqueue","operstate":"UNKNOWN","linkmode":"DEFAULT","group":"default","txqlen":1000,"link_type":"loopback","address":"00:00:00:00:00:00","broadcast":"00:00:00:00:00:00"}]
    
    1
    2
  • -f:-family { inet | inet6 | mpls | bridge | link } 强制使用指定的协议族;

  • -4:-family inet的简写,指定使用的网络层协议是IPv4协议;

  • -6:-family inet6的简写,指定使用的网络层协议是IPv6协议;

  • -o:输出信息每条记录输出一行,即使内容较多也不换行显示;

OBJECT对象

  • address:IP 地址信息
  • link:网卡信息
  • help:查看帮助信息
  • netns:网络 namespace
  • route:路由表
  • tunnel:IP 隧道
  • tuntap:配置 tap/tun 设备
  • addrlabel:协议地址选择的标签配置
  • fou:UDP 接收端口配置
  • ila
  • ioam
  • l2tp
  • macsec
  • maddress:多播地址
  • monitor
  • mptcp
  • mroute:组播路由缓存条目
  • mrule
  • neighbor
  • neighbour:邻居表
  • netconf
  • nexthop
  • ntable
  • ntbl
  • rule:IP 策略
  • sr
  • tap
  • tcpmetrics
  • token
  • vrf
  • xfrm

# ip link 网络设备配置

  • ip link help:查看帮助信息

  • ip link show:查看设备信息

    • up:只显示运行的设备;

    • [link DEV | parentdev NAME] [ name ] NAME:NAME 指定要显示的网络设备。如果省略此参数,则列出所有设备;

    $ ip link show 
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
        link/ether 00:0c:29:84:84:1c brd ff:ff:ff:ff:ff:ff
        altname enp2s1
        
        
        
    # 通过 -s option 显示统计信息
    $ ip -s link show 
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        RX:  bytes packets errors dropped  missed   mcast           
             14454     184      0       0       0       0 
        TX:  bytes packets errors dropped carrier collsns           
             14454     184      0       0       0       0 
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
        link/ether 00:0c:29:84:84:1c brd ff:ff:ff:ff:ff:ff
        RX:  bytes packets errors dropped  missed   mcast           
            408093    1124      0       0       0       0 
        TX:  bytes packets errors dropped carrier collsns           
            125917     798      0       0       0       0 
        altname enp2s1
    
    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 add:添加设备信息

    ip link add [link DEV | parentdev NAME] [ name ] NAME
                        [ txqueuelen PACKETS ]
                        [ address LLADDR ]
                        [ broadcast LLADDR ]
                        [ mtu MTU ] [index IDX ]
                        [ numtxqueues QUEUE_COUNT ]
                        [ numrxqueues QUEUE_COUNT ]
                        type TYPE [ ARGS ]
    
    1
    2
    3
    4
    5
    6
    7
    8

    例如添加一个 bond 设备

    $ sudo ip link add ens37 type bond
    
    1

    添加 veth 对

    $ sudo ip l a veth0 type veth peer name veth1
    
    1
  • ip link set:配置设备

    ip link set { DEVICE | dev DEVICE | group DEVGROUP }
    
    1
    • { up | down }:将设备设置为 up 或 down;

    • arp { on | off }:更改设备的 NOARP 标志;

    • multicast { on | off }:更改设备的 MULTICAST 标志;

    • dynamic { on | off }:更改设备的 DYNAMIC 标志;

    • name NEWNAME:更改设备的名字,如果设备正在运行或者已经有一个配置好的地址,那么操作无效;

    • txqueuelen PACKETS:更改设备发送队列的长度;

    • mtu MTU:更改设备MTU;

    • address LLADDR:更改接口的站点地址

    • broadcast LLADDRESS,brd LLADDRESS,peer LLADDRESS:当接口为POINTOPOINT时,更改链路层广播地址或对等地址;

    • netns PID:将设备移动到与进程 PID 关联的网络命名空间;

      # 将网卡设置到 network namespace
      $ sudo ip netns add ns0
      $ sudo ip link set dev eth0 netns ns0
      
      1
      2
      3
    • alias NAME:给设备一个符号名以便于参考;

    • vf NUM:指定要配置的虚拟功能设备。必须使用 dev 参数指定关联的 pf 设备;

      • 警告:如果请求更改多个参数,则在任何更改失败后立即中止 IP。这是 IP 能够将系统移动到不可预测状态的唯一情况。解决方案是避免使用一个 IP 链路集调用来更改多个参数。
  1. 查看网络接口:

    ip addr show
    
    1

    或者简写为:

    ip a
    
    1
  2. 启用或禁用网络接口: 启用接口:

    ip link set <interface> up
    
    1

    禁用接口:

    ip link set <interface> down
    
    1
  3. 添加 IP 地址:

    ip addr add <IP_ADDRESS>/<SUBNET_MASK> dev <interface>
    
    1

    例如:

    ip addr add 192.168.1.10/24 dev eth0
    
    1
  4. 删除 IP 地址:

    ip addr del <IP_ADDRESS>/<SUBNET_MASK> dev <interface>
    
    1
  5. 查看路由表:

    ip route show
    
    1

    或者简写为:

    ip r
    
    1
  6. 添加路由:

    ip route add <NETWORK>/<SUBNET_MASK> via <GATEWAY>
    
    1
  7. 删除路由:

    ip route del <NETWORK>/<SUBNET_MASK> via <GATEWAY>
    
    1
  8. 查看邻居(ARP 表):

    ip neigh show
    
    1

这些只是 ip 命令的一部分功能,你可以使用 man ip 命令查看更详细的文档和选项。如果你需要某个特定用法的帮助,请告诉我!

# ip address IP 地址管理

ip address用于设置设备的 IP 地址。每个设备必须有一个地址才能对外提供网络功能。

  • ip {a | addr | a list}:查看网卡信息

  • ip address show help:查看帮助信息

  • ip address show:显示 IP 协议地址

    • [dev IFNAME | IFNAME]:显示特定的设备信息

      $ ip address show lo
      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
      
      1
      2
      3
      4
    • scope SCOPE-ID:仅列出具有此作用域的地址

    • to PREFIX:仅列出匹配 PREFIX 的地址

    • label LABEL:只列出与模式匹配的标签的地址

    • master DEVIC:只列出主地址

    • up:列出运行中的设备

    • type TYPE:根据类型列出设备。具体类型可以通过帮助信息查看

  • ip address [save|flush}:保存/刷新协议地址

    • 此命令刷新由某些条件选择的协议地址。此命令具有与 show 相同的参数。不同之处在于,当不给出参数时,它不会运行

    • $ sudo ip address flush dev lo
      
      1
  • ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ]:为设备 新增/修改/替换 新的 IP 地址

    • IFADDR:指定 IP 地址

      • PREFIX | ADDR peer PREFIX:指定 IP 地址或 IP 加前缀

      • broadcast ADDR:接口的广播地址

      • label IFNAME:每个地址都可以用标签字符串标记。为了保持与 Linux2.0 网络别名的兼容性,此字符串必须与设备名称重合,或者必须以设备名后跟冒号作为前缀。

        $ sudo ip addr add 192.168.204.11/24 dev ens36 label ens36:1
        
        
        $ ip addr show dev ens36
        3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
            link/ether 00:0c:29:84:84:26 brd ff:ff:ff:ff:ff:ff
            altname enp2s4
            inet 192.168.204.10/24 brd 192.168.204.255 scope global ens36
               valid_lft forever preferred_lft forever
            inet 192.168.204.11/24 scope global secondary ens36:1
               valid_lft forever preferred_lft forever
            inet6 fe80::20c:29ff:fe84:8426/64 scope link 
               valid_lft forever preferred_lft forever
        
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
      • scope SCOPE-ID:地址有效的区域的范。可用的作用域列在文件/etc/iproute2/rt_scopes中。预定义的范围值是:

        • global:地址全局有效。
        • site:(仅 IPv6)该地址为站点本地地址,即该地址在此站点内有效。
        • link:该地址是本地链接,即它仅在此设备上有效。
        • host:该地址仅在此主机内有效
    • dev IFNAME:指定设备的名称

      # 为设备 ens36 增加一个 192.168.204.22/24 地址
      $ sudo ip address add  192.168.204.22/24 dev ens36
      
      1
      2
  • ip address del IFADDR dev IFNAME [mngtmpaddr]

    • IFADDR:指定 IP 地址
    • dev IFNAME:指定设备名称
    # 删除设备 ens36 的一个 192.168.204.22/24 地址
    $ sudo ip address del 192.168.204.22/24 dev ens36
    
    1
    2

# ip route 路由表管理

  • ip route { list | show | flush } SELECTOR:查看/清空路由信息

    $ ip route show
    default via 192.168.122.2 dev ens33 proto static 
    192.168.122.0/24 dev ens33 proto kernel scope link src 192.168.122.11 
    192.168.204.0/24 dev ens36 proto kernel scope link src 192.168.204.10 
    
    $ ip route list
    default via 192.168.122.2 dev ens33 proto static 
    192.168.122.0/24 dev ens33 proto kernel scope link src 192.168.122.11 
    192.168.204.0/24 dev ens36 proto kernel scope link src 192.168.204.10 
    
    
    # 清掉default路由
    $ sudo ip route flush default
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
  • ip route get [ ROUTE_GET_FLAGS ] ADDRESS:查看具体路由信息

    $ ip route get 192.168.122.0
    192.168.122.0 dev ens33 src 192.168.122.11 uid 1000 
        cache 
    
    1
    2
    3
  • ip route { add | del | change | append | replace } ROUTE:添加、删除、修改、追加和替换路由

  • 添加到达目标主机的路由记录: ip route add {目标主机} via {网关} [dev {网卡}]

    $ sudo ip route add 192.168.204.1 via 192.168.204.10 dev ens36
    
    1
  • 添加到达网络的路由记录:ip route add {目标网络/掩码} via {网关} [dev {网卡}]

    $ sudo ip route add 192.168.205.0/24 via 192.168.204.10 dev ens36
    $ sudo ip route append 192.168.205.0/24 via 192.168.204.10 dev ens36
    $ sudo ip route replace 192.168.206.0/24 dev ens36
    
    1
    2
    3
  • 添加默认路由:ip route add default via {网关}

    $ sudo ip route add default via 192.168.122.2 dev ens33
    
    1
  • 删除路由:ip route del {目标网络/掩码}、 ip route del default [via {网关s}]

    $ sudo ip route del 192.168.205.0/24
    
    1

SELECTOR的类型:

SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
            [ table TABLE_ID ] [ vrf NAME ] [ proto RTPROTO ]
            [ type TYPE ] [ scope SCOPE ]
1
2
3

TYPE的类型:

TYPE := { unicast | local | broadcast | multicast | throw |
          unreachable | prohibit | blackhole | nat }
1
2

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 ] [ fastopen_no_cookie BOOL ]
1
2
3
4
5
6
7

# ip netns 网络命名空间

  • ip netns help:查看帮助信息

  • ip netns list:显示所有命名的 network namesapce,其实就是显示/var/run/netns目录下的所有 network namespace 对象

    $ ip netns list
    ns1
    
    $ ll /var/run/netns
    total 0
    drwxr-xr-x  2 root root  60 Oct 21 13:32 ./
    drwxr-xr-x 30 root root 900 Oct 21 12:55 ../
    -r--r--r--  1 root root   0 Oct 21 13:32 ns1
    
    1
    2
    3
    4
    5
    6
    7
    8
  • ip netns add NAME:新增网络命名空间

    $ sudo ip netns add ns1
    
    1
  • ip netns attach NAME PID:如果/var/run/netns下没有 NAME(命名空间的名字),该指令将进程 PID 的网络名称空间附加到 NAME,就像它是使用 ip netns 创建的一样。

  • ip netns set NAME NETNSID:给 network namespace 设置 ID

    $ sudo ip netns set ns1 1
    dev@dev:~$ sudo ip netns list
    ns2
    ns1 (id: 1)
    
    1
    2
    3
    4
  • ip [-all] netns delete [NAME]:删除指定名称的 network namespace。如果指定-all选项,则尝试删除所有的 network namespace

  • ip netns identify [PID]:用来查看进程的 network namespace。如果不指定 PID 就显示当前进程的 network namespace

    $ sudo ip netns identify 1657
    ns1
    $ sudo ip netns identify
    
    1
    2
    3
  • ip netns pids NAME:用来查看指定的 network namespace 中的进程的 PID。这个命令其实就是去检查/proc下的所有进程,看进程的 network namespace 是不是指定的 network namespace

    $ sudo ip netns pids ns1
    1657
    1658
    1659
    
    1
    2
    3
    4
  • ip [-all] netns exec [NAME] cmd ...:在 network namespace 中执行命令

    # 在 ns1 network namespace 启动 nginx
    $ sudo ip netns exec ns1 nginx
    
    1
    2
  • ip netns monitor:用来监控对 network namespace 的操作。

    # 比如我们新增一个 network namespace 时就会收到相应的通知
    $ ip netns monitor
    add ns2
    
    
    1
    2
    3
    4
  • ip netns list-id [target-nsid POSITIVE-INT] [nsid POSITIVE-INT]

上次更新: 2025/05/05, 01:46:38
sendfile、aio和directIO
veth-pair容器中的网络

← sendfile、aio和directIO veth-pair容器中的网络→

最近更新
01
VXLAN互通实验
05-13
02
VXLAN
05-13
03
VLAN
05-13
更多文章>
Theme by Vdoing | Copyright © 2018-2025 FeelingLife | 粤ICP备2022093535号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式