當前位置: 妍妍網 > 碼農

面試官:1000 Mbps 換算成 MB/s 是多少?問倒一大片。。。

2024-07-05碼農


👉 體系化學習:

特色專欄

/ /

/ /

/ /

/ /

/ /

大家好,我是民工哥!

網路基礎知識,可以說是每個程式設計師必備的基礎中的基礎知識點。

曾就有人面試遇到面試官問過他一個問題: 1000Mbps 換算成 MB/s 是多少

他回:除以8後的得數。

面試官:呵呵一笑,除以 8 ?想簡單了吧?

那麽 到底是多少呢?有知道的嗎,評論區打出來你的答案

為了讓更的讀者朋友們不再鬧出笑話,今天就來科普一下。

如何理解Mbps與MB/s?

在網路傳輸的時候,往往會用到 Mbps 這個單位,GbE or 1 GigE 的網卡現在很流行,這個東西被大家叫做「 千兆網卡 」。

同時,大家特別習慣用 GB 或者 MB 來描述一個磁盤的大小。這個叫做 Gigabyte 或者 Megabyte

但描述檔大小(或者討論磁盤空間)的時候,我們通常還會用GiB或者MiB來描述。

GB和GiB的對比實際上就是上面標的關系了, KB MB GB TB 來自於10進制三位分割的計數法,也就是每隔三位數加進一個逗號,這是對應了歐美那邊的計算方法,這個來源於「短級差制(short scale)」,本意是指1000個前數,例如 1billion= 1000 million ,也就是10億= 1000個百萬。但是這種計數方法本身會帶來困擾。如果敏感一點的讀者看到了「 短級差制 」,一定會想到「 長級差制 (long Scale)」,長級差制是以百萬(10的6次方)來作為下一個級別的,在長級差制之內1billion 代表的意思就是「萬億」了,代表100萬個百萬,也就是10的12次方。

無論是短級差制還是短級差制在歐洲都在用,這件事就會引起混亂,於是國際標準化組織就依照短級差短方式定義了一套標準化的詞頭計數方式,以10的3次方為級,這也就是我們現在的千、兆、吉、太、拍、艾、澤……的計數方法了。

同理,在二進制中,我們會以2的 n*10 次方來計算數位的大小,於是就有一個二進制的詞頭,寫法和國標的詞頭類似,只不過在英文中把後兩位依據發音習慣替換成了bi,例如Giga被改成了Gibi、Tera被改成了Tebi,我們說的MB(megabyte),也被改成了mebibyte,也就是簡寫的MiB。

回到留言的問題:1000Mbps的網路,換算為MB是多少,首先我們先搞清楚 1000Mbps 是什麽,前面說了是是GbE,這個東西叫做「千兆乙太網(Gigabit Ethernet)」 註意這裏面用的是Giga,說明是 10進制 計算的,也就是一秒鐘可以傳輸1,000,000,000個位元。

怎麽深層理解網路傳輸?

我們都知道的是 一個字節(Byte)是由8個位元(Bit) 組成。按理論上來說,1000Mbps的網路傳輸頻寬在一秒鐘之內可以傳遞125MegaByte的數據。

但是,我們得知道,在網路傳輸的時候並不是光傳輸你所需要的數據, 在傳輸的過程中還需要將數據改變成網路封包,所謂的打包數據就是在各個網路層為數據增加相應的標記資訊

這些資訊對傳輸檔本身這件事並不會有太大的意義,只是為了能夠完成網路傳輸。這時候,你在檔管理器中傳輸檔的時候看到的速度就已經不是網卡的速度了,而是在傳輸後層層打包後的凈檔流數據獲取速度。

因此,有的人就在問, 為什麽明明是千兆網卡,傳輸速度卻不會達到125MB/秒

這裏損失的一部份速度就是 打包封包所占用的傳輸流量

所以速度達不到125MB/秒並不是網路的問題,而是正常現象。

那麽有沒有可能讓傳輸速度進一步提高,盡量接近125MB/秒的極限呢?也是可以的。我們就得從 數據鏈路層 的乙太網路幀來入手了。

提升網路傳輸效能的方法?

之前給大家講過乙太網路幀,其中有一個 MTU設定 ,叫做最大傳輸單元(MaximumTransmissionUnit),每個乙太網路幀可以被定義為一個傳輸單元。 乙太網路所定義的一個幀的大小為1538

在網路裝置上開始傳輸的時候裝置會先發出7個字節的先導碼,然後按照固定的格式分節來傳輸後面的數據。

這個過程叫做一個傳輸單元,最終一個幀會以四個字節的校驗碼結束 。其中最多會在Data這一節承載1500字節的數據。

