第十九節 Linux相關網絡知識梳理
標籤(空格分隔): Linux實戰教學筆記-陳思齊php
一,前言
一個運維有時也要和網絡打交道,因此具有最基本的網絡知識,對一個運維人員來講是必要的。但,對於咱們的工做來講這些並非重點,所以,我不可能從最基礎的網絡知識開始講起。本節內容更可能是從一個梳理和總結的角度進行闡述。如若同窗們遇到不懂,或不明白的地方,那麼你要留心了,你有不少基礎性的網絡知識還不具有,我建議從網上有針對性的學習一下。html
二,網絡基礎學習體系
思科課程體系的大體瀏覽(CCNA),雖然知識很少,培訓週期通常在1周左右,但涵蓋了大部分的知識內容,對於初步理解網絡知識,掌握網絡的相關配置,基本上已經很是知足了,特別是系統運維人員。linux
第1單元 | 第2單元 | 第3單元 | 第4單元 |
---|---|---|---|
網絡基礎 | 路由協議 | 二層交換網絡 | WAN網絡和IPv6 |
OSI七層模型 | IP路由原理 | VLAN | 串行點到點鏈路 |
TCP/IP簡介 | 靜態路由 | VTP | 幀中繼網絡 |
子網劃分 | 默認路由 | STP | IPv6簡介 |
Cisco IOS設備 | 動態路由 | 單臂路由 | |
管理網絡環境 | 用戶訪問列表初步管理IP流量 |
說明:
對於系統運維人員,以上知識能夠都學習一下,CCNA的學習難度不是很大,並且學習週期較短,對於快速成爲一個系統運維工程師中,網絡搞的最好的,就足夠了。若是時間精力有限,建議學習如下知識,做爲步入網絡知識的基石
1)網絡基礎知識:涉及到網路的發展歷程,網絡一些名詞概念,路由交換。
2)OSI七層模型的介紹
3)TCP/IP協議簇的簡介,包含TCP/IP三次握手和四次揮手的過程
4)VLSM可變子網的概念nginx
三,網絡重點知識總結性梳理
3.1 OSI七層模型
層次 | 說明 | 功能/協議 |
---|---|---|
應用層 | 應用程序及藉口,相似於公司的老闆 | 提供應用程序的藉口FTP telnet http pop3等 |
表示層 | 對數據進行轉換,加密和壓縮 | 將上層的數據進行轉換和編譯壓縮爲標準的文件,如jpg,gif,ascii碼等 |
會話層 | 創建,管理和終止會話 | |
傳輸層 | 提供可靠的端到端的報文傳輸和差錯控制,實質上就是負責創建鏈接的 | TCP UDP 創建可靠和非可靠鏈接將上層的數據進行分段處理 |
網絡層 | 將分組從源端傳送到目的端,提供網絡互聯 | 實質上就是提供路由尋址(IP協議)將上層分段的數據進行打包 |
數據鏈路層 | 將分組數據封裝成幀,提供節點到節點的傳輸 | 幀就是本地局域網中傳輸數據的一個單元,負責在局域網內部的點對點的尋址 |
物理層 | 在媒體上傳輸比特 | 就是底層的鏈路介質的規範 |
特色說明:
1,OSI模型每層都有本身的功能集
2,層與層之間相互獨立又互相依靠
3,上層依賴於下層,下層爲上層提供服務。web
3.2TCP/IP三次握手和四次揮手
報文類型 | 含義 | 狀態 |
---|---|---|
SYN | 發起一個新鏈接 | 1表示發起鏈接 |
FIN | 釋放一個鏈接 | 1表示結束鏈接 |
ACK | 確認序號有效 | 1表示序號有效 |
seq | 隨機序號 | 隨機數 |
ack | 隨機序號回覆 | ack=seq+1 |
3.2.1 三次握手
1)第一次握手:Client將標誌位SYN置爲1,隨機產生一個seq=x,並將該數據包發送給Server,Client進入SYN_SENT狀態,等待Server確認。面試
2)第二次握手:Server收到數據包後由標誌位SYN=1知道Client請求創建鏈接,Server將標誌位SYN和ACK都置爲1,ack=x+1,隨機產生一個值seq=y,並將該數據包發送給Client以確認鏈接請求,Server進入SYN_RCVD狀態。數據庫
3)第三次握手:Client收到確認後,檢查ack是否爲x+1,ACK是否爲1,若是正確則將標誌位ACK置爲1,ack=y+1,並將該數據包發送給Server,Server檢查ack是否爲y+1,ACK是否爲1,若是正確則鏈接創建成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間能夠開始傳輸數據了。windows
3.2.2 四次揮手
1)第一次揮手:Client發送一個FIN,用來關閉Client到Server的數據傳輸,同時發送一個seq=x的隨機序號。Client進入FIN_wait_1狀態瀏覽器
2)第二次揮手:Server收到FIN後,發送一個ACK給Client,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號)Server進入CLOSE_WAIT狀態。緩存
3)第三次揮手:Server發送一個FIN,用來關閉Server到CLient的數據傳輸,同時發送一個seq=y的隨機數,Server進入LAST_ACK狀態
4)第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號爲收到序號+1,Server進入CLOSED狀態,完成四次回揮手
3.3 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服務器再返回給客戶機。
3.5 http解析原理
1)地址解析
如用客戶端瀏覽http://chensiqi:8080/index.html
協議名:http
主機名:chensiqi.com
端口:8080
對象路徑:/index.html
在這一步須要域名系統DNS解析域名chensiqi.com獲得主機的IP地址。
2)封裝HTTP請求數據包
把第一步的解析結果在結合本機本身的信息,封裝成一個HTTP請求數據包
3)封裝成TCP包,創建TCP鏈接
TCP的三次握手
4)客戶機發送請求命令
創建鏈接後,客戶機發送一個請求給服務器,請求方式的格式爲:統一資源標識符(URL),協議版本號,後邊是MIME信息包括請求修飾符,客戶機信息許可內容
5)服務器響應
- 服務器接到請求後,給予相應的響應信息,格式爲一個狀態行,包括信息的協議版本號,一個成功或錯誤的代碼,後邊是MIME信息包括服務器信息,實體信息何可能的內容。
- 實體消息是服務器向瀏覽器發送頭信息後,它會發送一個空白行來表示頭信息的發送到此爲結束,接着,它就以Content-Type應答頭信息所描述的格式發送用戶所請求的實際數據
6)服務器關閉TCP鏈接
通常狀況下,一旦Web服務器向瀏覽器發送了請求數據,它就要關閉TCP鏈接,而後若是瀏覽器或者服務器在其頭信息加入了這行代碼Connection:Keep-alive。TCP鏈接在發送後將仍然保持打開狀態,因而,瀏覽器能夠繼續經過相同的鏈接發送請求。保持鏈接節省了爲每一個請求創建鏈接所須要的時間,還節約了網絡帶寬。
綜上:
http解析的過程,雖然我寫的比較具體,但其實你們只須要了解大概的過程就能夠,若是創建URL請求,發起URL請求,處理及返回URL的過程。
3.5 同網段和跨網段數據傳輸原理
3.4.1 同網段下(同廣播域),兩臺主機通訊過程
咱們知道兩主機要通訊傳送數據時,就要把應用數據封裝成IP包(由於咱們的網絡大多都是TCP/IP的以太網),而後再交給下一層數據鏈路層繼續封裝成幀;以後根據MAC地址才能把數據從一臺主機,準確無誤的傳送到另外一臺主機。
當NO要和N1通訊時,
1)假如NO知道N1的IP但殊不知道它的MAC地址,那NO就會發送一個ARP的廣播請求(裏面源IP是NO目標IP是N1源MAC是N0目標MAC是12個F)給同一廣播域中的全部成員。
2)當交換機SW0從本身的1接口上收到這個廣播包,而後它會讀取這個幀的源MAC地址和目標MAC地址,因爲交換機SW0剛啓動加電時,它的MAC表爲空的。因此它會把NO的MAC地址與之相對應的接口1放到一張表裏,這張表就是MAC地址表。
3)而後SW0再從別的接口廣播這個數據幀,當別的主機收到這個廣播時,查看目標IP不是本身的,就會丟棄此包。若是N1接收到這個數據幀,它檢查目標IP和這個的IP是同樣的,就會迴應這個ARP請求,把本身的IP和MAC封裝成源IP和源MAC,N0的IP和N0的MAC地址爲目標IP與目標MAC,並記錄N0的MAC與IP,放進本身的ARP緩存表中。
4)此時,這個應答包通過交換機SWO時,它又會檢查源MAC,目標MAC,把N1的MAC和本身接口2放進MAC地址表中,再查看本身的MAC地址表,發現存在目標MAC與本身的1接口對應(因爲剛開始有記錄過N0的MAC),那它就會直接把這個應答包從接口1送出去了。
5)主機N0收到這個包後發現目標MAC是本身,就會處理這個包。並把N1的MAC與IP放進本身的ARP緩存表中。這時主機N0就知道N1的MAC地址了,
6)後續的發送數據任務,就會直接把N1的IP與MAC封裝進幀中進行點對點的發送了。
3.4.2 跨路由(不一樣網段)數據傳輸過程
當N0要和N2通訊時
1)N0會先檢查N2的IP地址和本身是否處於同一網段,因爲N2和本身處在不一樣網段,所以,N0會把數據包給它的網管,也就是R0上的F0/0接口了。
2)當這個數據包到達R0時,路由器R0會查看目標IP是不是本身的,因爲目標不是本身,因此會查看本身的路由表,找出到達N2網段的路由;(若是找不到就會丟棄數據包)
3)當R0查看路由表發現到達N2網段的出接口是F0/1.因而,把數據包轉到F0/1接口上,再由接口F0/1傳給R1.這個過程,數據包的源IP是N0源MAC是F0/1目標IP是N2目標MAC是R1的F0/1接口IP
4)當R1收到這個數據包後,一樣也要檢查包的目標IP是否本身,它會主動查找本身的路由表,發現目標IP跟本身F0/0接口處在同一網段,因而就把包傳到F0/0接口上去發給N2。)
四,linux網絡相關配置
4.1 配置網卡
網卡:編輯配置文件 /et/sysconfig/network-scripts/ifcfg-eth0
[root@chensiqi ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 #第一塊網卡邏輯設備名,第二塊爲eth1,有些系統也會以em等字符標識 TYPE=Ethernet #上網類型,目前基本都是以太網 ONBOOT=yes #這個地方要爲yes,才能保證下次開機自動啓動激活網卡設備 NM_CONTROLLED=yes #是否經過NetworkManager管理網卡設備 BOOTPROTO=dhcp #啓動協議,獲取配置方式,有none|bootp|dhcp三個選項 USERCTL=no PEERDNS=yes IPV6INIT=no #是否支持IPV6 HWADDR=00:0c:29:cb:f9:c0 #以太網硬件地址即MAC地址,若是是vmware克隆的虛擬機沒法啓動網卡能夠堅決果斷的刪除此項 IPADDR=10.0.0.8 #這是虛擬機橋接模式,局域網linux服務器的固定IP NETMASK=255.255.255.0 #子網掩碼,用來規劃網絡位和主機位,通常爲255.255.255.0 DNS1=202.106.0.20 #主DNS,這裏默認會覆蓋以及優先於/etc/resolv.conf DNS2=8.8.8.8 #第二個DNS,這裏默認會覆蓋以及優先於/etc/resolv.conf
經過軟件修改網卡:
1)輸入命令setup
2)Network configuration進入網卡配置文件
網卡生效
1)針對單一網卡
ifup eth0 啓動eth0網卡
ifdown eth0 停掉eth0網卡
2)針對全部網卡重啓
/etc/init.d/network restart
注意:
1,網卡配置裏的DNS優先於/etc/resolv.conf配置的,而且重啓網卡,會把/etc/resolv.conf裏的覆蓋
2,網絡若是沒有配置DNS,那麼在/etc/resolv.conf裏配置會生效,若是有多塊網卡(DHCP獲取方式)時候,可能會覆蓋/etc/resolv.conf裏已有配置
4.2 主機名變動
1)臨時修改主機名(重啓系統失效)
hostname 主機名
2)永久修改主機名
/etc/sysconfig/network
[root@chensiqi ~]# cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=chensiqi #修改這個
4.3 默認網關的更改
第一輩子效文件:
[root@chen ~]# grep -i gate /etc/sysconfig/network-scripts/ifcfg-eth0 GATEWAY=202.106.0.20
第二生效文件:
[root@chen ~]# grep -i gate /etc/sysconfig/network GATEWAY=202.106.0.20
第三:命令行優先,且臨時生效
route -n 查看路由規則
route add default gw 10.0.0.254 #添加路由規則
route del default gw 10.0.0.254 #刪除路由規則
route 功能不少,不只僅配置默認網關,網絡(靜態)路由
4.4 命令行配置ip別名輔助
[root@chen ~]# ifconfig eth0:0 192.168.197.244 netmask 255.255.255.0 up [root@chen ~]# ifconfig eth0 Link encap:Ethernet HWaddr 00:0C:29:CB:F9:C0 inet addr:192.168.197.133 Bcast:192.168.197.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fecb:f9c0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:816 errors:0 dropped:0 overruns:0 frame:0 TX packets:546 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:73249 (71.5 KiB) TX bytes:83087 (81.1 KiB) eth0:0 Link encap:Ethernet HWaddr 00:0C:29:CB:F9:C0 inet addr:192.168.197.244 Bcast:192.168.197.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric: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) [root@chen ~]#
linux一塊網卡能夠配置多個臨時的IP地址
五,已知端口查服務的多種方法
方法一:lsof
[root@chen ~]# lsof -i:22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1136 root 3u IPv4 12469 0t0 TCP *:ssh (LISTEN) sshd 1136 root 4u IPv6 12478 0t0 TCP *:ssh (LISTEN) sshd 1211 root 3r IPv4 13199 0t0 TCP www.test.com:ssh->localhost:51527 (ESTABLISHED)
知識擴展:文件已經被刪除,但進程還在佔用,致使磁盤空間不釋放,怎麼查找?
[root@chen ~]# lsof | grep del php-fpm 1165 root 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted) php-fpm 1166 nginx 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted) php-fpm 1167 nginx 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted) php-fpm 1168 nginx 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted) php-fpm 1169 nginx 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted) php-fpm 1170 nginx 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted)
方法二:netstat -lntup
[root@chen ~]# netstat -antup | grep 22 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1136/sshd tcp 0 0 192.168.197.133:22 192.168.197.1:51527 ESTABLISHED 1211/sshd tcp 0 0 :::22 :::* LISTEN 1136/sshd
六,網絡及服務故障的排查思路
例:假如http://www.cnblogs.com/chensiqiqi/ 網址打不開
第一步:查一下看看通不通
ping -c3 -i2 -s512 www.cnblogs.com icmp協議是否被禁止
-c:次數
-i:時間間隔
-s:發包大小
traceroute www.cnblogs.com 查看各個節點是否暢通
telnet www.cnblogs.com 80
檢查服務器WEB有沒有開啓,服務開沒開,以及防火牆有沒有擋住。
[root@chen ~]# telnet www.cnblogs.com 80 Trying 118.178.114.231... Connected to www.cnblogs.com. Escape character is '^]'. #一直卡在這裏就表明通的 [root@chen ~]# telnet www.cnblogs.com 800 Trying 118.178.114.231... #一直處在鏈接中就表明不通
綜上:若是不通
1,80服務沒開或端口不存在
2,服務被防火牆阻擋了
3,服務監聽的端口不在鏈接的IP上(鏈接被限定了鏈接IP)
4,運營商默認不開,申請開端口
七,企業面試題兩道
7.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病毒,核心交換機壞了,交換機環路,其餘人可否上網
(二)大面積不能上網思路:
路由器,ISP,核心交換機,ARP病毒,核心交換機壞了,交換機環路。
7.2 做爲linux運維,客戶反應打開的網站慢,如何排查?(運維角度)
(一)用戶個例仍是所有都如此
模擬用戶環境,進行訪問測試,若是沒有問題,就從客戶角度思考,若是本身測試一樣有問題,按下面思路排查
1,路是否通的問題
1)ping 網站地址,看看道路通不通
- 若是ping通,不丟包。就是服務有問題(服務宕機,服務過載)
- 若是ping通,但丟包。機房問題(帶寬不穩定,各個線路不穩定)
- 若是ping不通,那麼ping百度看看通不通,若是也不通,那仍是機房問題。
2)路由追蹤:看看從客戶端到服務器的線路節點是否有問題
traceroute -d(linux)
tracert -d(windows)
-d禁止反向解析(速度快)
2,機房業務是否OK
3)telnet www.baidu.com 80 檢查服務器WEB服務有沒有開啓以及防火牆有沒有擋住
nmap www.baidu.com -p 80
curl www.baidu.com 或wget www.baidu.com #至關於瀏覽器訪問
4)提供服務的服務器是否資源過載,服務器及服務鏈接數過多,負載高,CPU高,IO高等
3,外部問題
5)網站購買的帶寬滿了,經過流量監控服務查看
6)內鏈外鏈(調用外部網站網址有問題)
根據網站URL調式網站
a,google瀏覽器直接F12
b,火狐firebug等
沒有錯誤,只是有點警告(警告沒事)
有錯誤,讓開發看看是否是錯誤致使
我在作linux運維以前曾作過一段時間的產品開發,在工做中就遇到過由於代碼邏輯問題所致使的無限循環直接累癱瘓掉了服務器的案例,此時可從Linux日誌(windows日誌)或者瀏覽器檢查等手段進行查看。
4,其餘問題:
個別客戶自身,例如用戶的網絡線路和運營商網站帶寬線路不符(聯通VS電信)
5,集羣架構問題
web服務問題:
數據庫問題:
登陸數據庫看看是否有慢查詢語句show proceslist,調整MYSQL配置,優化SQL語句
存儲等問題:
是否是存儲服務器,如NFS,MFS的負載及磁盤IO高
7.3 真實的運維面試考卷
實戰教學筆記到了這裏基本上Linux運維相關的全部基礎核心能力知識就已經結束了。筆記和輔助訓練中出現的全部面試題或者企業案例均爲真實可靠,非我自主亂編,以上卷爲證。
八,合格的企業Linux運維必會網絡知識總結
- tcp/ip協議三次握手和四次斷開過程
- http協議的工做原理
- 機器沒法上網
- 網站打開慢
- DNS解析原理
- osi七層網絡模型
- route如何添加一個網絡路由?
- 如何查看已知端口對應的服務名?