欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

linux和網(wǎng)絡(luò)有關(guān)命令 linux與網(wǎng)絡(luò)有關(guān)的配置文件

關(guān)于 Linux 網(wǎng)絡(luò),你必須知道這些

我們一起學(xué)習(xí)了文件系統(tǒng)和磁盤 I/O 的工作原理,以及相應(yīng)的性能分析和優(yōu)化方法。接下來,我們將進入下一個重要模塊—— Linux 的網(wǎng)絡(luò)子系統(tǒng)。

我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、濠江ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的濠江網(wǎng)站制作公司

由于網(wǎng)絡(luò)處理的流程最復(fù)雜,跟我們前面講到的進程調(diào)度、中斷處理、內(nèi)存管理以及 I/O 等都密不可分,所以,我把網(wǎng)絡(luò)模塊作為最后一個資源模塊來講解。

同 CPU、內(nèi)存以及 I/O 一樣,網(wǎng)絡(luò)也是 Linux 系統(tǒng)最核心的功能。網(wǎng)絡(luò)是一種把不同計算機或網(wǎng)絡(luò)設(shè)備連接到一起的技術(shù),它本質(zhì)上是一種進程間通信方式,特別是跨系統(tǒng)的進程間通信,必須要通過網(wǎng)絡(luò)才能進行。隨著高并發(fā)、分布式、云計算、微服務(wù)等技術(shù)的普及,網(wǎng)絡(luò)的性能也變得越來越重要。

說到網(wǎng)絡(luò),我想你肯定經(jīng)常提起七層負載均衡、四層負載均衡,或者三層設(shè)備、二層設(shè)備等等。那么,這里說的二層、三層、四層、七層又都是什么意思呢?

實際上,這些層都來自國際標準化組織制定的開放式系統(tǒng)互聯(lián)通信參考模型(Open System Interconnection Reference Model),簡稱為 OSI 網(wǎng)絡(luò)模型。

但是 OSI 模型還是太復(fù)雜了,也沒能提供一個可實現(xiàn)的方法。所以,在 Linux 中,我們實際上使用的是另一個更實用的四層模型,即 TCP/IP 網(wǎng)絡(luò)模型。

TCP/IP 模型,把網(wǎng)絡(luò)互聯(lián)的框架分為應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、網(wǎng)絡(luò)接口層等四層,其中,

為了幫你更形象理解 TCP/IP 與 OSI 模型的關(guān)系,我畫了一張圖,如下所示:

當(dāng)然了,雖說 Linux 實際按照 TCP/IP 模型,實現(xiàn)了網(wǎng)絡(luò)協(xié)議棧,但在平時的學(xué)習(xí)交流中,我們習(xí)慣上還是用 OSI 七層模型來描述。比如,說到七層和四層負載均衡,對應(yīng)的分別是 OSI 模型中的應(yīng)用層和傳輸層(而它們對應(yīng)到 TCP/IP 模型中,實際上是四層和三層)。

OSI引入了服務(wù)、接口、協(xié)議、分層的概念,TCP/IP借鑒了OSI的這些概念建立TCP/IP模型。

OSI先有模型,后有協(xié)議,先有標準,后進行實踐;而TCP/IP則相反,先有協(xié)議和應(yīng)用再提出了模型,且是參照的OSI模型。

OSI是一種理論下的模型,而TCP/IP已被廣泛使用,成為網(wǎng)絡(luò)互聯(lián)事實上的標準。

有了 TCP/IP 模型后,在進行網(wǎng)絡(luò)傳輸時,數(shù)據(jù)包就會按照協(xié)議棧,對上一層發(fā)來的數(shù)據(jù)進行逐層處理;然后封裝上該層的協(xié)議頭,再滲核發(fā)送給下一層。

當(dāng)然,網(wǎng)絡(luò)包在每一層的處理邏輯,都取決于各層采用的網(wǎng)絡(luò)協(xié)議。比如在應(yīng)用層,一個提供 REST API 的應(yīng)用,可以使用 HTTP 協(xié)議,把它需要傳輸?shù)?JSON 數(shù)據(jù)封裝到 HTTP 協(xié)議中,然后向下傳遞給 TCP 層。

