網(wǎng)絡(luò)工程師必懂的網(wǎng)絡(luò)基礎(chǔ)知識(附網(wǎng)工系統(tǒng)知識架構(gòu)圖)

文章目錄
1 ip地址
2 網(wǎng)絡(luò)單位
3 網(wǎng)絡(luò)模型
4 網(wǎng)線
5 交換機(jī)
6 路由
7 協(xié)議
8 思科路由
9 三層交換機(jī)
10 路由協(xié)議
11 ACL(訪問控制列表)
12 NAT(網(wǎng)絡(luò)轉(zhuǎn)發(fā))
13. 網(wǎng)絡(luò)
計(jì)算機(jī)網(wǎng)絡(luò)(NETWORK 部分)
1 ip地址
1.1 ip 地址的作用?ip 地址分類?
ip 地址的作用:用來標(biāo)識一個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò)地址。
2 / 10
ip 地址分類:
A 類 1-126
B 類 128-191
C 類 192-223
D 類 224-239(科研)
E 類 240-254(組播)
1.2. 子網(wǎng)掩碼的作用?默認(rèn) A B C 類子網(wǎng)掩碼?
子網(wǎng)掩碼的作用:用來標(biāo)識 ip 地址的網(wǎng)絡(luò)位和主機(jī)位。
A 類:255.0.0.0
B 類:255.255.0.0
C 類:255.255.255.0
1.3. 網(wǎng)關(guān)的作用?
網(wǎng)關(guān)的作用:從一個(gè)網(wǎng)絡(luò)到另一個(gè)網(wǎng)絡(luò)的關(guān)口。
1.4. 公有地址與私有地址的作用以及范圍?
公有地址的作用:公有地址也可以稱為公網(wǎng)地址,通過他可以直接訪問因特網(wǎng),他是廣域網(wǎng)范疇內(nèi)
的。
私有地址的作用:私有地址也可以稱為專網(wǎng)地址,專門為組織機(jī)構(gòu)內(nèi)部使用,他是局域網(wǎng)范疇內(nèi)的,
出了所在局域網(wǎng)是無法 訪問因特網(wǎng)的。
私有地址的范圍:
A:類 10.0.0.1-10.255.255.254
B:類 172.16.0.1-172.16.255.254
C:類 192.168.0.1-192.168.255.254
1.5 查看 Windows 主機(jī) IP 地址的,如何用命令查看 windows 主機(jī) MAC 地址?
在 windows 中查看 ip:右擊網(wǎng)絡(luò)圖標(biāo)-屬性-更改適配器設(shè)置-雙擊本地連接-單擊“詳細(xì)信息”或者
開始-命令提示符-運(yùn)行?ipconfig
在 linux 中查看 ip:直接運(yùn)行?ifconfig
查看 mac 地址:開始-命令提示符-運(yùn)行?ipconfig/all。
2 網(wǎng)絡(luò)單位
2.1. 計(jì)算機(jī)網(wǎng)絡(luò)的功能?
網(wǎng)絡(luò)的功能:數(shù)據(jù)通信 資源共享 增加可靠性 提高系統(tǒng)處理能力
2.2. 計(jì)算機(jī)存儲(chǔ)單位的換算?
計(jì)算機(jī)存儲(chǔ)可以用位和字節(jié)計(jì)量
8 位
1 字節(jié)
1024 字節(jié) 1KB
1024KB 1MB
1024MB 1GB
1024GB 1TB
3 網(wǎng)絡(luò)模型
3.1OSI 參考模型一共有七層從下至上分別為 :
物理層-數(shù)據(jù)鏈路層-網(wǎng)絡(luò)層-傳輸層-會(huì)話層-表示層-應(yīng)用層
每一層的意義:
物理層:建立,維護(hù),斷開物理連接,定義了接口及介質(zhì),實(shí)現(xiàn)了比特流的傳輸。
數(shù)據(jù)鏈路層:建立邏輯鏈接,進(jìn)行硬件地址尋址,差錯(cuò)校驗(yàn)等功能,通過 mac 地址實(shí)現(xiàn)數(shù)據(jù)的通信,
幀包裝,幀傳輸,幀同步。交換機(jī)工作在數(shù)據(jù)鏈路層。網(wǎng)絡(luò)層:進(jìn)行邏輯地址尋址,實(shí)現(xiàn)不同網(wǎng)絡(luò)之間的通信,定義了 ip 地址,為數(shù)據(jù)傳輸選擇最佳路 徑,路由器工作在網(wǎng)絡(luò)層。
傳輸層:定義傳輸數(shù)據(jù)的協(xié)議端口號,以及流控和差錯(cuò)校驗(yàn),實(shí)現(xiàn)了程序與程序的互連,可靠與不 可靠的傳輸。
會(huì)話層:建立,管理,中止會(huì)話,例如斷點(diǎn)續(xù)傳。
表示層:數(shù)據(jù)的表現(xiàn)形式,如加密,壓縮。
應(yīng)用層:網(wǎng)絡(luò)服務(wù)與最終用戶的一個(gè)借口
3.2 OSI 七層參考模型下四層的數(shù)據(jù)單元
傳輸層 段 segment
網(wǎng)絡(luò)層 包 packet
數(shù)據(jù)鏈路層 幀 frame
物理層 比特 bit
3.3 tcp/ip 協(xié)議有哪幾層?名字是?
tcp/ip 協(xié)議由五層或者四層組成:
網(wǎng)絡(luò)接口層: 負(fù)責(zé)網(wǎng)絡(luò)包在物理網(wǎng)絡(luò)中的傳輸,比如 MAC 尋址、錯(cuò)誤偵測以及通過網(wǎng)卡傳輸網(wǎng)絡(luò)幀等。
網(wǎng)絡(luò)層: 負(fù)責(zé)網(wǎng)絡(luò)包的封裝、尋址和路由,比如 IP、ICMP 等。
傳輸層: 負(fù)責(zé)端到端的通信,比如 TCP、UDP 等。
應(yīng)用層: 負(fù)責(zé)向用戶提供一組應(yīng)用程序,比如 HTTP、FTP、DNS 等。

