linux ip命令和ifconfig命令


轉載於:https://blog.csdn.net/freeking101/article/details/68939059

From: http://blog.jobbole.com/97270/

From: https://linux.cn/article-3144-1.html

From: http://chrinux.blog.51cto.com/6466723/1188108

From: http://www.linuxdiyf.com/linux/23935.html

iproute基本介紹:https://segmentfault.com/a/1190000000638244

iproute2 之 ip命令使用教程手冊:https://www.iamle.com/archives/1750.html

iproute2 github地址(GitHub上有英文版使用文檔):https://github.com/dmbaturin/iproute2-cheatsheet

iproute2 對決 net-tools》(英文原文:Linux TCP/IP networking: net-tools vs. iproute2

 

net-tools 和 iproute2 對比

 

        如今很多系統管理員依然通過組合使用諸如ifconfig、route、arp和netstat等命令行工具(統稱為net-tools)來配置網絡功能,解決網絡故障。net-tools起源於BSD的TCP/IP工具箱,后來成為老版本Linux內核中配置網絡功能的工具。但自2001年起,Linux社區已經對其停止維護。同時,一些Linux發行版比如Arch Linux和CentOS/RHEL 7則已經完全拋棄了net-tools,只支持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地址、路由和隧道等)均使用合適的對象抽象去定義,使得用戶可使用一致的語法去管理不同的對象。。更重要的是,到目前為止,iproute2仍處在持續開發中。

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

 

        如果你仍在使用net-tools,而且尤其需要跟上新版Linux內核中的最新最重要的網絡特性的話,那么是時候轉到iproute2的陣營了。原因就在於使用iproute2可以做很多net-tools無法做到的事情。

        對於那些想要轉到使用iproute2的用戶,有必要了解下面有關net-tools和iproute2的眾多對比。

        iproute2的核心命令是ip:

 

 
 
iproute2 ip 命令常用備忘
  1.  
    ip地址管理
  2.  
    1.顯示ip地址
  3.  
    ip a
  4.  
    ip address show
  5.  
    ip addr show dev eth0
  6.  
    ip a sh eth0
  7.  
    2.增加刪除地址
  8.  
    ip address add 192.0 .2 .1/ 24 dev eth0
  9.  
    ip addr del 192.0 .2 .2/ 24 dev eth0
  10.  
    3.顯示接口統計
  11.  
    ip -s link ls eth0
  12.  
    網卡和鏈路配置
  13.  
    4.顯示鏈路
  14.  
    ip link show
  15.  
    ip link sh eth0
  16.  
    4.修改接口狀態
  17.  
    ip link set eth0 up
  18.  
    ip link s gre01 down
  19.  
    路由表管理
  20.  
    5.顯示路由表
  21.  
    ip route
  22.  
    ip ro show dev gre01
  23.  
    6.增加新路由
  24.  
    ip route add 10.2 .2 .128/ 27 dev gre01
  25.  
    7.增加默認路由
  26.  
    ip route add default via 192.168 .1 .1
  27.  
    8.修改默認路由
  28.  
    ip route chg default via 192.168 .1 .2
  29.  
    9.刪除默認路由
  30.  
    ip route del default
  31.  
    隧道配置
  32.  
    10.增加刪除GRE隧道
  33.  
    ip tunnel add gre01 mode gre local 10.1 .1 .1 remote 20.2 .2 .1 ttl 255
  34.  
    ip tunnel del gre01
  35.  
    11.IPIP隧道
  36.  
    ip tunl a ipip01 mode ipip local 10.1 .1 .1 remote 20.2 .2 .1 ttl 255
  37.  
    12.顯示隧道
  38.  
    ip tunnel show
  39.  
    13.顯示隧道統計
  40.  
    ip -s tunl ls gre01
  41.  
    鄰居和arp表管理
  42.  
    13.查看arp表
  43.  
    ip neigh show
  44.  
    14.手工增加刪除arp項
  45.  
    ip neighbor add 10.2 .2 .2 dev eth0
  46.  
    ip neigh del 10.2 .2 .1 dev eth0
  47.  
    socket統計
  48.  
    15.顯示當前監聽
  49.  
    ss -l
  50.  
    15.顯示當前監聽的進程
  51.  
    ss -p
  52.  
     
  53.  
    #常用命令
  54.  
    ip link show #顯示鏈路
  55.  
    ip addr show #顯示地址(或ifconfig)
  56.  
    ip route show #顯示路由(route -n)
  57.  
    ip neigh show #顯示arp表(ping 192.168 .95 .50,如果主機在同一局域網內,直接加到arp表)
  58.  
    ip neigh delete 192.168 .95 .50 dev eth0 #刪除arp條目,條目仍然存在狀態為stale,下次通信需要確認
  59.  
    ip rule show #顯示缺省規則
  60.  
    ip route del default dev eth0 #刪除接口路由
  61.  
    ip route show table local #查看本地靜態路由
  62.  
    ip route show table main #查看直連路由
  63.  
     
  64.  
    #添加靜態路由
  65.  
    ip route add 10.0 .0 .0/ 24 via 192.168 .92 .129
  66.  
    ip route add 10.10 .10 .10 via 192.168 .92 .129
  67.  
     
  68.  
    ip route add 172.31 .100 .0/ 24 dev eno16777736
  69.  
    ip route add 172.32 .0 .2 dev eno16777736
  70.  
     
  71.  
    #查看路由表
  72.  
    [root@localhost ~]# ip route show table main
  73.  
     
  74.  
    #刪除
  75.  
    ip route del 10.0 .0 .0/ 24
  76.  
    ip route del 10.10 .10 .10
  77.  
     
  78.  
    ip route del 172.31 .100 .0/ 24
  79.  
    ip route del 172.32 .0 .2
  80.  
     
  81.  
    #再次查看路由表
  82.  
    [root@localhost ~]# ip route show table main
  83.  
    [root@localhost ~]# ip route show table local
  84.  
     
  85.  
    #添加網卡別名
  86.  
    ip addr add 192.168 .0 .11/ 24 dev eno16777736
  87.  
     
  88.  
    #查看下網卡,別名沒有產生,而是直接繼承
  89.  
    [root@localhost ~]# ip addr show eno16777736
  90.  
     
  91.  
    #添加網卡別名並添加標記 label
  92.  
    ip addr add 192.168 .1 .2 label eno16777736: 0 dev eno16777736
  93.  
     
  94.  
    #查看下,多了eno16777736: 0
  95.  
    ip addr show eno16777736
  96.  
     
  97.  
    [root@localhost ~]# ip addr add 192.168 .55 .191/ 24 label eth0: 1 dev eth0
  98.  
    [root@localhost ~]# ip addr show
 
(一)網絡接口相關
 
(1) 查詢所有已連接的網絡接口(network interface)
使用net-tools:
  1.  
    root@astrol :~ # ifconfig -a
  2.  
    eth 0 Link encap:Ethernet HWaddr 00 :0 c: 29 :0 d: ce: 93
  3.  
    inet addr: 192.168. 6.138 Bcast: 192.168. 6.255 Mask: 255.255. 255.0
  4.  
    inet6 addr: fe80:: 20 c: 29 ff: 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.  
    eth0: 1Link encap:Ethernet HWaddr 00 :0 c: 29 :0 d: ce: 93
  12.  
    inet addr: 192.168. 6.139 Bcast: 192.168. 6.255 Mask: 255.255. 255.0
  13.  
    UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric: 1
  14.  
    Interrupt: 18 Base address: 0x2000
  15.  
    loLink encap:Local Loopback
  16.  
    inet addr: 127.0. 0. 1 Mask: 255.0. 0. 0
  17.  
    inet6 addr: : : 1/ 128 Scope:Host
  18.  
    UP LOOPBACK RUNNING MTU: 65536 Metric: 1
  19.  
    RX packets: 5 errors: 0 dropped: 0 overruns: 0 frame: 0
  20.  
    TX packets: 5 errors: 0 dropped: 0 overruns: 0 carrier: 0
  21.  
    collisions: 0 txqueuelen: 0
  22.  
    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)
  1.  
    HWaddr :網卡的硬件地址,即MAC地址
  2.  
    inet addr:IPv4的IP 地址
  3.  
    Bcast:廣播地址
  4.  
    mask:子網掩碼
  5.  
    inet6 addr:IPv6地址
  6.  
    MTU:最大傳輸單元
  7.  
    Metric:用於計算路由的成本
  8.  
    RX:表示網絡啟動到現在的封包接受情況 (Receive)
  9.  
    packets:表示接包數
  10.  
    errors:表示接包發生錯誤的數量
  11.  
    dropped:表示丟棄的包數量
  12.  
    overruns:表示接收時因過速而丟失的數據包數
  13.  
    frame:表示發生frame錯誤而丟失的數據包數
  14.  
    TX:從網絡啟動到現在傳送的情況 (Transmit)
  15.  
    collisions:沖突信息包的數目
  16.  
    txqueuelen:發送隊列的大小
  17.  
    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: eth 0: <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: eth 0: <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 36510 0
  6.  
    TX: bytes packets errors dropped carrier collsns
  7.  
    51239397 621160 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:
root@astrol:~# ifconfig eth0 
使用iproute2:
  1.  
    root@astrol:~ # ip addr show dev eth0
  2.  
    2: eth 0: <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 eth 0
  5.  
    valid_lft forever preferred_lft forever
  6.  
    inet 192.168. 6.139/ 24 brd 192.168. 6.255 scope global secondary eth 0: 1
  7.  
    valid_lft forever preferred_lft forever
  8.  
    inet6 fe8 0:: 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:
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:
貌似沒有什么好辦法去做:ifconfig eth0 0  。
就IP地址的移除而言,除了給接口分配全0地址外,net-tools沒有提供任何合適的方法來移除網絡接口的IPv4地址
使用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可以一次性刪除一個網絡設備的所有地址:
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: eth 0: <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: eth 0: <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
類似的,需要先關閉網卡再設置的屬性有name
 

 

linux的ip命令和ifconfig類似,但前者功能更強大,並旨在取代后者。使用ip命令,只需一個命令,你就能很輕松地執行一些網絡管理任務。ifconfig是net-tools中已被廢棄使用的一個命令,許多年前就已經沒有維護了。iproute2套件里提供了許多增強功能的命令,ip命令即是其中之一。

Net tools vs Iproute2

要安裝ip,請點擊這里下載iproute2套裝工具 。不過,大多數Linux發行版已經預裝了iproute2工具。

顯示所有已連接的網絡接口

下面的命令顯示出所有可用網絡接口的列表(無論接口是否激活)。

  1.  
    使用net- tools:
  2.  
    $ ifconfig -a
  3.  
    使用iproute2:
  4.  
    $ ip link show

激活或停用網絡接口

使用這些命令來激活或停用某個指定的網絡接口。

  1.  
    使用net- tools:
  2.  
    $ sudo ifconfig eth1 up
  3.  
    $ sudo ifconfig eth1 down
  4.  
    使用 iproute2:
  5.  
    $ sudo ip link set down eth1
  6.  
    $ sudo ip link set up eth1

 

為網絡接口分配IPv4地址

  1.  
    使用net- tools:
  2.  
    $ sudo ifconfig eth1 10.0. 0. 1/ 24
  3.  
    使用 iproute2:
  4.  
    $ sudo ip addr add 10.0. 0. 1/ 24 dev eth1

可以使用iproute2給同一個接口分配多個IP地址,ifconfig則無法這么做。使用ifconfig的變通方案是使用IP別名。

  1.  
    使用net-tools配置多IP:
  2.  
    $ sudo ifconfig eth0: 1 192.168. 10.10 netmask 255.255. 255.0 up
  3.  
    $ sudo ifconfig eth0: 2 192.168. 10.15 netmask 255.255. 255.0 up
  4.  
     
  5.  
    使用iproute2配置多 IP:
  6.  
    $ sudo ip addr add 10.0. 0. 1/ 24 broadcast 10.0. 0. 255 dev eth1
  7.  
    $ sudo ip addr add 10.0. 0. 2/ 24 broadcast 10.0. 0. 255 dev eth1
  8.  
    $ sudo ip addr add 10.0. 0. 3/ 24 broadcast 10.0. 0. 255 dev eth1
  9.  
     
  10.  
    查看eth 0的IP地址
  11.  
    $sudo ip addr list dev eth 0

 

移除網絡接口的IPv4地址

就IP地址的移除而言,除了給接口分配全0地址外,net-tools沒有提供任何合適的方法來移除網絡接口的IPv4地址。而 iproute2則能很好地完成。

  1.  
    使用net- tools:
  2.  
    $ sudo ifconfig eth1 0
  3.  
    使用 iproute2:
  4.  
    $ sudo ip addr del 10.0. 0. 1/ 24 dev eth1

 

顯示網絡接口的IPv4地址

  1.  
    使用net- tools:
  2.  
    $ ifconfig eth1
  3.  
    使用 iproute2:
  4.  
    $ ip addr show dev eth1
  5.  
    如果是網卡綁定了多IP的話,iproute2能顯示所有的地址,而net-tools只能顯示一個

 

為網絡接口分配IPv6地址

使用這些命令為網絡接口添加IPv6地址。net-tools和iproute2都允許用戶為一個接口添加多個IPv6地址。

  1.  
    使用net- tools:
  2.  
    $ sudo ifconfig eth1 inet6 add 2002 :0 db5: 0 :f102 : : 1/ 64
  3.  
    $ sudo ifconfig eth1 inet6 add 2003 :0 db5: 0 :f102 : : 1/ 64
  4.  
    使用 iproute2:
  5.  
    $ sudo ip - 6 addr add 2002 :0 db5: 0 :f102 : : 1/ 64 dev eth1
  6.  
    $ sudo ip - 6 addr add 2003 :0 db5: 0 :f102 : : 1/ 64 dev eth1

 

