linux防環(huán)回環(huán)命令 linux回環(huán)地址

【網(wǎng)絡(luò)】Linux 跨機網(wǎng)路通信和本機網(wǎng)路通信

一個報文的產(chǎn)生和發(fā)送,都需要硬件和軟件的完美配合。

目前累計服務(wù)客戶成百上千家,積累了豐富的產(chǎn)品開發(fā)及服務(wù)經(jīng)驗。以網(wǎng)站設(shè)計水平和技術(shù)實力,樹立企業(yè)形象,為客戶提供網(wǎng)站設(shè)計制作、做網(wǎng)站、網(wǎng)站策劃、網(wǎng)頁設(shè)計、網(wǎng)絡(luò)營銷、VI設(shè)計、網(wǎng)站改版、漏洞修補等服務(wù)。創(chuàng)新互聯(lián)始終以務(wù)實、誠信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過對領(lǐng)先技術(shù)的掌握、對創(chuàng)意設(shè)計的研究、對客戶形象的視覺傳遞、對應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進步。

硬件層面接收到報文之后,做一系列的初始化操作,之后驅(qū)動才開始把一個封包封裝為skb。

當(dāng)然這是在x86架構(gòu)下,如果是在cavium架構(gòu)下,封包是wqe形式存在。

不管是skb還是wqe,都僅僅是一種手段,一種達到完成報文傳輸所采用的一種解決方案,一種方法而已。

或許處理方案的具體實現(xiàn)細(xì)節(jié)差別萬千,但是基本的原理,都是殊途同歸,萬變不離其宗。

skb的產(chǎn)生,讓Linux協(xié)議棧旅程的開啟,具備了最基本的條件,接下來的協(xié)議棧之旅,才會更加精彩。

寫作本文的原因是現(xiàn)在本機網(wǎng)絡(luò) IO 應(yīng)用非常廣。

在 php 中 一般 nginx 和 php-fpm 是通過 127.0.0.1 來進行通信的;

在微服務(wù)中,由于 side car 模式的應(yīng)用,本機網(wǎng)絡(luò)請求更是越來越多。

所以,如果能深度理解這個問題在各種網(wǎng)絡(luò)通信應(yīng)用的技術(shù)實踐中將非常的有意義。

今天咱們就把 127.0.0.1 本機網(wǎng)絡(luò)通信相關(guān)問題搞搞清楚!

為了方便討論,我把這個問題拆分成3問:

1)127.0.0.1 本機網(wǎng)絡(luò) IO 需要經(jīng)過網(wǎng)卡嗎?

2)和外網(wǎng)網(wǎng)絡(luò)通信相比,在內(nèi)核收發(fā)流程上有啥差別?

3)使用 127.0.0.1 能比 192.168.x.x 更快嗎?

在上面這幅圖中,我們看到用戶數(shù)據(jù)被拷貝到內(nèi)核態(tài),然后經(jīng)過協(xié)議棧處理后進入到了 RingBuffer 中。隨后網(wǎng)卡驅(qū)動真正將數(shù)據(jù)發(fā)送了出去。當(dāng)發(fā)送完成的時候,是通過硬中斷來通知 CPU,然后清理 RingBuffer。

當(dāng)數(shù)據(jù)包到達另外一臺機器的時候,Linux 數(shù)據(jù)包的接收過程開始了。

當(dāng)網(wǎng)卡收到數(shù)據(jù)以后,CPU發(fā)起一個中斷,以通知 CPU 有數(shù)據(jù)到達。

當(dāng)CPU收到中斷請求后,會去調(diào)用網(wǎng)絡(luò)驅(qū)動注冊的中斷處理函數(shù),觸發(fā)軟中斷。

ksoftirqd 檢測到有軟中斷請求到達,開始輪詢收包,收到后交由各級協(xié)議棧處理。

當(dāng)協(xié)議棧處理完并把數(shù)據(jù)放到接收隊列的之后,喚醒用戶進程(假設(shè)是阻塞方式)。

關(guān)于跨機網(wǎng)絡(luò)通信的理解,可以通俗地用下面這張圖來總結(jié)一下:

前面,我們看到了跨機時整個網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送過程 。

在本機網(wǎng)絡(luò) IO 的過程中,流程會有一些差別。

為了突出重點,本節(jié)將不再介紹整體流程,而是只介紹和跨機邏輯不同的地方。

有差異的地方總共有兩個,分別是路由和驅(qū)動程序。

對于本機網(wǎng)絡(luò) IO 來說,特殊之處在于在 local 路由表中就能找到路由項,對應(yīng)的設(shè)備都將使用 loopback 網(wǎng)卡,也就是我們常見的 lO。

從上述結(jié)果可以看出,對于目的是 127.0.0.1 的路由在 local 路由表中就能夠找到了。

對于是本機的網(wǎng)絡(luò)請求,設(shè)備將全部都使用 lo 虛擬網(wǎng)卡,接下來的網(wǎng)絡(luò)層仍然和跨機網(wǎng)絡(luò) IO 一樣。

本機網(wǎng)絡(luò) IO 需要進行 IP 分片嗎?

因為和正常的網(wǎng)絡(luò)層處理過程一樣,如果 skb 大于 MTU 的話,仍然會進行分片。

只不過 lo 的 MTU 比 Ethernet 要大很多。

通過 ifconfig 命令就可以查到,普通網(wǎng)卡一般為 1500,而 lO 虛擬接口能有 65535。

為什么我把“驅(qū)動”加個引號呢,因為 loopback 是一個純軟件性質(zhì)的虛擬接口,并沒有真正意義上的驅(qū)動。

在鄰居子系統(tǒng)函數(shù)中經(jīng)過處理,進入到網(wǎng)絡(luò)設(shè)備子系統(tǒng),只有觸發(fā)完軟中斷,發(fā)送過程就算是完成了。

在跨機的網(wǎng)絡(luò)包的接收過程中,需要經(jīng)過硬中斷,然后才能觸發(fā)軟中斷。

而在本機的網(wǎng)絡(luò) IO 過程中,由于并不真的過網(wǎng)卡,所以網(wǎng)卡實際傳輸,硬中斷就都省去了。直接從軟中斷開始,送進協(xié)議棧。

網(wǎng)絡(luò)再往后依次是傳輸層,最后喚醒用戶進程,這里就不多展開了。

我們來總結(jié)一下本機網(wǎng)絡(luò)通信的內(nèi)核執(zhí)行流程:

回想下跨機網(wǎng)絡(luò) IO 的流程:

通過本文的敘述,我們確定地得出結(jié)論,不需要經(jīng)過網(wǎng)卡。即使了把網(wǎng)卡拔了本機網(wǎng)絡(luò)是否還可以正常使用的。

總的來說,本機網(wǎng)絡(luò) IO 和跨機 IO 比較起來,確實是節(jié)約了一些開銷。發(fā)送數(shù)據(jù)不需要進 RingBuffer 的驅(qū)動隊列,直接把 skb 傳給接收協(xié)議棧(經(jīng)過軟中斷)。

但是在內(nèi)核其它組件上可是一點都沒少:系統(tǒng)調(diào)用、協(xié)議棧(傳輸層、網(wǎng)絡(luò)層等)、網(wǎng)絡(luò)設(shè)備子系統(tǒng)、鄰居子系統(tǒng)整個走了一個遍。連“驅(qū)動”程序都走了(雖然對于回環(huán)設(shè)備來說只是一個純軟件的虛擬出來的東東)。所以即使是本機網(wǎng)絡(luò) IO,也別誤以為沒啥開銷。

先說結(jié)論:我認(rèn)為這兩種使用方法在性能上沒有啥差別。

我覺得有相當(dāng)大一部分人都會認(rèn)為訪問本機server 的話,用 127.0.0.1 更快。原因是直覺上認(rèn)為訪問 IP 就會經(jīng)過網(wǎng)卡。

其實內(nèi)核知道本機上所有的 IP,只要發(fā)現(xiàn)目的地址是本機 IP 就可以全走 loopback 回環(huán)設(shè)備了。

