读书频道 > 系统 > linux > 构建高可用Linux服务器(第2版)
1.3.2 查看Linux服务器的网络连接
2012-08-10 18:34:28     我来说两句 
收藏    我要投稿   
本书是资深Linux/Unix系统管理专家兼架构师多年一线工作经验的结晶,51CTO和ChinaUnix等知名社区联袂推荐。第1版上市后广获好评,分别被《程序员》杂志和51CTO网站评选为2011年度10大最具技术影响力的图书和2011...  立即去当当网订购
查看Linux服务器的网络连接时,可以用以下命令:ifconfig、ping、netstat等。它们都是我们经常会用到的查看网络连接方面的命令,很实用。下面将分别介绍这几个命令的用法。
1?ifconfig
ifconfig命令是用来显示所有网络接口的详细情况的,可以显示/设置IP地址、子网掩码、广播地址等,由于它只是暂时生效,所以我还是推荐大家使用前面所介绍的网卡文件来设置。此命令和Windows的ipconfig命令很相似,用法也很简单,大家可以用man来了解其详细语法。
用ifconfig显示服务器的所有网络接口配置如下:
 
[root@localhost ~]# ifconfig -a
eth0Link encap:EthernetHWaddr 00:14:22:1B:71:20
inet addr:203.93.236.146Bcast:203.93.236.191Mask:255.255.255.192
inet6 addr: fe80::214:22ff:fe1b:7120/64 Scope:Link
UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
RX packets:7864481 errors:0 dropped:0 overruns:0 frame:0
TX packets:8121233 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:1689037931 (1.5 GiB)TX bytes:9937152687 (9.2 GiB)
 
eth1Link encap:EthernetHWaddr 00:14:22:1B:71:21
BROADCAST MULTICASTMTU:1500Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b)TX bytes:0 (0.0 b)
 
loLink encap:Local Loopback
inet addr:127.0.0.1Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNINGMTU:16436Metric:1
RX packets:48909 errors:0 dropped:0 overruns:0 frame:0
TX packets:48909 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:27821974 (26.5 MiB)TX bytes:27821974 (26.5 MiB)
 
lo:0Link encap:Local Loopback
inet addr:203.93.236.148Mask:255.255.255.255
UP LOOPBACK RUNNINGMTU:16436Metric:1
 
sit0Link encap:IPv6-in-IPv4
NOARPMTU:1480Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b)TX bytes:0 (0.0 b)
如果只显示eth0的网络配置,则命令如下所示:
 
[root@localhost ~]# ifconfig eth0
eth0Link encap:EthernetHWaddr 00:14:22:1B:71:20
inet addr:203.93.236.146Bcast:203.93.236.191Mask:255.255.255.192
inet6 addr: fe80::214:22ff:fe1b:7120/64 Scope:Link
UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
RX packets:7864647 errors:0 dropped:0 overruns:0 frame:0
TX packets:8121308 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:1689050791 (1.5 GiB)TX bytes:9937166253 (9.2 GiB)
如果想显示eth0的IP地址,命令如下所示:
 
[root@localhost ~]# ifconfig eth0| grep "inet addr"| awk -F[:" "]+ '{print$4}'
203.93.236.146
这里简单解释一下此条命令,它是条awk语句,会以空格和“:”为分隔符,然后打印出第4列。
2?ping
相信大家都很熟悉ping命令了,它用于检查网络上某台主机是否为活动状态或是否发生故障。它会利用TCP/IP协议族中的ICMP协议的ECHO_REQUEST数据包强制从特定的主机上返回响应。一般而言,如果我们发现某网站无法访问,首先想到的可能就是这个命令。因为ping命令在执行过程中同样会涉及路由、地址解析、网关等,所以如果ping不通,则表明网络不正常。用其他方法也只能得到这样的结果,所以我们把它作为检测网络状态的首选。但是,由于它只经过底层的几个协议,因此即使它运行成功了,还是需要用其他的方法测试高层是否能提供所需的服务。
下面我们试着用5个数据包去ping一下www?163?com:
 
