您所在的位置:读书频道 > 操作系统 > Linux > 5.1.3 ip

5.1.3 ip

2007-12-05 09:51 鸟哥 机械工出版社华章公司 字号:T | T
一键收藏,随时查看,分享好友!

《鸟哥的Linux私房菜——服务器架设篇》(第二版)第五章的主要介绍一些常见的网络命令,并新增了一些数据包捕获的命令。本文主要介绍的是ip。

AD:

5.1.3  ip

这里的ip是个命令,不是那个TCP/IP的IP。这个ip命令的功能可多了。基本上,它就是集合了ifconfig与route这两个命令了,不过ip可以实现的功能却又多得多,真是个相当厉害的命令。如果你有兴趣的话,请自行vi /sbin/ifup,就知道整个ifup就是利用ip这个命令来实现的。好了,如何使用呢?让我们来看看。

[root@linux ~]# ip [option] [操作] [命令]
参数:
Option,设置的参数,主要有:
    -s,显示出该设备的统计数据(statistics),例如总接受数据包数等;
操作,亦即是可以针对哪些网络参数进行操作,包括有:
    Link,关于设备(device) 的相关设置,包括MTU、MAC 地址等等
    addr/address,关于额外的 IP 协议,例如多 IP 的实现等等;
    route,与路由有关的相关设置

由上面的语法我们可以知道,ip除了可以设置一些基本的网络参数之外,还能够进行额外的IP协议,包括多IP的实现,真是太完美了。下面我们就分3个部分(link、addr、route)来介绍这个ip命令吧。

1. 关于设备接口(device)的相关设置:ip link

ip link可以设置与设备(device)有关的相关设置,包括MTU以及该网络接口的MAC等,当然也可以启动(up)或关闭(down)某个网络接口了。整个语法是这样的:

[root@linux ~]# ip [-s] link show  <== 单纯的查阅该设备相关的信息
[root@linux ~]# ip link set [device] [操作与参数]
参数:
Show,仅显示出这个设备的相关内容,如果加上 -s 会显示更多统计数据
Set,可以开始设置项目, device 指的是 eth0、eth1 等等接口代号
操作与参数,包括有下面的这些操作
   up|down,启动 (up) 或关闭 (down) 某个接口,其他参数使用默认的以太网
   Address,如果这个设备可以更改 MAC 的话,用这个参数修改
   Name,给予这个设备一个特殊的名字
   Mtu,就是最大传输单元

范例一:显示出所有的接口信息
[root@linux ~]# ip link show
1: lo:  mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff
3: sit0:  mtu 1480 qdisc noop
    link/sit 0.0.0.0 brd 0.0.0.0

[root@linux ~]# ip -s link show eth0
2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    484011792  2247372  0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    2914104290 2867753  0       0       0       0

使用ip link show可以显示出整个设备接口的硬件相关信息,如上所示,包括网卡地址(MAC)、MTU等,比较有趣的应该是那个sit0的接口了,那个sit0的接口是用在IPv4及IPv6的数据包转换上的,对于我们仅使用IPv4的网络是没有作用的。lo及sit0都是主机内部所自行设置的。而如果加上 -s的参数后,则这个网卡的相关统计信息就会被列出来,包括接收(RX)及传送(TX)的数据包数量等,详细的内容与ifconfig输出的结果是相同的。

范例二:启动、关闭与设置设备的相关信息
[root@linux ~]# ip link set eth0 up
# 启动 eth0 这个设备接口。

[root@linux ~]# ip link set eth0 down
# 就关闭啊。简单得要命

[root@linux ~]# ip link set eth0 mtu 1000
# 更改 MTU 的值,实现 1000 bytes,单位就是 bytes

使用ifconfig也可以更新网卡的MTU,没什么不一样的地方,不过,如果是要更改网卡代号、MAC地址的信息的话,那可就得使用ip了。不过,设置前得要先关闭该网卡,否则会不成功。如下所示:

范例三:修改网卡代号、MAC 等参数
[root@linux ~]# ip link set eth0 name vbird
SIOCSIFNAME: Device or resource busy
# 因为该设备目前是启动的,所以不能这样设置。你应该这样做:

[root@linux ~]# ip link set eth0 down       <==关闭接口
[root@linux ~]# ip link set eth0 name vbird <==重新设置
[root@linux ~]# ip link show                <==观察一下
2. vbird:  mtu 900 qdisc pfifo_fast qlen 1000
    link/ehter 00:40:d0:13:c3:46 brd ff:ff:ff:ff:ff:ff
# 怕了吧?连网卡代号都可以改变。不过,玩玩后记得改回来
# 因为我们的 ifcfg-eth0 还是使用原本的设备代号。避免有问题,要改回来
[root@linux ~]# ip link set vbird name eth0 <==接口改回来

[root@linux ~]# ip link set eth0 address aa:aa:aa:aa:aa:aa
[root@linux ~]# ip link show eth0
# 如果你的网卡支持硬件地址 (MAC) 可以更改的话
# 那么上面这个操作就可以更改你的网卡地址了。厉害吧
# 不过,还是那句老话,测试完之后请立刻改回来

在这个设备的硬件相关信息设置上面,包括MTU、MAC以及传输的模式等,都可以在这里设置。有趣的是那个address的项目后面接的可是硬件地址(MAC)而不是IP。很容易搞错。切记切记。更多的硬件参数可以使用man ip查阅一下与ip link有关的设置。

2. 关于额外的IP相关设置:ip address

如果说ip link是与OSI七层协议的第二层数据链路层有关的话,那么IP address(IP addr)就是与第三层网络层有关的参数了。主要是在设置与IP有关的各项参数,包括netmask、broadcast等。

[root@linux ~]# ip address show   <==就是查阅 IP 参数
[root@linux ~]# ip address [add|del] [IP参数] [dev 设备名] [相关参数]
参数:
Show,单纯的显示出接口的 IP 信息
add|del,进行相关参数的增加 (add) 或删除 (del) 设置,主要有:
    IP 参数,主要就是网段的设置,例如 192.168.100.100/24 之类的设置
    dev,这个 IP 参数所要设置的接口,例如 eth0、eth1 等
    相关参数,主要有下面这些:
        broadcast,设置广播地址,如果设置值是 + 表示「让系统自动计算」
        Label,亦即是这个设备的别名,例如 eth0:0 就是了
        scope,这个接口的领域,通常是这几个大类
                   global,允许来自所有来源的联机
                   site,仅支持 IPv6 ,仅允许本主机的联机
                   link,仅允许本设备自我联机
                   host,仅允许本主机内部的联机
                   所以当然是使用 global 了。默认也是 global

范例一:显示出所有的接口之 IP 参数:
[root@linux ~]# ip address show
1: lo:  mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::250:fcff:fe22:9acb/64 scope link
       valid_lft forever preferred_lft forever
3: sit0:  mtu 1480 qdisc noop
    link/sit 0.0.0.0 brd 0.0.0.0

看到上面那个特殊的字体吗?没错,那就是IP参数,也是ip address最主要的功能。下面我们进一步来新增虚拟的网络接口看看:

范例二:新增一个接口,名称假设为 eth0:vbird 
[root@linux ~]# ip address add 192.168.50.50/24 broadcast + \
> dev eth0 label eth0:vbird
[root@linux ~]# ip address show eth0
2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:40:d0:13:c3:46 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
    inet 192.168.50.50/24 brd 192.168.50.255 scope global eth0:vbird
    inet6 fe80::240:d0ff:fe13:c346/64 scope link
       valid_lft forever preferred_lft forever