3.4 tcp/ip 五層劃分
物理層
數(shù)據(jù)鏈路層
網(wǎng)絡(luò)層
傳輸層
應(yīng)用層
3.5 應(yīng)用、傳輸、網(wǎng)絡(luò)層的協(xié)議?
應(yīng)用層:HTTP,https,FTP,TFTP,SMTP,POP3,SNMP,DNS,telnet
傳輸層:TCP,UDP
網(wǎng)絡(luò)層:ICMP,IGMP,IP,ARP,RARP
3.6 TCP/IP 五層每一層的設(shè)備
應(yīng)用層 計(jì)算機(jī)
傳輸層 防火墻
網(wǎng)絡(luò)層 路由器
數(shù)據(jù)鏈路層 交換機(jī)
物理層
網(wǎng)卡
4 網(wǎng)線
4.1 T568A 和 T568B 的順序?哪些負(fù)責(zé)發(fā)送,哪些負(fù)責(zé)接收?
T568A 線序:白綠,綠,白橙,藍(lán),白藍(lán),橙,白棕,棕
T568B 線序:白橙,橙,白綠,藍(lán),白藍(lán),綠,白棕,棕
1,2 發(fā)送,3,6 接收
4.2 什么叫標(biāo)準(zhǔn)網(wǎng)線?什么叫交叉網(wǎng)線?分別在什么情況下使用?
標(biāo)準(zhǔn)網(wǎng)線(直連線或者直通線):用于連接不同設(shè)備(A-A,B-B)
交叉網(wǎng)線:用于連接相同設(shè)備 (A-B)
5 交換機(jī)
5.1 MAC 地址長度多少位?多少字節(jié)?
mac 地址長度 48 位(6 字節(jié)),前 24 位代表廠商,后 24 為代表網(wǎng)卡編號
5.2 交換機(jī)工作原理?
1.初始狀態(tài)
2.根據(jù)源 mac 地址學(xué)習(xí)
3.除源端口外的端口廣播未知數(shù)據(jù)幀
4.接收方回應(yīng)
5.交換機(jī)實(shí)現(xiàn)單播通信(轉(zhuǎn)發(fā))
更新:老化時(shí)間 300 秒交換機(jī)對應(yīng)端口的 mac 地址發(fā)生變化時(shí)同樣進(jìn)行更新
5.3 目前常用的 Cisco 交換機(jī)有哪些型號?價(jià)格大約是多少?
cisco2960 系列交換機(jī) 5k 元左右
cisco3560 系列交換機(jī) 2w 元左右
cisco4500 系列交換機(jī) 5w 元左右
cisco6500 系列交換機(jī) 20w 左右
5.4 交換機(jī)可以設(shè)置網(wǎng)關(guān)嗎?如何設(shè)置?給交換機(jī)配置網(wǎng)關(guān)的目的?
交換機(jī)可以設(shè)置網(wǎng)關(guān)
在全局配置模式下:
ip default-gateway 網(wǎng)關(guān) IP 地址
交換機(jī)配置網(wǎng)關(guān)的目的是實(shí)現(xiàn)不同網(wǎng)段的計(jì)算機(jī)能夠?qū)υ摻粨Q機(jī)遠(yuǎn)程管理。
6 路由
6.1 子網(wǎng)掩碼
作用:用于區(qū)分 IP 地址的網(wǎng)絡(luò)位與主機(jī)位
計(jì)算:網(wǎng)絡(luò)位用連續(xù)的 1,主機(jī)位用連續(xù)的 0 表示
6.2 網(wǎng)絡(luò) ID
網(wǎng)絡(luò)位的 IP 地址不變,主機(jī)位用連續(xù)的 0 表示
6.3 廣播地址
IP 地址的廣播地址計(jì)算:網(wǎng)絡(luò)位的 IP 不變,主機(jī)位用連續(xù)的 1 表示。
IP 地址的廣播地址:為 IP 地址網(wǎng)段的最后一個(gè)地址(即該網(wǎng)段的最大值)
6.4 可用主機(jī) IP 個(gè)數(shù)的計(jì)算
2 主機(jī)位次方-2
6.5 什么是路由?路由器的工作原理?
路由:跨越從源主機(jī)到目標(biāo)主機(jī)的一個(gè)互聯(lián)網(wǎng)絡(luò)來轉(zhuǎn)發(fā)數(shù)據(jù)包的過程。
路由器的工作原理:根據(jù)路由表選擇最佳路徑,每個(gè)路由器都維護(hù)著一張路由表,這是路由器轉(zhuǎn)發(fā)
數(shù)據(jù)包的關(guān)鍵,每條路由表記錄指明了到達(dá)某個(gè)子網(wǎng)或主機(jī)應(yīng)從路由器的哪個(gè)物理端口發(fā)送,通過
此端口可到達(dá)該路徑的下一個(gè)路由器的地址。
6.6 路由表的形成?
路由表的獲得,直連路由:配置 IP 地址,端口 UP 狀態(tài),形成直連路由。
非直連網(wǎng)段:需要靜態(tài)路由或動(dòng)態(tài)路由,將網(wǎng)段添加到路由表中
6.7 靜態(tài)路由與動(dòng)態(tài)路由的特點(diǎn)?列舉幾個(gè)常見的動(dòng)態(tài)路由協(xié)議?
靜態(tài)路由特點(diǎn):由管理員手工配置的,是單向的,因此需要在兩個(gè)網(wǎng)絡(luò)之間的邊緣路由器上需要雙
方對指,否則就會(huì)造成流量有去無回,缺乏靈活性,適用于小型網(wǎng)絡(luò)。
動(dòng)態(tài)路由的特點(diǎn)動(dòng)態(tài)路由是網(wǎng)絡(luò)中的路由器之間相互通信,傳遞路由信息,利用收到的路由信息更
新路由表的過程,是基于某種路由協(xié)議來實(shí)現(xiàn)的。常見的路由協(xié)議類型有:距離矢量路由協(xié)議(如
RIP)和鏈路狀態(tài)路由協(xié)議(如 OSPF)。路由協(xié)議定義了路由器在與其他路由器通信時(shí)的一些規(guī)則。
6.8 什么是浮動(dòng)路由?什么是缺省路由?
浮動(dòng)路由:配置一個(gè)管理距離更大的靜態(tài)路由,作為應(yīng)急觸發(fā)的備份路徑,在主路由有效的情況下,
浮動(dòng)路由不會(huì)出現(xiàn)在路由表中。
缺省路由:缺省路由是一種特殊的靜態(tài)路由,杜宇末梢網(wǎng)絡(luò)的主機(jī)來說,也被稱為“默認(rèn)網(wǎng)關(guān)”
缺省路由的目標(biāo)網(wǎng)絡(luò)為 0.0.0.0/0.0.0.0 ,可匹配任何目標(biāo)地址,只有當(dāng)從路由表中找不到任何明
確的路由條目時(shí),才會(huì)使用缺省路由。
6.9 訪問一臺(tái)主機(jī)訪問不了請問如何排錯(cuò)?具體思路是哪些?
兩臺(tái)主機(jī)之間訪問不了可能是開啟了防火墻或者兩臺(tái)主機(jī)沒有在一個(gè)網(wǎng)段,是不是有正確的網(wǎng)關(guān)地
址,主機(jī)跟網(wǎng)關(guān)直間是否能夠 ping 通,dns 是否能夠正常解析。
解決方法:
1.檢查防火墻是否關(guān)閉,查看兩個(gè)主機(jī)是否在一個(gè)網(wǎng)絡(luò)當(dāng)中。
2.ping 網(wǎng)關(guān)是否能通;
3.用 dns 解析一下域名是否能夠正常的解析。
7 協(xié)議
7.1 傳輸層的協(xié)議有哪些?,分別是什么特點(diǎn)?
TCP:傳輸控制協(xié)議,可靠的,面向連接的協(xié)議,傳輸效率低
UDP:用戶數(shù)據(jù)包協(xié)議 不可靠的,無連接的服務(wù),傳輸效率高。
7.2 簡單描述一下 TCP 連接與斷開?
tcp 通過三次握手鏈接,通過四次斷開
syn:建立連接時(shí)將這個(gè)值設(shè)為 1
ACK:當(dāng) ACK=1 表示確認(rèn),ACK=0 表示確認(rèn)無效
FIN:FIN=1 表示斷開連接請求
7.3 請簡單描述一下常見的應(yīng)用層協(xié)議都有哪些、傳輸層使用的什么協(xié)議,端口號多少?
DNS-TCP 或 UDP 端口號 53
HTTP-TCP 端口號 80
HTTPS-TCP 端口號 443
SMTP-TCP 端口號 25
POP3-TCP 端口號 110
TELNET-TCP 端口號 23
FTP-TCP 端口號 21 和 20
TFTP-UDP 端口號 69
8 思科路由
8.1 什么是 Vlan?Vlan 的作用?默認(rèn)交換機(jī)的接口在那個(gè) Vlan 中? Vlan 的種類 ?
Vlan:虛擬局域網(wǎng)
作用:廣播控制、提高安全性、帶寬利用、減少延遲
默認(rèn)交換機(jī)接口在 vlan1 中
vlan 的種類:基于端口劃分的靜態(tài) vlan 和基于 mac 地址劃分的動(dòng)態(tài) vlan
8.2 什么是 Trunk?Trunk 的模式有哪些?
trunk:中繼鏈路,可以承載多個(gè) vlan
trunk 模式:
接入(Access)
干道(Trunk)
動(dòng)態(tài)企望(desirable)主動(dòng)
動(dòng)態(tài)自動(dòng)(auto ) 被動(dòng)
8.3 ISL 和 802.1Q 的異同
相同點(diǎn):都是顯示了 VLAN 的信息
不同點(diǎn):
IEEE 802.1Q 是公有的標(biāo)記方式,ISL 是 Cisco 私有的
ISL 采用外部標(biāo)記的方法,802.1Q 采用內(nèi)部標(biāo)記的方法
ISL 標(biāo)記的長度為 30 字節(jié),802.1Q 標(biāo)記的長度為 4 字節(jié)
8.4 什么是 EtherChannel?有什么作用?
Eternetchannel(以太網(wǎng)通道)功能:多條線路負(fù)載均衡,帶寬提高,當(dāng)一條線路失效時(shí),其他線路通
信,不會(huì)丟包。
8.5 什么是 DHCP?DHCP 的作用?
DHCP:動(dòng)態(tài)主機(jī)配置協(xié)
作用:給客戶機(jī)自動(dòng)分配 ip 地址
9 三層交換機(jī)
9.1 什么是三層交換機(jī)?二層交換與三層交換和路由有什么區(qū)別?
三層交換機(jī):具有網(wǎng)絡(luò)層路由功能的交換機(jī)稱為三層交換機(jī)
區(qū)別:
二層交換機(jī):屬于數(shù)據(jù)鏈路層設(shè)備,根據(jù) MAC 地址表實(shí)現(xiàn)數(shù)據(jù)幀的轉(zhuǎn)發(fā)。
三層交換機(jī): 三層交換技術(shù)就是將路由技術(shù)與交換技術(shù)合二為一的技術(shù)。在對第一個(gè)數(shù)據(jù)流進(jìn)行路由后,
它將會(huì)產(chǎn)生一個(gè) MAC 地址與 IP 地址的映射表,當(dāng)同樣的數(shù)據(jù)流再次通過時(shí),將根據(jù)此表直接從二層通
過而不是再次路由,從而消除了路由器進(jìn)行路由選擇而造成網(wǎng)絡(luò)的延遲,提高了數(shù)據(jù)包轉(zhuǎn)發(fā)的效率。
路由器:路由器工作于 OSI 七層協(xié)議中的第三層,其主要任務(wù)是接收來自一個(gè)網(wǎng)絡(luò)接口的數(shù)據(jù)包,根據(jù)
其中所含的目的地址,決定轉(zhuǎn)發(fā)到下一個(gè)目的地址。
9.2 按應(yīng)用范圍的不同,路由協(xié)議的類?
按應(yīng)用范圍的不同,路由協(xié)議可分為兩類
1.在一個(gè) AS 內(nèi)的路由協(xié)議稱為內(nèi)部網(wǎng)關(guān)協(xié)議,內(nèi)部網(wǎng)關(guān)路由協(xié)議有以下幾種:RIP-1,RIP-2,IGRP,
EIGRP,IS-IS 和 OSPF。
2.AS 之間的路由協(xié)議稱為外部網(wǎng)關(guān)協(xié)議。
外部網(wǎng)關(guān)協(xié)議(也叫域 間路由協(xié)議)。域間路由協(xié)議有兩種:外部網(wǎng)關(guān)協(xié)議(EGP)和邊界網(wǎng)關(guān)協(xié)議(BGP)
9.3 動(dòng)態(tài)路由按照算法分哪幾類?分別舉例說明?
動(dòng)態(tài)路由按照算法可以分為:距離矢量路由協(xié)議,鏈路狀態(tài)路由協(xié)議
距離矢量路由協(xié)議:依據(jù)從源網(wǎng)絡(luò)到目標(biāo)網(wǎng)絡(luò)所經(jīng)過的路由的個(gè)數(shù)選擇路由 RIP,IGRP
鏈路狀態(tài)路由協(xié)議:綜合考慮從源網(wǎng)絡(luò)到目標(biāo)網(wǎng)絡(luò)的各條路徑的情況選擇路由 OSPF,IS-IS
10 路由協(xié)議
10.1 什么是 HSRP?工作原理是?
HSRP:熱備份路由協(xié)議
HSRP 是 cisco 私有協(xié)議,確保了當(dāng)網(wǎng)絡(luò)邊緣設(shè)備或接入鏈路出現(xiàn)故障時(shí),用戶通信能迅速并透明地恢復(fù),
以此為 IP 網(wǎng)絡(luò)提供冗余行。通過使用同一個(gè)虛擬 IP 地址和虛擬 MAC 地址,LAN 網(wǎng)段上的兩臺(tái)或者多臺(tái)
路由器可以作為一臺(tái)虛擬路由器對外提供服務(wù)。 HSRP 使組內(nèi)的 cisco 路由器能互相監(jiān)視對方的運(yùn)行狀態(tài)。
10.2 什么是 STP?作用?
STP:生成樹協(xié)議
作用:邏輯上斷開環(huán)路,防止廣播風(fēng)暴的產(chǎn)生,當(dāng)線路故障,阻塞接口被激活,恢復(fù)通信,起備份線路
的作用。
11 ACL(訪問控制列表)
什么是 ACL?
ACL(訪問控制列表):讀取第三層,第四層包頭信息,根據(jù)預(yù)先定義好的規(guī)則對包進(jìn)行過濾。
通配符掩碼的作用?
通配符掩碼:也叫做反碼。用二進(jìn)制數(shù) 0 和 1 表示,如果某位為 1,表明這一位不需要進(jìn)行匹配操作,
如果為 0 表明需要嚴(yán)格匹配。
12 NAT(網(wǎng)絡(luò)轉(zhuǎn)發(fā))
12.1 什么是 NAT?有哪些實(shí)現(xiàn)方式?
NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換):
通過將內(nèi)部網(wǎng)絡(luò)的私有 IP 地址翻譯成全球唯一的公有 IP 地址,使內(nèi)部網(wǎng)絡(luò)可以連接到互聯(lián)網(wǎng)等外部網(wǎng)絡(luò)上。
NAT 的實(shí)現(xiàn)方式:
靜態(tài)轉(zhuǎn)換;IP 地址的對應(yīng)關(guān)系是一對一,而且是不變的,借助靜態(tài)轉(zhuǎn)換,能實(shí)現(xiàn)外部網(wǎng)絡(luò)中某些特定服 務(wù)器的訪問。
動(dòng)態(tài)轉(zhuǎn)換:IP 地址的對應(yīng)關(guān)系是不確定的,而是隨機(jī)的,所有被授權(quán)訪問互聯(lián)網(wǎng)的私有地址可以隨機(jī)的 轉(zhuǎn)換為任何指定的合法的外部 IP 地址
端口多路復(fù)用:通過改變外出數(shù)據(jù)包的源 IP 地址和源端口并進(jìn)行端口轉(zhuǎn)換,內(nèi)部網(wǎng)絡(luò)的所有主機(jī)均可 共享一個(gè)合法的 IP
地址實(shí)現(xiàn)互聯(lián)網(wǎng)的訪問,節(jié)約 IP
13. 網(wǎng)絡(luò)
13.1 Linux 網(wǎng)絡(luò)棧
有了 TCP/IP 模型后,在進(jìn)行網(wǎng)絡(luò)傳輸時(shí),數(shù)據(jù)包就會(huì)按照協(xié)議棧,對上一層發(fā)來的數(shù)據(jù)進(jìn)行逐層處理;然后封裝上該層的協(xié)議頭,再發(fā)送給下一層。當(dāng)然,網(wǎng)絡(luò)包在每一層的處理邏輯,都取決于各層采用的網(wǎng)絡(luò)協(xié)議。比如在應(yīng)用層,一個(gè)提供 REST API 的應(yīng)用,可以使用 HTTP 協(xié)議,把它需要傳輸?shù)?JSON 數(shù)據(jù)封裝到 HTTP 協(xié)議中,然后向下傳遞給 TCP 層。而封裝做的事情就很簡單了,只是在原來的負(fù)載前后,增加固定格式的元數(shù)據(jù),原始的負(fù)載數(shù)據(jù)并不會(huì)被修改。比如,以通過 TCP 協(xié)議通信的網(wǎng)絡(luò)包為例,通過下面這張圖,我們可以看到,應(yīng)用程序數(shù)據(jù)在每個(gè)層的封裝格式。