而封裝做的事情就很簡單了,只是在原來的負載前后,增加固定格式的元數(shù)據(jù),原始的負載數(shù)據(jù)并不會被修改。

比如,以通過 TCP 協(xié)議通信的網(wǎng)絡(luò)包為例,通過下面這張圖,我們可以看到,應(yīng)用程序數(shù)據(jù)在每個層的封裝格式。

這些新叢喚掘增的頭部和尾部,增加了網(wǎng)絡(luò)包的鏈判大小,但我們都知道,物理鏈路中并不能傳輸任意大小的數(shù)據(jù)包。網(wǎng)絡(luò)接口配置的最大傳輸單元(MTU),就規(guī)定了最大的 IP 包大小。在我們最常用的以太網(wǎng)中,MTU 默認值是 1500(這也是 Linux 的默認值)。

一旦網(wǎng)絡(luò)包超過 MTU 的大小,就會在網(wǎng)絡(luò)層分片,以保證分片后的 IP 包不大于 MTU 值。顯然,MTU 越大,需要的分包也就越少,自然,網(wǎng)絡(luò)吞吐能力就越好。

理解了 TCP/IP 網(wǎng)絡(luò)模型和網(wǎng)絡(luò)包的封裝原理后,你很容易能想到,Linux 內(nèi)核中的網(wǎng)絡(luò)棧,其實也類似于 TCP/IP 的四層結(jié)構(gòu)。如下圖所示,就是 Linux 通用 IP 網(wǎng)絡(luò)棧的示意圖:

我們從上到下來看這個網(wǎng)絡(luò)棧,你可以發(fā)現(xiàn),

這里我簡單說一下網(wǎng)卡。網(wǎng)卡是發(fā)送和接收網(wǎng)絡(luò)包的基本設(shè)備。在系統(tǒng)啟動過程中,網(wǎng)卡通過內(nèi)核中的網(wǎng)卡驅(qū)動程序注冊到系統(tǒng)中。而在網(wǎng)絡(luò)收發(fā)過程中,內(nèi)核通過中斷跟網(wǎng)卡進行交互。

再結(jié)合前面提到的 Linux 網(wǎng)絡(luò)棧,可以看出,網(wǎng)絡(luò)包的處理非常復(fù)雜。所以,網(wǎng)卡硬中斷只處理最核心的網(wǎng)卡數(shù)據(jù)讀取或發(fā)送,而協(xié)議棧中的大部分邏輯,都會放到軟中斷中處理。

我們先來看網(wǎng)絡(luò)包的接收流程。

當(dāng)一個網(wǎng)絡(luò)幀到達網(wǎng)卡后,網(wǎng)卡會通過 DMA 方式,把這個網(wǎng)絡(luò)包放到收包隊列中;然后通過硬中斷,告訴中斷處理程序已經(jīng)收到了網(wǎng)絡(luò)包。

接著,網(wǎng)卡中斷處理程序會為網(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é)議棧,從下到上逐層處理這個網(wǎng)絡(luò)幀。比如,

最后,應(yīng)用程序就可以使用 Socket 接口,讀取到新接收到的數(shù)據(jù)了。

為了更清晰表示這個流程,我畫了一張圖,這張圖的左半部分表示接收流程,而圖中的粉色箭頭則表示網(wǎng)絡(luò)包的處理路徑。

了解網(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ò)包。

由于這是一個系統(tǒng)調(diào)用,所以會陷入到內(nèi)核態(tài)的套接字層中。套接字層會把數(shù)據(jù)包放到 Socket 發(fā)送緩沖區(qū)中。

接下來,網(wǎng)絡(luò)協(xié)議棧從 Socket 發(fā)送緩沖區(qū)中,取出數(shù)據(jù)包;再按照 TCP/IP 棧,從上到下逐層處理。比如,傳輸層和網(wǎng)絡(luò)層,分別為其增加 TCP 頭和 IP 頭,執(zhí)行路由查找確認下一跳的 IP,并按照 MTU 大小進行分片。

分片后的網(wǎng)絡(luò)包,再送到網(wǎng)絡(luò)接口層,進行物理地址尋址,以找到下一跳的 MAC 地址。然后添加幀頭和幀尾,放到發(fā)包隊列中。這一切完成后,會有軟中斷通知驅(qū)動程序:發(fā)包隊列中有新的網(wǎng)絡(luò)幀需要發(fā)送。