# 看到上面的特殊字体了吧?多出了一行新的接口,且名称是 eth0:vbird
# 至于那个 broadcast + 也可以写成 broadcast 192.168.50.255
[root@linux ~]# ifconfig
eth0:vbir Link encap:Ethernet  HWaddr 00:40:D0:13:C3:46
          inet addr:192.168.50.50  Bcast:192.168.50.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:5 Base address:0x3e00
# 如果使用 ifconfig 就能够看到这个怪东西

范例三:将刚才的接口删除 
[root@linux ~]# ip address del 192.168.50.50/24 dev eth0
# 删除就比较简单 

3. 关于路由的相关设置:ip route

这个项目当然就是路由的观察与设置了。事实上,ip route的功能几乎与route命令差不多,但是,它还可以进行额外的参数设计,例如MTU的规划等,功能相当强大。

[root@linux ~]# ip route show  <==简单的显示出路由的设置
[root@linux ~]# ip route [add|del] [IP或网段] [via gateway] [dev 设备]
参数:
Show,简单的显示出路由表,也可以使用 list
add|del,增加 (add) 或删除 (del) 路由的意思
    IP或网段,可使用 192.168.50.0/24 之类的网段或者是单纯的 IP
    Via,从那个 gateway 出去,不一定需要
    Dev,由那个设备连出去,这就需要了
    Mtu,可以额外的设置 MTU 的数值

范例一:显示出目前的路由资料
[root@linux ~]# ip route show
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.2
169.254.0.0/16 dev eth1  scope link
default via 192.168.1.254 dev eth1

如上述代码所示,最简单的功能就是显示出目前的路由信息,其实跟route命令相同,只是需要注意几个小细节:

· proto:此路由的路由协议,主要有Redirect、Kernel、Boot、Static、Ra等,其中Kernel指的是直接由核心判断自动设置。

· scope:路由的范围,主要是link,即是与本设备有关的直接联机。
再来看一下如何进行路由的增加与删除吧。

范例二:增加路由,主要是本机直接可沟通的网段
[root@linux ~]# ip route add 192.168.5.0/24 dev eth0
# 针对本机直接沟通的网段设置好路由,不需要通过外部的路由器
[root@linux ~]# ip route show
192.168.5.0/24 dev eth0  scope link
……以下省略……

范例三:增加可以通往外部的路由,需通过 router
[root@linux ~]# ip route add 192.168.10.0/24 via 192.168.5.100 dev eth0
[root@linux ~]# ip route show
192.168.5.0/24 dev eth0  scope link
……其他省略……
192.168.10.0/24 via 192.168.5.100 dev eth0
# 仔细看,因为我有 192.168.5.0/24 的路由存在 (我的网卡直接联系),
# 所以才可以将 192.168.10.0/24 的路由丢给 192.168.5.100 
# 那台主机来帮忙传递。与之前提到的 route 命令是一样的限制。

范例四:增加默认路由
[root@linux ~]# ip route add default via 192.168.1.2 dev eth0
# 那个 192.168.1.2 就是我的默认路由器 (gateway) 的意思
# 真的记得,只要一个默认路由就 OK 。

范例五:删除路由
[root@linux ~]# ip route del 192.168.10.0/24
[root@linux ~]# ip route del 192.168.5.0/24

事实上,这个ip的命令实在是太博大精深了。刚接触Linux网络的朋友,可能会有点晕,没有关系。你先会使用ifconfig、ifup、ifdown与route即可,等以后有了经验之后,再继续回来用ip吧。有兴趣的话,也可以自行参考ethtool命令(man ethtool)。

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节

分享到:

  1. Linux服务器配置全程实录
  2. 揭秘--优秀PPT这样制作

热点职位

更多>>

热点专题

更多>>

读书

Struts 2权威指南:基于WebWork核心的MVC开发
本书所介绍的Struts 2已经完全超出了Struts 1框架原有的高度,Struts 2建立在Struts 1和WebWork两个框架整合的基础之上,因此提

51CTO旗下网站

领先的IT技术网站 51CTO 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 51CTO学院