其中:
傳輸層在應(yīng)用程序數(shù)據(jù)前面增加了 TCP 頭;
網(wǎng)絡(luò)層在 TCP 數(shù)據(jù)包前增加了 IP 頭;
而網(wǎng)絡(luò)接口層,又在 IP 數(shù)據(jù)包前后分別增加了幀頭和幀尾。
這些新增的頭部和尾部,都按照特定的協(xié)議格式填充,想了解具體格式,你可以查看協(xié)議的文檔。 比如,你可以查看這里,了解 TCP 頭的格式。這些新增的頭部和尾部,增加了網(wǎng)絡(luò)包的大小,但我們都知道,物理鏈路中并不能傳輸任意大小的數(shù)據(jù)包。網(wǎng)絡(luò)接口配置的最大傳輸單元(MTU),就規(guī)定了最大的 IP 包大小。在我們最常用的以太網(wǎng)中,MTU 默認(rèn)值是 1500(這也是 Linux 的默認(rèn)值)。一旦網(wǎng)絡(luò)包超過 MTU 的大小,就會(huì)在網(wǎng)絡(luò)層分片,以保證分片后的 IP 包不大于 MTU 值。顯然,MTU 越大,需要的分包也就越少,自然,網(wǎng)絡(luò)吞吐能力就越好。
就是 Linux 通用 IP 網(wǎng)絡(luò)棧的示意圖:

我們從上到下來看這個(gè)網(wǎng)絡(luò)棧,你可以發(fā)現(xiàn),
最上層的應(yīng)用程序,需要通過系統(tǒng)調(diào)用,來跟套接字接口進(jìn)行交互;
套接字的下面,就是我們前面提到的傳輸層、網(wǎng)絡(luò)層和網(wǎng)絡(luò)接口層;
最底層,則是網(wǎng)卡驅(qū)動(dòng)程序以及物理網(wǎng)卡設(shè)備。
13.2 網(wǎng)絡(luò)包的接收流程
當(dāng)一個(gè)網(wǎng)絡(luò)幀到達(dá)網(wǎng)卡后,網(wǎng)卡會(huì)通過 DMA 方式,把這個(gè)網(wǎng)絡(luò)包放到收包隊(duì)列中;然后通過硬中斷,告訴中斷處理程序已經(jīng)收到了網(wǎng)絡(luò)包。接著,網(wǎng)卡中斷處理程序會(huì)為網(wǎng)絡(luò)幀分配內(nèi)核數(shù)據(jù)結(jié)構(gòu)(sk_buff),并將其拷貝到 sk_buff 緩沖區(qū)中;然后再通過軟中斷,通知內(nèi)核收到了新的網(wǎng)絡(luò)幀。
接下來,內(nèi)核協(xié)議棧從緩沖區(qū)中取出網(wǎng)絡(luò)幀,并通過網(wǎng)絡(luò)協(xié)議棧,從下到上逐層處理這個(gè)網(wǎng)絡(luò)幀。比如:
在鏈路層檢查報(bào)文的合法性,找出上層協(xié)議的類型(比如 IPv4 還是 IPv6),再去掉幀頭、幀尾,然后交給網(wǎng)絡(luò)層。
網(wǎng)絡(luò)層取出 IP 頭,判斷網(wǎng)絡(luò)包下一步的走向,比如是交給上層處理還是轉(zhuǎn)發(fā)。當(dāng)網(wǎng)絡(luò)層確認(rèn)這個(gè)包是要發(fā)送到本機(jī)后,就會(huì)取出上層協(xié)議的類型(比如TCP 還是 UDP),去掉 IP 頭,再交給傳輸層處理。
傳輸層取出 TCP 頭或者 UDP 頭后,根據(jù) < 源 IP、源端口、目的 IP、目的端口 > 四元組作為標(biāo)識,找出對應(yīng)的Socket,并把數(shù)據(jù)拷貝到 Socket 的接收緩存中。
最后,應(yīng)用程序就可以使用 Socket 接口,讀取到新接收到的數(shù)據(jù)了。為了更清晰表示這個(gè)流程,我畫了一張圖,這張圖的左半部分表示接收流程,而圖中的粉色箭頭則表示網(wǎng)絡(luò)包的處理路徑。

