以太网帧:Ethernet Frame
標準的以太網幀,我們經常說的以太網幀長度是從圖中 Destination MAC開始,FCS結束。網卡對網絡層數據的操作是加以太網幀頭、以太網幀尾FCS,很顯然上層需要提供目的MAC地址,否則接口無從完成以太網幀的封裝。這需要IP層需要事先完成和ARP的交互,解析出目的IP對應的目的MAC,這顯然不能由網卡來完成。
網卡對物理層接收到的二進制流成幀處理,校驗FCS,去掉以太網幀頭,把載荷Payload 放在接收緩存,等待網絡層取走。
標準的以太網幀最大可以發送長度1518字節,指的就是這個。去掉以太網頭14個字節,再去掉尾部的校驗和FCS 4個字節,留給上層協議也就是(1518-14-4)=1500個字節,這個就是MTU的由來。上層協議加黑的原因是要引起大家的注意,這個上層協議如果是IP,那么就是IP MTU,如果是MPLS,就是MPLS MTU,如果是IPv6,那就是IPv6 MTU。
Ether Type:以太網協議
網卡用來分辨封裝的是什么協議,然后再通知不同的協議模塊來取走數據。
Payload:載荷
這個允許負荷的最大長度對應的就是負荷的最大傳輸單元,即MTU,標準的以太網幀,允許的最大負荷長度為1500字節,所以如果上層協議為IPv4,那就是IPv4 MTU=1500,所以經常看到主機的MTU為1500字節。
FCS:校驗碼
為了防止在傳輸過程中發生錯誤,數據發送方的網卡會計算一個校驗碼,覆蓋整個以太網幀,并放在以太網幀尾部,發送出去,接收網卡需要對其進行校驗,來決定是否接收。而如果不校驗,一個錯誤的幀可能要到TCP、UDP才能被發現出來,這樣的話會浪費很多CPU資源。CPU會說:屁大點的事都搞不定,還要勞煩朕,可以去自宮了。而如果網卡來進行校驗,錯了就默默地丟棄,不驚動高層,高層肯定偷偷樂開了花。
Jumbo Frame
最早的以太網是通過Hub或集線器來工作的,在任意時刻只能有一臺主機發送,這種共享方式發送效率很低,而現代高速交換機則讓每個連接交換機的主機工作在獨占模式,帶寬獨享,可以同時收發,而且現在早已不是早期的10Mbps的帶寬,而是1000M、10000M,即使發送大包也不會影響別的主機,影響的只是交換機的接收和發送隊列,既然發送大包效率要比小包效率搞,而且特定的應用也有發大包的需求,比如NFS文件系統,那為什么不把接口MTU提高一些,再高一些呢?這是一個好主意,于是網卡、交換機、路由器網絡接口可以實現更大的MTU,可以達到>9000字節的大小,我們稱這種遠大于標準以太幀尺寸的幀為巨型幀Jumbo Frame 。
于是網絡接口提供可以修改MTU的配置命令,比如缺省為1500,可以修改為1508以支持QinQ,或者1512以支持802.1q Mpls label,這樣既可以支持終端用戶標準1500 字節IP packet,又可以避免分片。
有一點需要說明,二層交換機的接口,我們可以看成一塊普通的網卡,網卡工作在數據鏈路層,所以分片不是它的職責,如果一個幀需要從交換機一個接口發送出去,而幀的長度>接口MTU,怎么辦?丟棄!會發什么消息告訴源主機吧?不會的,默默地丟,當什么否沒有發生,這種情況最難以排查,如果traceroute可以看到端對端使通的,而發送數據就是會失敗。所以切記,一臺交換機要保證接口MTU的一致性。如果在一個VLAN上、或整個交換機都采用同樣的MTU,就不會發生上述情況。而如果入接口是9000字節,而出接口是1500,就會發生上述問題。
如果一條物理鏈路的兩端MTU不一致,則會發生什么情況,比如一側是1500,一側是9000,1500一側發出來的數據肯定沒有問題,但是如果從9000側發給1500呢?數據也背默默地丟了。為什么呢?我們來談另外一個很少提及的詞匯:MRU,最大接收單元。
最大接收單元MRU
我們一直談的最大傳輸單元MTU是關于出方向的流量處理,而MRU恰恰相反,是關于入方向的流量處理。
一般情況下MTU = MRU,比如9000側的數據到達1500,由于9000>MRU ,所以直接默默丟棄。
所以在配置鏈路時,要確保兩側的設備MTU要匹配,無論各家廠商對MTU理解如何、實現如何,一定要保證兩端匹配,即各自允許在以太網線上發送、接收的數據流,即以太網幀的最大長度一樣!
總結
以上是生活随笔為你收集整理的以太网帧:Ethernet Frame的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新婚新居同时办的对联怎么写
- 下一篇: 节日想送朋友筷子,家用的,有什么品牌推荐