以太網的實作采用層次結構的概念,每一層都有自己的功能,就像建築物一樣,每一層都靠下一層支援,每一層都為上一層功能的實作打好基礎。
實際上,使用者接觸到的隻是最上面的一層,根本感覺不到底層的存在。要了解與以太網,必須從最下層開始,自下而上了解每一層的功能。
五層結構
以太網的模型有不同的分層方式,ISO(國際标椎組織)提出OSI七層網絡模型,自上而下分别為:應用層,表示層,會話層,傳輸層,網絡層,資料鍊路層,實體層。OSI七層模型主要是為了解決異種網絡互連時所遇到的相容性問題。它最大的優點是将服務,接口和協定這三個概念明确區分來,也使網絡的不同功能子產品承擔起不同的職責。由于網際網路網絡體系結構以TCP/IP協定為核心 ,因而基于TCP/IP的參考模型将以太網可以分為四層,自上而下分别為:應用層,傳輸層,網絡互聯層,網絡接口層。
根據個人了解,把以太網分成五層比較容易了解。這五層結構不盡符合OSI結構強調的不同層次承擔不同的職責的特點,同時也符合TCP/IP協定參考模型協定之間互相支援,互相調用的邏輯關系。

如上圖所示,最底下的一層叫做'實體層',也叫作‘PHY層’,最上層的一層叫做“應用層”,中間的三層(自下而上)分别是“鍊路層”也叫“MAC層” “網絡層”和“傳輸層”。越下面的層,越靠近硬體;越上面的層越接近使用者。
層與協定
每一層都有其各自的功能,為了實作這些功能,需要大家都遵循一個共同的規則
那麼這個共同的規則,就叫做協定。以太網的每一層都定義了很多協定。這些協定的總稱就叫做“網際網路協定”,他們是網際網路的核心,下面介紹每一層的功能,及其中的主要協定。
下面對以太網的五層結構模型進行詳細解釋,讓大家對網絡的通信過程,每層的具體定義和功能,資料收發機制以及要遵守的協定進行了解。不同層由于封裝包機制不同,資料的叫法也不同,這樣有利于大家更好的了解下面的内容。傳輸層叫做段,網絡層叫資料報,鍊路層叫做幀。
實體層也叫作“PHY層”,它負責将上層所要發送的資訊編碼成電流脈沖或其他信号用于網上傳輸。
實體層由計算機和網絡媒體之間的實際界面組成,可定義成電氣信号,信号線的狀态和時鐘要求,資料編碼和資料傳輸用的連接配接器。如常用的RS-232規範,曼徹斯特編碼就屬于這一層,所有比實體層高的層都通過事先定義好的接口而與他通話。
鍊路層
資料鍊路層通過實體網絡鍊路提供可靠的資料傳輸。不同的資料鍊路層定義了不同的網絡和協定特征,其中包括實體編址,網絡拓撲結構,錯誤校驗,幀序列以及流控
實體編址(相對應的是網絡編址)定義了裝置在資料鍊路層的編址方式;網絡拓撲結構定義了裝置的實體連接配接方式,如總線拓撲結構和環拓撲結構,錯誤校驗向發生傳輸錯誤的上層協定告警;資料幀序列重新整理并傳輸除序列以外的幀;流控可能延緩資料的傳輸以便接收裝置不會因為在某一時刻接收到超過其處理能力的資訊流而崩潰。
以太網協定
早期的時候,每家公司都有自己的電信号分組方式,後來逐漸形成了以“以太網”為主的一整套協定。
以太網規定,一組電信号構成一個資料包,叫做“幀”,每一幀分成三個部分:以太網首部 資料 以及以太網尾部。
“以太網首部”包括資料幀的一些說明項,比如發送者 接收者 資料類型等等 “資料”部分則是資料的具體内容;“以太網尾部”則是CRC校驗碼。
以太網首部的長度固定為14位元組。資料的長度最短為46位元組,最長為1500位元組,以太網尾部的長度固定4位元組,是以整個幀最短為64位元組,最長1518位元組,如果資料很長,就必須分割成多個幀進行發送。
MAC位址
上面提到了 以太網資料幀的首部 包含了發送者和接收者的資訊,那麼發送者和接收者是如何辨別的
以資料鍊路層實際上由兩個獨立的部分組成 媒體存取控制和邏輯鍊路控制層。MAC 描述在共享, 媒體環境中如何進行站的排程、發生和接收資料。MAC 確定資訊跨鍊路的可靠傳輸,對資料傳輸進行同步,識别錯誤和控制資料的流向。一般地講,MAC 隻在共享媒體環境中才是重要的,隻有在共享媒體環境中多個節點才能連接配接到同一 傳輸媒體上。IEEE MAC 規則定義了位址,也就是 MAC 位址,以辨別資料鍊路層中的多個裝置,是以鍊路層也叫“MAC 層”。
每塊網卡出廠的時候,都有一個全世界獨一無二的 MAC 位址,長度是 48 個二進制位,通常用 12 個十六進制數表示。
前 6 個十六進制數是廠商編号,後 6 個是該廠商的網卡流水号。有了 MAC 位址,就可以定位網卡和資料包的路徑了。
廣播
定義位址隻是第一步, 那麼一塊網卡怎麼會知道另一塊網卡的 MAC 位址? ARP 協定可以解決這個問題。這個留到後面介紹,這裡隻需要知道,以太網資料幀必須知道接收方的 MAC 位址,然後才能發送。 其次,就算有了 MAC 位址,系統怎樣才能把資料幀準确送到接收方?
其實,以太網采用了一種很“原始”的方式,它不是把資料幀準确送到接收 方,而是向本網絡内所有計算機發送,讓每台計算機自己判斷,是否為接收方。 它們讀取這個幀的“首部”,找到接收方的 MAC 位址,然後與自身的 MAC 位址相比較,如果兩者相同,就接受這個幀,做進一步處理,否則就丢棄這一幀。這種發送方式就叫做“廣播”(broadcasting)。 有了資料幀的定義、網卡的 MAC 位址、廣播的發送方式,“鍊路層”就可以 在多台計算機之間傳送資料了。
網絡層
網絡層負責在源和終點之間建立連接配接。它一般包括網絡尋徑,還可能包括流量控制、錯誤檢查等。相同 MAC 标準的不同網段之間的資料傳輸一般隻涉及到資料鍊路層,而不同的 MAC 标準之間的資料傳輸都涉及到網絡層。例如 IP 路由器工作在網絡層,因而可以實作多種網絡間的互聯。
規定網絡位址的協定,叫做 IP 協定。它所定義的位址,就被稱為 IP 位址。 目前,廣泛采用的是 IP 協定第四版,簡稱 IPv4。這個版本規定,網絡位址由 32 個二進制位組成。
習慣上,我們用分成四段的十進制數表示 IP 位址,從 0.0.0.0 一直到 255.255.255.255。 網際網路上的每一台計算機,都會配置設定到一個 IP 位址。這個位址分成兩個部 分,前一部分代表網絡,後一部分代表主機。比如,IP 位址 172.16.254.1,這 是一個 32 位的位址,假定它的網絡部分是前 24 位(172.16.254),那麼主機部分就是後 8 位(最後的那個 1)。處于同一個子網絡的電腦,它們 IP 位址的網絡部分必定是相同的,也就是說 172.16.254.2 應該與 172.16.254.1 處在同一個子網絡。
根據 IP 協定發送的資料,就叫做 IP 資料報。不難想象,其中必定包括 IP 位址資訊。 但是前面說過,以太網資料幀隻包含 MAC 位址,并沒有 IP 位址的資訊。那麼是否需要修改資料定義,再添加 IP 位址資訊呢? 答案是不需要,我們可以把 IP 資料報直接放進以太網資料幀的“資料”部分, 是以完全不用修改以太網的規格。這就是網際網路分層結構的好處:上層的變動完全不涉及下層的結構。 具體來說,IP 資料報分為“标頭”和“資料”兩個部分。
“标頭”部分主要包括版本、長度、IP 位址等資訊,“資料”部分則是 IP 資料報的具體内容。 IP 資料報的“标頭”部分長度為 20 到 60 位元組,整個資料報的總長度最大為 65,535 位元組。是以理論上,一個 IP 資料報的“資料”部分,最長為 65,515 字 節。前面說過,以太網資料幀的“資料”部分,最長隻有 1500 位元組。是以,如 果 IP 資料報超過了 1500 位元組,它就需要分割成幾個以太網資料幀,分開發送了。
傳輸層
傳輸層向高層提供可靠的端到端的網絡資料流服務。傳輸層的功能一般包括流控、多路傳輸、虛電路管理及差錯校驗和恢複。流控管理裝置之間的資料傳輸, 確定傳輸裝置不發送比接收裝置處理能力大的資料;多路傳輸使得多個應用程式的資料可以傳輸到一個實體鍊路上;虛電路由傳輸層建立、維護和終止;差錯校驗包括為檢測傳輸錯誤而建立的各種不同結構;而差錯恢複包括所采取的行動 (如請求資料重發),以便解決發生的任何錯誤
udp協定
我們必須在資料包中加入端口資訊,這就需要新的協定。最簡單的實作叫做 UDP 協定,UDP 資料段也是由“标頭”和“資料”兩部分組成。
“标頭”部分主要定義了發出端口和接收端口,“資料”部分就是具體的内 容。然後,把整個 UDP 資料段放入 IP 資料報的“資料”部分,而 IP 資料報又是放在以太網資料幀之中的。 UDP 資料段非常簡單,“标頭”部分一共隻有 8 個位元組,總長度不超過 65,535 位元組,正好放進一個 IP 資料報。
TCP協定
為了提高網絡可靠性,誕生了 TCP 協定。這個協定非常複雜,但可以近似認為,它就是有确認機制的 UDP 協定,每發出一個資料都要求确認。如果有一個資料遺失,就收不到确認,發出方就知道有必要重發這個資料了。 TCP 協定能夠確定資料不會遺失,缺點是過程複雜、實作困難、消耗較多的資源。TCP 資料段和 UDP 資料段一樣,都是内嵌在 IP 資料報的“資料”部分。 TCP 資料段沒有長度限制,理論上可以無限長,但是為了保證網絡的效率,通常 TCP 資料段的長度不會超過 IP 資料報的長度,以確定單個 TCP 資料段不必再分割。
應用層
應用層是最接近終端使用者的第一層,這就意味着應用層和使用者之間是通過應用軟體直接互相作用的。注意,應用層并非由計算機上運作的實際應用軟體組成,而是由向應用程式提供通路網絡資源的API(應用程式接口)組成,應用層的功能一般包括辨別通信夥伴,應用層必須為傳輸層資料的應用子程式定義通信夥伴的辨別和可用性。定義資源可用性時,應用層為了請求通信而必須判定是否有足夠的網絡資源,在同步通信中,所有應用程式之間的通信都需要應用層的協同操作。
應用程式收到“傳輸層”的資料,接下來就要進行解讀。由于網際網路是開放 架構,資料來源五花八門,必須事先規定好格式,否則根本無法解讀。“應用層” 的作用,就是規定應用程式的資料格式。 應用層的 HTTP(超文本傳輸)協定、DNS(域名解析)協定、FTP(檔案傳送)協定、SMTP(簡單郵件管理)協定等。
舉例來說,TCP 協定可以為各種各樣的程式傳遞資料,比如發 Email 用的 SMTP(簡單郵件管理)協定、網上沖浪用到的 HTTP(超文本傳輸)協定、下載下傳資料用到的 FTP(檔案傳送)協定等等,這些應用程式協定就構成了“應用層”。 這是最高的一層,直接面對使用者。它的資料就放在 TCP 資料段的“資料”部 分。是以,現在的以太網的資料幀就變成下圖這樣。
至此,整個以太網的五層結構就介紹完畢。包括計算機和單片機在内的任何裝置需要聯網,就必須搭建這五層實體連接配接以及處理層内和層與層之間的 TCP/IP 協定方能實作網絡應用。
以太網的接入方案
以太網的五層結構模型及各層所要實作的功能,按 照這一模型誕生出了各式各樣的單片機網絡連接配接方案來滿足客戶的不同要求。單片機的種類繁多,從低端到高端,有以 51 單片機為代表的 8 位單片機和以 ARM 為代表的 32 位單片機,不同檔次的單片機實作網絡接口的方法不同。對于像 ARM 等高端處理器一般都可以運作嵌入式作業系統,例如嵌入式 Linux。對于無操作系 統要求的單片機如何實作網絡接入,我下面将這些方案按 TCP/IP 協定棧的不同歸 結為兩大類:第一類是傳統的軟體TCP/IP協定棧方案;第二類是最新的硬體TCP/IP 協定棧方案。下面我就這兩類方案的實作方式進行分析。
MAC + PHY方案
所謂的 TCP/IP 協定棧是一系列網絡協定的統稱,不僅包括我們熟知的 TCP 協 議和 IP 協定,還有網絡層的 ICMP(Internet 控制封包)協定、IGMP(Internet 組 管理)協定、ARP(位址解析)協定,傳輸層的 UDP(使用者資料包)協定,應用層 的 HTTP(超文本傳輸)協定、DNS(域名解析)協定、FTP(檔案傳送)協定、 SMTP(簡單郵件管理)協定等等。
傳統的以太網接入方案如下圖,由 MCU+MAC+PHY 再加入網絡接口實作以太網的實體連接配接,通過在主要晶片中植入 TCP/IP 協定代碼實作通信及上層應用。
應用這種軟體TCP/IP。由于軟體協定棧操作需要主要 MCU 不斷地響應中斷,這在很大程度上占用了 MCU 的運算/時鐘資源。經過測試發現,單線程操作的情況下,MCU 的運作速度和資料的處理速度僅能滿足需要,但随着線程增多,MCU 的工作效率直線下降,會 嚴重影響通信品質。
代碼量方面,即便是采用輕量級的 TCP/IP 協定棧 LWIP 協定,也會為主要芯 片帶來超過 40KB 的代碼量,這對于本身記憶體資源匮乏的單片機來說負荷過重。
再從安全性的角度,裝置并入網際網路之後必須考慮網絡安全問題,這種軟體協 議棧的方式系統一旦受到複雜的惡意攻擊,單片機很有可能癱瘓掉,這對系統就 是緻命性打擊,雖然目前網絡技術不斷發展,各類新的加密技術試圖讓通信變得 更加安全,但是還會出現各種各樣的漏洞。
硬體協定棧晶片方案
硬體協定棧晶片方案如下圖所示。由 MCU+硬體協定棧晶片(内含 MAC和 PHY) 直接加網絡接口,便可友善的實作單片機聯網,所有的處理 TCP/IP 協定的工作都 是通過這位 MCU 的“小秘書”——硬體協定棧晶片來完成。
所謂硬體協定棧是指通過将傳統的軟體 TCP/IP 協定棧用硬體化的邏輯門電路 來實作,如下圖所示。
以太網晶片的核心由傳輸層的 TCP、UDP、ICMP、IGMP 等協定、網絡層的 IP、 ARP、PPPoE 等協定以及鍊路層的 MAC 構成,再加上實體層的 PHY 和外圍的寄存 器、記憶體、SPI 接口組成了這一整套硬體化的以太網解決方案。
這套硬體 TCP/IP 協定棧代替了以往的 MCU 來處理這些中斷請求,即 MCU 隻 需要處理面向使用者的應用層資料即可,傳輸層、網絡層、鍊路層及實體層全部由 外圍 WIZnet 的晶片完成。這套方案從硬體開銷和軟體開發兩個方面來簡化前面所 述的五層網絡模型,簡化産品開發方案。這樣一來,工程師們就不必再面對繁瑣 的通信協定代碼,隻需要了解簡單的寄存器功能以及 Socket 程式設計便能完成産品開 發工作的的網絡功能開發部分。
由于硬體協定棧的加入協助單片機處理了幾乎所有的 TCP/IP 協定工作,不僅 極大地減少了單片機的中斷次數,讓單片機騰出更多資源去完成其他工作,而且 硬體化的電路處理協定會更加快速、穩定。經試驗測試,單線程下,該方案的通 信速度是軟體協定方案的 10 倍左右;随着線程的增加,因為硬體協定棧是通過獨 立的 Socket 進行通信,因而通信速度實作累加,而且單片機工作效率仍然會維持 在高位。
代碼量方面,因為這套方案主要是完成對 Socket 的程式設計以及寄存器的調用, 是以僅有 10K 左右的代碼量,遠小于軟體協定方案,對 51 以及 STM32 等記憶體很 有限的單片機來說非常适用。
從成本角度來講,硬體協定棧晶片的價格跟用 MAC+PHY 比起來基本差不多。 而前者簡單易用,用很短時間便能完成産品的開發過程。另外,官方例程庫及上 位機程式豐富,也縮短了測試過程,後期基本免于維護。
最後安全性方面,硬體化的邏輯門電路來處理 TCP/IP 協定是不可攻擊的,也 就是說網絡攻擊和病毒對它無效,這也充分彌補了網絡協定安全性不足的短闆。 也正是因為這一優勢,硬體協定棧技術在未來物聯網以及智能家居領域有着廣泛 的發展前景,讓人們盡情享受現代科技帶來的樂趣的同時,免受安全問題的困擾。
當然,不可避免的硬體化的協定棧相對來說失去了軟體協定棧那樣的靈活性。 目前隻支援 4 個/8 個 Socket,不能随時開啟更多 Socket。但是,在嵌入式應用中 8 個 Socket 已經足夠應對超過大部分的應用。