zoukankan      html  css  js  c++  java
  • linux网络工具iproute2的使用简介

    一、写本文的目的

    本文完全是自己在学习iproute2的过程中搜集的大杂烩,记录在这里,方便以后自己查询学习,图片都是来自网络,在此表示感谢!


    二、简单了解iproute2工具套装

    iproute2是linux下管理控制TCP/IP网络和流量控制的新一代工具包,旨在替代老派的工具链net-tools,即大家比较熟悉的ifconfig,arp,route,netstat等命令。

    要说这两套工具本质的区别,应该是net-tools是通过procfs(/proc)和ioctl系统调用去访问和改变内核网络配置,而iproute2则通过netlink套接字接口与内核通讯。

    其次,net-tools的用法给人的感觉是比较乱,而iproute2的用户接口相对net-tools来说相对来说,更加直观。比如,各种网络资源(如link、IP地址、路由和隧道等)均使用合适的对象抽象去定义,使得用户可使用一致的语法去管理不同的对象。

    所以,net-tools和iproute2都需要去学习掌握了。

    iproute2的核心命令是ip:



    三、iproute2的典型应用

    本小节,我会使用net-tools和iproute2的命令做对比,做到简单明了,分别演示如何去获取、配置和操作系统网络信息。

    以下是net-tools和iproute2的大致对比:


    (一)网络接口相关

    (1) 查询所有已连接的网络接口(network interface)

    使用net-tools:

    1. root@astrol:~# ifconfig -a  
    2. eth0      Link encap:Ethernet  HWaddr 00:0c:29:0d:ce:93  
    3.           inet addr:192.168.6.138  Bcast:192.168.6.255  Mask:255.255.255.0  
    4.           inet6 addr: fe80::20c:29ff:fe0d:ce93/64 Scope:Link  
    5.           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
    6.           RX packets:202741 errors:1 dropped:3312 overruns:0 frame:0  
    7.           TX packets:60730 errors:0 dropped:0 overruns:0 carrier:0  
    8.           collisions:0 txqueuelen:1000  
    9.           RX bytes:27472662 (27.4 MB)  TX bytes:51025509 (51.0 MB)  
    10.           Interrupt:18 Base address:0x2000  
    11.   
    12. eth0:1    Link encap:Ethernet  HWaddr 00:0c:29:0d:ce:93  
    13.           inet addr:192.168.6.139  Bcast:192.168.6.255  Mask:255.255.255.0  
    14.           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
    15.           Interrupt:18 Base address:0x2000  
    16.   
    17. lo        Link encap:Local Loopback  
    18.           inet addr:127.0.0.1  Mask:255.0.0.0  
    19.           inet6 addr: ::1/128 Scope:Host  
    20.           UP LOOPBACK RUNNING  MTU:65536  Metric:1  
    21.           RX packets:5 errors:0 dropped:0 overruns:0 frame:0  
    22.           TX packets:5 errors:0 dropped:0 overruns:0 carrier:0  
    23.           collisions:0 txqueuelen:0  
    24.           RX bytes:512 (512.0 B)  TX bytes:512 (512.0 B)  

    ifconfig -a显示的是系统所有的网络接口,不管是激活的还是未激活的。

    这里简单对ifconfig的输出做个解释:

    第一行:Link encap(连接类型)  HWaddr(网卡的硬件地址,即MAC地址)

    第二行:inet addr(网卡的IPv4地址) Bcast(广播地址) Mask(子网掩码)

    第三行:inet6 addr(网卡的IPv6地址) 

    第四行:UP(代表网卡是激活状态) BROADCAST(支持广播) RUNNING(代表网卡的网线被接上) MULTICAST(支持组播) MTU(最大传输单元) Metric(用于计算路由的成本)

    第五、六行: 表示网络启动到现在接收和发送的网络包(packets)数量

    第七行:collisions(冲突信息包的数目) txqueuelen(发送队列的大小)

    第八行:表示网络启动到现在接收和发送的总字节量(bytes)

    HWaddr :网卡的硬件地址,即MAC地址
    inet addr:IPv4的IP 地址
    Bcast:广播地址
    mask:子网掩码
    inet6 addr:IPv6地址
    MTU:最大传输单元
    Metric:用于计算路由的成本
    RX:表示网络启动到现在的封包接受情况 (Receive)
    packets:表示接包数
    errors:表示接包发生错误的数量
    dropped:表示丢弃的包数量
    overruns:表示接收时因过速而丢失的数据包数
    frame:表示发生frame错误而丢失的数据包数
    TX:从网络启动到现在传送的情况 (Transmit)
    collisions:冲突信息包的数目
    txqueuelen:发送队列的大小
    RX byte、TX byte:总传送/接受的量

    注:由RX和TX可以了解网络是否非常繁忙
    注:errors:0 dropped:0 overruns:0 frame:0,都为0 说明网络比较稳定
    注:collisions发生太多次表示网络状况不太好

    如果只想知道特定网络接口的信息,可以指定具体网络接口名称,例如ifconfig eth0,ifconfig lo


    使用iproute2:

    1. root@astrol:~# ip link show  
    2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default  
    3.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  
    4. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000  
    5.     link/ether 00:0c:29:0d:ce:93 brd ff:ff:ff:ff:ff:ff  

    同样的,想查看特定网络接口的信息,直接指定网络接口名称即可。

    1. root@astrol:~# ip link show eth0  
    2. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000  
    3.     link/ether 00:0c:29:0d:ce:93 brd ff:ff:ff:ff:ff:ff  

    如果想让输出的结果像ifconfig那样详细,可以增加-s选项:

    1. root@astrol:~# ip -s link show eth0  
    2. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000  
    3.     link/ether 00:0c:29:0d:ce:93 brd ff:ff:ff:ff:ff:ff  
    4.     RX: bytes  packets  errors  dropped overrun mcast  
    5.     40288764   244422   1       3651    0       0  
    6.     TX: bytes  packets  errors  dropped carrier collsns  
    7.     51239397   62116    0       0       0       0  

    这样,就可以看到网络接口的流量信息了。

    如果只想看当前被激活的网络接口,可以在命令后头增加一个up:

    1. root@astrol:~# ip link show up  
    2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default  
    3.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  
    4. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000  
    5.     link/ether 00:0c:29:0d:ce:93 brd ff:ff:ff:ff:ff:ff  

    (2)查询网络设备的IP地址

    使用net-tools:

    1. root@astrol:~# ifconfig eth0  

    使用iproute2:

    1. root@astrol:~# ip addr show dev eth0  
    2. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000  
    3.     link/ether 00:0c:29:0d:ce:93 brd ff:ff:ff:ff:ff:ff  
    4.     inet 192.168.6.138/24 brd 192.168.6.255 scope global eth0  
    5.        valid_lft forever preferred_lft forever  
    6.     inet 192.168.6.139/24 brd 192.168.6.255 scope global secondary eth0:1  
    7.        valid_lft forever preferred_lft forever  
    8.     inet6 fe80::20c:29ff:fe0d:ce93/64 scope link  
    9.        valid_lft forever preferred_lft forever  

    当不指定网络接口时,ip addr其实是ip addr show的简略写法。

    (3)设置网络设备的IP地址

    使用net-tools:

    1. root@astrol:~# ifconfig eth0:1 192.168.6.140  
    2. root@astrol:~# ifconfig eth0:1 192.168.6.140 netmask 255.255.255.0  
    3. root@astrol:~# ifconfig eth0:1 192.168.6.140 netmask 255.255.255.0 broadcast 192.168.6.255  

    使用iproute2:

    1. root@astrol:~# ip addr add 192.168.6.140/24 brd + dev eth0:1  

    这里使用的模版是:ip addr add ip_address/net_prefix brd + devinterface 

    net_prefix隐含指定了子网掩码,brd +表明是标准的广播地址。

    需要了解的一点是,通过ip addr可以非常容易地给一块网卡添加多个地址,ifconfig同样可以,是通过叫做“IP别名”的方式做到的。

    1. root@astrol:~# ip addr add 192.168.6.140/24 broadcast 192.168.6.255 dev eth0  
    2. root@astrol:~# ip addr add 192.168.6.141/24 broadcast 192.168.6.255 dev eth0  
    3. root@astrol:~# ip addr add 192.168.6.142/24 broadcast 192.168.6.255 dev eth0  


    (4)删除网络设备的IP地址

    使用net-tools:

    貌似没有什么好办法去做。

    使用iproute2:

    模版:ip addr del ip_address/net_prefix dev interface

    1. root@astrol:~# ip -4 addr show dev eth0  
    2. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000  
    3.     inet 192.168.6.138/24 brd 192.168.6.255 scope global eth0  
    4.        valid_lft forever preferred_lft forever  
    5.     inet 192.168.6.141/24 brd 192.168.6.255 scope global secondary eth0  
    6.        valid_lft forever preferred_lft forever  
    7. root@astrol:~# ip addr del 192.168.6.141/24 dev eth0  
    8. root@astrol:~# ip -4 addr show dev eth0  
    9. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000  
    10.     inet 192.168.6.138/24 brd 192.168.6.255 scope global eth0  
    11.        valid_lft forever preferred_lft forever  

    此外,iproute2提供ip addr flush可以一次性删除一个网络设备的所有地址:

    1. root@astrol:~# ip addr flush dev eth0  

    默认的,这条命令会删除IPv4和IPv6的地址,如果想分别删除,可以通过分别指定-4和-6选项。


    (5)激活或者停用网络接口

    使用net-tools:

    1. root@astrol:~# ifconfig eth0 up  
    2. root@astrol:~# ifcofig eth0 dow  

    在linux下还可以使用ifup和ifdown来达到同样的目的。

    使用iproute2:

    1. root@astrol:~# ip link set eth0 up  
    2. root@astrol:~# ip link set eth0 down  


    (6)设置或者改变网络接口的参数(属性)

    一个网络接口具体有哪些参数可以供我们去设置呢?输入ip link set eth0,然后按两次TAB键,如下:


    可以看到其中的up和down就是用来激活或者停用某个网络接口的。例如,使能或者关闭eth0的多播功能:

    使用net-tools:

    1. root@astrol:~# ifconfig eth0 multicast  
    2. root@astrol:~# ifconfig eth0 -multicast  

    使用iproute2:

    1. root@astrol:~# ip link set eth0 multicast on  
    2. root@astrol:~# ip link set eth0 multicast off  


    通常,调整最大传输单元MTU用的比较多。

    使用net-tools:

    1. root@astrol:~# ifconfig eth0 mtu 1400  
    2. root@astrol:~# ip link show eth0  
    3. 2: eth0: <BROADCAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000  
    4.     link/ether 00:0c:29:0d:ce:93 brd ff:ff:ff:ff:ff:ff  

    使用iproute2:

    1. root@astrol:~# ip link set eth0 mtu 1500  
    2. root@astrol:~# ip link show eth0  
    3. 2: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000  
    4.     link/ether 00:0c:29:0d:ce:93 brd ff:ff:ff:ff:ff:ff  


    改变网卡硬件地址,即MAC地址(注意,修改MAC地址前网卡必须先关闭):

    使用net-tools:

    1. root@astrol:~# ifconfig eth0 down  
    2. root@astrol:~# ifconfig eth0 hw ether 00:0c:29:0d:ce:95 up  

    使用iproute2:

      1. root@astrol:~# ip link set eth0 down  
      2. root@astrol:~# ip link set eth0 address 00:0c:29:0d:ce:95  
      3. root@astrol:~# ip link set eth0 up 
  • 相关阅读:
    LeetCode——Generate Parentheses
    LeetCode——Best Time to Buy and Sell Stock IV
    LeetCode——Best Time to Buy and Sell Stock III
    LeetCode——Best Time to Buy and Sell Stock
    LeetCode——Find Minimum in Rotated Sorted Array
    Mahout实现基于用户的协同过滤算法
    使用Java对文件进行解压缩
    LeetCode——Convert Sorted Array to Binary Search Tree
    LeetCode——Missing Number
    LeetCode——Integer to Roman
  • 原文地址:https://www.cnblogs.com/hftian/p/8283603.html
Copyright © 2011-2022 走看看