linux网络测试(必会)
一、网络及服务故障的排查思路:
例:假如http://www.cnblogs.com/zhuji/网址打不开
第一步:查一下路径通不通
ping -c3 -i2 -s512 www.cnblogs.com icmp 协议是否禁止
-c:次数 -i:时间间隔 -s:发包大小
tranceroute www.cnblogs.com 查看各个节点是否畅通
telnet www.blogs.com 80 检查服务器web有没有开启,服务开没开,以及防火墙有没有挡住。
如果命令卡在第一行表示不通,卡在第二行表示通。
综上,如果不通:
1.80服务没开或端口不存在。
2.服务被防火墙挡住了。
3.服务监听的端口不在连接的IP上。(连接被限定了IP)
例:#netstat -lntup | grep ssh
0.0.0.0表示任意的IP地址都可以连接我的端口,也就是说我的服务并没有限制访问的IP;
如果是192.168.1.0:22则只限定了192.168.1.0的网段才能够ssh连接我的端口。
4.运营商默认不开,申请开端口。
二、如果局域网的某个机器无法上网
1.单机器无法上网
(1)ping www.baidu.com
如果通,但不能上网,可能是浏览器,中毒等问题。
(2)ping 网关(目的是排除物理链路的问题)
- 如果ping网关不通,则查看IP设置,然后ping自身IP或ping网关内其他机器IP;如果ping自身不通,检查网卡驱动,IP设置,物理链路。
- 如果ping网关通,则检查DNS的设置是否正确,pingDNS地址看看通不通,或者nslookup看看公网的域名解析是否正常。
(3)上网的路由器及ISP线路问题
(4)辅助排查:IP地址冲突,ARP病毒,交换机环路,核心交换机是否损坏,看看其他人能否上网。
2.大面积不能上网
路由器,ISP,交换机环路,核心交换机,ARP病毒。
三、客户端打开的网站慢,如何排查?
(一)用户个例还是全部如此,如果全部如此,那么:
(1)道路是否畅通的问题
- ping网站地址看看通不通
如果能ping通,不丢包,就是服务器有问题(服务器宕机或过载)
如果能ping通,但丢包,就是机房问题(带宽不稳定,各个线路不稳定)
如果ping不通,那么ping百度看看,通不通,不通就是机房问题
- 路由追踪,看看从客户端到服务器的线路节点是否有问题:
traceroute -d (Linux)
tracert -d (windows)
-d:禁止反向解析(速度快)
(2)机房业务是否OK
- telnet www.baidu.com 80 检查服务器有没有开启以及防火墙有没有挡住
nmap www.baidu.com -p 80 扫描端口
curl www.baidu.com 或 wget www.baidu.com
- 提供服务的服务器是否资源过载,服务器及服务连接数过多,负载高,CPU高,IO高等。
(3)外部问题
- 网站购买的带宽满了,通过流量监控服务查看
- 内链外链(调用外部网站网址有问题)根据网站URL调试网站
a、Google浏览器直接按F12
b、火狐 fire bug等
【没有错误,只是有点警告】
【有错误,让开发看看是不是错误导致的】
(4)集群架构问题
- web服务器问题
- 数据库问题
- 登录数据库看看是否有慢查询语句:show proceslist 调整MySQL配置,优化SQL语句
- 存储等问题
- 是不是存储服务器,如NFS、MFS的负载及磁盘IO高
四、合格的Linux运维必会
1.TCP/IP协议三次握手和四次断开的过程
2.http协议的工作原理
1)地址解析
如客户端浏览:http://zhuji:8080/index.html
协议名:http 主机名:zhuji 端口:8080 对象路径:/index.html
在这一步需要域名系统DNS解析域名zhuji.com 得到主机的IP地址。
2)封装HTTP请求数据包、
把第一步的解析结果在结合自己本机的信息,封装成一个HTTP请求数据包。
3)封装成TCP包,建立TCP连接
TCP的三次握手
4)客户机发送请求命令
建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符,客户机信息许可内容。
5)服务器响应
- 服务器接到请求后,给予相应的响应信息,格式为一个状态行,包括信息的协议版本号,一个成功或错误的代码,后边是MIME信息包括服务信息,实体信息和可能的内容。
- 实体消息是服务器向浏览器发送头部信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据.
6)服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码Connection:Keep-alive。TCP连接在发送后将 仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立连接所需要的时间,还节约了网络带宽。
3.机器无法上网(详见上方)
4.网站打开慢(详见上方)
5.DNS解析原理
- 在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
- 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
- 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
- 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
- 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面动作,进行查询,直至找到www.qq.com主机。
- 如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转发请求转至上上级,以此循环。不管是本地DNS服务器用的是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
6.OSI七层网络模型
7.route如何添加一个网络路由
添加到主机的路由:
# route add –host 192.168.1.10 dev eth0
# route add –host 192.168.1.10 gw 192.168.1.1
添加到网络的路由:
# route add –net 192.168.1.0 netmask 255.255.255.0 eth0
# route add –net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1
# route add –net 192.168.1.0/24 eth1
添加默认网关:
# route add default gw 192.168.1.1
删除路由:
# route del –host 192.168.1.10 dev eth0
添加永久路由方法:
方法一:
# vi /etc/rc.local(添加到末尾)
语句: route add -net 192.168.3.0/24 dev eth0
route add -net 192.168.2.0/24 gw 192.168.2.254
方法二:
# vi /etc/sysconfig/network (添加到末尾)
语句:GATEWAY=gw-ip 或者 GATEWAY=gw-dev
方法三:
# vi /etc/sysconfig/static-routes (没有static-routes的话就手动建立一个这样的文件)
语句:any net 192.168.3.0/24 gw 192.168.3.254
any net 10.250.228.128 netmask 255.255.255.192 gw 10.250.228.129
方法四:
开启 IP 转发:# echo "1" >/proc/sys/net/ipv4/ip_forward (临时)
# vi /etc/sysctl.conf --> net.ipv4.ip_forward=1 (永久开启)
8.如何查看已知端口对应的服务名:
根据端口号查找对应的服务名
1)grep -w 端口号 /etc/services
2)grep "\b端口号\b" /etc/services
根据服务名查找对应的端口号
1)grep -w 服务名 /etc/services
2)grep "\b服务名\b" /etc/services
其中-w表示只显示全字符合的列,即精确匹配;"\b"表示匹配一个字边界,即字与空格间的位置。例如,“er\b”匹配“never”中的“er”,但不匹配“verb”中的“er”(若匹配“verb”中的“er”可 使用"\B"进行非字边界匹配)。