第十九節 Linux相關網絡知識梳理
標簽(空格分隔): Linux實戰教學筆記-陳思齊
一,前言
一個運維有時也要和網絡打交道,所以具備最基本的網絡知識,對一個運維人員來說是必要的。但,對於我們的工作來說這些並不是重點,因此,我不可能從最基礎的網絡知識開始講起。本節內容更多是從一個梳理和總結的角度進行闡述。如若同學們遇到不懂,或不明白的地方,那么你要留心了,你有很多基礎性的網絡知識還不具備,我建議從網上有針對性的學習一下。
二,網絡基礎學習體系
思科課程體系的大致瀏覽(CCNA),雖然知識不多,培訓周期一般在1周左右,但涵蓋了大部分的知識內容,對於初步理解網絡知識,掌握網絡的相關配置,基本上已經非常滿足了,特別是系統運維人員。
第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可變子網的概念
三,網絡重點知識總結性梳理
3.1 OSI七層模型
層次 | 說明 | 功能/協議 |
---|---|---|
應用層 | 應用程序及借口,類似於公司的老板 | 提供應用程序的借口FTP telnet http pop3等 |
表示層 | 對數據進行轉換,加密和壓縮 | 將上層的數據進行轉換和編譯壓縮為標准的文件,如jpg,gif,ascii碼等 |
會話層 | 建立,管理和終止會話 | |
傳輸層 | 提供可靠的端到端的報文傳輸和差錯控制,實質上就是負責建立連接的 | TCP UDP 建立可靠和非可靠連接將上層的數據進行分段處理 |
網絡層 | 將分組從源端傳送到目的端,提供網絡互聯 | 實質上就是提供路由尋址(IP協議)將上層分段的數據進行打包 |
數據鏈路層 | 將分組數據封裝成幀,提供節點到節點的傳輸 | 幀就是本地局域網中傳輸數據的一個單元,負責在局域網內部的點對點的尋址 |
物理層 | 在媒體上傳輸比特 | 就是底層的鏈路介質的規范 |
特點說明:
1,OSI模型每層都有自己的功能集
2,層與層之間相互獨立又互相依靠
3,上層依賴於下層,下層為上層提供服務。
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之間可以開始傳輸數據了。
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如何添加一個網絡路由?
- 如何查看已知端口對應的服務名?