一、網絡及服務故障的排查思路:
例:假如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"進行非字邊界匹配)。