日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 小林coding
[導(dǎo)讀]Linux 網(wǎng)絡(luò)協(xié)議棧是根據(jù) TCP/IP 模型來實現(xiàn)的,TCP/IP 模型由應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和網(wǎng)絡(luò)接口層,共四層組成,每一層都有各自的職責(zé)。

Linux 網(wǎng)絡(luò)協(xié)議棧是根據(jù) TCP/IP 模型來實現(xiàn)的,TCP/IP 模型由應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和網(wǎng)絡(luò)接口層,共四層組成,每一層都有各自的職責(zé)。

應(yīng)用程序要發(fā)送數(shù)據(jù)包時,通常是通過 socket 接口,于是就會發(fā)生系統(tǒng)調(diào)用,把應(yīng)用層的數(shù)據(jù)拷貝到內(nèi)核里的 socket 層,接著由網(wǎng)絡(luò)協(xié)議棧從上到下逐層處理后,最后才會送到網(wǎng)卡發(fā)送出去。

而對于接收網(wǎng)絡(luò)包時,同樣也要經(jīng)過網(wǎng)絡(luò)協(xié)議逐層處理,不過處理的方向與發(fā)送數(shù)據(jù)時是相反的,也就是從下到上的逐層處理,最后才送到應(yīng)用程序。

網(wǎng)絡(luò)的速度往往跟用戶體驗是掛鉤的,那我們又該用什么指標(biāo)來衡量 Linux 的網(wǎng)絡(luò)性能呢?以及如何分析網(wǎng)絡(luò)問題呢?

這次,我們就來說這些。


性能指標(biāo)有哪些?

通常是以 4 個指標(biāo)來衡量網(wǎng)絡(luò)的性能,分別是帶寬、延時、吞吐率、PPS(Packet Per Second),它們表示的意義如下:

  • 帶寬,表示鏈路的最大傳輸速率,單位是 b/s (比特 / 秒),帶寬越大,其傳輸能力就越強。

  • 延時,表示請求數(shù)據(jù)包發(fā)送后,收到對端響應(yīng),所需要的時間延遲。不同的場景有著不同的含義,比如可以表示建立 TCP 連接所需的時間延遲,或一個數(shù)據(jù)包往返所需的時間延遲。

  • 吞吐率,表示單位時間內(nèi)成功傳輸?shù)臄?shù)據(jù)量,單位是 b/s(比特 / 秒)或者 B/s(字節(jié) / 秒),吞吐受帶寬限制,帶寬越大,吞吐率的上限才可能越高。

  • PPS,全稱是 Packet Per Second(包 / 秒),表示以網(wǎng)絡(luò)包為單位的傳輸速率,一般用來評估系統(tǒng)對于網(wǎng)絡(luò)的轉(zhuǎn)發(fā)能力。

當(dāng)然,除了以上這四種基本的指標(biāo),還有一些其他常用的性能指標(biāo),比如:

  • 網(wǎng)絡(luò)的可用性,表示網(wǎng)絡(luò)能否正常通信;

  • 并發(fā)連接數(shù),表示 TCP 連接數(shù)量;

  • 丟包率,表示所丟失數(shù)據(jù)包數(shù)量占所發(fā)送數(shù)據(jù)組的比率;

  • 重傳率,表示重傳網(wǎng)絡(luò)包的比例;

你可能會問了,如何觀測這些性能指標(biāo)呢?不急,繼續(xù)往下看。


網(wǎng)絡(luò)配置如何看?

要想知道網(wǎng)絡(luò)的配置和狀態(tài),我們可以使用 ifconfig 或者 ip 命令來查看。

這兩個命令功能都差不多,不過它們屬于不同的軟件包,ifconfig 屬于 net-tools 軟件包,ip 屬于 iproute2 軟件包,我的印象中 net-tools 軟件包沒有人繼續(xù)維護了,而 iproute2 軟件包是有開發(fā)者依然在維護,所以更推薦你使用 ip 工具。

學(xué)以致用,那就來使用這兩個命令,來查看網(wǎng)口 eth0 的配置等信息:

雖然這兩個命令輸出的格式不盡相同,但是輸出的內(nèi)容基本相同,比如都包含了 IP 地址、子網(wǎng)掩碼、MAC 地址、網(wǎng)關(guān)地址、MTU 大小、網(wǎng)口的狀態(tài)以及網(wǎng)路包收發(fā)的統(tǒng)計信息,下面就來說說這些信息,它們都與網(wǎng)絡(luò)性能有一定的關(guān)系。

