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 
  • 相关阅读:
    常用算法之选择排序
    常用算法之插入排序
    常用算法之冒泡排序
    Python hashlib模块 (主要记录md5加密)
    Django Model
    CSS实现table td中文字的省略与显示
    JS读取文件,Javascript之文件操作 (IE)
    ie6789和其他浏览器之间的鼠标左、中、右键的event.button不一致的办法
    兼容和样式
    kindeditor的docs
  • 原文地址:https://www.cnblogs.com/hftian/p/8283603.html
Copyright © 2011-2022 走看看