ping -c 5 www.163.com
[root@localhost ~]# ping -c 5 www.163.com
PING 163.xdwscache.glb0.lxdns.com (210.51.213.180) 56(84) bytes of data.
64 bytes from 210.51.213.180: icmp_seq=1 ttl=62 time=1.28 ms
64 bytes from 210.51.213.180: icmp_seq=2 ttl=62 time=1.41 ms
64 bytes from 210.51.213.180: icmp_seq=3 ttl=62 time=1.38 ms
64 bytes from 210.51.213.180: icmp_seq=4 ttl=62 time=1.59 ms
64 bytes from 210.51.213.180: icmp_seq=5 ttl=62 time=1.31 ms
 
--- 163.xdwscache.glb0.lxdns.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3999ms
rtt min/avg/max/mdev = 1.286/1.399/1.598/0.117 ms
通常大家比较关心ping通的时间(它可以反映你与对方网站之间的连接速度)和有无丢包,这个命令的语法比较简单,大家可以多用man去了解其详细语法。
3?netstat
netstat命令的功能是显示网络连接、路由表和网络接口的信息,可以让用户得知目前都有哪些网络连接正在运作。
下面是它的重要参数,以及详细的说明文字。
?A:显示任何关联的协议控制块的地址。主要用于调试。
?a:显示所有套接字的状态。在一般情况下不显示与服务器进程相关联的套接字。
?i:显示自动配置接口的状态。那些在系统初始引导后配置的接口状态不在输出之列。
?m:打印网络存储器的使用情况。
?n:打印实际地址,而不是对地址的解释或显示主机、网络名之类的符号。
?r:打印路由选择表。
?f address:family会对于给出名字的地址簇打印统计数字和控制块信息。到目前为止,它唯一支持的地址簇是inet。
?i interface:表示只打印给出名字的接口状态。
?p protocol?name:表示只打印给出名字的协议的统计数字和协议控制块信息。
?s:打印每个协议的统计数字。
?t:表示在输出显示中用时间信息代替队列长度信息。
我们用得最多的也最习惯的有两个参数,即netstat ?an,如下所示:
 
[root@localhost ~]# netstat -an| grep -v unix
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local AddressForeign AddressState
tcp00 127.0.0.1:22080.0.0.0:*LISTEN
tcp00 0.0.0.0:7400.0.0.0:*LISTEN
tcp00 0.0.0.0:33060.0.0.0:*LISTEN
tcp00 0.0.0.0:1110.0.0.0:*LISTEN
tcp00 0.0.0.0:800.0.0.0:*LISTEN
tcp00 127.0.0.1:6310.0.0.0:*LISTEN
tcp00 127.0.0.1:250.0.0.0:*LISTEN
tcp00 127.0.0.1:60100.0.0.0:*LISTEN
tcp00 127.0.0.1:22070.0.0.0:*LISTEN
tcp00 203.93.236.146:80117.34.91.54:4991TIME_WAIT
tcp00 203.93.236.146:80117.34.91.54:1066TIME_WAIT
tcp00 203.93.236.146:80117.34.91.54:3067TIME_WAIT
tcp00 ::ffff:127.0.0.1:8005:::*LISTEN
tcp00 :::8009:::*LISTEN
tcp00 :::8080:::*LISTEN
tcp00 :::22:::*LISTEN
tcp00 ::1:6010:::*LISTEN
tcp10 ::ffff:203.93.236.146:41844::ffff:203.93.236.146:3306CLOSE_WAIT
tcp10 ::ffff:203.93.236.146:42287::ffff:203.93.236.146:3306CLOSE_WAIT
tcp10 ::ffff:203.93.236.146:42289::ffff:203.93.236.146:3306CLOSE_WAIT
tcp0 52 ::ffff:203.93.236.146:22::ffff:220.249.72.138:23527ESTABLISHED
udp00 0.0.0.0:581530.0.0.0:*
udp00 0.0.0.0:7340.0.0.0:*
udp00 0.0.0.0:7370.0.0.0:*
udp00 0.0.0.0:53530.0.0.0:*
udp00 0.0.0.0:1110.0.0.0:*
udp00 0.0.0.0:6310.0.0.0:*
udp00 :::33835:::*
udp00 :::5353:::*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
netstat ?an参数中state的含义如下所示。
LISTEN:侦听来自远方的TCP端口的连接请求。
SYN?SENT:在发送连接请求后等待匹配的连接请求。
SYN?RECEIVED:在收到和发送一个连接请求后等待对方对连接请求的确认。
ESTABLISHED:代表一个打开的连接,我们常用此作为并发连接数。
FIN?WAIT?1:等待远程TCP连接中断请求,或先前的连接中断请求的确认。
FIN?WAIT?2:从远程TCP等待连接中断请求。
CLOSE?WAIT:等待从本地用户发来的连接中断请求。
CLOSING:等待远程TCP对连接中断的确认。
LAST?ACK:等待原来发向远程TCP的连接中断请求的确认。
TIME?WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认。
CLOSED:没有任何连接状态。
这里跟大家介绍一个我们经常在工作中用到的Shell命令组合,它是用来查看服务器网络连接状态并汇总的,命令如下:
 
[root@localhost ~]# netstat -an| awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 21
ESTABLISHED 185
LISTEN 9
参数说明:
CLOSED:没有连接是活动的或正在进行的。
LISTEN:服务器在等待进入呼叫。
SYN_RECV:一个连接请求已经到达,等待确认。
SYN_SENT:应用已经开始,打开一个连接。
ESTABLISHED:正常数据传输状态。它的值也可以近似理解为当前服务器的并发数。
FIN_WAIT1:应用说它已经完成。
FIN_WAIT2:另一边已同意释放。
ITMED_WAIT:等待所有分组死掉。
CLOSING:两边同时尝试关闭。
TIME_WAIT:另一边已初始化一个释放。
LAST_ACK:等待所有分组死掉。
很多时候我们需要查看系统的路由表,这时我们可以通过命令来查看。下面介绍在Linux下查看路由的方法,当然了我们也可以通过查看路由表来确定机器的网关,它的方法有两种。
第一种方法如下所示:
[root@localhost ~]# route -n
Kernel IP routing table
DestinationGatewayGenmaskFlagsMetricRefUse Iface
203.93.236.1480.0.0.0255.255.255.255UH000 lo
203.93.236.1280.0.0.0255.255.255.192U000 eth0
169.254.0.00.0.0.0255.255.0.0U000 eth0
0.0.0.0203.93.236.1290.0.0.0UG000 eth0
所显示的内容中有UG的这行即是系统的默认网关。
第二种方法如下所示:
 
[root@localhost ~]# netstat -r
Kernel IP routing table
DestinationGatewayGenmaskFlagsMSSWindowirtt Iface
203.93.236.148*255.255.255.255UH000 lo
203.93.236.128*255.255.255.192U000 eth0
169.254.0.0*255.255.0.0U000 eth0
default203.93.236.1290.0.0.0UG000 eth0
在第二种方法中,我们用traceroute来随意跟踪一个网络地址(如下所示),其中第一条地址即是我们机器的网关,这种方法在FreeBSD 8?0下经常用到。
 
[root@localhost ~]# traceroute www.163.com
traceroute to www.163.com (210.51.213.180), 30 hops max, 40 byte packets
 1203.93.236.129 (203.93.236.129)0.861 ms0.840 ms0.825 ms
 2210.5.142.225 (210.5.142.225)0.789 ms0.779 ms0.759 ms
 3218.106.127.82 (218.106.127.82)1.478 ms1.468 ms1.456 ms
 4218.104.110.82 (218.104.110.82)1.427 ms1.429 ms1.651 ms
 5220.249.83.130 (220.249.83.130)1.639 ms2.114 ms2.349 ms
 6210.51.213.180 (210.51.213.180)1.585 ms1.670 ms1.432 ms
很多时候,我们需要追踪网络数据包的路径,这个时候我们该用什么命令呢?其实可以用traceroute来轻松解决这个问题。traceroute命令的功能是追踪网络数据包的路由途径,数据包默认的大小为40字节。跟踪到目的地需要经过几个路由器,所以,简单来说这个命令就是用来进行路由跟踪的。命令的用法如下所示:
 
[root@localhost ~]# traceroute www.163.com
traceroute to www.163.com (210.51.213.180), 30 hops max, 40 byte packets
 1203.93.236.129 (203.93.236.129)0.861 ms0.840 ms0.825 ms
 2210.5.142.225 (210.5.142.225)0.789 ms0.779 ms0.759 ms
 3218.106.127.82 (218.106.127.82)1.478 ms1.468 ms1.456 ms
 4218.104.110.82 (218.104.110.82)1.427 ms1.429 ms1.651 ms
 5220.249.83.130 (220.249.83.130)1.639 ms2.114 ms2.349 ms
 6210.51.213.180 (210.51.213.180)1.585 ms1.670 ms1.432 ms
以上命令显示了我们的机器到达www?163?com的数据包之间的完整路由,1表示离我们最近的路由器的IP地址,其他以此类推。
4?nslookup
nslookup命令的功能是查询一台机器的IP地址和与其对应的域名。通常需要一台域名服务器来提供域名服务,如果用户已经设置好域名服务器,就可以用这个命令来查看不同主机的IP地址所对应的域名。它的用法也很简单,如下所示:
 
[root@localhost ~]# nslookup
> mail.163.com
Server:218.104.111.114
Address:218.104.111.114#53
 
Non-authoritative answer:
mail.163.comcanonical name = mcache.mail.163.com.
mcache.mail.163.comcanonical name = email.163.com.lxdns.com.
email.163.com.lxdns.comcanonical name = 163.xxcache.z.lxdns.com.
163.xxcache.z.lxdns.comcanonical name = 06811.xdwscache.glb0.lxdns.com.
Name:06811.xdwscache.glb0.lxdns.com
Address: 210.51.213.180
> exit
5?dig
如果大家不喜欢nslookup命令的这种交互式用法,我们可以用dig命令来查看。值得一说的是,nslookup存在于Windows系列和Linux及FreeBSD等系统中,它比较常用;而dig只存在于Linux及FreeBSD等开源系统下。dig基本的用法如下所示:
 
dig sina.com.cn//查询A记录
;; QUESTION SECTION:
;sina.com.cn.INA
;; ANSWER SECTION:
sina.com.cn.37INA202.108.33.32
dig sina.com.cn ns//查询NS记录
;; QUESTION SECTION:
;sina.com.cn.INNS
;; ANSWER SECTION:
sina.com.cn.21478 INNSns2.sina.com.cn.
sina.com.cn.21478 INNSns3.sina.com.cn.
sina.com.cn.21478 INNSns1.sina.com.cn.
 
dig sina.com.cn soa//查询SOA记录
;; QUESTION SECTION:
;sina.com.cn.INSOA
;; ANSWER SECTION:
sina.com.cn.600 INSOA ns1.sina.com.cn. senjin.staff.sina.com.cn. 5 1800 600 604801 600
另外,还可以通过dig @ Server sina?com?cn?//在Server服务器上查询sina?com?cn的记录。比如:
 
dig @210.51.191.22 sina.com.cn
;; QUESTION SECTION:
;sina.com.cn.INA
 
;; AUTHORITY SECTION:
sina.com.cn.21600 INNSns1.sina.com.cn.
sina.com.cn.21600 INNSns2.sina.com.cn.
sina.com.cn.21600 INNSns3.sina.com.cn.
 
;; ADDITIONAL SECTION:
ns1.sina.com.cn.21600 INA202.106.184.166
ns2.sina.com.cn.21600 INA61.172.201.254
ns3.sina.com.cn.21600 INA202.108.44.55
从根服务器开始追踪一个域名的解析过程,可以用如下命令:
 
[root@localhost ~]# dig www.163.com +trace
 
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_4.2 <<>> www.163.com +trace
;; global options:printcmd
.518380INNSl.root-servers.net.
.518380INNSa.root-servers.net.
.518380INNSg.root-servers.net.
.518380INNSe.root-servers.net.
.518380INNSc.root-servers.net.
.518380INNSb.root-servers.net.
.518380INNSi.root-servers.net.
.518380INNSd.root-servers.net.
.518380INNSh.root-servers.net.
.518380INNSm.root-servers.net.
.518380INNSf.root-servers.net.
.518380INNSk.root-servers.net.
.518380INNSj.root-servers.net.
;; Received 500 bytes from 218.104.111.114#53(218.104.111.114) in 2 ms
 
com.172800INNSm.gtld-servers.net.
com.172800INNSd.gtld-servers.net.
com.172800INNSi.gtld-servers.net.
com.172800INNSe.gtld-servers.net.
com.172800INNSl.gtld-servers.net.
com.172800INNSc.gtld-servers.net.
com.172800INNSh.gtld-servers.net.
com.172800INNSj.gtld-servers.net.
com.172800INNSf.gtld-servers.net.
com.172800INNSk.gtld-servers.net.
com.172800INNSg.gtld-servers.net.
com.172800INNSa.gtld-servers.net.
com.172800INNSb.gtld-servers.net.
;; Received 501 bytes from 198.41.0.4#53(a.root-servers.net) in 256 ms
 
163.com.172800INNSns2.nease.net.
163.com.172800INNSns3.nease.net.
163.com.172800INNSns4.nease.net.
;; Received 140 bytes from 192.55.83.30#53(m.gtld-servers.net) in 56 ms
 
www.163.com.600INCNAMEwww.cache.wangsu.netease.com.
www.cache.wangsu.netease.com. 600 INCNAMEwww.163.com.lxdns.com.
;; Received 100 bytes from 114.113.197.12#53(ns2.nease.net) in 49 ms
6?finger
finger命令的功能是查询用户的信息,通常会显示系统中某个用户的用户名、主目录、停滞时间、登录时间、登录shell等信息。W的命令效果与其类似。其用法如下所示:
 
[root@localhost ~]# finger
Login Name TtyIdleLogin Time Office Office Phone
rootroot pts/2Mar 29 09:02 (220.249.72.138)
 
lsof
7?lsof
lsof(list open files)是一个列出当前系统打开文件的工具。在UNIX环境下,任何事物都是以文件的形式存在的,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。像传输控制协议(TCP)和用户数据报协议(UDP)套接字等,系统在后台都为应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符都会为应用程序与基础操作系统之间的交互提供通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序的信息,因此通过lsof工具查看这个列表对系统监测以及排错非常有帮助。顺便提一下,这个工具首先出现在UNIX系统中,后来才移植到Linux平台下。平时我们用得最多的是lsof?i,用来查看特定端口的情况,比如,可以用losf ?i:22查看22端口是由哪些程序占用的,如下所示:
 
[root@localhost ~]# lsof -i:22
COMMAND PID USER FD TYPEDEVICE SIZE NODE NAME
sshd 2934 root3uIPv68903 TCP *:ssh (LISTEN)
sshd20573 root3uIPv6 2158289 TCP 203.93.236.146:ssh->220.249.72.138:23527 (ESTABLISHED)
8?sockstat
在FreeBSD 8或FreeBSD 8?1中,我们可以使用sockstat查看打开的套接字的情况,包括端口相应进程的进程名、PID、用户等。用得最多的是sockstat ?4l(它非常好用,也可以用在jail虚拟机上)。另外,说明一下,此命令只能用于FreeBSD等UNIX系统中,CentOS 5.5中无此命令。
Socket的参数说明如下所示:
 
NAME
sockstat -- list open sockets
 
SYNOPSIS
sockstat [-46clu] [-p ports]
DESCRIPTION
The sockstat command lists open Internet or UNIX domain sockets.The following options are available:
-4Show AF_INET (IPv4) sockets.
-6Show AF_INET6 (IPv6) sockets.
-cShow connected sockets.
-lShow listening sockets
点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3.1 配置Linux服务器的网络
下一篇:1.3.3 查看Linux服务器的进程
相关文章
图文推荐
3.3.6 GNOME的软件管
3.3.5 GNOME的文件管
3.3.4 GNOME的窗口管
3.3.3 收藏夹和快捷
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站