如果我們把 一個幀當作一輛卡車 的話是這樣的:

車頭、車架、車輪都是封包的封裝結構,車廂就是封包中的數據

即便是數據再少,車頭、車架、車輪也是精簡不掉的。

但我們可以盡量的增加車廂的大小,讓一趟車盡量的運送更多的貨物。這就是降低了每次傳輸封包的損耗率。

所以,我們可以知道的傳輸速率是可以計算出來的,大致上 效率=真正的傳輸數據內容/幀大小 ,因此可以計算在一個MTU為1500的乙太網路上的效率計算則是 1500/(1500+38)=97.53% ,這還是幹凈的乙太網路幀,如果我們在交換機上附帶了Vlan等設定,我們就需要再加入VLan的封包子節數。還拿卡車做例子就是這樣的感覺:

一輛卡車被作為貨物裝入另一輛卡車。

這時候Vlan的四個字節的標記也得加進去,就成了 1500/(1500+38+4)=97.28%

所以說,在網路傳輸效率上, 一般以千兆太網是可以做到975.3Mbps的真實傳輸效率的,如果加了VLan可以做到972.8Mbps的傳輸效率 。當然了,這是理論最高數值。

這個數值除以8是不是就算是網路能傳檔的字節數了呢?還不是!

一般我們用SMB做檔分享和傳輸,這是TCP協定集裏面的一個協定:

看——也有包頭、控制、基礎數據等等一系列的額外內容在裏面。

因此 975.3Mbps 除以8 的121.9MB/秒 也不會是一個檔傳輸的真實數值,還得打折扣。

還是卡車,這個SMB是卡車車廂裏面的貨物而已但不是你的檔。

例如這輛卡車裏面裝的是蘋果膝上型電腦,你要的也是一台蘋果膝上型電腦,但是只要不是買二手,大部份電腦運送的時候還是有包裝箱的,這個包裝箱的一包就是SMB傳輸的封包。

而在你的購買行為裏面卻預設只是要層層包裝裏面的一台電腦。多余的東西實際上都是運輸損耗。

了解這些背景資訊,你就會發現,頻寬1000Mbps不變的情況下,你需要 降低附帶的這些協定包的損耗 。怎麽辦?加大車廂!

換一個更大車廂一次性裝更多的數據就好了。這裏就要用到交換機上的 巨型幀 了,是指 MTU大於 1500 的幀 。按照規範來說,巨型幀(jumbo frames)可以設定到9000字節。這個大小遠遠突破了IEEE 802.3乙太網路協定的限制。它可以做到在一個封裝好的乙太網路幀中最多傳輸9000字節的數據,也就是MTU=9000。

我們按照之前的效率演算法來計算一下就可以知道 效率=9000/(9000+38)= 99.58% ,比起預設乙太網路的97.53要多壓榨出了一些網路傳輸效能。

但是,要知道的是網路上不僅僅只是來回交換檔傳輸封包的內容,還會不停的 傳輸一些小包指令

這時候一個巨大的幀內有可能只傳輸一些極小的負載。例如一輛大貨櫃卡車裏面只裝了一小件貨物:

和卡車司機的困擾一樣,乙太網路要傳輸小包數據實際上也會占用相同的乙太網路幀大小。於是 十幾個字節的數據在巨型幀的交換機上也得占用幾百倍的傳輸頻寬 。這樣就會導致網路的效能不增反降。

一般的做法是 將兩種交換機分離開,專門做大型數據傳輸的使用設定好巨型幀的交換機進行傳輸 ,而一般的小指令小封包的傳輸會利用普通的MTU設定為1500的乙太網路交換機進行傳輸。

這就把儲存的網路和普通業務網路進行分離。為了配合儲存需求,也就出現了iscsi等專門跑在乙太網路上的儲存協定。當然了,也有一些光纖通道交換機專門跑儲存業務。這就有點脫離開大家經常用到的乙太網路的範疇了。

來源:知乎

公眾號讀者專屬技術群

構建高品質的技術交流社群,歡迎從事後端開發、運維技術進群( 備註崗位,已在技術交流群的請勿重復添加微信好友 )。主要以技術交流、內推、行業探討為主,請文明發言。 廣告人士勿入,切勿輕信私聊,防止被騙。

掃碼加我好友,拉你進群

PS:因為公眾號平台更改了推播規則,如果不想錯過內容,記得讀完點一下 在看 ,加個 星標 ,這樣每次新文章推播才會第一時間出現在你的訂閱列表裏。 在看 支持我們吧!