最后,驅(qū)動程序通過 DMA ,從發(fā)包隊列中讀出網(wǎng)絡(luò)幀,并通過物理網(wǎng)卡把它發(fā)送出去。

多臺服務(wù)器通過網(wǎng)卡、交換機、路由器等網(wǎng)絡(luò)設(shè)備連接到一起,構(gòu)成了相互連接的網(wǎng)絡(luò)。由于網(wǎng)絡(luò)設(shè)備的異構(gòu)性和網(wǎng)絡(luò)協(xié)議的復(fù)雜性,國際標準化組織定義了一個七層的 OSI 網(wǎng)絡(luò)模型,但是這個模型過于復(fù)雜,實際工作中的事實標準,是更為實用的 TCP/IP 模型。

TCP/IP 模型,把網(wǎng)絡(luò)互聯(lián)的框架,分為應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、網(wǎng)絡(luò)接口層等四層,這也是 Linux 網(wǎng)絡(luò)棧最核心的構(gòu)成部分。

我結(jié)合網(wǎng)絡(luò)上查閱的資料和文章中的內(nèi)容,總結(jié)了下網(wǎng)卡收發(fā)報文的過程,不知道是否正確:

當(dāng)發(fā)送數(shù)據(jù)包時,與上述相反。鏈路層將數(shù)據(jù)包封裝完畢后,放入網(wǎng)卡的DMA緩沖區(qū),并調(diào)用系統(tǒng)硬中斷,通知網(wǎng)卡從緩沖區(qū)讀取并發(fā)送數(shù)據(jù)。

了解 Linux 網(wǎng)絡(luò)的基本原理和收發(fā)流程后,你肯定迫不及待想知道,如何去觀察網(wǎng)絡(luò)的性能情況。具體而言,哪些指標可以用來衡量 Linux 的網(wǎng)絡(luò)性能呢?

實際上,我們通常用帶寬、吞吐量、延時、PPS(Packet Per Second)等指標衡量網(wǎng)絡(luò)的性能。

除了這些指標,網(wǎng)絡(luò)的可用性(網(wǎng)絡(luò)能否正常通信)、并發(fā)連接數(shù)(TCP 連接數(shù)量)、丟包率(丟包百分比)、重傳率(重新傳輸?shù)木W(wǎng)絡(luò)包比例)等也是常用的性能指標。

分析網(wǎng)絡(luò)問題的第一步,通常是查看網(wǎng)絡(luò)接口的配置和狀態(tài)。你可以使用 ifconfig 或者 ip 命令,來查看網(wǎng)絡(luò)的配置。我個人更推薦使用 ip 工具,因為它提供了更豐富的功能和更易用的接口。

以網(wǎng)絡(luò)接口 eth0 為例,你可以運行下面的兩個命令,查看它的配置和狀態(tài):

你可以看到,ifconfig 和 ip 命令輸出的指標基本相同,只是顯示格式略微不同。比如,它們都包括了網(wǎng)絡(luò)接口的狀態(tài)標志、MTU 大小、IP、子網(wǎng)、MAC 地址以及網(wǎng)絡(luò)包收發(fā)的統(tǒng)計信息。

第一,網(wǎng)絡(luò)接口的狀態(tài)標志。ifconfig 輸出中的 RUNNING ,或 ip 輸出中的 LOWER_UP ,都表示物理網(wǎng)絡(luò)是連通的,即網(wǎng)卡已經(jīng)連接到了交換機或者路由器中。如果你看不到它們,通常表示網(wǎng)線被拔掉了。

第二,MTU 的大小。MTU 默認大小是 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ù)、錯誤數(shù)以及丟包情況,特別是 TX 和 RX 部分的 errors、dropped、overruns、carrier 以及 collisions 等指標不為 0 時,通常表示出現(xiàn)了網(wǎng)絡(luò) I/O 問題。其中:

ifconfig 和 ip 只顯示了網(wǎng)絡(luò)接口收發(fā)數(shù)據(jù)包的統(tǒng)計信息,但在實際的性能問題中,網(wǎng)絡(luò)協(xié)議棧中的統(tǒng)計信息,我們也必須關(guān)注。你可以用 netstat 或者 ss ,來查看套接字、網(wǎng)絡(luò)棧、網(wǎng)絡(luò)接口以及路由表的信息。

