計(jì)算機(jī)硬件-網(wǎng)絡(luò)
網(wǎng)卡
網(wǎng)卡如下 :

想起網(wǎng)卡就想起了零拷貝 , 軟件開(kāi)發(fā)中常常遇到 ,例如 MQ 中 ,例如 Nginx 中 .
首先,什么是“零拷貝”?
“零拷貝”的目標(biāo),顧名思義,就是盡量減少甚至完全避免數(shù)據(jù)在內(nèi)存中的不必要的復(fù)制次數(shù)。
在傳統(tǒng)的數(shù)據(jù)傳輸(比如從硬盤(pán)讀取文件并通過(guò)網(wǎng)絡(luò)發(fā)送)中,數(shù)據(jù)需要經(jīng)歷多次復(fù)制和上下文切換:
- 從硬盤(pán)到內(nèi)核緩沖區(qū):操作系統(tǒng)從硬盤(pán)讀取文件數(shù)據(jù),復(fù)制到內(nèi)核空間的頁(yè)面緩存。
- 從內(nèi)核緩沖區(qū)到用戶緩沖區(qū):應(yīng)用程序(例如一個(gè)Web服務(wù)器)需要處理這些數(shù)據(jù),于是數(shù)據(jù)被從內(nèi)核空間復(fù)制到用戶空間的應(yīng)用程序緩沖區(qū)。
- 從用戶緩沖區(qū)到內(nèi)核Socket緩沖區(qū):應(yīng)用程序準(zhǔn)備發(fā)送數(shù)據(jù),數(shù)據(jù)又被復(fù)制回內(nèi)核空間的Socket緩沖區(qū)。
- 從Socket緩沖區(qū)到網(wǎng)卡:最后,數(shù)據(jù)從Socket緩沖區(qū)復(fù)制到網(wǎng)卡,最終發(fā)送到網(wǎng)絡(luò)。
在這個(gè)過(guò)程中,數(shù)據(jù)被復(fù)制了4次,用戶態(tài)和內(nèi)核態(tài)之間也發(fā)生了4次上下文切換,CPU需要親自處理所有這些復(fù)制工作,開(kāi)銷巨大。
那么,“零拷貝”和“網(wǎng)卡”是如何結(jié)合的呢?
“零拷貝”技術(shù)通過(guò)以下方式,巧妙地利用了網(wǎng)卡和操作系統(tǒng)的能力,來(lái)繞過(guò)這些昂貴的復(fù)制操作:
關(guān)鍵機(jī)制:DMA 和 內(nèi)存映射
-
DMA:
- 無(wú)論是傳統(tǒng)方式還是零拷貝,數(shù)據(jù)從硬盤(pán)到內(nèi)存,以及從內(nèi)存到網(wǎng)卡的最后一步,通常都由一個(gè)叫 DMA 的硬件來(lái)負(fù)責(zé)。
- DMA允許硬盤(pán)、網(wǎng)卡等外設(shè)不經(jīng)過(guò)CPU,直接與內(nèi)存交換數(shù)據(jù)。這就已經(jīng)把CPU從兩次復(fù)制工作中解放出來(lái)了。
-
零拷貝的核心技術(shù)(如
sendfile):- 操作系統(tǒng)提供了像
sendfile()這樣的系統(tǒng)調(diào)用。 - 當(dāng)應(yīng)用程序需要發(fā)送一個(gè)文件時(shí),它調(diào)用
sendfile(),告訴內(nèi)核源文件(在硬盤(pán))和目標(biāo)Socket。 - 內(nèi)核會(huì)進(jìn)行如下優(yōu)化:
- 內(nèi)存映射:內(nèi)核將存放文件數(shù)據(jù)的內(nèi)核緩沖區(qū)與網(wǎng)卡的Socket緩沖區(qū)進(jìn)行映射,讓它們指向同一塊物理內(nèi)存。
- 直接傳輸:然后,內(nèi)核直接指示網(wǎng)卡,從這塊被映射的內(nèi)存區(qū)域讀取數(shù)據(jù)并發(fā)送。
- CPU不參與數(shù)據(jù)復(fù)制:在整個(gè)過(guò)程中,數(shù)據(jù)沒(méi)有被復(fù)制到用戶空間,也沒(méi)有在內(nèi)核空間內(nèi)來(lái)回復(fù)制。CPU只需要下達(dá)指令,而無(wú)需親自搬運(yùn)數(shù)據(jù)。
- 操作系統(tǒng)提供了像
光貓
互聯(lián)網(wǎng) <--(光信號(hào))--> 光纖 <--(光信號(hào))--> 光貓 <--(網(wǎng)絡(luò)信號(hào)/網(wǎng)線)--> 路由器 <--(Wi-Fi/網(wǎng)線)--> 你的手機(jī)/電腦
入戶光貓 , 光纖接在盒子后面 ,分出幾個(gè)線口 ,有電視的 ,電話的, 網(wǎng)絡(luò)的 .

交換機(jī)

路由器
在家里 ,接入光貓后的設(shè)備就是路由器

企業(yè)級(jí)的路由器又是長(zhǎng)啥樣的呢?

wifi 就是無(wú)線路由器 .
其他
家庭監(jiān)控網(wǎng)絡(luò)拓?fù)鋱D


浙公網(wǎng)安備 33010602011771號(hào)