第一,網(wǎng)口的連接狀態(tài)標(biāo)志。其實也就是表示對應(yīng)的網(wǎng)口是否連接到交換機或路由器等設(shè)備,如果 ifconfig 輸出中看到有 RUNNING,或者 ip 輸出中有 LOWER_UP,則說明物理網(wǎng)路是連通的,如果看不到,則表示網(wǎng)口沒有接網(wǎng)線。

第二,MTU 大小。默認(rèn)值是 1500 字節(jié),其作用主要是限制網(wǎng)絡(luò)包的大小,如果 IP 層有一個數(shù)據(jù)報要傳,而且數(shù)據(jù)幀的長度比鏈路層的 MTU 還大,那么 IP 層就需要進行分片,即把數(shù)據(jù)報分成干片,這樣每一片就都小于 MTU。事實上,每個網(wǎng)絡(luò)的鏈路層 MTU 可能會不一樣,所以你可能需要調(diào)大或者調(diào)小 MTU 的數(shù)值。

第三,網(wǎng)口的 IP 地址、子網(wǎng)掩碼、MAC 地址、網(wǎng)關(guān)地址。這些信息必須要配置正確,網(wǎng)絡(luò)功能才能正常工作。

第四,網(wǎng)路包收發(fā)的統(tǒng)計信息。通常有網(wǎng)絡(luò)收發(fā)的字節(jié)數(shù)、包數(shù)、錯誤數(shù)以及丟包情況的信息,如果 TX(發(fā)送) 和 RX(接收) 部分中 errors、dropped、overruns、carrier 以及 collisions 等指標(biāo)不為 0 時,則說明網(wǎng)絡(luò)發(fā)送或者接收出問題了,這些出錯統(tǒng)計信息的指標(biāo)意義如下:

  • errors 表示發(fā)生錯誤的數(shù)據(jù)包數(shù),比如校驗錯誤、幀同步錯誤等;

  • dropped 表示丟棄的數(shù)據(jù)包數(shù),即數(shù)據(jù)包已經(jīng)收到了 Ring Buffer(這個緩沖區(qū)是在內(nèi)核內(nèi)存中,更具體一點是在網(wǎng)卡驅(qū)動程序里),但因為系統(tǒng)內(nèi)存不足等原因而發(fā)生的丟包;

  • overruns 表示超限數(shù)據(jù)包數(shù),即網(wǎng)絡(luò)接收/發(fā)送速度過快,導(dǎo)致 Ring Buffer 中的數(shù)據(jù)包來不及處理,而導(dǎo)致的丟包,因為過多的數(shù)據(jù)包擠壓在 Ring Buffer,這樣 Ring Buffer 很容易就溢出了;

  • carrier 表示發(fā)生 carrirer 錯誤的數(shù)據(jù)包數(shù),比如雙工模式不匹配、物理電纜出現(xiàn)問題等;

  • collisions 表示沖突、碰撞數(shù)據(jù)包數(shù);

ifconfigip 命令只顯示的是網(wǎng)口的配置以及收發(fā)數(shù)據(jù)包的統(tǒng)計信息,而看不到協(xié)議棧里的信息,那接下來就來看看如何查看協(xié)議棧里的信息。


socket 信息如何查看?

我們可以使用 netstat 或者 ss,這兩個命令查看 socket、網(wǎng)絡(luò)協(xié)議棧、網(wǎng)口以及路由表的信息。

雖然 netstatss 命令查看的信息都差不多,但是如果在生產(chǎn)環(huán)境中要查看這類信息的時候,盡量不要使用 netstat 命令,因為它的性能不好,在系統(tǒng)比較繁忙的情況下,如果頻繁使用 netstat 命令則會對性能的開銷雪上加霜,所以更推薦你使用性能更好的 ss 命令。

從下面這張圖,你可以看到這兩個命令的輸出內(nèi)容:

可以發(fā)現(xiàn),輸出的內(nèi)容都差不多, 比如都包含了 socket 的狀態(tài)(State)、接收隊列(Recv-Q)、發(fā)送隊列(Send-Q)、本地地址(Local Address)、遠(yuǎn)端地址(Foreign Address)、進程 PID 和進程名稱(PID/Program name)等。

接收隊列(Recv-Q)和發(fā)送隊列(Send-Q)比較特殊,在不同的 socket 狀態(tài)。它們表示的含義是不同的。