我個人更推薦,使用 ss 來查詢網(wǎng)絡(luò)的連接信息,因為它比 netstat 提供了更好的性能(速度更快)。

比如,你可以執(zhí)行下面的命令,查詢套接字信息:

netstat 和 ss 的輸出也是類似的,都展示了套接字的狀態(tài)、接收隊列、發(fā)送隊列、本地地址、遠端地址、進程 PID 和進程名稱等。

其中,接收隊列(Recv-Q)和發(fā)送隊列(Send-Q)需要你特別關(guān)注,它們通常應(yīng)該是 0。當(dāng)你發(fā)現(xiàn)它們不是 0 時,說明有網(wǎng)絡(luò)包的堆積發(fā)生。當(dāng)然還要注意,在不同套接字狀態(tài)下,它們的含義不同。

當(dāng)套接字處于連接狀態(tài)(Established)時,

當(dāng)套接字處于監(jiān)聽狀態(tài)(Listening)時,

所謂全連接,是指服務(wù)器收到了客戶端的 ACK,完成了 TCP 三次握手,然后就會把這個連接挪到全連接隊列中。這些全連接中的套接字,還需要被 accept() 系統(tǒng)調(diào)用取走,服務(wù)器才可以開始真正處理客戶端的請求。

與全連接隊列相對應(yīng)的,還有一個半連接隊列。所謂半連接是指還沒有完成 TCP 三次握手的連接,連接只進行了一半。服務(wù)器收到了客戶端的 SYN 包后,就會把這個連接放到半連接隊列中,然后再向客戶端發(fā)送 SYN+ACK 包。

類似的,使用 netstat 或 ss ,也可以查看協(xié)議棧的信息:

這些協(xié)議棧的統(tǒng)計信息都很直觀。ss 只顯示已經(jīng)連接、關(guān)閉、孤兒套接字等簡要統(tǒng)計,而 netstat 則提供的是更詳細的網(wǎng)絡(luò)協(xié)議棧信息。

比如,上面 netstat 的輸出示例,就展示了 TCP 協(xié)議的主動連接、被動連接、失敗重試、發(fā)送和接收的分段數(shù)量等各種信息。

接下來,我們再來看看,如何查看系統(tǒng)當(dāng)前的網(wǎng)絡(luò)吞吐量和 PPS。在這里,我推薦使用我們的老朋友 sar,在前面的 CPU、內(nèi)存和 I/O 模塊中,我們已經(jīng)多次用到它。

給 sar 增加 -n 參數(shù)就可以查看網(wǎng)絡(luò)的統(tǒng)計信息,比如網(wǎng)絡(luò)接口(DEV)、網(wǎng)絡(luò)接口錯誤(EDEV)、TCP、UDP、ICMP 等等。執(zhí)行下面的命令,你就可以得到網(wǎng)絡(luò)接口統(tǒng)計信息:

這兒輸出的指標比較多,我來簡單解釋下它們的含義。

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

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

我們通常使用帶寬、吞吐量、延時等指標,來衡量網(wǎng)絡(luò)的性能;相應(yīng)的,你可以用 ifconfig、netstat、ss、sar、ping 等工具,來查看這些網(wǎng)絡(luò)的性能指標。

小狗同學(xué)問到: 老師,您好 ss —lntp 這個 當(dāng)session處于listening中 rec-q 確定是 syn的backlog嗎?

A: Recv-Q為全連接隊列當(dāng)前使用了多少。 中文資料里這個問題講得最明白的文章:

看了源碼發(fā)現(xiàn),這個地方講的有問題.關(guān)于ss輸出中l(wèi)isten狀態(tài)套接字的Recv-Q表示全連接隊列當(dāng)前使用了多少,也就是全連接隊列的當(dāng)前長度,而Send-Q表示全連接隊列的最大長度

分享題目:linux和網(wǎng)絡(luò)有關(guān)命令 linux與網(wǎng)絡(luò)有關(guān)的配置文件
網(wǎng)頁URL:http://chinadenli.net/article17/dspjdgj.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航Google外貿(mào)建站動態(tài)網(wǎng)站網(wǎng)頁設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司