顯示網絡接口的IPv6地址

net-tools和iproute2都可以顯示出所有已分配的IPv6地址。

  1.  
    使用net- tools:
  2.  
    $ ifconfig eth1
  3.  
    使用 iproute2:
  4.  
    $ ip - 6 addr show dev eth1

 

移除網絡設備的IPv6地址

使用這些命令可移除接口中不必要的IPv6地址。

  1.  
    使用net- tools:
  2.  
    $ sudo ifconfig eth1 inet6 del 2002 :0 db5: 0 :f102 : : 1/ 64
  3.  
    使用 iproute2:
  4.  
    $ sudo ip - 6 addr del 2002 :0 db5: 0 :f102 : : 1/ 64 dev eth1

 

改變網絡接口的MAC地址

使用下面的命令可篡改網絡接口的MAC地址,請注意在更改MAC地址前,需要停用接口。

 

  1.  
    使用net- tools:
  2.  
    $ sudo ifconfig eth1 hw ether 08 : 00 : 27 : 75 : 2 a: 66
  3.  
    使用 iproute2:
  4.  
    $ sudo ip link set dev eth1 address 08 : 00 : 27 : 75 : 2 a: 67

 

查看IP路由表

net-tools中有兩個選擇來顯示內核的IP路由表:route和netstat。在iproute2中,使用命令ip route。

  1.  
    使用net- tools:
  2.  
    $route -n
  3.  
    $ netstat -rn
  4.  
    使用 iproute2:
  5.  
    $ ip route show

 

添加和修改默認路由

這里的命令用來添加或修改內核IP路由表中的默認路由規則。請注意在net-tools中可通過添加新的默認路由、刪除舊的默認路由來實現修改默認路由。在iproute2使用ip route命令來代替。

  1.  
    使用net-tools:
  2.  
    $ sudo route add default gw 192.168 .1 .2 eth0
  3.  
    $ sudo route del default gw 192.168 .1 .1 eth0
  4.  
    使用iproute2:
  5.  
    $ sudo ip route add default via 192.168 .1 .2 dev eth0
  6.  
    $ sudo ip route replace default via 192.168 .1 .2 dev eth0

 

添加和移除靜態路由

  1.  
    使用net-tools:
  2.  
    $ sudo route add default gw 192.168 .1 .2 eth0
  3.  
    $ sudo route del default gw 192.168 .1 .1 eth0
  4.  
    使用iproute2:
  5.  
    $ sudo ip route add default via 192.168 .1 .2 dev eth0
  6.  
    $ sudo ip route replace default via 192.168 .1 .2 dev eth0

 

查看套接字統計信息

這里的命令用來查看套接字統計信息(比如活躍或監聽狀態的TCP/UDP套接字)。

  1.  
    使用net- tools:
  2.  
    $ netstat
  3.  
    $ netstat -l
  4.  
    使用 iproute2:
  5.  
    $ ss
  6.  
    $ ss -l

 

查看ARP表

  1.  
    使用net- tools:
  2.  
    $ arp -an
  3.  
    使用 iproute2:
  4.  
    $ ip neigh

 

添加或刪除靜態ARP項

  1.  
    使用net- tools:
  2.  
    $ sudo arp -s 192.168. 1.100 00 :0 c: 29 :c0 : 5 a:ef
  3.  
    $ sudo arp -d 192.168. 1.100
  4.  
    使用 iproute2:
  5.  
    $ sudo ip neigh add 192.168. 1.100 lladdr 00 :0 c: 29 :c0 : 5 a:ef dev eth 0
  6.  
    $ sudo ip neigh del 192.168. 1.100 dev eth 0

 

添加、刪除或查看多播地址

  1.  
    使用net- tools:
  2.  
    $ sudo ipmaddr add 33 : 44 : 00 : 00 : 00 : 01 dev eth 0
  3.  
    $ sudo ipmaddr del 33 : 44 : 00 : 00 : 00 : 01 dev eth 0
  4.  
    $ ipmaddr show dev eth 0
  5.  
    $ netstat -g
  6.  
    使用 iproute2:
  7.  
    $ sudo ip maddr add 33 : 44 : 00 : 00 : 00 : 01 dev eth 0
  8.  
    $ sudo ip maddr del 33 : 44 : 00 : 00 : 00 : 01 dev eth 0
  9.  
    $ ip maddr list dev eth 0

 

 

iproute2中ip命令

你也可以使用git命令來下載最新源代碼來編譯:

$ git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/shemminger/iproute2.git

 

iproute2 git clone

iproute2 git clone

設置和刪除Ip地址

要給你的機器設置一個IP地址,可以使用下列ip命令:

$ sudo ip addr add 192.168.0.193/24 dev wlan0

請注意IP地址要有一個后綴,比如/24。這種用法用於在無類域內路由選擇(CIDR)中來顯示所用的子網掩碼。在這個例子中,子網掩碼是255.255.255.0。

在你按照上述方式設置好IP地址后,需要查看是否已經生效。

$ ip addr show wlan0

 

set ip address

set ip address

你也可以使用相同的方式來刪除IP地址,只需用del代替add。

$ sudo ip addr del 192.168.0.193/24 dev wlan0

 

delete ip address

delete ip address

列出路由表條目

ip命令的路由對象的參數還可以幫助你查看網絡中的路由數據,並設置你的路由表。第一個條目是默認的路由條目,你可以隨意改動它。

在這個例子中,有幾個路由條目。這個結果顯示有幾個設備通過不同的網絡接口連接起來。它們包括WIFI、以太網和一個點對點連接。

$ ip route show

 

ip route show

ip route show

假設現在你有一個IP地址,你需要知道路由包從哪里來。可以使用下面的路由選項(譯注:列出了路由所使用的接口等):

$ ip route get 10.42.0.47

 

ip route get

ip route get

更改默認路由

要更改默認路由,使用下面ip命令:

$ sudo ip route add default via 192.168.0.196

 

default route

default route

顯示網絡統計數據

使用ip命令還可以顯示不同網絡接口的統計數據。

 

ip statistics all interfaces

ip statistics all interfaces

當你需要獲取一個特定網絡接口的信息時,在網絡接口名字后面添加選項ls即可。使用多個選項-s會給你這個特定接口更詳細的信息。特別是在排除網絡連接故障時,這會非常有用。

$ ip -s -s link ls p2p1

 

ip link statistics

ip link statistics

ARP條目

地址解析協議(ARP)用於將一個IP地址轉換成它對應的物理地址,也就是通常所說的MAC地址。使用ip命令的neigh或者neighbour選項,你可以查看接入你所在的局域網的設備的MAC地址。

$ ip neighbour

 

ip neighbour

ip neighbour

監控netlink消息

也可以使用ip命令查看netlink消息。monitor選項允許你查看網絡設備的狀態。比如,所在局域網的一台電腦根據它的狀態可以被分類成REACHABLE或者STALE。使用下面的命令:

$ ip monitor all

 

ip monitor all

ip monitor all

激活和停止網絡接口

你可以使用ip命令的up和down選項來激某個特定的接口,就像ifconfig的用法一樣。

在這個例子中,當ppp0接口被激活和在它被停止和再次激活之后,你可以看到相應的路由表條目。這個接口可能是wlan0或者eth0。將ppp0更改為你可用的任意接口即可。

  1.  
    $ sudo ip link set ppp0 down
  2.  
     
  3.  
    $ sudo ip link set ppp0 up

 

ip link set up and down

ip link set up and down

獲取幫助

當你陷入困境,不知道某一個特定的選項怎么用的時候,你可以使用help選項。man頁面並不會提供許多關於如何使用ip選項的信息,因此這里就是獲取幫助的地方。

比如,想知道關於route選項更多的信息:

$ ip route help

 

ip route help

ip route help

小結:對於網絡管理員們和所有的Linux使用者們,ip命令是必備工具。是時候拋棄ifconfig命令了,特別是當你寫腳本時。

 

net-tools 中 ifconfig 詳細解釋

 

許多windows非常熟悉ipconfig命令行工具,它被用來獲取網絡接口配置信息並對此進行修改。Linux系統擁有一個類似的工具,也就是ifconfig(interfaces config)。通常需以root身份登錄或使用sudo以便Linux機器上使用ifconfig工具。依賴於ifconfig命令中使用些選項屬性,ifconfig工具不僅可以被用來簡單地獲取網絡接口配置信息,還可以修改這些配置。

1.命令格式:

ifconfig [網絡設備] [參數]

2.命令功能:

ifconfig 命令用來查看和配置網絡設備。當網絡環境發生改變時可通過此命令對網絡進行相應的配置

3.命令參數:

up 啟動指定網絡設備/網卡

down 關閉指定網絡設備/網卡該參數可以有效地阻止通過指定接口的IP信息流,如果想永久地關閉一個接口,我們還需要從核心路由表中將該接口的路由信息全部刪除。

arp 設置指定網卡是否支持ARP協議

-promisc 設置是否支持網卡的promiscuous模式,如果選擇此參數,網卡將接收網絡中發給它所有的數據包

-allmulti 設置是否支持多播模式,如果選擇此參數,網卡將接收網絡中所有的多播數據包

-a 顯示全部接口信息

-s 顯示摘要信息(類似於 netstat -i)

add 給指定網卡配置IPv6地址

del 刪除指定網卡的IPv6地址

<硬件地址> 配置網卡最大的傳輸單元

mtu<字節數> 設置網卡的最大傳輸單元 (bytes)

netmask<子網掩碼> 設置網卡的子網掩碼掩碼可以是有前綴0x的32位十六進制數,也可以是用點分開的4個十進制數。如果不打算將網絡分成子網,可以不管這一選項;如果要使用子網,那么請記住,網絡中每一個系統必須有相同子網掩碼。

tunel 建立隧道

dstaddr 設定一個遠端地址,建立點對點通信

-broadcast<地址> 為指定網卡設置廣播協議

-pointtopoint<地址> 為網卡設置點對點通訊協議

multicast 為網卡設置組播標志

address 為網卡設置IPv4地址

txqueuelen<長度> 為網卡設置傳輸列隊的長度

4.使用實例:

實例1:顯示網絡設備信息激活狀態的

命令:ifconfig

實例2:啟動關閉指定網卡

命令:

ifconfig eth0 up

ifconfig eth0 down

實例3:為網卡配置和刪除IPv6地址

命令:

ifconfig eth0 add 33ffe:3240:800:1005::2/64

ifconfig eth0 del 33ffe:3240:800:1005::2/64

實例4:用ifconfig修改MAC地址

命令:

ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE

實例5:配置IP地址

[root@localhost ~] #  ifconfig eth0 192.168.120.56 
[root@localhost ~] #  ifconfig eth0 192.168.120.56 netmask 255.255.255.0 
[root@localhost ~] #  ifconfig eth0 192.168.120.56 netmask 255.255.255.0 broadcast 192.168.120.255

說明:

ifconfig eth0 192.168.120.56 

給eth0網卡配置IP地192.168.120.56

 ifconfig eth0 192.168.120.56 netmask 255.255.255.0 

給eth0網卡配置IP地址192.168.120.56 並加上子掩碼255.255.255.0

ifconfig eth0 192.168.120.56 netmask 255.255.255.0 broadcast 192.168.120.255

/給eth0網卡配置IP地址192.168.120.56加上子掩碼255.255.255.0加上個廣播地址 192.168.120.255 

實例6:啟用和關閉ARP協議

命令:

ifconfig eth0 arp

ifconfig eth0 -arp

輸出: 

[root@localhost ~] #  ifconfig eth0 arp 
[root@localhost ~] #  ifconfig eth0 -arp

說明:

ifconfig eth0 arp 開啟網卡eth0 arp協議;

ifconfig eth0 -arp 關閉網卡eth0 arp協議; 

實例7:設置最大傳輸單元

命令:

ifconfig eth0 mtu 1500

 

  1.  
    [root@localhost ~] # ifconfig #處於激活狀態的網絡接口
  2.  
     
  3.  
    [root@localhost ~] # ifconfig -a #所有配置的網絡接口,不論其是否激活
  4.  
     
  5.  
    [root@localhost ~] # ifconfig eth0 #顯示eth0的網卡信息
  6.  
     
  7.  
    [root@localhost ~] # ifconfig eth0 down #關閉eth0網卡
  8.  
     
  9.  
    [root@localhost ~] # ifconfig eth0 up #開啟eth0網卡
  10.  
     
  11.  
    [root@localhost ~] # ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 #為網卡添加IPv6地址
  12.  
     
  13.  
    [root@localhost ~] # ifconfig eth0 del 33ffe:3240:800:1005::2/ 64 #為網卡刪除IPv6地址
  14.  
     
  15.  
    [root@localhost ~] # ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE #修改MAC地址
  16.  
     
  17.  
    [root@localhost ~] # ifconfig eth0 192.168.1.56 #給eth0網卡配置IP地址
  18.  
     
  19.  
    [root@localhost ~] # ifconfig eth0 192.168.1.56 netmask 255.255.255.0 #給eth0網卡配置IP地址,並加上子掩碼
  20.  
     
  21.  
    [root@localhost ~] # ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255 #給eth0網卡配置IP地址,加上子掩碼,加上個廣播地址
  22.  
     
  23.  
    [root@localhost ~] # ifconfig eth0 mtu 1500 #設置能通過的最大數據包大小為 1500 bytes
  24.  
     
  25.  
    [root@localhost ~] # ifconfig eth0 arp #開啟arp功能
  26.  
     
  27.  
    [root@localhost ~] # ifconfig eth0 -arp #關閉arp功能

 

 