當(dāng) socket 狀態(tài)處于 Established時:

  • Recv-Q 表示 socket 緩沖區(qū)中還沒有被應(yīng)用程序讀取的字節(jié)數(shù);

  • Send-Q 表示 socket 緩沖區(qū)中還沒有被遠(yuǎn)端主機確認(rèn)的字節(jié)數(shù);

而當(dāng) socket 狀態(tài)處于 Listen 時:

  • Recv-Q 表示全連接隊列的長度;

  • Send-Q 表示全連接隊列的最大長度;

在 TCP 三次握手過程中,當(dāng)服務(wù)器收到客戶端的 SYN 包后,內(nèi)核會把該連接存儲到半連接隊列,然后再向客戶端發(fā)送 SYN+ACK 包,接著客戶端會返回 ACK,服務(wù)端收到第三次握手的 ACK 后,內(nèi)核會把連接從半連接隊列移除,然后創(chuàng)建新的完全的連接,并將其增加到全連接隊列 ,等待進程調(diào)用 accept() 函數(shù)時把連接取出來。

半連接隊列與全連接隊列

也就說,全連接隊列指的是服務(wù)器與客戶端完了 TCP 三次握手后,還沒有被 accept() 系統(tǒng)調(diào)用取走連接的隊列。

那對于協(xié)議棧的統(tǒng)計信息,依然還是使用 netstatss,它們查看統(tǒng)計信息的命令如下:

ss 命令輸出的統(tǒng)計信息相比 netsat 比較少,ss 只顯示已經(jīng)連接(estab)、關(guān)閉(closed)、孤兒(orphaned) socket 等簡要統(tǒng)計。

netstat 則有更詳細(xì)的網(wǎng)絡(luò)協(xié)議棧信息,比如上面顯示了 TCP 協(xié)議的主動連接(active connections openings)、被動連接(passive connection openings)、失敗重試(failed connection attempts)、發(fā)送(segments send out)和接收(segments received)的分段數(shù)量等各種信息。


網(wǎng)絡(luò)吞吐率和 PPS 如何查看?

可以使用 sar 命令當(dāng)前網(wǎng)絡(luò)的吞吐率和 PPS,用法是給 sar 增加 -n 參數(shù)就可以查看網(wǎng)絡(luò)的統(tǒng)計信息,比如

  • sar -n DEV,顯示網(wǎng)口的統(tǒng)計數(shù)據(jù);

  • sar -n EDEV,顯示關(guān)于網(wǎng)絡(luò)錯誤的統(tǒng)計數(shù)據(jù);

  • sar -n TCP,顯示 TCP 的統(tǒng)計數(shù)據(jù)

比如,我通過 sar 命令獲取了網(wǎng)口的統(tǒng)計信息:

它們的含義:

  • rxpck/stxpck/s 分別是接收和發(fā)送的 PPS,單位為包 / 秒。

  • rxkB/stxkB/s 分別是接收和發(fā)送的吞吐率,單位是 KB/ 秒。

  • rxcmp/stxcmp/s 分別是接收和發(fā)送的壓縮數(shù)據(jù)包數(shù),單位是包 / 秒。

對于帶寬,我們可以使用 ethtool 命令來查詢,它的單位通常是 Gb/s 或者 Mb/s,不過注意這里小寫字母 b ,表示比特而不是字節(jié)。我們通常提到的千兆網(wǎng)卡、萬兆網(wǎng)卡等,單位也都是比特(bit)。如下你可以看到, eth0 網(wǎng)卡就是一個千兆網(wǎng)卡:

$?ethtool?eth0?|?grep?Speed
??Speed:?1000Mb/s

連通性和延時如何查看?

要測試本機與遠(yuǎn)程主機的連通性和延時,通常是使用 ping 命令,它是基于 ICMP 協(xié)議的,工作在網(wǎng)絡(luò)層。

比如,如果要測試本機到 192.168.12.20 IP 地址的連通性和延時:

顯示的內(nèi)容主要包含 ?icmp_seq(ICMP 序列號)、TTL(生存時間,或者跳數(shù))以及 time (往返延時),而且最后會匯總本次測試的情況,如果網(wǎng)絡(luò)沒有丟包,packet loss 的百分比就是 0。

不過,需要注意的是,ping 不通服務(wù)器并不代表 HTTP 請求也不通,因為有的服務(wù)器的防火墻是會禁用 ICMP 協(xié)議的。


推薦閱讀

你不好奇 Linux 是如何收發(fā)網(wǎng)絡(luò)包的?

TCP 半連接隊列和全連接隊列滿了會發(fā)生什么?又該如何應(yīng)對?

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