本機其它 IP 和 127.0.0.1 一樣,也是不用過物理網(wǎng)卡的,所以訪問它們性能開銷基本一樣!

How SKBs work - Linux kernel

一篇解讀Linux網(wǎng)絡(luò)協(xié)議棧

你真的了解127.0.0.1和0.0.0.0的區(qū)別?

深入操作系統(tǒng),徹底搞懂127.0.0.1本機網(wǎng)絡(luò)通信

linux中什么是塊設(shè)備和字符設(shè)備

| 字符設(shè)備

字符設(shè)備是能夠像字節(jié)流一樣被訪問的設(shè)備,當(dāng)對字符設(shè)備發(fā)出讀寫請求,相應(yīng)的IO操作立即發(fā)生。Linux系統(tǒng)中很多設(shè)備都是字符設(shè)備,如字符終端、串口、鍵盤、鼠標(biāo)等。在嵌入式Linux開發(fā)中,接觸最多的就是字符設(shè)備以及驅(qū)動。

| 塊設(shè)備

塊設(shè)備是Linux系統(tǒng)中進行TO操作時必須以塊為單位進行訪問的設(shè)備,塊設(shè)備能夠安裝文件系統(tǒng)。塊設(shè)備驅(qū)動會利用一塊系統(tǒng)內(nèi)存作為緩沖區(qū),因此對塊設(shè)備發(fā)出讀寫訪問,并不一定立即產(chǎn)生硬件I/O操作。Linux系統(tǒng)中常見的塊設(shè)備有如硬盤、軟驅(qū)等等。

| 網(wǎng)絡(luò)設(shè)備

網(wǎng)絡(luò)設(shè)備既可以是網(wǎng)卡這樣的硬件設(shè)備,也可以是一個純軟件設(shè)備如回環(huán)設(shè)備。網(wǎng)絡(luò)設(shè)備由Linux的網(wǎng)絡(luò)子系統(tǒng)驅(qū)動,負(fù)責(zé)數(shù)據(jù)包的發(fā)送和接收,而不是面向流設(shè)備,因此在Linux系統(tǒng)文件系統(tǒng)中網(wǎng)絡(luò)設(shè)備沒有節(jié)點。對網(wǎng)絡(luò)設(shè)備的訪問是通過socket調(diào)用產(chǎn)生,而不是普通的文件操作如

open/closc和 read/write等。

linux設(shè)備loop0-7設(shè)備是干什么用的

回環(huán)設(shè)備,一種特殊的設(shè)備。

現(xiàn)在主要用處是把文件當(dāng)分區(qū)進行掛載時需要的,印象里類似于一個過渡用的兩頭轉(zhuǎn)接的設(shè)備。

------------

找到一個別人的解釋:“所謂loopback也就是回接設(shè)備,是一個設(shè)備文件,但是這個設(shè)備文件其實并沒有對應(yīng)一個具體的設(shè)備,所對應(yīng)的只是一個普通的文件,但是它可以執(zhí)行設(shè)備文件的一些操作,比如mount等”

忘了說了,0-7 是編號。一個設(shè)備只能掛載一次,所以你現(xiàn)在有 8 個來保證供應(yīng)。

linux 中設(shè)置IP,子網(wǎng)掩碼,網(wǎng)關(guān),DNS的命令是什么?

用root用戶身份

命令是 ifconfig

但是要修改這些配置,一般要修改 /etc/sysconfig/networking下的配置文件

配置網(wǎng)卡一般修改 ifcfg-eth0這個文件

#ifconfig eth0 172.16.1.28/24

具體的可以用 # man ifconfig 來查看用法

分享文章:linux防環(huán)回環(huán)命令 linux回環(huán)地址
標(biāo)題路徑:http://muchs.cn/article0/docdgoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、關(guān)鍵詞優(yōu)化、虛擬主機、搜索引擎優(yōu)化、品牌網(wǎng)站制作、Google

廣告

聲明:本網(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)

h5響應(yīng)式網(wǎng)站建設(shè)