net-tools中ifconfig 和 route 與 iproute2 中 ip

一、作為一個linux的瘋狂熱愛者,我們首先需要掌握的就是在linux系統下怎么配置IP、路由和主機名基本的linux網絡配置,當然如果要我們接入互聯網基本的IP地址配置還是不夠的,訪問網絡的話我們需要配置我們的域名解析服務器DNS,下面作為菜鳥的我就把我們平常用到的基本網絡配置命令來和大家介紹一下,寫的不好的話,還請見諒~~~~~

      本篇主要介紹linux下網絡查看、配置的基本命令:ifconfig、ip、route,然后捎帶介紹下DNS、主機名等信息的配置!

二、我們在配置網絡之前,首先我們來認識一下linux系統下網絡接口的類型和命名規則以及網絡地址的類型

1、網絡接口類型:

lo:本地回環接口

eth[0-9]:以太網接口

pppx:點對點的連接

當然我們平常用到的也就是lo和以太網接口這兩種類型回環環接口lo只是我們用在系統內部進行回環測試的,至於eth的以太網接口就是我們經常用來連接網線的那個物理接口了。

2、以太網網卡的命名規則:

在不同的系統之下其命名規則是不盡相同的,我們這就以RedHat 5-32bit的系統為例:

REHL 5-32bit:以太網網卡命名規則的定義文件為/etc/modprod.conf

圖像 120

3、網絡地址類型:

暫時性網絡地址:利用ifconfig等命令配置的網絡信息,會立即生效,但重啟網絡服務或系統會失效

永久性的網絡地址:通過修改系統內的網絡配置文件進行的修改,不會立即生效,需要重啟網絡服務或者系統會生效,並且會永久性的生效。 

三、網絡IP地址配置命令之ifconfig

1、ifconfig:查看活動的網卡信息,僅限於活動的網卡

        例如先查看本地的網卡信息如下—ifconfig

圖像 121

為了說明ifconfig查看的只是活動的網卡信息,我們下面把lo網卡down掉,在查看

圖像 122

2、ifconfig的相關子命令

ifconfig  eth[0-9]:后面跟某個網卡則可以直接查看某個網卡的信息,如只查看eth0的信息

圖像 123

ifconfig –a :則是查看所有的網卡信息,包括活動或非活動的網卡信息

圖像 124

下面利用ifconfig來配置網卡的IP地址,當然這個地址是臨時的地址,一旦重啟網絡服務或者重啟網絡系統就會失效的!!

格式:ifconfig  ethx IP/MASK:配置某個網卡的ip地址

        例如:設置eth0的IP地址為172.16.35.1/16,則就可以在命令行下直接鍵入:ifconfig eth0 172.16.36.5/16

圖像 126

圖像 127

 

我們下面重啟一下網絡服務,此配置就會失效,然后恢復為原來的IP地址的,如下圖

圖像 128

3、網絡服務的管理命令,上面已經提到過一個重啟網絡服務的命令了,那么我們的網絡服務控制命令都有哪些那???就是很簡單,就是start,stop,restart,status這幾個命令而已。

用法格式:

/etc/init.d/network {start | stop | restart | status} 或者service network {start | stop | restart | status}

四、永久性IP地址配置

通過上面我們了解了利用ifconfig來配置臨時的網絡IP地址了,當然這還不能滿足我們的需求,我們不能每次使用電腦的時候都配置IP地址啊~那太麻煩,所以我們需要把IP地址配置為固定的IP或者通過DHCP服務來回去,這樣的配置就需要修改系統的網絡配置文件了,我們REHL5上的網絡配置文為/etc/sysconfig/network-scripts/ifcfg-eth[0-9],下面我們就來看看怎么定義這個文件內的內容。

其配置方式有兩種:DHCP和固定IP

DHCP的設置比較簡單,只需指定BOOTPROTOL類型為DHCP即可,當然、配置之前讓我們先來了解下其配置文件內定義的內容都是有哪些?詳解如下圖所示

圖像 129

當然,我們上圖是基於固定IP的設置,那么基於DHCP的呢?DHCP的更加簡單,配置參數如下

  DEVICE=eth0 
  BOOTPROTO=DHCP 
  ONBOOT=YES 
  HWADDR=......

五、以上內容我們了解了在linux系統上通過ifconfig命令和配置文件來為linux系統配置臨時IP地址和永久性的IP的相關操作,那么我們下面來看下關於系統路由的設定,路由相關信息的設定命令是route

1、route:直接可以查看我們系統上的路由信息

     route –n :以數字的形式顯示路由信息

圖像 130

2、route命令的子選項

添加路由

route  add -host:添加主機路由

route  add -net:添加網絡路由

route  add -net  0.0.0.0:添加默認路由

格式:route add -net|host DEST gw NEXTHOP

例如,添加一條路由,讓主機通過172.16.7.3訪問192.168.0.0/24網段

        route add –net 192.168.0.0/24 gw 172.16.7.3

圖像 131

刪除路由

route del -host:刪除主機路由

route del –net:刪除網絡路由

  例如,刪除剛才加的那條路由信息:route del –net 192.168.0.0、24 即可實現

3、以上利用route命令增加的配置在重啟網絡服務或者系統的時候,所有的配置都會失效,這只是臨時的配置而已,要想使我們配置的路由信息永久性的有效,我們需要把配置信息定義在配置文件內:/etc/sysconfig/network-scripts/route-ethx,ethx表示對應的通過那個網卡路由

配置格式:

格式1:DEST(目的) via NEXTTOP(下一跳)

格式2:ADDRESS0=網絡地址(目的地址)、NETMASK0=子網掩碼(目的網絡)、

GATEWAY0=網關(通過那個網卡的網關)、ADDRESS1=、NETMASK1=……等等,可以設置條路由。

圖像 132

圖像 133

以上的配置不會立即生效,但是重啟網絡服務或者系統就會生效,並且是永久有效。

 

六、網絡配置的另外一個功能強大的命令:IP

IP命令是iproute2軟件包內的一個命令,功能比ifconfig更強大,可以對系統配置IP和路由信息。

1、ip link:配置網絡接口屬性

     ip link show:查看所有網絡接口屬性信息

     ip -s link show:查看所有統計信息

     ip link set ethX {up|down|arp {on|off}}:設置網絡接口的工作屬性

圖像 134

2、ip addr:配置網絡地址

    ip addr show:查看網絡信息,看到的信息和ip link show差不多,都比較簡要

    ip addr add IP dev ethX :配置IP地址(此命令配置的網卡信息利用ifconfig查看不到,需要利用ip addr show查看)

圖像 135

      ip addr add IP dev ethx label ethX:X:配置子Ip並對其加別名

 圖像 139

刪除已經配置的IP地址

ip addr del  IPADDR dev STRING

圖像 140

3、我們說過IP命令是個強大的命令,那是因為我們不僅僅能利用IP命令來創建IP地址相關的配置,還可以利用IP命令來實現對系統上路由信息的設置,其主要命令如下:

ip route:路由信息

ip route change|replace :修改路由信息

ip route add to 目的網段 dev ethx via IP(下一跳IP)

圖像 143

上面就是IP命令的用法,當然這些命令行下的操作只是暫時性的,一旦重啟網絡服務或系統這些配置都將會失效,如果想使其永久生效,就需要利用前的相關方法在配置文件內進行設定了。

七、IP地址的配置我們已經在前面介紹過了,這里不在重述,下面介紹下關於eth0:0這個主機網絡別名的配置文件的配置方法

 

  1. ⑴、命令配置法:ifconfig和ip 
  2.  
  3.       Ifconfig ethx:x IP/netmask 
  4.  
  5.       ip addr add IP dev ethx label ethX:X 
  6.  
  7.       利用命令配置的只是暫時的IP地址,如果重啟網絡服務和系統都會失效的。 
  8.  
  9. ⑵、配置文件配置法: 
  10.  
  11.     修改/etc/sysconfig/network-scripts/ifcfg-ethx:x 
  12.  
  13.       DEVICE=ethx:x 
  14.  
  15.       BOOTPROTO=static  
  16.  
  17.       IPIPADDR=   IP地址 
  18.  
  19.       NETMASK=  子網掩碼 
  20.  
  21.       GATEWAY=  網關 
  22.  
  23.       ONBOOT=YES   是否開機啟用 
  24.  
  25.       HWADDR=...... MAC 
  26.  
  27.       非主要地址不能用DHCP服務獲得,必須為靜止的。 

八、 DNS配置文件:

 

  1. ⑴、DNS配置文件位置:/etc/resolv.conf 
  2.  
  3. ⑵、DNS配置格式: 
  4.  
  5.          nameserver DNS_IP1 
  6.  
  7.          nameserver DNS_IP2 
  8.  
  9. 指定本地解析: 
  10.  
  11.      /etc/hosts下添加 
  12.  
  13.     目標主機IP        主機名       
  14.  
  15.     fg:172.16.36.1  www.chris.com  
  16.  
  17. DNS解析過程-->/etc/hosts-->DNS 服務器 

九、主機名配置文件:

 

  1. ⑴、配置文件位置: /etc/sysconfig/network 
  2.  
  3. ⑵、配置格式: 
  4.  
  5.          HOSTNAME=名稱 
  6.  
  7.          NETWORKING={yes|no}:是否開啟網絡功能 

  圖像 145

 

Linux策略性路由應用及分析(iproute2)

http://blog.chinaunix.net/uid-738429-id-2057370.html

 

 

Linux策略性路由應用及分析(iproute2)

策略性路由

 

  策略性是指對於IP包的路由是以網絡管理員根據需要定下的一些策略為主要依據進行路由的。例如我們可以有這樣的策略:“所有來直自網A的包,選擇X路徑;其他選擇Y路徑”,或者是“所有TOS為A的包選擇路徑F;其他選者路徑K”。
  Cisco 的網絡操作系統 (Cisco IOS) 從11.0開始就采用新的策略性路由機制。而Linux是在內核2.1開始采用策略性路由機制的。策略性路由機制與傳統的路由算法相比主要是引入了多路由表以及規則的概念。

多路由表(multiple Routing Tables)

  傳統的路由算法是僅使用一張路由表的。但是在有些情形底下,我們是需要使用多路由表的。例如一個子網通過一個路由器與外界相連,路由器與外界有兩條線路相連,其中一條的速度比較快,一條的速度比較慢。對於子網內的大多數用戶來說對速度並沒有特殊的要求,所以可以讓他們用比較慢的路由;但是子網內有一些特殊的用戶卻是對速度的要求比較苛刻,所以他們需要使用速度比較快的路由。如果使用一張路由表上述要求是無法實現的,而如果根據源地址或其它參數,對不同的用戶使用不同的路由表,這樣就可以大大提高路由器的性能。

規則(rule)

  規則是策略性的關鍵性的新的概念。我們可以用自然語言這樣描述規則,例如我門可以指定這樣的規則:
  規則一:“所有來自192.16.152.24的IP包,使用路由表10, 本規則的優先級別是1500”
  規則二:“所有的包,使用路由表253,本規則的優先級別是32767”

  我們可以看到,規則包含3個要素:
  什么樣的包,將應用本規則(所謂的SELECTOR,可能是filter更能反映其作用);
  符合本規則的包將對其采取什么動作(ACTION),例如用那個表;
  本規則的優先級別。優先級別越高的規則越先匹配(數值越小優先級別越高)。

策略性路由的配置方法

  傳統的linux下配置路由的工具是route,而實現策略性路由配置的工具是iproute2工具包。這個軟件包是由Alexey Kuznetsov開發的,軟件包所在的主要網址為ftp://ftp.inr.ac.ru/ip-routing/。
這里簡單介紹策略性路由的配置方法,以便能更好理解第二部分的內容。詳細的使用方法請參考Alexey Kuznetsov寫的 ip-cfref文檔。策略性路由的配置主要包括接口地址的配置、路由的配置、規則的配置。

接口地址的配置IP Addr

對於接口的配置可以用下面的命令進行:

Usage: ip addr [ add | del ] IFADDR dev STRING


  例如:

router># ip addr add 192.168.0.1/24 broadcast 192.168.0.255 label eth0 dev eth0


  上面表示,給接口eth0賦予地址192.168.0.1 掩碼是255.255.255.0(24代表掩碼中1的個數),廣播地址是192.168.0.255

 

路由的配置IP Route

  Linux最多可以支持255張路由表,其中有3張表是內置的:
  表255 本地路由表(Local table) 本地接口地址,廣播地址,已及NAT地址都放在這個表。該路由表由系統自動維護,管理員不能直接修改。
  表254 主路由表(Main table) 如果沒有指明路由所屬的表,所有的路由都默認都放在這個表里,一般來說,舊的路由工具(如route)所添加的路由都會加到這個表。一般是普通的路由。
  表253 默認路由表 (Default table) 一般來說默認的路由都放在這張表,但是如果特別指明放的也可以是所有的網關路由。
  表 0 保留

  路由配置命令的格式如下:

Usage: ip route list SELECTOR
ip route { change | del | add | append | replace | monitor } ROUTE


  如果想查看路由表的內容,可以通過命令:

  ip route list table table_number


  對於路由的操作包括change、del、add 、append 、replace 、 monitor這些。例如添加路由可以用:

router># ip route add 0/0 via 192.168.0.4 table main
router># ip route add 192.168.3.0/24 via 192.168.0.3 table 1


  第一條命令是向主路由表(main table)即表254添加一條路由,路由的內容是設置192.168.0.4成為網關。
  第二條命令代表向路由表1添加一條路由,子網192.168.3.0(子網掩碼是255.255.255.0)的網關是192.168.0.3。

 

  在多路由表的路由體系里,所有的路由的操作,例如網路由表添加路由,或者在路由表里尋找特定的路由,需要指明要操作的路由表,所有沒有指明路由表,默認是對主路由表(表254)進行操作。而在單表體系里,路由的操作是不用指明路由表的。

規則的配置IP Rule

  在Linux里,總共可以定義 個優先級的規則,一個優先級別只能有一條規則,即理論上總共可以有 條規則。其中有3個規則是默認的。命令用法如下:

Usage: ip rule [ list | add | del ] SELECTOR ACTION
SELECTOR := [ from PREFIX ] [ to PREFIX ] [ tos TOS ]
[ dev STRING ] [ pref NUMBER ]
ACTION := [ table TABLE_ID ] [ nat ADDRESS ]
[ prohibit | reject | unreachable ]
[ flowid CLASSID ]
TABLE_ID := [ local | main | default | new | NUMBER


  首先我們可以看看路由表默認的所有規則:

root@netmonster# ip rule list
0: from all lookup local
32766: from all lookup main
32767: from all lookup default

  規則0,它是優先級別最高的規則,規則規定,所有的包,都必須首先使用local表(254)進行路由。本規則不能被更改和刪除。
  規則32766,規定所有的包,使用表main進行路由。本規則可以被更改和刪除。
  規則32767,規定所有的包,使用表default進行路由。本規則可以被更改和刪除。

  在默認情況下進行路由時,首先會根據規則0在本地路由表里尋找路由,如果目的地址是本網絡,或是廣播地址的話,在這里就可以找到合適的路由;如果路由失敗,就會匹配下一個不空的規則,在這里只有32766規則,在這里將會在主路由表里尋找路由;如果失敗,就會匹配32767規則,即尋找默認路由表。如果失敗,路由將失敗。重這里可以看出,策略性路由是往前兼容的。

  還可以添加規則:

router># ip rule add [from 0/0] table 1 pref 32800
router >#ip rule add from 192.168.3.112/32 [tos 0x10] table 2 pref 1500 prohibit


  第一條命令將向規則鏈增加一條規則,規則匹配的對象是所有的數據包,動作是選用路由表1的路由,這條規則的優先級是32800。
  第二條命令將向規則鏈增加一條規則,規則匹配的對象是IP為192.168.3.112,tos等於0x10的包,使用路由表2,這條規則的優先級是1500,動作是prohibit。添加以后,我們可以看看系統規則的變化。

router># ip rule
0: from all lookup local
1500 from 192.168.3.112/32 [tos 0x10] lookup 2
32766: from all lookup main
32767: from all lookup default
32800: from all lookup 1


  上面的規則是以源地址為關鍵字,作為是否匹配的依據的。除了源地址外,還可以用以下的信息:
  From -- 源地址
  To -- 目的地址(這里是選擇規則時使用,查找路由表時也使用)
  Tos -- IP包頭的TOS(type of sevice)域
  Dev -- 物理接口
  Fwmark -- 防火牆參數

 

  采取的動作除了指定表,還可以指定下面的動作:
   Table 指明所使用的表
   Nat 透明網關
   Action prohibit 丟棄該包,並發送 COMM.ADM.PROHIITED的ICMP信息
   Reject 單純丟棄該包
   Unreachable丟棄該包, 並發送 NET UNREACHABLE的ICMP信息

策略性路由的應用

  基於源地址選路( Source-Sensitive Routing)
  如果一個網絡通過兩條線路接入互聯網,一條是比較快的ADSL,另外一條是比較慢的普通的調制解調器。這樣的話,網絡管理員既可以提供無差別的路由服務,也可以根據源地址的不同,使一些特定的地址使用較快的線路,而普通用戶則使用較慢的線路,即基於源址的選路。

  根據服務級別選路(Quality of Service)
  網絡管理員可以根據IP報頭的服務級別域,對於不同的服務要求可以分別對待對於傳送速率、吞吐量以及可靠性的有不同要求的數據報根據網絡的狀況進行不同的路由。

  節省費用的應用
  網絡管理員可以根據通信的狀況,讓一些比較大的陣發性通信使用一些帶寬比較高但是比較貴的路徑一段短的時間,然后讓基本的通信繼續使用原來比較便宜的基本線路。例如,管理員知道,某一台主機與一個特定的地址通信通常是伴隨着大量的陣發性通信的,那么網絡管理員可以安排一些策略,使得這些主機使用特別的路由,這些路由是按需撥號,帶寬比較高的線路,通信完成以后就停止使用,而普通的通信則不受影響。這樣既提高網絡的性能,又能節省費用。

  負載平衡(Load Sharing)
  根據網絡交通的特征,網絡管理員可以在不同的路徑之間分配負荷實現負載平衡。

Linux下策略性路由的實現--RPDB(Routing Policy DataBase)

  在Linux下,策略性路由是由RPDB實現的。對於RPDB的內部機制的理解,可以加深對於策略性路由使用的理解。這里分析的是linux 2.4.18的RPDB實現的細節。主要的實現文件包括:

fib_hash.c
fib_rules.c
fib_sematic
fib_frontend.c
route.c


  RDPB主要由多路由表和規則組成。路由表以及對其的操作和其對外的接口是整個RPDB的核心部分。路由表主要由table,zone,node這些主要的數據結構構成。對路由表的操作主要包含物理的操作以及語義的操作。路由表除了向IP層提供路由尋找的接口以外還必須與幾個元素提供接口:與用戶的接口(即更改路由)、proc的接口、IP層控制接口、以及和硬件的接口(網絡接口的改變會導致路由表內容的改變)。處在RDPB的中心的規則,由規則選取表。IP層並不直接使用路由表,而是通過一個路由適配層,路由適配層提供為IP層提供高性能的路由服務。

 

路由表(Fib Table)

  數據結構:
  在整個策略性路由的框架里,路由表是最重要的的數據結構,我們在上面以及對路由表的概念和結構進行了清楚的說明。Linux里通過下面這些主要的數據結構進行實現的。

主要的數據結構 作用 位置
struct fib_table 路由表 ip_fib.h 116
struct fn_hash 路由表的哈希數據 fib_hash.c 104
struct fn_zone zone域 fib_hash.c 85
struct fib_node 路由節點 fib_hash.c 68
struct fib_info 路由信息 ip_fib.h 57
struct fib_result 路由結果 ip_fib.h 86


數據結構之間的主要關系如下。路由表由路由表號以及路由表的操作函數指針還有表數據組成。這里需要注意的是,路由表結構里並不直接定義zone域,而是通過一個數據指針指向fn_hash。只有當zone里有數據才會連接到fn_zone_list里。(如圖)
系統的所有的路由表由數組變量*fib_tables[RT_TABLE_MAX+1]維護,其中系統定義RT_TABLE_MAX為254,也就是說系統最大的路由表為255張,所有的路由表的操作都是對這個數組進行的。。同時系統還定義了三長路由表*local_table; *main_table。

 

路由表的操作:

  Linux策略路由代碼的主要部分是對路由表的操作。對於路由表的操作,物理操作是直觀的和易於理解的。對於表的操作不外乎就是添加、刪除、更新等的操作。還有一種操作,是所謂的語義操作,語義操作主要是指諸如計算下一條的地址,把節點轉換為路由項,尋找指定信息的路由等。

  1、物理操作(operation):
  路由表的物理操作主要包括如下這些函數:

路由標操作 實現函數 位置
新建路由表
刪除路由表
搜索路由 fn_hash_lookup fib_hash.c 269
插入路由到路由表 fn_hash_insert fib_hash.c 341
刪除路由表的路由 fn_hash_delete
fn_hash_dump
fib_hash.c 433
fib_hash.c 614
更新路由表的路由 fn_hash_flush fib_hash.c 729
顯示路由表的路由信息 fn_hash_get_info fib_hash.c 750
選擇默認路由 fn_hash_select_default fib_hash.c 842


  2、語義操作(semantics operation):
  語義操作並不涉及路由表整體框架的理解,而且,函數名也是不言自明的,所以請大家參考fib_semantics.c。

 

  3、接口(front end)
  對於路由表接口的理解,關鍵在於理解那里有

  IP
  首先是路由表於IP層的接口。路由在目前linux的意義上來說,最主要的還是IP層的路由,所以和IP層的的接口是最主要的接口。和ip層的銜接主要是向IP層提供尋找路由、路由控制、尋找指定ip的接口。

Fil_lookup
ip_rt_ioctl fib_frontend.c 286;" f
ip_dev_find 145


  Inet
  路由表還必須提供配置接口,即用戶直接操作路由的接口,例如增加和刪除一條路由。當然在策略性路由里,還有規則的添加和刪除。

inet_rtm_delroute 351
inet_rtm_newroute 366
inet_check_attr 335


  proc
  在/proc/net/route里顯示路由信息。
  fib_get_procinfo

 

  4、網絡設備(net dev event)
  路由是和硬件關聯的,當網絡設備啟動或關閉的時候,必須通知路由表的管理程序,更新路由表的信息。

fib_disable_ip 567
fib_inetaddr_event 575
fib_netdev_event


  5、內部維護( magic)
  上面我們提到,本地路由表(local table)的維護是由系統自動進行的。也就是說當用戶為硬件設置IP地址等的時候,系統自動在本地路由表里添加本地接口地址以及廣播地址。

fib_magic 417
fib_add_ifaddr 459
fib_del_ifaddr 498

 

Rule

  1、數據結構
  規則在fib_rules.c的52行里定義為 struct fib_rule。而RPDB里所有的路由是保存在101行的變量fib_rules里的,注意這個變量很關鍵,它掌管着所有的規則,規則的添加和刪除都是對這個變量進行的。

  2、系統定義規則:
  fib_rules被定義以后被賦予了三條默認的規則:默認規則,本地規則以及主規則。

u 本地規則local_rule
94 static struct fib_rule local_rule = {
r_next: &main_rule, /*下一條規則是主規則*/
r_clntref: ATOMIC_INIT(2),
r_table: RT_TABLE_LOCAL, /*指向本地路由表*/
r_action: RTN_UNICAST, /*動作是返回路由*/
};

 

u 主規則main_rule
86 static struct fib_rule main_rule = {
r_next: &default_rule,/*下一條規則是默認規則*/
r_clntref: ATOMIC_INIT(2),
r_preference: 0x7FFE, /*默認規則的優先級32766*/
r_table: RT_TABLE_MAIN, /*指向主路由表*/
r_action: RTN_UNICAST, /*動作是返回路由*/
};

 

u 默認規則default rule
79 static struct fib_rule default_rule = {
r_clntref: ATOMIC_INIT(2),
r_preference: 0x7FFF,/*默認規則的優先級32767*/
r_table: RT_TABLE_DEFAULT,/*指默認路由表*/
r_action: RTN_UNICAST,/*動作是返回路由*/
};


  規則鏈的鏈頭指向本地規則。

 

RPDB的中心函數fib_lookup

  現在到了討論RPDB的實現的的中心函數fib_lookup了。RPDB通過提供接口函數fib_lookup,作為尋找路由的入口點,在這里有必要詳細討論這個函數,下面是源代碼:

 


  上面的這段代碼的思路是非常的清晰的。首先程序從優先級高到低掃描所有的規則,如果規則匹配,處理該規則的動作。如果是普通的路由尋址或者是nat地址轉換的換,首先從規則得到路由表,然后對該路由表進行操作。這樣RPDB終於清晰的顯現出來了。

 

IP層路由適配(IP route)

  路由表以及規則組成的系統,可以完成路由的管理以及查找的工作,但是為了使得IP層的路由工作更加的高效,linux的路由體系里,route.c里完成大多數IP層與RPDB的適配工作,以及路由緩沖(route cache)的功能。

調用接口

  IP層的路由接口分為發送路由接口以及接收路由接口:

發送路由接口

  IP層在發送數據時如果需要進行路由工作的時候,就會調用ip_route_out函數。這個函數在完成一些鍵值的簡單轉換以后,就會調用 ip_route_output_key函數,這個函數首先在緩存里尋找路由,如果失敗就會調用 ip_route_output_slow,ip_route_output_slow里調用fib_lookup在路由表里尋找路由,如果命中,首先在緩存里添加這個路由,然后返回結果。

ip_route_out route.h
ip_route_output_key route.c 1984;
ip_route_output_slow route.c 1690;"

 

接收路由接口

  IP層接到一個數據包以后,如果需要進行路由,就調用函數ip_route_input,ip_route_input現在緩存里尋找,如果失敗則 ip_route_inpu調用ip_route_input_slow, ip_route_input_slow里調用fib_lookup在路由表里尋找路由,如果命中,首先在緩存里添加這個路由,然后返回結果。

ip_route_input_slow route.c 1312;" f
ip_route_input route.c 1622;" f

 

cache

  路由緩存保存的是最近使用的路由。當IP在路由表進行路由以后,如果命中就會在路由緩存里增加該路由。同時系統還會定時檢查路由緩存里的項目是否失效,如果失效則清除。

 

From: http://blog.jobbole.com/97270/

From: https://linux.cn/article-3144-1.html

From: http://chrinux.blog.51cto.com/6466723/1188108

From: http://www.linuxdiyf.com/linux/23935.html

iproute基本介紹:https://segmentfault.com/a/1190000000638244

iproute2 之 ip命令使用教程手冊:https://www.iamle.com/archives/1750.html

iproute2 github地址(GitHub上有英文版使用文檔):https://github.com/dmbaturin/iproute2-cheatsheet

iproute2 對決 net-tools》(英文原文:Linux TCP/IP networking: net-tools vs. iproute2

 

net-tools 和 iproute2 對比

 

        如今很多系統管理員依然通過組合使用諸如ifconfig、route、arp和netstat等命令行工具(統稱為net-tools)來配置網絡功能,解決網絡故障。net-tools起源於BSD的TCP/IP工具箱,后來成為老版本Linux內核中配置網絡功能的工具。但自2001年起,Linux社區已經對其停止維護。同時,一些Linux發行版比如Arch Linux和CentOS/RHEL 7則已經完全拋棄了net-tools,只支持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地址、路由和隧道等)均使用合適的對象抽象去定義,使得用戶可使用一致的語法去管理不同的對象。。更重要的是,到目前為止,iproute2仍處在持續開發中。

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

 

        如果你仍在使用net-tools,而且尤其需要跟上新版Linux內核中的最新最重要的網絡特性的話,那么是時候轉到iproute2的陣營了。原因就在於使用iproute2可以做很多net-tools無法做到的事情。

        對於那些想要轉到使用iproute2的用戶,有必要了解下面有關net-tools和iproute2的眾多對比。

        iproute2的核心命令是ip:

 

 
 
iproute2 ip 命令常用備忘
  1.  
    ip地址管理
  2.  
    1.顯示ip地址
  3.  
    ip a
  4.  
    ip address show
  5.  
    ip addr show dev eth0
  6.  
    ip a sh eth0
  7.  
    2.增加刪除地址
  8.  
    ip address add 192.0 .2 .1/ 24 dev eth0
  9.  
    ip addr del 192.0 .2 .2/ 24 dev eth0
  10.  
    3.顯示接口統計
  11.  
    ip -s link ls eth0
  12.  
    網卡和鏈路配置
  13.  
    4.顯示鏈路
  14.  
    ip link show
  15.  
    ip link sh eth0
  16.  
    4.修改接口狀態
  17.  
    ip link set eth0 up
  18.  
    ip link s gre01 down
  19.  
    路由表管理
  20.  
    5.顯示路由表
  21.  
    ip route
  22.  
    ip ro show dev gre01
  23.  
    6.增加新路由
  24.  
    ip route add 10.2 .2 .128/ 27 dev gre01
  25.  
    7.增加默認路由
  26.  
    ip route add default via 192.168 .1 .1
  27.  
    8.修改默認路由
  28.  
    ip route chg default via 192.168 .1 .2
  29.  
    9.刪除默認路由
  30.  
    ip route del default
  31.  
    隧道配置
  32.  
    10.增加刪除GRE隧道
  33.  
    ip tunnel add gre01 mode gre local 10.1 .1 .1 remote 20.2 .2 .1 ttl 255
  34.  
    ip tunnel del gre01
  35.  
    11.IPIP隧道
  36.  
    ip tunl a ipip01 mode ipip local 10.1 .1 .1 remote 20.2 .2 .1 ttl 255
  37.  
    12.顯示隧道
  38.  
    ip tunnel show
  39.  
    13.顯示隧道統計
  40.  
    ip -s tunl ls gre01
  41.  
    鄰居和arp表管理
  42.  
    13.查看arp表
  43.  
    ip neigh show
  44.  
    14.手工增加刪除arp項
  45.  
    ip neighbor add 10.2 .2 .2 dev eth0
  46.  
    ip neigh del 10.2 .2 .1 dev eth0
  47.  
    socket統計
  48.  
    15.顯示當前監聽
  49.  
    ss -l
  50.  
    15.顯示當前監聽的進程
  51.  
    ss -p
  52.  
     
  53.  
    #常用命令
  54.  
    ip link show #顯示鏈路
  55.  
    ip addr show #顯示地址(或ifconfig)
  56.  
    ip route show #顯示路由(route -n)
  57.  
    ip neigh show #顯示arp表(ping 192.168 .95 .50,如果主機在同一局域網內,直接加到arp表)
  58.  
    ip neigh delete 192.168 .95 .50 dev eth0 #刪除arp條目,條目仍然存在狀態為stale,下次通信需要確認
  59.  
    ip rule show #顯示缺省規則
  60.  
    ip route del default dev eth0 #刪除接口路由
  61.  
    ip route show table local #查看本地靜態路由
  62.  
    ip route show table main #查看直連路由
  63.  
     
  64.  
    #添加靜態路由
  65.  
    ip route add 10.0 .0 .0/ 24 via 192.168 .92 .129
  66.  
    ip route add 10.10 .10 .10 via 192.168 .92 .129
  67.  
     
  68.  
    ip route add 172.31 .100 .0/ 24 dev eno16777736
  69.  
    ip route add 172.32 .0 .2 dev eno16777736
  70.  
     
  71.  
    #查看路由表
  72.  
    [root@localhost ~]# ip route show table main
  73.  
     
  74.  
    #刪除
  75.  
    ip route del 10.0 .0 .0/ 24
  76.  
    ip route del 10.10 .10 .10
  77.  
     
  78.  
    ip route del 172.31 .100 .0/ 24
  79.  
    ip route del 172.32 .0 .2
  80.  
     
  81.  
    #再次查看路由表
  82.  
    [root@localhost ~]# ip route show table main
  83.  
    [root@localhost ~]# ip route show table local
  84.  
     
  85.  
    #添加網卡別名
  86.  
    ip addr add 192.168 .0 .11/ 24 dev eno16777736
  87.  
     
  88.  
    #查看下網卡,別名沒有產生,而是直接繼承
  89.  
    [root@localhost ~]# ip addr show eno16777736
  90.  
     
  91.  
    #添加網卡別名並添加標記 label
  92.  
    ip addr add 192.168 .1 .2 label eno16777736: 0 dev eno16777736
  93.  
     
  94.  
    #查看下,多了eno16777736: 0
  95.  
    ip addr show eno16777736
  96.  
     
  97.  
    [root@localhost ~]# ip addr add 192.168 .55 .191/ 24 label eth0: 1 dev eth0
  98.  
    [root@localhost ~]# ip addr show
 
(一)網絡接口相關
 
(1) 查詢所有已連接的網絡接口(network interface)
使用net-tools:
  1.  
    root@astrol :~ # ifconfig -a
  2.  
    eth 0 Link encap:Ethernet HWaddr 00 :0 c: 29 :0 d: ce: 93
  3.  
    inet addr: 192.168. 6.138 Bcast: 192.168. 6.255 Mask: 255.255. 255.0
  4.  
    inet6 addr: fe80:: 20 c: 29 ff: 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.  
    eth0: 1Link encap:Ethernet HWaddr 00 :0 c: 29 :0 d: ce: 93
  12.  
    inet addr: 192.168. 6.139 Bcast: 192.168. 6.255 Mask: 255.255. 255.0
  13.  
    UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric: 1
  14.  
    Interrupt: 18 Base address: 0x2000
  15.  
    loLink encap:Local Loopback
  16.  
    inet addr: 127.0. 0. 1 Mask: 255.0. 0. 0
  17.  
    inet6 addr: : : 1/ 128 Scope:Host
  18.  
    UP LOOPBACK RUNNING MTU: 65536 Metric: 1
  19.  
    RX packets: 5 errors: 0 dropped: 0 overruns: 0 frame: 0
  20.  
    TX packets: 5 errors: 0 dropped: 0 overruns: 0 carrier: 0
  21.  
    collisions: 0 txqueuelen: 0
  22.  
    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)
  1.  
    HWaddr :網卡的硬件地址,即MAC地址
  2.  
    inet addr:IPv4的IP 地址
  3.  
    Bcast:廣播地址
  4.  
    mask:子網掩碼
  5.  
    inet6 addr:IPv6地址
  6.  
    MTU:最大傳輸單元
  7.  
    Metric:用於計算路由的成本
  8.  
    RX:表示網絡啟動到現在的封包接受情況 (Receive)
  9.  
    packets:表示接包數
  10.  
    errors:表示接包發生錯誤的數量
  11.  
    dropped:表示丟棄的包數量
  12.  
    overruns:表示接收時因過速而丟失的數據包數
  13.  
    frame:表示發生frame錯誤而丟失的數據包數
  14.  
    TX:從網絡啟動到現在傳送的情況 (Transmit)
  15.  
    collisions:沖突信息包的數目
  16.  
    txqueuelen:發送隊列的大小
  17.  
    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: eth 0: <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: eth 0: <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 36510 0
  6.  
    TX: bytes packets errors dropped carrier collsns
  7.  
    51239397 621160 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:
root@astrol:~# ifconfig eth0 
使用iproute2:
  1.  
    root@astrol:~ # ip addr show dev eth0
  2.  
    2: eth 0: <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 eth 0
  5.  
    valid_lft forever preferred_lft forever
  6.  
    inet 192.168. 6.139/ 24 brd 192.168. 6.255 scope global secondary eth 0: 1
  7.  
    valid_lft forever preferred_lft forever
  8.  
    inet6 fe8 0:: 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:
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:
貌似沒有什么好辦法去做:ifconfig eth0 0  。
就IP地址的移除而言,除了給接口分配全0地址外,net-tools沒有提供任何合適的方法來移除網絡接口的IPv4地址
使用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可以一次性刪除一個網絡設備的所有地址:
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: eth 0: <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: eth 0: <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
類似的,需要先關閉網卡再設置的屬性有name
 

 

linux的ip命令和ifconfig類似,但前者功能更強大,並旨在取代后者。使用ip命令,只需一個命令,你就能很輕松地執行一些網絡管理任務。ifconfig是net-tools中已被廢棄使用的一個命令,許多年前就已經沒有維護了。iproute2套件里提供了許多增強功能的命令,ip命令即是其中之一。

Net tools vs Iproute2

要安裝ip,請點擊這里下載iproute2套裝工具 。不過,大多數Linux發行版已經預裝了iproute2工具。

顯示所有已連接的網絡接口

下面的命令顯示出所有可用網絡接口的列表(無論接口是否激活)。

  1.  
    使用net- tools:
  2.  
    $ ifconfig -a
  3.  
    使用iproute2:
  4.  
    $ ip link show

激活或停用網絡接口

使用這些命令來激活或停用某個指定的網絡接口。

  1.  
    使用net- tools:
  2.  
    $ sudo ifconfig eth1 up
  3.  
    $ sudo ifconfig eth1 down
  4.  
    使用 iproute2:
  5.  
    $ sudo ip link set down eth1
  6.  
    $ sudo ip link set up eth1

 

為網絡接口分配IPv4地址

  1.  
    使用net- tools:
  2.  
    $ sudo ifconfig eth1 10.0. 0. 1/ 24
  3.  
    使用 iproute2:
  4.  
    $ sudo ip addr add 10.0. 0. 1/ 24 dev eth1

可以使用iproute2給同一個接口分配多個IP地址,ifconfig則無法這么做。使用ifconfig的變通方案是使用IP別名。

  1.  
    使用net-tools配置多IP:
  2.  
    $ sudo ifconfig eth0: 1 192.168. 10.10 netmask 255.255. 255.0 up
  3.  
    $ sudo ifconfig eth0: 2 192.168. 10.15 netmask 255.255. 255.0 up
  4.  
     
  5.  
    使用iproute2配置多 IP:
  6.  
    $ sudo ip addr add 10.0. 0. 1/ 24 broadcast 10.0. 0. 255 dev eth1
  7.  
    $ sudo ip addr add 10.0. 0. 2/ 24 broadcast 10.0. 0. 255 dev eth1
  8.  
    $ sudo ip addr add 10.0. 0. 3/ 24 broadcast 10.0. 0. 255 dev eth1
  9.  
     
  10.  
    查看eth 0的IP地址
  11.  
    $sudo ip addr list dev eth 0

 

移除網絡接口的IPv4地址

就IP地址的移除而言,除了給接口分配全0地址外,net-tools沒有提供任何合適的方法來移除網絡接口的IPv4地址。而 iproute2則能很好地完成。

  1.  
    使用net- tools:
  2.  
    $ sudo ifconfig eth1 0
  3.  
    使用 iproute2:
  4.  
    $ sudo ip addr del 10.0. 0. 1/ 24 dev eth1

 

顯示網絡接口的IPv4地址

  1.  
    使用net- tools:
  2.  
    $ ifconfig eth1
  3.  
    使用 iproute2:
  4.  
    $ ip addr show dev eth1
  5.  
    如果是網卡綁定了多IP的話,iproute2能顯示所有的地址,而net-tools只能顯示一個

 

為網絡接口分配IPv6地址

使用這些命令為網絡接口添加IPv6地址。net-tools和iproute2都允許用戶為一個接口添加多個IPv6地址。

  1.  
    使用net- tools:
  2.  
    $ sudo ifconfig eth1 inet6 add 2002 :0 db5: 0 :f102 : : 1/ 64
  3.  
    $ sudo ifconfig eth1 inet6 add 2003 :0 db5: 0 :f102 : : 1/ 64
  4.  
    使用 iproute2:
  5.  
    $ sudo ip - 6 addr add 2002 :0 db5: 0 :f102 : : 1/ 64 dev eth1
  6.  
    $ sudo ip - 6 addr add 2003 :0 db5: 0 :f102 : : 1/ 64 dev eth1

 