13.3 網(wǎng)絡(luò)包的發(fā)送流程
了解網(wǎng)絡(luò)包的接收流程后,就很容易理解網(wǎng)絡(luò)包的發(fā)送流程。網(wǎng)絡(luò)包的發(fā)送流程就是上圖的右半部分,很容易發(fā)現(xiàn),網(wǎng)絡(luò)包的發(fā)送方向,正好跟接收方向相反。
首先,應(yīng)用程序調(diào)用 Socket API(比如sendmsg)發(fā)送網(wǎng)絡(luò)包。由于這是一個(gè)系統(tǒng)調(diào)用,所以會(huì)陷入到內(nèi)核態(tài)的套接字層中。套接字層會(huì)把數(shù)據(jù)包放到 Socket 發(fā)送緩沖區(qū)中。
接下來,網(wǎng)絡(luò)協(xié)議棧從 Socket 發(fā)送緩沖區(qū)中,取出數(shù)據(jù)包;再按照 TCP/IP棧,從上到下逐層處理。比如,傳輸層和網(wǎng)絡(luò)層,分別為其增加 TCP 頭和 IP 頭,執(zhí)行路由查找確認(rèn)下一跳的 IP,并按照 MTU大小進(jìn)行分片。
分片后的網(wǎng)絡(luò)包,再送到網(wǎng)絡(luò)接口層,進(jìn)行物理地址尋址,以找到下一跳的 MAC 地址。然后添加幀頭和幀尾,放到發(fā)包隊(duì)列中。
這一切完成后,會(huì)有軟中斷通知驅(qū)動(dòng)程序:發(fā)包隊(duì)列中有新的網(wǎng)絡(luò)幀需要發(fā)送。最后,驅(qū)動(dòng)程序通過 DMA
,從發(fā)包隊(duì)列中讀出網(wǎng)絡(luò)幀,并通過物理網(wǎng)卡把它發(fā)送出去。
13.4 性能指標(biāo)
帶寬
,表示鏈路的最大傳輸速率,單位通常為 b/s (比特 / 秒)。吞吐量
,表示單位時(shí)間內(nèi)成功傳輸?shù)臄?shù)據(jù)量,單位通常為 b/s(比特 / 秒)或者 B/s(字節(jié) / 秒)。吞吐量受帶寬限制,而吞吐量 /帶寬,也就是該網(wǎng)絡(luò)的使用率。延時(shí)
,表示從網(wǎng)絡(luò)請求發(fā)出后,一直到收到遠(yuǎn)端響應(yīng),所需要的時(shí)間延遲。在不同場景中,這一指標(biāo)可能會(huì)有不同含義。比如,它可以表示,建立連接需要的時(shí)間(比如TCP 握手延時(shí)),或一個(gè)數(shù)據(jù)包往返所需的時(shí)間(比如 RTT)。PPS
,是 Packet Per Second(包 / 秒)的縮寫,表示以網(wǎng)絡(luò)包為單位的傳輸速率。PPS通常用來評估網(wǎng)絡(luò)的轉(zhuǎn)發(fā)能力,比如硬件交換機(jī),通常可以達(dá)到線性轉(zhuǎn)發(fā)(即 PPS 可以達(dá)到或者接近理論最大值)。而基于 Linux服務(wù)器的轉(zhuǎn)發(fā),則容易受網(wǎng)絡(luò)包大小的影響。除了這些指標(biāo),
網(wǎng)絡(luò)的可用性
(網(wǎng)絡(luò)能否正常通信)、并發(fā)連接數(shù)
(TCP 連接數(shù)量)、丟包率
(丟包百分比)、重傳率
(重新傳輸?shù)木W(wǎng)絡(luò)包比例)等也是常用的性能指標(biāo)。
13.5 網(wǎng)絡(luò)配置
分析網(wǎng)絡(luò)問題的第一步,通常是查看網(wǎng)絡(luò)接口的配置和狀態(tài)。你可以使用 ifconfig 或者 ip 命令,來查看網(wǎng)絡(luò)的配置。我個(gè)人更推薦使用 ip 工具,因?yàn)樗峁┝烁S富的功能和更易用的接口。ifconfig
?和?ip
?分別屬于軟件包?net-tools
?和?iproute2
,iproute2 是 net-tools 的下一代。通常情況下它們會(huì)在發(fā)行版中默認(rèn)安裝。但如果你找不到 ifconfig 或者 ip 命令,可以安裝這兩個(gè)軟件包。
$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
? ? ?inet 10.240.0.30 netmask 255.240.0.0 broadcast 10.255.255.255
? ? ?inet6 fe80::20d:3aff:fe07:cf2a prefixlen 64 scopeid 0x20<link>
? ? ?ether 78:0d:3a:07:cf:3a txqueuelen 1000 (Ethernet)
? ? ?RX packets 40809142 bytes 9542369803 (9.5 GB)
? ? ?RX errors 0 dropped 0 overruns 0 frame 0
? ? ?TX packets 32637401 bytes 4815573306 (4.8 GB)
? ? ?TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
$ ip -s addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
?link/ether 78:0d:3a:07:cf:3a brd ff:ff:ff:ff:ff:ff
?inet 10.240.0.30/12 brd 10.255.255.255 scope global eth0
? ? ?valid_lft forever preferred_lft forever
?inet6 fe80::20d:3aff:fe07:cf2a/64 scope link
? ? ?valid_lft forever preferred_lft forever
?RX: bytes packets errors dropped overrun mcast
? 9542432350 40809397 0 ? ? ? 0 ? ? ? 0 ? ? ? 193
?TX: bytes packets errors dropped carrier collsns
? 4815625265 32637658 0 ? ? ? 0 ? ? ? 0 ? ? ? 0
它們都包括了網(wǎng)絡(luò)接口的狀態(tài)標(biāo)志、MTU 大小、IP、子網(wǎng)、MAC 地址以及網(wǎng)絡(luò)包收發(fā)的統(tǒng)計(jì)信息。
第一,網(wǎng)絡(luò)接口的狀態(tài)標(biāo)志。ifconfig 輸出中的?RUNNING
?,或 ip 輸出中的?LOWER_UP
?,都表示物理網(wǎng)絡(luò)是連通的,即網(wǎng)卡已經(jīng)連接到了交換機(jī)或者路由器中。如果你看不到它們,通常表示網(wǎng)線被拔掉了。
第二,MTU 的大小。MTU 默認(rèn)大小是?1500
,根據(jù)網(wǎng)絡(luò)架構(gòu)的不同(比如是否使用了 VXLAN 等疊加網(wǎng)絡(luò)),你可能需要調(diào)大或者調(diào)小 MTU 的數(shù)值。
第三,網(wǎng)絡(luò)接口的 IP 地址、子網(wǎng)以及 MAC 地址。這些都是保障網(wǎng)絡(luò)功能正常工作所必需的,你需要確保配置正確。
第四,網(wǎng)絡(luò)收發(fā)的字節(jié)數(shù)、包數(shù)、錯(cuò)誤數(shù)以及丟包情況,特別是 TX 和 RX 部分的?errors
、dropped
、overruns
、carrier
?以及?collisions
?等指標(biāo)不為 0 時(shí),通常表示出現(xiàn)了網(wǎng)絡(luò) I/O 問題。其中:
errors
?表示發(fā)生錯(cuò)誤的數(shù)據(jù)包數(shù),比如校驗(yàn)錯(cuò)誤、幀同步錯(cuò)誤等;dropped
?表示丟棄的數(shù)據(jù)包數(shù),即數(shù)據(jù)包已經(jīng)收到了 RingBuffer
,但因?yàn)閮?nèi)存不足等原因丟包;overruns 表示超限數(shù)據(jù)包數(shù),即網(wǎng)絡(luò) I/O 速度過快,導(dǎo)致 Ring Buffer中的數(shù)據(jù)包來不及處理(隊(duì)列滿)而導(dǎo)致的丟包;carrier
?表示發(fā)生 carrirer錯(cuò)誤的數(shù)據(jù)包數(shù),比如雙工模式不匹配、物理電纜出現(xiàn)問題等;collisions
?表示碰撞數(shù)據(jù)包數(shù)。
13.6 套接字信息
ifconfig 和 ip 只顯示了網(wǎng)絡(luò)接口收發(fā)數(shù)據(jù)包的統(tǒng)計(jì)信息,但在實(shí)際的性能問題中,網(wǎng)絡(luò)協(xié)議棧中的統(tǒng)計(jì)信息,我們也必須關(guān)注。你可以用?netstat?或者?ss?,來查看套接字、網(wǎng)絡(luò)棧、網(wǎng)絡(luò)接口以及路由表的信息。
# head -n 3 表示只顯示前面3行
# -l 表示只顯示監(jiān)聽套接字
# -n 表示顯示數(shù)字地址和端口(而不是名字)
# -p 表示顯示進(jìn)程信息
$ netstat -nlp | head -n 3
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address ? ? ? ? ? Foreign Address ? ? ? ? State ? ? ? PID/Program name
tcp ? ? ? ?0 ? ? ?0 127.0.0.53:53 ? ? ? ? ? 0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?840/systemd-resolve
# -l 表示只顯示監(jiān)聽套接字
# -t 表示只顯示 TCP 套接字
# -n 表示顯示數(shù)字地址和端口(而不是名字)
# -p 表示顯示進(jìn)程信息
$ ss -ltnp | head -n 3
State ? ?Recv-Q ? ?Send-Q ? ? ? ?Local Address:Port ? ? ? ?Peer Address:Port
LISTEN ? 0 ? ? ? ? 128 ? ? ? ? ? 127.0.0.53%lo:53 ? ? ? ? ? ? ? 0.0.0.0:* ? ? ? ?users:(("systemd-resolve",pid=840,fd=13))
LISTEN ? 0 ? ? ? ? 128 ? ? ? ? ? ? ? ? 0.0.0.0:22 ? ? ? ? ? ? ? 0.0.0.0:* ? ? ? ?users:(("sshd",pid=1459,fd=3))
etstat 和 ss 的輸出也是類似的,都展示了套接字的狀態(tài)、接收隊(duì)列、發(fā)送隊(duì)列、本地地址、遠(yuǎn)端地址、進(jìn)程 PID 和進(jìn)程名稱等。其中,接收隊(duì)列(Recv-Q)和發(fā)送隊(duì)列(Send-Q)需要你特別關(guān)注,它們通常應(yīng)該是 0。當(dāng)你發(fā)現(xiàn)它們不是 0 時(shí),說明有網(wǎng)絡(luò)包的堆積發(fā)生。當(dāng)然還要注意,在不同套接字狀態(tài)下,它們的含義不同。
當(dāng)套接字處于連接狀態(tài)(Established)時(shí):
Recv-Q
?表示套接字緩沖還沒有被應(yīng)用程序取走的字節(jié)數(shù)(即接收隊(duì)列長度)。而?
Send-Q
?表示還沒有被遠(yuǎn)端主機(jī)確認(rèn)的字節(jié)數(shù)(即發(fā)送隊(duì)列長度)。
當(dāng)套接字處于監(jiān)聽狀態(tài)(Listening)時(shí)
Recv-Q 表示全連接隊(duì)列的長度。
而 Send-Q 表示全連接隊(duì)列的最大長度。
所謂全連接,是指服務(wù)器收到了客戶端的 ACK,完成了 TCP 三次握手,然后就會(huì)把這個(gè)連接挪到全連接隊(duì)列中。這些全連接中的套接字,還需要被 accept() 系統(tǒng)調(diào)用取走,服務(wù)器才可以開始真正處理客戶端的請求。
與全連接隊(duì)列相對應(yīng)的,還有一個(gè)半連接隊(duì)列。所謂半連接是指還沒有完成 TCP 三次握手的連接,連接只進(jìn)行了一半。服務(wù)器收到了客戶端的 SYN 包后,就會(huì)把這個(gè)連接放到半連接隊(duì)列中,然后再向客戶端發(fā)送 SYN+ACK 包。
13.7 協(xié)議棧統(tǒng)計(jì)信息
$ netstat -s
...
Tcp:
? ?3244906 active connection openings
? ?23143 passive connection openings
? ?115732 failed connection attempts
? ?2964 connection resets received
? ?1 connections established
? ?13025010 segments received
? ?17606946 segments sent out
? ?44438 segments retransmitted
? ?42 bad segments received
? ?5315 resets sent
? ?InCsumErrors: 42
...
$ ss -s
Total: 186 (kernel 1446)
TCP: ? 4 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0
Transport Total ? ? IP ? ? ? ?IPv6
* ? ?1446 ? ? ?- ? ? ? ? -
RAW ? ?2 ? ? ? ? 1 ? ? ? ? 1
UDP ? ?2 ? ? ? ? 2 ? ? ? ? 0
TCP ? ?4 ? ? ? ? 3 ? ? ? ? 1
...
這些協(xié)議棧的統(tǒng)計(jì)信息都很直觀。ss 只顯示已經(jīng)連接、關(guān)閉、孤兒套接字等簡要統(tǒng)計(jì),而 netstat 則提供的是更詳細(xì)的網(wǎng)絡(luò)協(xié)議棧信息。比如,上面 netstat 的輸出示例,就展示了 TCP 協(xié)議的主動(dòng)連接、被動(dòng)連接、失敗重試、發(fā)送和接收的分段數(shù)量等各種信息。
13.8 網(wǎng)絡(luò)吞吐和 PPS
給 sar 增加 -n 參數(shù)就可以查看網(wǎng)絡(luò)的統(tǒng)計(jì)信息,比如網(wǎng)絡(luò)接口(DEV)、網(wǎng)絡(luò)接口錯(cuò)誤(EDEV)、TCP、UDP、ICMP 等等。執(zhí)行下面的命令,你就可以得到網(wǎng)絡(luò)接口統(tǒng)計(jì)信息:
# 數(shù)字1表示每隔1秒輸出一組數(shù)據(jù)
$ sar -n DEV 1
Linux 4.15.0-1035-azure (ubuntu) ? 01/06/19 ? _x86_64_ ?(2 CPU)
13:21:40 ? ? ? ?IFACE ? rxpck/s ? txpck/s ? ?rxkB/s ? ?txkB/s ? rxcmp/s ? txcmp/s ?rxmcst/s ? %ifutil
13:21:41 ? ? ? ? eth0 ? ? 18.00 ? ? 20.00 ? ? ?5.79 ? ? ?4.25 ? ? ?0.00 ? ? ?0.00 ? ? ?0.00 ? ? ?0.00
13:21:41 ? ? ?docker0 ? ? ?0.00 ? ? ?0.00 ? ? ?0.00 ? ? ?0.00 ? ? ?0.00 ? ? ?0.00 ? ? ?0.00 ? ? ?0.00
13:21:41 ? ? ? ? ? lo ? ? ?0.00 ? ? ?0.00 ? ? ?0.00 ? ? ?0.00 ? ? ?0.00 ? ? ?0.00 ? ? ?0.00 ? ? ?0.00
rxpck/s
?和?txpck/s
?分別是接收和發(fā)送的 PPS,單位為包 / 秒。rxkB/s
?和?txkB/s
?分別是接收和發(fā)送的吞吐量,單位是 KB/ 秒。rxcmp/s
?和?txcmp/s
?分別是接收和發(fā)送的壓縮數(shù)據(jù)包數(shù),單位是包 / 秒。%ifutil
?是網(wǎng)絡(luò)接口的使用率,即半雙工模式下為 (rxkB/s+txkB/s)/Bandwidth,而全雙工模式下為
max(rxkB/s, txkB/s)/Bandwidth。
其中,Bandwidth 可以用 ethtool 來查詢,它的單位通常是?Gb/s
?或者?Mb/s
,不過注意這里小寫字母 b ,表示比特而不是字節(jié)。我們通常提到的千兆網(wǎng)卡、萬兆網(wǎng)卡等,單位也都是比特。如下你可以看到,我的 eth0 網(wǎng)卡就是一個(gè)千兆網(wǎng)卡:
$ ethtool eth0 | grep Speed
?Speed: 1000Mb/s
13.9 連通性和延時(shí)
最后,我們通常使用 ping ,來測試遠(yuǎn)程主機(jī)的連通性和延時(shí),而這基于 ICMP 協(xié)議。比如,執(zhí)行下面的命令,你就可以測試本機(jī)到 114.114.114.114 這個(gè) IP 地址的連通性和延時(shí):
# -c3表示發(fā)送三次ICMP包后停止
$ ping -c3 114.114.114.114
PING 114.114.114.114 (114.114.114.114) 56(84) bytes of data.
64 bytes from 114.114.114.114: icmp_seq=1 ttl=54 time=244 ms
64 bytes from 114.114.114.114: icmp_seq=2 ttl=47 time=244 ms
64 bytes from 114.114.114.114: icmp_seq=3 ttl=67 time=244 ms
--- 114.114.114.114 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 244.023/244.070/244.105/0.034 ms
ping 的輸出,可以分為兩部分
第一部分,是每個(gè) ICMP 請求的信息,包括 ICMP 序列號(icmp_seq)、TTL(生存時(shí)間,或者跳數(shù))以及往返延時(shí)。
第二部分,則是三次 ICMP 請求的匯總。
比如上面的示例顯示,發(fā)送了 3 個(gè)網(wǎng)絡(luò)包,并且接收到 3 個(gè)響應(yīng),沒有丟包發(fā)生,這說明測試主機(jī)到?114.114.114.114
?是連通的;平均往返延時(shí)(RTT)是 244ms,也就是從發(fā)送 ICMP 開始,到接收到 114.114.114.114 回復(fù)的確認(rèn),總共經(jīng)歷 244ms。
想要“系統(tǒng)知識課程大綱”或參加“華為認(rèn)證系統(tǒng)課程最新活動(dòng)”
網(wǎng)工系統(tǒng)知識學(xué)習(xí)路線圖(初、中、高級)+華為認(rèn)證2023年題庫【文檔】+HCIA題庫+面試筆試題+必看華為電子版書籍+配置命令大全
?加威:wglz86備注暗號(“老林”)優(yōu)先通過。
或掃描下方圖片:
