Linux网络相关命令

来源:互联网 发布:淘宝客在哪设置佣金 编辑:程序博客网 时间:2024/05/15 02:02
如果你想要做好自己的网络参数设置,包括IP参数、路由参数和无线网络等,就得要了解下面这些相关的命令才行。
ifconfig:查询、设置网卡和IP网段等相关参数。
ifup、ifdown:这两个文件是Script,通过更简单的方式来启动网络接口。
route:查询、设置路由表(Route table)。
ip:复合式的命令,能直接修改上述命令提到的功能。
ifconfig、ifup、ifdown
这3个命令的用途都是启动网络接口,不过,ifup和ifdown仅就 /etc/sysconfig/network- scripts内的ifcfg-ethx(x为数字)进行启动或关闭的操作,并不能直接修改网络参数,除非手动调整ifcfg-ethx文件才行。至于ifconfig则能直接手动给予某个接口IP或调整其网络参数。下面我们就分别来谈一谈。

1. ifconfig

ifconfig主要是能手动启动、观察和修改网络接口的相关参数,能修改的参数非常多,包括IP参数及MTU等都能修改,他的语法如下:
[root@linux ~]# ifconfig {interface} {up|down}  
一般来说,直接输入ifconfig就会列出目前已被启动的卡,不论这个卡是否有设置IP,都会被显示出来。而如果是输入ifconfig eth0,则会显示出这个接口的相关数据,而不管该接口是否启动。所以,如果你想要知道某个网卡的Hardware Address,直接输入“ifconfig"网络接口代号"”即可。至于上述代码中出现的各项数据是这样的(数据排列由上而下、由左而右)。
? eth0:网卡的代号,也有lo这个loopback。
? HWaddr:网卡的硬件地址,习惯称为MAC。
? inet addr:IPv4的IP地址,后续的Bcase、Mask分别代表的是Broadcast和Netmask。
? inet6 addr:是IPv6的版本的IP,我们没有使用,所以略过。
? RX:那一行代表的是网络由启动到目前为止的数据包接收情况,packets代表数据包数、errors代表数据包发生错误的数量、dropped代表数据包由于有问题而遭丢弃的数量等。
? TX:和RX相反,为网络由启动到目前为止的传送情况。
? collisions:代表数据包碰撞的情况,如果发生太多次,表示你的网络状况不太好。
? txqueuelen:代表用来传输数据的缓冲区的储存长度。
? RX Bytes、TX Bytes:总传送、接收的字节总量。
? Interrupt、Memory:网卡硬件的数据,IRQ岔断和内存地址。
通过观察上述的资料,大致上能了解到你的网络情况,尤其是RX、TX内的error数量,及是否发生严重的collision情况,都是需要注意的。
范例二:暂时修改网络接口
[root@linux ~]# ifconfig eth0 192.168.100.100
# 如果不加所有其他参数,则系统会依照该 IP 所在的 class 范围,
# 自动地计算出 netmask 及 network, broadcast 等 IP 参数
[root@linux ~]# ifconfig eth0 192.168.100.100 netmask 255.255.255.128 \
> mtu 8000
# 设置网络接口,同时设置 MTU 的数值
[root@linux ~]# ifconfig eth0 MTU 9000
# 仅修改该接口的 MTU 数值,其他的保持不动
[root@linux ~]# ifconfig eth0:0 192.168.50.50
# 仔细看那个接口, eth0:0 。那就是在该网络接口上,再仿真一个网络接口,
# 亦即是在一个网卡上面设置多个 IP 的意思啦
[root@linux ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0F:EA:A3:06:A2
          inet addr:192.168.10.100 Bcast:192.168.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3669 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2892 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:667547 (651.9 KiB)  TX bytes:584799 (571.0 KiB)
          Interrupt:209 Memory:fb000000-0
eth0:0    Link encap:Ethernet  HWaddr 00:0F:EA:A3:06:A2
          inet addr:192.168.200.2 Bcast:192.168.200.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:209 Memory:fb000000-0
# 仔细看,是否和硬件有关的信息都相同。没错。因为是同一个网卡。
[root@linux ~]# ifconfig eth0:0 down
# 关掉 eth0:0 这个接口。如果想要启动 eth1 ,并且不设置所有网络参数
# ifconfig eth1 up 就能实现
[root@linux ~]# /etc/init.d/network restart
# 刚刚设置的数据全部失效,会以 ifcfg-ethx 的设置为主
使用ifconfig能暂时用手动来设置或修改某个适配卡的相关功能,并且也能通过eth0:0这种虚拟的网络接口来设置一张网卡上面的多个IP。手动的方式是比较简单。而且设置错误也没有关系,因为我们能利用 /etc/init.d/network restart来重新启动整个网络接口,那么之前手动的设置数据会全部失效。另外,要启动某个网络接口,但又不让他具有IP参数时,直接给他ifconfig eth0 up即可。这个操作经常在无线网卡当中进行,因为我们需要启动无线网卡让他去检测AP存在和否。

2. ifup、ifdown

实时地手动修改一些网络接口参数,能利用ifconfig来实现,如果是要直接以设置文件,亦即是在 /etc/sysconfig/network-scripts里面的ifcfg-ethx等文件的设置参数来启动的话,那就得要通过ifdown或ifup来实现了。
[root@linux ~]# ifup   {interface}
[root@linux ~]# ifdown {interface}
[root@linux ~]# ifup eth0
ifup和ifdown真是太简单了。这两个程式其实是script而已,他会直接到 /etc/ sysconfig/network-scripts目录下搜索对应的设置文件,例如ifup eth0,他会找出ifcfg-eth0这个文件的内容,然后加以设置。关于ifcfg-eth0的设置请参考前一章连上Internet的说明。
不过,由于这两个程式主要是搜索设置文件(ifcfg-ethx)来进行启动和关闭的,所以在使用前请确定ifcfg-ethx是否真的存在于正确的目录内,否则会启动失败。另外,如果以ifconfig eth0来设置或是修改了网络接口后,就无法再以ifdown eth0的方式来关闭了。因为ifdown会分析比较目前的网络参数和ifcfg-eth0是否相符,不符的话,就会放弃这次操作。因此,使用ifconfig修改完毕后,应该要以ifconfig eth0 down才能够关闭该接口。

3.route

我们在网络基础的时候谈过关于路由的问题,两台主机之间一定要有路由才能够互通TCP/IP的协议,否则就无法进行联机。一般来说,只要有网络接口,该接口就会产生一个路由.
[root@linux ~]# route [-nee]
[root@linux ~]# route add [-net|-host] [网段或主机] netmask [mask] [gw|dev]
[root@linux ~]# route del [-net|-host] [网段或主机] netmask [mask] [gw|dev]
观察的参数:
   -n,不要使用通信协议或主机名称,直接使用 IP 或 Port Number;
   -ee,使用更周详的信息来显示;
增加 (add) 和删除 (del) 路由的相关参数;
   -net,表示后面接的路由为一个网段;
   -host,表示后面接的为连接到单台主机的路由;
   Netmask,和网段有关,能设置 netmask 决定网段的大小;
   Gw,gateway 的简写,后续接的是 IP 的数值,和 dev 不同;
   Dev,如果只是要指定由哪一块网卡联机出去,则使用这个设置,后面接 eth0 等。
范例一:单纯的观察路由状态
[root@linux ~]# route -n
Kernel IP routing table
Destination    Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.10.0   0.0.0.0         255.255.255.0 U      0        0      0    eth0
169.254.0.0    0.0.0.0         255.255.0.0    U      0        0      0    eth0
0.0.0.0          192.168.10.30  0.0.0.0         UG     0        0      0    eth0
[root@linux ~]# route
Kernel IP routing table
Destination   Gateway           Genmask         Flags Metric Ref    Use Iface
192.168.10.0  *                  255.255.255.0  U      0       0      0    eth0
169.254.0.0   *                  255.255.0.0     U      0       0      0    eth0
default         Server.cluster   0.0.0.0         UG     0       0      0    eth0
在上面的例子中仔细观察route和route -n的输出结果,你能发现有加-n参数的主要是显示出IP,至于使用route,显示的则是“主机名称”。也就是说,在默认的情况下,route会去找出该IP的主机名称,如果未找到呢?就会显示得迟钝(有点慢),所以说,鸟哥通常都直接使用route-n了。由上面看起来,我们也知道default = 0.0.0.0/0.0.0.0,而上面的信息有哪些你需要知道的呢?
? Destination、Genmask:这两个术语就分别是Network和Netmask了。所以这两个东西就组合成为一个完整的网段了。
? Gateway:该网段是通过哪个Gateway连接出去的?如果显示0.0.0.0表示该路由是直接由本机传送,亦即能通过局域网的MAC直接传输;如果有显示IP的话,表示该路由需要经过路由器(网关)的帮忙才能够传送出去。
? Flags:总共有多个标记,代表的意义如下。
Ø U(route is up):该路由是启动的。
Ø H(target is a host):目标是一台主机(IP)而非网段。
Ø G(use gateway):需要通过外部的主机来传递数据包。
Ø R(reinstate route for dynamic routing):使用动态路由时,恢复路由信息的标记。
Ø D(dynamically installed by daemon or redirect):已由服务器或转port功能设置为动态路由。
Ø M(modified from routing daemon or redirect):路由已被修改了。
Ø!(reject route):这个路由将不会被接受(用来阻止不安全的网段)。
? Iface:这个路由传递数据包的接口。
此外,观察一下上面的路由排列顺序,依序是由小网段(192.168.10.0/24是Class C),逐渐到大网段(169.254.0.0/16 是Class B),最后则是默认路由(0.0.0.0/0.0.0.0)。然后当我们要判断某个网络数据包应该怎么传送的时候,该数据包会经由这个路由的过程来判断。例如,我上头仅有三个路由,若我有一个传往192.168.10.20的数据包要传递,那首先会找192.168.10.0/24这个网段的路由,找到了,就直接由eth0传送出去。
如果是传送到Yahoo的主机呢?Yahoo的主机IP是202.43.195.52,我通过判断不是192.168.10.0/24,也不是169.254.0.0/16,结果到达0/0时,传出去了,通过eth0将数据包传给192.168.10.30那台Gateway主机。所以说,路由是有顺序的。
因此当你重复设置多个同样的路由时,例如,在你的主机上的两张网卡设置为相同网段的IP时,会出现什么情况?会出现如下的情况:
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
也就是说,由于路由是依照顺序来排列和传送的,所以不论数据包是由哪个接口(eth0、eth1)所接收,都会由上述的eth0传送出去,所以,在一台主机上面设置两个相同网段的IP本身没有什么意义。多此一举。除非是类似虚拟主机(Xen、VMware等软件)所架设的多主机,才会有这个必要。
范例二:路由的增加和删除
[root@linux ~]# route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0
# 上面这个操作能删除掉 169.254.0.0/16 这个网段
# 请注意,在删除的时候,需要将路由表上面出现的信息都写入
# 包括netmask、dev 等参数
[root@linux ~]# route add -net 192.168.100.0 \
> netmask 255.255.255.0 dev eth0
# 通过 route add 来增加一个路由。请注意,这个路由必须能够和你互通
# 例如,如果我下达下面的命令就会显示错误:
# route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.200.254
# 因为我的环境内仅有 192.168.10.100 这个 IP ,所以不能和 192.168.200.254
# 这个网段直接使用 MAC 互通
[root@linux ~]# route add default gw 192.168.10.30
# 增加默认路由的方法。请注意,只要有一个默认路由就够了
# 在这个地方如果你随便设置后,记得使用下面的命令重新设置你的网络
# /etc/init.d/network restart
如果是要进行路由的删除和增加,那就能参考上面的例子了,其实,使用man route里面的信息就非常丰富了。仔细查阅一下。你只要记得,当出现“SIOCADDRT: Network is unreachable”这个错误时,肯定是由于gw后面接的IP无法直接和你的网段沟通(Gateway并不在你的网段内),所以,赶紧检查一下输入的信息是否正确。

4.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   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        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
在这个设备的硬件相关信息设置上面,包括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    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  
如上述代码所示,最简单的功能就是显示出目前的路由信息,其实跟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)。

4.iwlist、iwconfig

这两个命令需要你有无线网卡才能够进行使用。其用法如下:
? iwlist:利用无线网卡进行无线AP的检测和取得相关的数据。
? iwconfig:设置无线网卡的相关参数。

5.dhClient

如果你是使用DHCP协议在局域网内取得IP的话,那么是否一定要去编辑ifcfg-eth0内的BOOTPROTO呢?有个更快速的做法,就是利用dhClient这个命令。因为这个命令才是真正发送DHCP请求的。如果不考虑其他的参数,他的用法非常简单,使用下面的方法即可:
[root@linux ~]# dhClient eth0
非常简单吧。这样就能即时让我们的网卡以DHCP协议去尝试取得IP。不过在SuSE Distribution里面,他仅有dhcpcd这个程式,他和dhClient是相同的东西。

6.ping

这个ping是非常重要的命令,ping主要通过ICMP数据包来进行整个网络的状况报告,当然,最重要的就是ICMP type 0、8这两个类型,分别是需求回报和主动回报网络状态是否存在的特性。要特别注意的是,ping需要通过IP数据包来传送ICMP数据包,而IP数据包里有个相当重要的TTL(Time To Live)属性,这是个非常重要的路由特性,周详的IP和ICMP表头数据请参考网络基础的周详介绍。
[root@linux ~]# ping [-bcstnM] IP
参数:
-b,后面接的是 broadcast 的 IP,用在你“需要对整个网段的主机进行 ping ”时;
-c,后面接的是执行 ping 的次数,例如 -c 5 ;
-n,不进行 IP 和主机名称的反查,直接使用 IP ;
-s,发送出去的 ICMP 数据包大小,默认为 56(bytes),再加 8 bytes 的 ICMP 表头资料。
-t,TTL 的数值,默认是 255,每经过一个节点就会少
-M [do|dont] :主要在检测网络的 MTU 数值大小,两个常见的项目是:
   do,代表传送一个 DF (Don’t Fragment) 旗标,让数据包不能重新拆包和打包;
   dont,代表不要传送 DF 标记,表示数据包能在其他主机上拆包和打包。
范例一:检测一下 168.95.1.1 这部 DNS 主机是否存在?
[root@linux ~]# ping -c 3 168.95.1.1
PING 168.95.1.1 (168.95.1.1) 56(84) bytes of data.
64 bytes from 168.95.1.1: icmp_seq=0 ttl=243 time=9.16 ms
64 bytes from 168.95.1.1: icmp_seq=1 ttl=243 time=8.98 ms
64 bytes from 168.95.1.1: icmp_seq=2 ttl=243 time=8.80 ms
--- 168.95.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 8.807/8.986/9.163/0.164 ms, pipe 2
ping最简单的功能就是传送ICMP数据包去需求对方主机响应是否存在于网络环境中。上面的响应信息当中,几个重要的项目如下。
? 64 Bytes:表示这次传送的ICMP数据包大小为64 Bytes,这是默认值。在某些特别场合中,例如,要搜索整个网络内最大的MTU时,能使用-s 2000之类的数值来取代。
? icmp_seq=0:ICMP所检测进行的次数,第一次编号为0。
? ttl=243:TTL和IP数据包内的TTL是相同的,每经过一个带有MAC的节点(node)时,例如router、bridge时,TTL就会减少1,默认的TTL为255,你能通过 -t 150之类的方法来重新设置默认TTL数值。
? time=9.16 ms:响应时间,单位有ms(0.001秒)及µs(0.000001秒),一般来说,响应时间越小,表示两台主机之间的网络联机越良好。
如果你忘记加上 -c 3这样的规定检测次数,那就得要使用 [ctrl]-c将他结束掉了。
范例二:针对整个网段进行 ping 的追查
[root@linux ~]# ping -c 3 -b 192.168.10.255
WARNING: pinging broadcast address         
如果想要了解网内有多少台主机存活着,那么使用ping -b broadcast就能够知道了。而不必一台一台主机来检测。另外要特别注意一下,如果你的主机和待检测主机并不在同一个网段内,那么TTL默认使用255,如果是同一个网段内,那么TTL默认则使用64。看看上面的输出即可明白。
我们在前几章的网络基础里面谈到加大帧(frame)时,对于网络性能是有帮助的,因为数据包打包的次数会减少,加上如果整个传输的媒介都能够接受这个frame而不必重新进行数据包的拆解和重组的话,那么性能当然会更好,修改frame大小的参数就是MTU。好了,目前我们知道网卡的MTU能通过ifconfig或是ip等来实现,那么追踪整个网络传输的最大MTU时,又该怎么查询?最简单的方法当然是通过ping传送一个大数据包,并且不许中继的路由器或Switch将该数据包重组,这就能够处理了:
范例三:找出最大的 MTU 数值
[root@linux ~]# ping -c 2 -s 1000 -M do 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 1000(1028) bytes of data.
1008 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.424 ms
# 如果有响应,那就是能接受这个数据包,如果无响应,那就表示这个 MTU 太大了
[root@linux ~]# ping -c 2 -s 8000 -M do 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 8000(8028) bytes of data.
ping: local error: Message too long, mtu=1500
# 这个错误信息是说,本地端的 MTU 才到 1500 而已,你要检测 8000 的 MTU
# 根本就是无法实现的。那怎么是好?用前一小节介绍的 ip link 来进行 MTU 设置吧
不过,你需要知道的是,由于IP数据包表头(不含options)已占用了20Bytes,再加上ICMP的表头有8Bytes,所以当然你在使用 -s size的时候,那个数据包就得要先扣除 (20+8=28)的大小了。因此如果要使用MTU为1500时,就得要下达“ping -s 1472 -M do xx.yy.zz.ip”才行。另外,由于本地端的网卡MTU也会影响到检测,所以如果想要检测整个传输媒介的MTU数值,那么每个能调整的主机就得要先使用ifcofig或ip将MTU调大,然后再去进行检测,否则就会像上面提供的案例相同,可能会出现“Message too long,mtu=1500”之类的字样。如果检测完毕后,想要调整最佳化的MTU,那么请参考前一章节的内容来调整。
不过不要随便调整MTU,除非真的有问题。通常是在如下情况调整MTU。
? 因为全部的主机群都是在内部的网段,例如群集架构(Cluster)的环境下,由于内部的网络节点都是我们能控制的,因此能通过修改MTU来改进网络性能。
? 因为操作系统默认的MTU和你的网段不符,导致某些网站能顺利联机,某些网站则无法联机。以视窗系统操作系统作为联机分享的主机时,在Client端挺容易发生这个问题。
如果是要连上Internet的主机,注意不要随便调整MTU,因为我们无法知道Internet上面的每台机器能够支持的MTU到多大,因为这些也不是我们能够管得到的。
另外,其实每种联机方式都有不同的MTU值,常见的各种接口的MTU值如表5-1所示。
表5-1  常见的各种接口的MTU值
网络接口
MTU
Ethernet
1500
PPPoE
1492
Dial-up(Modem)
576
网络上也有免费帮忙查询MTU和传输相关数据的网站,例如下面这个网站:
http://forums.speedguide.net:8117/
连接上这个网站之前,请先取消你浏览器上的代理服务器(Proxy)的设置,才能显示出正确的信息。如果在视窗系统的系统上想要修改MTU值的话,那就得要修改视窗系统的日志文件,在视窗系统上面对于MTU的检测和修改的周详做法能参考微软的官方网站:
http://www.microsoft.com/taiwan/msclub/member/TIPS/Spring_2001
/tip1to3/tip1to3_2.htm

7.traceroute

我们前面谈到的命令大多数都是针对主机的网络参数设置所需要的,而ping是两台主机之间的回应和否的判断,那么有没有命令能追踪两台主机之间通过的各个节点(Node)通信状况的好坏呢?如果我们联机到yahoo的速度比平常慢,你觉得是自己的网络环境有问题,还是外部的Internet有问题?如果是前者的话,我们当然需要检查自己的网络环境,看看究竟是谁中毒了?但如果是Internet的问题呢?那只有“等等等”了。判断是这个问题就得要使用traceroute这个命令。
[root@linux ~]# traceroute [-nwig] IP
参数:
-n,能不必进行主机的名称解析,只用 IP ,速度较快。
-w,若对方主机在几秒钟内没有回声就宣告不治...默认是 5 秒。
-i,用在比较复杂的环境,如果你的网络接口非常多非常复杂时,才会用到这个参数。
     例如,你有两条 ADSL 能连接到外部,那你的主机会有两个 ppp。
     你能使用 -i 来选择是 ppp0 还是 ppp1 啦。
-g,和 -i 的参数相仿,只是 -g 后面接的是 gateway 的 IP 。
范例一:
[root@linux ~]# traceroute -n tw.yahoo.com
traceroute to tw.yahoo-ap1.akadns.net (203.84.202.164), 30 hops max,
38 byte packets
1  61.59.121.1  42.174 ms  41.690 ms  41.058 ms
2  139.175.172.2  40.962 ms  41.978 ms  40.973 ms
3  192.72.122.130  40.983 ms  41.930 ms  41.003 ms
4  139.175.58.210  42.956 ms  41.997 ms  42.337 ms
5  139.175.58.153  47.591 ms  47.972 ms  48.748 ms
6  139.175.56.30  48.193 ms  47.970 ms  47.986 ms
7  139.175.57.94  47.959 ms  47.951 ms  47.985 ms
8  139.175.56.138  48.363 ms  47.586 ms  47.995 ms
9  139.175.58.42  49.256 ms  50.668 ms  47.490 ms
10  61.58.33.133  201.882 ms  201.565 ms  200.973 ms
11  61.58.33.50  199.910 ms  199.019 ms  198.961 ms
12  203.84.200.226  202.391 ms  202.567 ms  209.283 ms
这个traceroute挺有意思的,这个命令会针对你想要连接的目的地的所有Router进行ICMP的超时等待,例如上面的例子当中,由鸟哥的主机连接到Yahoo时,他会经过12个节点,traceroute会主动对这12个节点做ICMP的回应等待,并检测回复的时间,每个节点会检测三次。所以像上面显示的结果,发现每个节点其实回复的时间大约在200 ms以内,算是Internet的环境还能了。而且由上面的信息来看,在61.58.33.133这个节点后的传输延迟较久,至于之前的9个节点则有不错的表现。通过这种分析,能让你了解到这条联线是哪个环节出了问题。
另外,如果在默认的5秒钟之内traceroute听不到节点的回应,那么屏幕上就会出现一个“*”的符号,告知该节点无法有顺利的响应。由于我们的traceroute用的是ICMP数据包,有些防火墙或主机可能会将ICMP数据包扔掉,因此就会造成等不到回应的状况。另外,有些Gateway本来就不支持traceroute的功能,因此也会产生“*”的状况,所以分析时要注意一下。

8.nslookup

这条命令的用途和host基本上是相同的,就是用来作为IP和主机名称对应的检查,同样是使用 /etc/resolv.conf这个文件作为DNS服务器的来源选择。
[root@linux ~]# nslookup [-query=[type]] [hostname|IP]
参数:
-query=type:查询的类型,除了传统的 IP 和主机名称对应外,DNS 更有非常多信息
             所以我们能查询非常多不同的信息,包括mx、cname 等
             例如: -query=mx 的查询方法。
范例一:找出 www.google.com.tw 的 IP
[root@linux ~]# nslookup www.google.com.tw
Server:         168.95.1.1
Address:        168.95.1.1#53
Non-authoritative answer:
www.google.com.tw       canonical name = www.google.com.
www.google.com  canonical name = www.l.google.com.
Name:   www.l.google.com
Address: 64.233.189.104
范例二:找出 168.95.1.1 的主机名称
[root@linux ~]# nslookup 168.95.1.1
Server:         168.95.1.1
Address:        168.95.1.1#53
1.1.95.168.in-addr.arpa name = dns.hinet.net.
怎么,看起来和host差不多吧。不过,这个nslookup还能通过IP找出主机名称。例如,那个范例二,他的主机名称是:dns.hinet.net。目前大家都建议使用dig这个命令来取代nslookup

9.netstat

netstat 程序被用来检查各种各样的网络设置和统计数据。通过此命令的许多选项,我们可以看看网络设置中的各种特性。使用“-ie”选项,我们能够查看系统中的网络接口:
[me@linuxbox ~]$ netstat -ie
eth0 Link encap:Ethernet HWaddr 00:1d:09:9b:99:67
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::21d:9ff:fe9b:9967/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:238488 errors:0 dropped:0 overruns:0 frame:0
TX packets:403217 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100 RX bytes:153098921 (146.0 MB) TX

bytes:261035246 (248.9 MB) Memory:fdfc0000-fdfe0000


lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
在上述实例中,我们看到我们的测试系统有两个网络接口。第一个,叫做eth0,是因特网接口,和第二个,叫做lo,是内部回环网络接口,它是一个虚拟接口,系统用它来“自言自语”。当执行日常网络诊断时,要查看的重要信息是每个网络接口第四行开头出现的单词“UP”,说明这个网络接口已经生效,还要查看第二行中inet addr 字段出现的有效IP 地址。对于使用DHCP(动态主机配置协议)的系统,在这个字段中的一个有效IP 地址则证明了DHCP 工作正常。
使用这个“-r”选项会显示内核的网络路由表。这展示了系统是如何配置网络之间发送数据包的。
[me@linuxbox ~]$ netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
在这个简单的例子里面,我们看到了,位于防火墙之内的局域网中,一台客户端计算机的典型路由表。第一行显示了目的地192.168.1.0。IP 地址以零结尾是指网络,而不是个人主机,所以这个目的地意味着局域网中的任何一台主机。下一个字段,Gateway,是网关(路由器)的名字或IP 地址,用它来连接当前的主机和目的地的网络。若这个字段显示一个星号,则表明不需要网关。.
最后一行包含目的地default。指的是发往任何表上没有列出的目的地网络的流量。在我们的实例中,我们看到网关被定义为地址192.168.1.1 的路由器,它应该能知道怎样来处理目的地流量。netstat 程序有许多选项,我们仅仅讨论了几个。查看netstat 命令的手册,可以得到所有选项的完整列表。

0 0
原创粉丝点击