顯示網絡接口的IPv6地址

net-tools和iproute2都可以顯示出所有已分配的IPv6地址。

  1.  
    使用net- tools:
  2.  
    $ ifconfig eth1
  3.  
    使用 iproute2:
  4.  
    $ ip - 6 addr show dev eth1

 

移除網絡設備的IPv6地址

使用這些命令可移除接口中不必要的IPv6地址。

  1.  
    使用net- tools:
  2.  
    $ sudo ifconfig eth1 inet6 del 2002 :0 db5: 0 :f102 : : 1/ 64
  3.  
    使用 iproute2:
  4.  
    $ sudo ip - 6 addr del 2002 :0 db5: 0 :f102 : : 1/ 64 dev eth1

 

改變網絡接口的MAC地址

使用下面的命令可篡改網絡接口的MAC地址,請注意在更改MAC地址前,需要停用接口。

 

  1.  
    使用net- tools:
  2.  
    $ sudo ifconfig eth1 hw ether 08 : 00 : 27 : 75 : 2 a: 66
  3.  
    使用 iproute2:
  4.  
    $ sudo ip link set dev eth1 address 08 : 00 : 27 : 75 : 2 a: 67

 

查看IP路由表

net-tools中有兩個選擇來顯示內核的IP路由表:route和netstat。在iproute2中,使用命令ip route。

  1.  
    使用net- tools:
  2.  
    $route -n
  3.  
    $ netstat -rn
  4.  
    使用 iproute2:
  5.  
    $ ip route show

 

添加和修改默認路由

這里的命令用來添加或修改內核IP路由表中的默認路由規則。請注意在net-tools中可通過添加新的默認路由、刪除舊的默認路由來實現修改默認路由。在iproute2使用ip route命令來代替。

  1.  
    使用net-tools:
  2.  
    $ sudo route add default gw 192.168 .1 .2 eth0
  3.  
    $ sudo route del default gw 192.168 .1 .1 eth0
  4.  
    使用iproute2:
  5.  
    $ sudo ip route add default via 192.168 .1 .2 dev eth0
  6.  
    $ sudo ip route replace default via 192.168 .1 .2 dev eth0

 

添加和移除靜態路由

  1.  
    使用net-tools:
  2.  
    $ sudo route add default gw 192.168 .1 .2 eth0
  3.  
    $ sudo route del default gw 192.168 .1 .1 eth0
  4.  
    使用iproute2:
  5.  
    $ sudo ip route add default via 192.168 .1 .2 dev eth0
  6.  
    $ sudo ip route replace default via 192.168 .1 .2 dev eth0

 

查看套接字統計信息

這里的命令用來查看套接字統計信息(比如活躍或監聽狀態的TCP/UDP套接字)。

  1.  
    使用net- tools:
  2.  
    $ netstat
  3.  
    $ netstat -l
  4.  
    使用 iproute2:
  5.  
    $ ss
  6.  
    $ ss -l

 

查看ARP表

  1.  
    使用net- tools:
  2.  
    $ arp -an
  3.  
    使用 iproute2:
  4.  
    $ ip neigh

 

添加或刪除靜態ARP項

  1.  
    使用net- tools:
  2.  
    $ sudo arp -s 192.168. 1.100 00 :0 c: 29 :c0 : 5 a:ef
  3.  
    $ sudo arp -d 192.168. 1.100
  4.  
    使用 iproute2:
  5.  
    $ sudo ip neigh add 192.168. 1.100 lladdr 00 :0 c: 29 :c0 : 5 a:ef dev eth 0
  6.  
    $ sudo ip neigh del 192.168. 1.100 dev eth 0

 

添加、刪除或查看多播地址

  1.  
    使用net- tools:
  2.  
    $ sudo ipmaddr add 33 : 44 : 00 : 00 : 00 : 01 dev eth 0
  3.  
    $ sudo ipmaddr del 33 : 44 : 00 : 00 : 00 : 01 dev eth 0
  4.  
    $ ipmaddr show dev eth 0
  5.  
    $ netstat -g
  6.  
    使用 iproute2:
  7.  
    $ sudo ip maddr add 33 : 44 : 00 : 00 : 00 : 01 dev eth 0
  8.  
    $ sudo ip maddr del 33 : 44 : 00 : 00 : 00 : 01 dev eth 0
  9.  
    $ ip maddr list dev eth 0

 

 

iproute2中ip命令

你也可以使用git命令來下載最新源代碼來編譯:

$ git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/shemminger/iproute2.git

 

iproute2 git clone

iproute2 git clone

設置和刪除Ip地址

要給你的機器設置一個IP地址,可以使用下列ip命令:

$ sudo ip addr add 192.168.0.193/24 dev wlan0

請注意IP地址要有一個后綴,比如/24。這種用法用於在無類域內路由選擇(CIDR)中來顯示所用的子網掩碼。在這個例子中,子網掩碼是255.255.255.0。

在你按照上述方式設置好IP地址后,需要查看是否已經生效。

$ ip addr show wlan0

 

set ip address

set ip address

你也可以使用相同的方式來刪除IP地址,只需用del代替add。

$ sudo ip addr del 192.168.0.193/24 dev wlan0

 

delete ip address

delete ip address

列出路由表條目

ip命令的路由對象的參數還可以幫助你查看網絡中的路由數據,並設置你的路由表。第一個條目是默認的路由條目,你可以隨意改動它。

在這個例子中,有幾個路由條目。這個結果顯示有幾個設備通過不同的網絡接口連接起來。它們包括WIFI、以太網和一個點對點連接。

$ ip route show

 

ip route show

ip route show

假設現在你有一個IP地址,你需要知道路由包從哪里來。可以使用下面的路由選項(譯注:列出了路由所使用的接口等):

$ ip route get 10.42.0.47

 

ip route get

ip route get

更改默認路由

要更改默認路由,使用下面ip命令:

$ sudo ip route add default via 192.168.0.196

 

default route

default route

顯示網絡統計數據

使用ip命令還可以顯示不同網絡接口的統計數據。

 

ip statistics all interfaces

ip statistics all interfaces

當你需要獲取一個特定網絡接口的信息時,在網絡接口名字后面添加選項ls即可。使用多個選項-s會給你這個特定接口更詳細的信息。特別是在排除網絡連接故障時,這會非常有用。

$ ip -s -s link ls p2p1

 

ip link statistics

ip link statistics

ARP條目

地址解析協議(ARP)用於將一個IP地址轉換成它對應的物理地址,也就是通常所說的MAC地址。使用ip命令的neigh或者neighbour選項,你可以查看接入你所在的局域網的設備的MAC地址。

$ ip neighbour

 

ip neighbour

ip neighbour

監控netlink消息

也可以使用ip命令查看netlink消息。monitor選項允許你查看網絡設備的狀態。比如,所在局域網的一台電腦根據它的狀態可以被分類成REACHABLE或者STALE。使用下面的命令:

$ ip monitor all

 

ip monitor all

ip monitor all

激活和停止網絡接口

你可以使用ip命令的up和down選項來激某個特定的接口,就像ifconfig的用法一樣。

在這個例子中,當ppp0接口被激活和在它被停止和再次激活之后,你可以看到相應的路由表條目。這個接口可能是wlan0或者eth0。將ppp0更改為你可用的任意接口即可。

  1.  
    $ sudo ip link set ppp0 down
  2.  
     
  3.  
    $ sudo ip link set ppp0 up

 

ip link set up and down

ip link set up and down

獲取幫助

當你陷入困境,不知道某一個特定的選項怎么用的時候,你可以使用help選項。man頁面並不會提供許多關於如何使用ip選項的信息,因此這里就是獲取幫助的地方。

比如,想知道關於route選項更多的信息:

$ ip route help

 

ip route help

ip route help

小結:對於網絡管理員們和所有的Linux使用者們,ip命令是必備工具。是時候拋棄ifconfig命令了,特別是當你寫腳本時。

 

net-tools 中 ifconfig 詳細解釋

 

許多windows非常熟悉ipconfig命令行工具,它被用來獲取網絡接口配置信息並對此進行修改。Linux系統擁有一個類似的工具,也就是ifconfig(interfaces config)。通常需以root身份登錄或使用sudo以便Linux機器上使用ifconfig工具。依賴於ifconfig命令中使用些選項屬性,ifconfig工具不僅可以被用來簡單地獲取網絡接口配置信息,還可以修改這些配置。

1.命令格式:

ifconfig [網絡設備] [參數]

2.命令功能:

ifconfig 命令用來查看和配置網絡設備。當網絡環境發生改變時可通過此命令對網絡進行相應的配置

3.命令參數:

up 啟動指定網絡設備/網卡

down 關閉指定網絡設備/網卡該參數可以有效地阻止通過指定接口的IP信息流,如果想永久地關閉一個接口,我們還需要從核心路由表中將該接口的路由信息全部刪除。

arp 設置指定網卡是否支持ARP協議

-promisc 設置是否支持網卡的promiscuous模式,如果選擇此參數,網卡將接收網絡中發給它所有的數據包

-allmulti 設置是否支持多播模式,如果選擇此參數,網卡將接收網絡中所有的多播數據包

-a 顯示全部接口信息

-s 顯示摘要信息(類似於 netstat -i)

add 給指定網卡配置IPv6地址

del 刪除指定網卡的IPv6地址

<硬件地址> 配置網卡最大的傳輸單元

mtu<字節數> 設置網卡的最大傳輸單元 (bytes)

netmask<子網掩碼> 設置網卡的子網掩碼掩碼可以是有前綴0x的32位十六進制數,也可以是用點分開的4個十進制數。如果不打算將網絡分成子網,可以不管這一選項;如果要使用子網,那么請記住,網絡中每一個系統必須有相同子網掩碼。

tunel 建立隧道

dstaddr 設定一個遠端地址,建立點對點通信

-broadcast<地址> 為指定網卡設置廣播協議

-pointtopoint<地址> 為網卡設置點對點通訊協議

multicast 為網卡設置組播標志

address 為網卡設置IPv4地址

txqueuelen<長度> 為網卡設置傳輸列隊的長度

4.使用實例:

實例1:顯示網絡設備信息激活狀態的

命令:ifconfig

實例2:啟動關閉指定網卡

命令:

ifconfig eth0 up

ifconfig eth0 down

實例3:為網卡配置和刪除IPv6地址

命令:

ifconfig eth0 add 33ffe:3240:800:1005::2/64

ifconfig eth0 del 33ffe:3240:800:1005::2/64

實例4:用ifconfig修改MAC地址

命令:

ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE

實例5:配置IP地址

[root@localhost ~] #  ifconfig eth0 192.168.120.56 
[root@localhost ~] #  ifconfig eth0 192.168.120.56 netmask 255.255.255.0 
[root@localhost ~] #  ifconfig eth0 192.168.120.56 netmask 255.255.255.0 broadcast 192.168.120.255

說明:

ifconfig eth0 192.168.120.56 

給eth0網卡配置IP地192.168.120.56

 ifconfig eth0 192.168.120.56 netmask 255.255.255.0 

給eth0網卡配置IP地址192.168.120.56 並加上子掩碼255.255.255.0

ifconfig eth0 192.168.120.56 netmask 255.255.255.0 broadcast 192.168.120.255

/給eth0網卡配置IP地址192.168.120.56加上子掩碼255.255.255.0加上個廣播地址 192.168.120.255 

實例6:啟用和關閉ARP協議

命令:

ifconfig eth0 arp

ifconfig eth0 -arp

輸出: 

[root@localhost ~] #  ifconfig eth0 arp 
[root@localhost ~] #  ifconfig eth0 -arp

說明:

ifconfig eth0 arp 開啟網卡eth0 arp協議;

ifconfig eth0 -arp 關閉網卡eth0 arp協議; 

實例7:設置最大傳輸單元

命令:

ifconfig eth0 mtu 1500

 

  1.  
    [root@localhost ~] # ifconfig #處於激活狀態的網絡接口
  2.  
     
  3.  
    [root@localhost ~] # ifconfig -a #所有配置的網絡接口,不論其是否激活
  4.  
     
  5.  
    [root@localhost ~] # ifconfig eth0 #顯示eth0的網卡信息
  6.  
     
  7.  
    [root@localhost ~] # ifconfig eth0 down #關閉eth0網卡
  8.  
     
  9.  
    [root@localhost ~] # ifconfig eth0 up #開啟eth0網卡
  10.  
     
  11.  
    [root@localhost ~] # ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 #為網卡添加IPv6地址
  12.  
     
  13.  
    [root@localhost ~] # ifconfig eth0 del 33ffe:3240:800:1005::2/ 64 #為網卡刪除IPv6地址
  14.  
     
  15.  
    [root@localhost ~] # ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE #修改MAC地址
  16.  
     
  17.  
    [root@localhost ~] # ifconfig eth0 192.168.1.56 #給eth0網卡配置IP地址
  18.  
     
  19.  
    [root@localhost ~] # ifconfig eth0 192.168.1.56 netmask 255.255.255.0 #給eth0網卡配置IP地址,並加上子掩碼
  20.  
     
  21.  
    [root@localhost ~] # ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255 #給eth0網卡配置IP地址,加上子掩碼,加上個廣播地址
  22.  
     
  23.  
    [root@localhost ~] # ifconfig eth0 mtu 1500 #設置能通過的最大數據包大小為 1500 bytes
  24.  
     
  25.  
    [root@localhost ~] # ifconfig eth0 arp #開啟arp功能
  26.  
     
  27.  
    [root@localhost ~] # ifconfig eth0 -arp #關閉arp功能

 

 

net-tools中ifconfig 和 route 與 iproute2 中 ip

一、作為一個linux的瘋狂熱愛者,我們首先需要掌握的就是在linux系統下怎么配置IP、路由和主機名基本的linux網絡配置,當然如果要我們接入互聯網基本的IP地址配置還是不夠的,訪問網絡的話我們需要配置我們的域名解析服務器DNS,下面作為菜鳥的我就把我們平常用到的基本網絡配置命令來和大家介紹一下,寫的不好的話,還請見諒~~~~~

      本篇主要介紹linux下網絡查看、配置的基本命令:ifconfig、ip、route,然后捎帶介紹下DNS、主機名等信息的配置!

二、我們在配置網絡之前,首先我們來認識一下linux系統下網絡接口的類型和命名規則以及網絡地址的類型

1、網絡接口類型:

lo:本地回環接口

eth[0-9]:以太網接口

pppx:點對點的連接

當然我們平常用到的也就是lo和以太網接口這兩種類型回環環接口lo只是我們用在系統內部進行回環測試的,至於eth的以太網接口就是我們經常用來連接網線的那個物理接口了。

2、以太網網卡的命名規則:

在不同的系統之下其命名規則是不盡相同的,我們這就以RedHat 5-32bit的系統為例:

REHL 5-32bit:以太網網卡命名規則的定義文件為/etc/modprod.conf

圖像 120

3、網絡地址類型:

暫時性網絡地址:利用ifconfig等命令配置的網絡信息,會立即生效,但重啟網絡服務或系統會失效

永久性的網絡地址:通過修改系統內的網絡配置文件進行的修改,不會立即生效,需要重啟網絡服務或者系統會生效,並且會永久性的生效。 

三、網絡IP地址配置命令之ifconfig

1、ifconfig:查看活動的網卡信息,僅限於活動的網卡

        例如先查看本地的網卡信息如下—ifconfig

圖像 121

為了說明ifconfig查看的只是活動的網卡信息,我們下面把lo網卡down掉,在查看

圖像 122

2、ifconfig的相關子命令

ifconfig  eth[0-9]:后面跟某個網卡則可以直接查看某個網卡的信息,如只查看eth0的信息

圖像 123

ifconfig –a :則是查看所有的網卡信息,包括活動或非活動的網卡信息

圖像 124

下面利用ifconfig來配置網卡的IP地址,當然這個地址是臨時的地址,一旦重啟網絡服務或者重啟網絡系統就會失效的!!

格式:ifconfig  ethx IP/MASK:配置某個網卡的ip地址

        例如:設置eth0的IP地址為172.16.35.1/16,則就可以在命令行下直接鍵入:ifconfig eth0 172.16.36.5/16

圖像 126

圖像 127

 

我們下面重啟一下網絡服務,此配置就會失效,然后恢復為原來的IP地址的,如下圖

圖像 128

3、網絡服務的管理命令,上面已經提到過一個重啟網絡服務的命令了,那么我們的網絡服務控制命令都有哪些那???就是很簡單,就是start,stop,restart,status這幾個命令而已。

用法格式:

/etc/init.d/network {start | stop | restart | status} 或者service network {start | stop | restart | status}

四、永久性IP地址配置

通過上面我們了解了利用ifconfig來配置臨時的網絡IP地址了,當然這還不能滿足我們的需求,我們不能每次使用電腦的時候都配置IP地址啊~那太麻煩,所以我們需要把IP地址配置為固定的IP或者通過DHCP服務來回去,這樣的配置就需要修改系統的網絡配置文件了,我們REHL5上的網絡配置文為/etc/sysconfig/network-scripts/ifcfg-eth[0-9],下面我們就來看看怎么定義這個文件內的內容。

其配置方式有兩種:DHCP和固定IP

DHCP的設置比較簡單,只需指定BOOTPROTOL類型為DHCP即可,當然、配置之前讓我們先來了解下其配置文件內定義的內容都是有哪些?詳解如下圖所示

圖像 129

當然,我們上圖是基於固定IP的設置,那么基於DHCP的呢?DHCP的更加簡單,配置參數如下

  DEVICE=eth0 
  BOOTPROTO=DHCP 
  ONBOOT=YES 
  HWADDR=......

五、以上內容我們了解了在linux系統上通過ifconfig命令和配置文件來為linux系統配置臨時IP地址和永久性的IP的相關操作,那么我們下面來看下關於系統路由的設定,路由相關信息的設定命令是route

1、route:直接可以查看我們系統上的路由信息

     route –n :以數字的形式顯示路由信息

圖像 130

2、route命令的子選項

添加路由

route  add -host:添加主機路由

route  add -net:添加網絡路由

route  add -net  0.0.0.0:添加默認路由

格式:route add -net|host DEST gw NEXTHOP

例如,添加一條路由,讓主機通過172.16.7.3訪問192.168.0.0/24網段

        route add –net 192.168.0.0/24 gw 172.16.7.3

圖像 131

刪除路由

route del -host:刪除主機路由

route del –net:刪除網絡路由

  例如,刪除剛才加的那條路由信息:route del –net 192.168.0.0、24 即可實現

3、以上利用route命令增加的配置在重啟網絡服務或者系統的時候,所有的配置都會失效,這只是臨時的配置而已,要想使我們配置的路由信息永久性的有效,我們需要把配置信息定義在配置文件內:/etc/sysconfig/network-scripts/route-ethx,ethx表示對應的通過那個網卡路由

配置格式:

格式1:DEST(目的) via NEXTTOP(下一跳)

格式2:ADDRESS0=網絡地址(目的地址)、NETMASK0=子網掩碼(目的網絡)、

GATEWAY0=網關(通過那個網卡的網關)、ADDRESS1=、NETMASK1=……等等,可以設置條路由。

圖像 132

圖像 133

以上的配置不會立即生效,但是重啟網絡服務或者系統就會生效,並且是永久有效。

 

六、網絡配置的另外一個功能強大的命令:IP

IP命令是iproute2軟件包內的一個命令,功能比ifconfig更強大,可以對系統配置IP和路由信息。

1、ip link:配置網絡接口屬性

     ip link show:查看所有網絡接口屬性信息

     ip -s link show:查看所有統計信息

     ip link set ethX {up|down|arp {on|off}}:設置網絡接口的工作屬性

圖像 134

2、ip addr:配置網絡地址

    ip addr show:查看網絡信息,看到的信息和ip link show差不多,都比較簡要

    ip addr add IP dev ethX :配置IP地址(此命令配置的網卡信息利用ifconfig查看不到,需要利用ip addr show查看)

圖像 135

      ip addr add IP dev ethx label ethX:X:配置子Ip並對其加別名

 圖像 139

刪除已經配置的IP地址

ip addr del  IPADDR dev STRING

圖像 140

3、我們說過IP命令是個強大的命令,那是因為我們不僅僅能利用IP命令來創建IP地址相關的配置,還可以利用IP命令來實現對系統上路由信息的設置,其主要命令如下:

ip route:路由信息

ip route change|replace :修改路由信息

ip route add to 目的網段 dev ethx via IP(下一跳IP)

圖像 143

上面就是IP命令的用法,當然這些命令行下的操作只是暫時性的,一旦重啟網絡服務或系統這些配置都將會失效,如果想使其永久生效,就需要利用前的相關方法在配置文件內進行設定了。

七、IP地址的配置我們已經在前面介紹過了,這里不在重述,下面介紹下關於eth0:0這個主機網絡別名的配置文件的配置方法

 

  1. ⑴、命令配置法:ifconfig和ip 
  2.  
  3.       Ifconfig ethx:x IP/netmask 
  4.  
  5.       ip addr add IP dev ethx label ethX:X 
  6.  
  7.       利用命令配置的只是暫時的IP地址,如果重啟網絡服務和系統都會失效的。 
  8.  
  9. ⑵、配置文件配置法: 
  10.  
  11.     修改/etc/sysconfig/network-scripts/ifcfg-ethx:x 
  12.  
  13.       DEVICE=ethx:x 
  14.  
  15.       BOOTPROTO=static  
  16.  
  17.       IPIPADDR=   IP地址 
  18.  
  19.       NETMASK=  子網掩碼 
  20.  
  21.       GATEWAY=  網關 
  22.  
  23.       ONBOOT=YES   是否開機啟用 
  24.  
  25.       HWADDR=...... MAC 
  26.  
  27.       非主要地址不能用DHCP服務獲得,必須為靜止的。 

八、 DNS配置文件:

 

  1. ⑴、DNS配置文件位置:/etc/resolv.conf 
  2.  
  3. ⑵、DNS配置格式: 
  4.  
  5.          nameserver DNS_IP1 
  6.  
  7.          nameserver DNS_IP2 
  8.  
  9. 指定本地解析: 
  10.  
  11.      /etc/hosts下添加 
  12.  
  13.     目標主機IP        主機名       
  14.  
  15.     fg:172.16.36.1  www.chris.com  
  16.  
  17. DNS解析過程-->/etc/hosts-->DNS 服務器 

九、主機名配置文件:

 

  1. ⑴、配置文件位置: /etc/sysconfig/network 
  2.  
  3. ⑵、配置格式: 
  4.  
  5.          HOSTNAME=名稱 
  6.  
  7.          NETWORKING={yes|no}:是否開啟網絡功能 

  圖像 145

 

Linux策略性路由應用及分析(iproute2)

http://blog.chinaunix.net/uid-738429-id-2057370.html

 

 

Linux策略性路由應用及分析(iproute2)

策略性路由

 

  策略性是指對於IP包的路由是以網絡管理員根據需要定下的一些策略為主要依據進行路由的。例如我們可以有這樣的策略:“所有來直自網A的包,選擇X路徑;其他選擇Y路徑”,或者是“所有TOS為A的包選擇路徑F;其他選者路徑K”。
  Cisco 的網絡操作系統 (Cisco IOS) 從11.0開始就采用新的策略性路由機制。而Linux是在內核2.1開始采用策略性路由機制的。策略性路由機制與傳統的路由算法相比主要是引入了多路由表以及規則的概念。

多路由表(multiple Routing Tables)

  傳統的路由算法是僅使用一張路由表的。但是在有些情形底下,我們是需要使用多路由表的。例如一個子網通過一個路由器與外界相連,路由器與外界有兩條線路相連,其中一條的速度比較快,一條的速度比較慢。對於子網內的大多數用戶來說對速度並沒有特殊的要求,所以可以讓他們用比較慢的路由;但是子網內有一些特殊的用戶卻是對速度的要求比較苛刻,所以他們需要使用速度比較快的路由。如果使用一張路由表上述要求是無法實現的,而如果根據源地址或其它參數,對不同的用戶使用不同的路由表,這樣就可以大大提高路由器的性能。

規則(rule)

  規則是策略性的關鍵性的新的概念。我們可以用自然語言這樣描述規則,例如我門可以指定這樣的規則:
  規則一:“所有來自192.16.152.24的IP包,使用路由表10, 本規則的優先級別是1500”
  規則二:“所有的包,使用路由表253,本規則的優先級別是32767”

  我們可以看到,規則包含3個要素:
  什么樣的包,將應用本規則(所謂的SELECTOR,可能是filter更能反映其作用);
  符合本規則的包將對其采取什么動作(ACTION),例如用那個表;
  本規則的優先級別。優先級別越高的規則越先匹配(數值越小優先級別越高)。

策略性路由的配置方法

  傳統的linux下配置路由的工具是route,而實現策略性路由配置的工具是iproute2工具包。這個軟件包是由Alexey Kuznetsov開發的,軟件包所在的主要網址為ftp://ftp.inr.ac.ru/ip-routing/。
這里簡單介紹策略性路由的配置方法,以便能更好理解第二部分的內容。詳細的使用方法請參考Alexey Kuznetsov寫的 ip-cfref文檔。策略性路由的配置主要包括接口地址的配置、路由的配置、規則的配置。

接口地址的配置IP Addr

對於接口的配置可以用下面的命令進行:

Usage: ip addr [ add | del ] IFADDR dev STRING


  例如:

router># ip addr add 192.168.0.1/24 broadcast 192.168.0.255 label eth0 dev eth0


  上面表示,給接口eth0賦予地址192.168.0.1 掩碼是255.255.255.0(24代表掩碼中1的個數),廣播地址是192.168.0.255

 

路由的配置IP Route

  Linux最多可以支持255張路由表,其中有3張表是內置的:
  表255 本地路由表(Local table) 本地接口地址,廣播地址,已及NAT地址都放在這個表。該路由表由系統自動維護,管理員不能直接修改。
  表254 主路由表(Main table) 如果沒有指明路由所屬的表,所有的路由都默認都放在這個表里,一般來說,舊的路由工具(如route)所添加的路由都會加到這個表。一般是普通的路由。
  表253 默認路由表 (Default table) 一般來說默認的路由都放在這張表,但是如果特別指明放的也可以是所有的網關路由。
  表 0 保留

  路由配置命令的格式如下:

Usage: ip route list SELECTOR
ip route { change | del | add | append | replace | monitor } ROUTE


  如果想查看路由表的內容,可以通過命令:

  ip route list table table_number


  對於路由的操作包括change、del、add 、append 、replace 、 monitor這些。例如添加路由可以用:

router># ip route add 0/0 via 192.168.0.4 table main
router># ip route add 192.168.3.0/24 via 192.168.0.3 table 1


  第一條命令是向主路由表(main table)即表254添加一條路由,路由的內容是設置192.168.0.4成為網關。
  第二條命令代表向路由表1添加一條路由,子網192.168.3.0(子網掩碼是255.255.255.0)的網關是192.168.0.3。

 

  在多路由表的路由體系里,所有的路由的操作,例如網路由表添加路由,或者在路由表里尋找特定的路由,需要指明要操作的路由表,所有沒有指明路由表,默認是對主路由表(表254)進行操作。而在單表體系里,路由的操作是不用指明路由表的。

規則的配置IP Rule

  在Linux里,總共可以定義 個優先級的規則,一個優先級別只能有一條規則,即理論上總共可以有 條規則。其中有3個規則是默認的。命令用法如下:

Usage: ip rule [ list | add | del ] SELECTOR ACTION
SELECTOR := [ from PREFIX ] [ to PREFIX ] [ tos TOS ]
[ dev STRING ] [ pref NUMBER ]
ACTION := [ table TABLE_ID ] [ nat ADDRESS ]
[ prohibit | reject | unreachable ]
[ flowid CLASSID ]
TABLE_ID := [ local | main | default | new | NUMBER


  首先我們可以看看路由表默認的所有規則:

root@netmonster# ip rule list
0: from all lookup local
32766: from all lookup main
32767: from all lookup default

  規則0,它是優先級別最高的規則,規則規定,所有的包,都必須首先使用local表(254)進行路由。本規則不能被更改和刪除。
  規則32766,規定所有的包,使用表main進行路由。本規則可以被更改和刪除。
  規則32767,規定所有的包,使用表default進行路由。本規則可以被更改和刪除。

  在默認情況下進行路由時,首先會根據規則0在本地路由表里尋找路由,如果目的地址是本網絡,或是廣播地址的話,在這里就可以找到合適的路由;如果路由失敗,就會匹配下一個不空的規則,在這里只有32766規則,在這里將會在主路由表里尋找路由;如果失敗,就會匹配32767規則,即尋找默認路由表。如果失敗,路由將失敗。重這里可以看出,策略性路由是往前兼容的。

  還可以添加規則:

router># ip rule add [from 0/0] table 1 pref 32800
router >#ip rule add from 192.168.3.112/32 [tos 0x10] table 2 pref 1500 prohibit


  第一條命令將向規則鏈增加一條規則,規則匹配的對象是所有的數據包,動作是選用路由表1的路由,這條規則的優先級是32800。
  第二條命令將向規則鏈增加一條規則,規則匹配的對象是IP為192.168.3.112,tos等於0x10的包,使用路由表2,這條規則的優先級是1500,動作是prohibit。添加以后,我們可以看看系統規則的變化。

router># ip rule
0: from all lookup local
1500 from 192.168.3.112/32 [tos 0x10] lookup 2
32766: from all lookup main
32767: from all lookup default
32800: from all lookup 1


  上面的規則是以源地址為關鍵字,作為是否匹配的依據的。除了源地址外,還可以用以下的信息:
  From -- 源地址
  To -- 目的地址(這里是選擇規則時使用,查找路由表時也使用)
  Tos -- IP包頭的TOS(type of sevice)域
  Dev -- 物理接口
  Fwmark -- 防火牆參數

 

  采取的動作除了指定表,還可以指定下面的動作:
   Table 指明所使用的表
   Nat 透明網關
   Action prohibit 丟棄該包,並發送 COMM.ADM.PROHIITED的ICMP信息
   Reject 單純丟棄該包
   Unreachable丟棄該包, 並發送 NET UNREACHABLE的ICMP信息

策略性路由的應用

  基於源地址選路( Source-Sensitive Routing)
  如果一個網絡通過兩條線路接入互聯網,一條是比較快的ADSL,另外一條是比較慢的普通的調制解調器。這樣的話,網絡管理員既可以提供無差別的路由服務,也可以根據源地址的不同,使一些特定的地址使用較快的線路,而普通用戶則使用較慢的線路,即基於源址的選路。

  根據服務級別選路(Quality of Service)
  網絡管理員可以根據IP報頭的服務級別域,對於不同的服務要求可以分別對待對於傳送速率、吞吐量以及可靠性的有不同要求的數據報根據網絡的狀況進行不同的路由。

  節省費用的應用
  網絡管理員可以根據通信的狀況,讓一些比較大的陣發性通信使用一些帶寬比較高但是比較貴的路徑一段短的時間,然后讓基本的通信繼續使用原來比較便宜的基本線路。例如,管理員知道,某一台主機與一個特定的地址通信通常是伴隨着大量的陣發性通信的,那么網絡管理員可以安排一些策略,使得這些主機使用特別的路由,這些路由是按需撥號,帶寬比較高的線路,通信完成以后就停止使用,而普通的通信則不受影響。這樣既提高網絡的性能,又能節省費用。

  負載平衡(Load Sharing)
  根據網絡交通的特征,網絡管理員可以在不同的路徑之間分配負荷實現負載平衡。

Linux下策略性路由的實現--RPDB(Routing Policy DataBase)

  在Linux下,策略性路由是由RPDB實現的。對於RPDB的內部機制的理解,可以加深對於策略性路由使用的理解。這里分析的是linux 2.4.18的RPDB實現的細節。主要的實現文件包括:

fib_hash.c
fib_rules.c
fib_sematic
fib_frontend.c
route.c


  RDPB主要由多路由表和規則組成。路由表以及對其的操作和其對外的接口是整個RPDB的核心部分。路由表主要由table,zone,node這些主要的數據結構構成。對路由表的操作主要包含物理的操作以及語義的操作。路由表除了向IP層提供路由尋找的接口以外還必須與幾個元素提供接口:與用戶的接口(即更改路由)、proc的接口、IP層控制接口、以及和硬件的接口(網絡接口的改變會導致路由表內容的改變)。處在RDPB的中心的規則,由規則選取表。IP層並不直接使用路由表,而是通過一個路由適配層,路由適配層提供為IP層提供高性能的路由服務。

 

路由表(Fib Table)

  數據結構:
  在整個策略性路由的框架里,路由表是最重要的的數據結構,我們在上面以及對路由表的概念和結構進行了清楚的說明。Linux里通過下面這些主要的數據結構進行實現的。

主要的數據結構 作用 位置
struct fib_table 路由表 ip_fib.h 116
struct fn_hash 路由表的哈希數據 fib_hash.c 104
struct fn_zone zone域 fib_hash.c 85
struct fib_node 路由節點 fib_hash.c 68
struct fib_info 路由信息 ip_fib.h 57
struct fib_result 路由結果 ip_fib.h 86


數據結構之間的主要關系如下。路由表由路由表號以及路由表的操作函數指針還有表數據組成。這里需要注意的是,路由表結構里並不直接定義zone域,而是通過一個數據指針指向fn_hash。只有當zone里有數據才會連接到fn_zone_list里。(如圖)
系統的所有的路由表由數組變量*fib_tables[RT_TABLE_MAX+1]維護,其中系統定義RT_TABLE_MAX為254,也就是說系統最大的路由表為255張,所有的路由表的操作都是對這個數組進行的。。同時系統還定義了三長路由表*local_table; *main_table。

 

路由表的操作:

  Linux策略路由代碼的主要部分是對路由表的操作。對於路由表的操作,物理操作是直觀的和易於理解的。對於表的操作不外乎就是添加、刪除、更新等的操作。還有一種操作,是所謂的語義操作,語義操作主要是指諸如計算下一條的地址,把節點轉換為路由項,尋找指定信息的路由等。

  1、物理操作(operation):
  路由表的物理操作主要包括如下這些函數:

路由標操作 實現函數 位置
新建路由表
刪除路由表
搜索路由 fn_hash_lookup fib_hash.c 269
插入路由到路由表 fn_hash_insert fib_hash.c 341
刪除路由表的路由 fn_hash_delete
fn_hash_dump
fib_hash.c 433
fib_hash.c 614
更新路由表的路由 fn_hash_flush fib_hash.c 729
顯示路由表的路由信息 fn_hash_get_info fib_hash.c 750
選擇默認路由 fn_hash_select_default fib_hash.c 842


  2、語義操作(semantics operation):
  語義操作並不涉及路由表整體框架的理解,而且,函數名也是不言自明的,所以請大家參考fib_semantics.c。

 

  3、接口(front end)
  對於路由表接口的理解,關鍵在於理解那里有

  IP
  首先是路由表於IP層的接口。路由在目前linux的意義上來說,最主要的還是IP層的路由,所以和IP層的的接口是最主要的接口。和ip層的銜接主要是向IP層提供尋找路由、路由控制、尋找指定ip的接口。

Fil_lookup
ip_rt_ioctl fib_frontend.c 286;" f
ip_dev_find 145


  Inet
  路由表還必須提供配置接口,即用戶直接操作路由的接口,例如增加和刪除一條路由。當然在策略性路由里,還有規則的添加和刪除。

inet_rtm_delroute 351
inet_rtm_newroute 366
inet_check_attr 335


  proc
  在/proc/net/route里顯示路由信息。
  fib_get_procinfo

 

  4、網絡設備(net dev event)
  路由是和硬件關聯的,當網絡設備啟動或關閉的時候,必須通知路由表的管理程序,更新路由表的信息。

fib_disable_ip 567
fib_inetaddr_event 575
fib_netdev_event


  5、內部維護( magic)
  上面我們提到,本地路由表(local table)的維護是由系統自動進行的。也就是說當用戶為硬件設置IP地址等的時候,系統自動在本地路由表里添加本地接口地址以及廣播地址。

fib_magic 417
fib_add_ifaddr 459
fib_del_ifaddr 498

 

Rule

  1、數據結構
  規則在fib_rules.c的52行里定義為 struct fib_rule。而RPDB里所有的路由是保存在101行的變量fib_rules里的,注意這個變量很關鍵,它掌管着所有的規則,規則的添加和刪除都是對這個變量進行的。

  2、系統定義規則:
  fib_rules被定義以后被賦予了三條默認的規則:默認規則,本地規則以及主規則。

u 本地規則local_rule
94 static struct fib_rule local_rule = {
r_next: &main_rule, /*下一條規則是主規則*/
r_clntref: ATOMIC_INIT(2),
r_table: RT_TABLE_LOCAL, /*指向本地路由表*/
r_action: RTN_UNICAST, /*動作是返回路由*/
};

 

u 主規則main_rule
86 static struct fib_rule main_rule = {
r_next: &default_rule,/*下一條規則是默認規則*/
r_clntref: ATOMIC_INIT(2),
r_preference: 0x7FFE, /*默認規則的優先級32766*/
r_table: RT_TABLE_MAIN, /*指向主路由表*/
r_action: RTN_UNICAST, /*動作是返回路由*/
};

 

u 默認規則default rule
79 static struct fib_rule default_rule = {
r_clntref: ATOMIC_INIT(2),
r_preference: 0x7FFF,/*默認規則的優先級32767*/
r_table: RT_TABLE_DEFAULT,/*指默認路由表*/
r_action: RTN_UNICAST,/*動作是返回路由*/
};


  規則鏈的鏈頭指向本地規則。

 

RPDB的中心函數fib_lookup

  現在到了討論RPDB的實現的的中心函數fib_lookup了。RPDB通過提供接口函數fib_lookup,作為尋找路由的入口點,在這里有必要詳細討論這個函數,下面是源代碼:

 


  上面的這段代碼的思路是非常的清晰的。首先程序從優先級高到低掃描所有的規則,如果規則匹配,處理該規則的動作。如果是普通的路由尋址或者是nat地址轉換的換,首先從規則得到路由表,然后對該路由表進行操作。這樣RPDB終於清晰的顯現出來了。

 

IP層路由適配(IP route)

  路由表以及規則組成的系統,可以完成路由的管理以及查找的工作,但是為了使得IP層的路由工作更加的高效,linux的路由體系里,route.c里完成大多數IP層與RPDB的適配工作,以及路由緩沖(route cache)的功能。

調用接口

  IP層的路由接口分為發送路由接口以及接收路由接口:

發送路由接口

  IP層在發送數據時如果需要進行路由工作的時候,就會調用ip_route_out函數。這個函數在完成一些鍵值的簡單轉換以后,就會調用 ip_route_output_key函數,這個函數首先在緩存里尋找路由,如果失敗就會調用 ip_route_output_slow,ip_route_output_slow里調用fib_lookup在路由表里尋找路由,如果命中,首先在緩存里添加這個路由,然后返回結果。

ip_route_out route.h
ip_route_output_key route.c 1984;
ip_route_output_slow route.c 1690;"

 

接收路由接口

  IP層接到一個數據包以后,如果需要進行路由,就調用函數ip_route_input,ip_route_input現在緩存里尋找,如果失敗則 ip_route_inpu調用ip_route_input_slow, ip_route_input_slow里調用fib_lookup在路由表里尋找路由,如果命中,首先在緩存里添加這個路由,然后返回結果。

ip_route_input_slow route.c 1312;" f
ip_route_input route.c 1622;" f

 

cache

  路由緩存保存的是最近使用的路由。當IP在路由表進行路由以后,如果命中就會在路由緩存里增加該路由。同時系統還會定時檢查路由緩存里的項目是否失效,如果失效則清除。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM