说明
本文简单讲解一些网络相关的命令,如ifconfig、route、netstat、arp、ping等,也简单讲解下路由表、arp表、域名解析dns等。
操作环境:Ubuntu 12.04
情景描述:查看网络是否正常,一般先确保以下设置是否正确
1、网线是否连接正确
2、ip地址和子网掩码是否设置正确 (ifconfig)
3、默认网关是否设置正确 (route)
4、域名服务器是否设置正确
如有内容错误,望指正,中间也带有点疑问,也望指点。 谢谢!
ping
主要用于探测目的ip是否可达,如
ping www.baidu,com 或 ping 115.239.211.112
ifconfig
没有参数默认显示当前活动接口的详细信息;
可以指定特定接口查看 ,如ifconfig eth0;
也可以指定参数-a显示所有的接口信息(当前活动和非活动的),如ifconfig -a;
如只要显示各网络接口的简洁信息,加上-s参数即可,如 ifconfig -s eth0;
比较重要的几个配置如下
1、修改网卡ipv4地址,如:
ifconfig eth0 *.*.*.*
2、修改网卡的掩码,如:
ifconfig eth0 netmask *.*.*.*
也可将上述两条合在一起使用,如:
ifconfig eth0 *.*.*.* netmask *.*.*.*
3、开启关闭网卡
ifconfig eth0 up 开启网卡eth0
ifconfig eth0 down 关闭网卡eth0
4、设置MTU值
ifconfig eth0 mtu *
5、增加网卡ipv6地址,如:
ifconfig eth0 add 2003:2:5:4:4619:b6ff:fe35:6558/64
删除ipv6地址
ifconfig eth0 del 2003:2:5:4:4619:b6ff:fe35:6558/64
用ifconfig命令配置了网卡的ip地址和子网掩码,如果没有设置正确的网关地址,数据将发送不出去,可用route命令进行设置。
route
route命令用于添加、删除、显示路由表的内容。
route不加参数默认显示路由表信息,一般结合-n选项,输出数值ip地址,而不是打印主机名,如果没有-n选项,命令会搜索/etc/networks文件列出其中的网络名,速度略慢。
内核 IP 路由表
目标 网关 子网掩码 标志 跃点 引用 使用 接口
0.0.0.0 192.168.52.2 0.0.0.0 UG 0 0 0 eth0
115.239.210.27 192.168.52.2 255.255.255.255 UGH 0 0 0 eth0
192.168.52.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
(115.239.210.27是我手动添加用于说明用)
路由表中的每一项都包含如下内容
1、目标网络:可以是完整主机ip地址,如115.239.21.27,标志位有H;也可以是网络地址如192.168.52.0;默认网关的目标网络是0.0.0.0,若没加-n参数,则显示为*.*.*.*。
2、下一跳地址:可以是与主机直接相连的路由器地址,或者直连网络ip地址,如此处的192.168.52.2,一般认为网关的地址即为路由器的地址,本处是虚拟机,如要对虚拟机的网络模式有所了解,可查
看http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/03/15/1985084.html
若发送数据包的目标网络就是当前子网,则显示为0.0.0.0,没有G标志,表示可直接交付,不需要经路由间接交付。
主机每次发送ip数据包时,都进行一次路由表搜索,优先匹配主机地址,其次匹配网络地址,最后是默认网关。
例如我要发送的目标ip地址是115.239.210.211,首先与路由表中含H标志的路由表项进行匹配,此处与115.239.210.27不匹配,转而与网络地址192.168.52.0进行匹配(目标ip地址与子网掩码进行与操作看是否与目标网络一样),此处也不匹配,最后交付给默认网关,由其进行间接交付。
比较重要的几个配置如下:
1、增加、删除默认网关 (用ifconfig设置ip地址后一般要设置网关)
route add default gw *.*.*.*
route del default
2、增加、删除路由表项(需要root权限)
// 指定所有发往115.239.210.27的数据包都通过网卡eth0发出去,并发往指定网关192.168.52.2 进行间接交付
route add -net 115.239.210.27 netmask 255.255.255.255 dev eth0 gw192.168.52.2
// 指定所有发往192.168.0.0的数据包都通过网卡eth0发出去,且目标网络是当前主机所在子网,可直接进行交付。
route add -net 192.168.0.0 netmask 255.255.0.0 dev eth0
// 添加路由需要注意所设置的目标网络和子网掩码进行与操作要与目标网络相等,否则会出现如下错误:
route: netmask doesn't match route address
// 删除操作
route del -net 192.168.0.0 netmask 255.255.0.0
问题情景:设备支持无线网卡,有线和无线都连接着,如果在路由表中加了如下两条语句:
route add -net 115.239.210.27 netmask 255.255.255.255 dev eth0 gw192.168.52.2
route add -net 115.239.210.27 netmask 255.255.255.255 dev wlan gw192.168.52.2
是不是发往115.239.210.27的数据包都通过有线发送?
arp
arp命令用于添加、删除、显示ARP高速缓存中的内容。ARP高速缓存用于存放最近ip地址到硬件地址之间的映射记录,与路由表一样,保存的是可直接相连的主机地址。路由表决定向哪个网络接口发送分组,arp表加快往指定主机发送数据包。
如主机要发送的数据包经过路由表搜索是在本地子网,可直接进行交付,此时查找主机ARP缓存表,查看是否有对应的目标ip地址映射项,有的话可直接使用映射的mac地址进行发送,否则主机要发送ARP请求报文,请求目标ip地址对应的MAC地址才能进行数据包发送。
不带参数,默认显示arp表,一般结合-n选项。
比较重要的几个配置如下:
1、增加ARP高速缓存表项 (需要root权限)
arp -s 10.10.37.216 44:19:B7:13:86:F8 // 目标ip 10.10.37.216 对应的硬件地址是44:19:B7:13:86:F8
这里需要注意,arp表保存的是可直接相连的主机地址,如果添加的ip地址不是同一网段的,会出现如下错误:
SIOCSARP: 网络不可达
可以通过路由表中添加路由项如 route add -net 10.10.37.0 netmask 255.255.255.0 ;不设置网关,表示该目标网络是同一子网的,这个时候再进行如上操作,就可进行添加arp表项了。
2、删除操作:
arp -d 10.10.37.216
arp表也可通过如下命令查看:
cat /proc/net/arp
设置dns
dns(Domain Name Server) 域名系统。
对于一台联网的主机,都有分配一个用于连接网络的ip地址,显示数字形式的ip地址没有好记的主机名容易,那么用户更愿意输入主机名来访问该设备,这个时候就需要dns服务器来进行该转换,将该主机名形式的地址转换成ip地址再来进行访问。
通俗的讲就是dns服务器是一台数据库系统,保存数字形式的ip地址和其对应的主机名,当用户访问该主机名时,首先到指定设置的dns服务器去查找该主机名在数据库中对应的ip地址,并返回给用户,然后数据包目标地址中填充该ip地址才发送数据包到目标主机,当然这些操作对用用户而言是透明的。
1、查看主机设置的dns服务器地址
cat /etc/resolv.conf2、设置dns
在 /etc/resolv.conf 里添加dns服务器地址 (需要root权限)
nameserver 114.114.114.114
netstat
netstat命令用于显示网络连接,路由表,接口信息等。以下截取带-an参数输出的结果
激活Internet连接 (服务器和已建立连接的)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 1 0 192.168.52.134:55044 91.189.89.144:80 CLOSE_WAIT
tcp 1 0 192.168.52.133:33607 91.189.92.61:80 CLOSE_WAIT
tcp 1 0 192.168.52.133:43347 91.189.92.60:80 CLOSE_WAIT
tcp 1 0 192.168.52.133:43351 91.189.92.60:80 CLOSE_WAIT
tcp 398 0 192.168.52.133:33606 91.189.92.61:80 CLOSE_WAIT
tcp 550 0 192.168.52.133:33609 91.189.92.61:80 CLOSE_WAIT
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
udp 0 0 0.0.0.0:38114 0.0.0.0:*
udp 0 0 0.0.0.0:5353 0.0.0.0:*
udp 0 0 127.0.0.1:53 0.0.0.0:*
udp 0 0 0.0.0.0:68 0.0.0.0:*
udp6 0 0 :::37063 :::*
udp6 0 0 :::5353 :::*
活跃的UNIX域套接字 (服务器和已建立连接的)
Proto RefCnt Flags Type State I-Node 路径
unix 2 [ ACC ] 流 LISTENING 7935 /var/run/sdp
unix 17 [ ] 数据报 7950 /dev/log
unix 2 [ ACC ] 流 LISTENING 2629142 /var/run/cups/cups.sock
unix 2 [ ACC ] 流 LISTENING 8227 /var/run/acpid.socket
unix 2 [ ACC ] 流 LISTENING 7974 /var/run/avahi-daemon/socket
-a显示所有选项,默认不带参数不显示监听和未监听的套接字。(图中State为空的是表示未监听的么?)
图中显示两部分套接字:网络套接字和UNIX域套接字
Proto表示使用的协议,如要单独显示相关协议,可使用-t(tcp) 或 -u(udp)
Local Address和Foreign Address表示用于连接的ip地址和端口号。(这里不明白为啥本地会有192.168.52.133这样的ip连接,我虚拟机ip是192.168.52.137?)
State表示连接的状态,如只想看监听状态的,可用-l选项
几个常用选项:
1、-r 显示路由表
2、-i 显示接口信息,与ifconfig类似
3、-p 显示建立连接的进程ID号和进程名