網絡通信協議
一般地,關注於邏輯數據關系的協議通常被稱為上層協議,而關注於物理數據流的協議通常被稱為低層協議。
IEEE802就是一套用來管理物理數據流在局域網中傳輸的標准,包括在局域網中傳輸物理數據的802.3以太網標准。還有一些用來管理物理數據流在使用串行介質的廣域網中傳輸的標准,如幀中繼FR(FrameRelay),高級數據鏈路控制HDLC(High-LevelDataLinkControl),異步傳輸模式ATM(AsynchronousTransferMode)。
分層模型0OSI
國際標准化組織ISO於1984年提出了OSIRM(OpenSystemInterconnectionReferenceModel,開放系統互連參考模型)。OSI參考模型很快成為了計算機網絡通信的基礎模型。
OSI參考模型具有以下優點:簡化了相關的網絡操作;提供了不同廠商之間的兼容性;促進了標准化工作;結構上進行了分層;易於學習和操作。
OSI參考模型各個層次的基本功能如下:
- 物理層:在設備之間傳輸比特流,規定了電平、速度和電纜針腳。
- 數據鏈路層:將比特組合成字節,再將字節組合成幀,使用鏈路層地址(以太網使用MAC地址)來訪問介質,並進行差錯檢測。
- 網絡層:提供邏輯地址,供路由器確定路徑。
- 傳輸層:提供面向連接或非面向連接的數據傳遞以及進行重傳前的差錯檢測。
- 會話層:負責建立、管理和終止表示層實體之間的通信會話。該層的通信由不同設備中的應用程序之間的服務請求和響應組成。
- 表示層:提供各種用於應用層數據的編碼和轉換功能,確保一個系統的應用層發送的數據能被另一個系統的應用層識別。
- 應用層:OSI參考模型中最靠近用戶的一層,為應用程序提供網絡服務。
分層模型-TCP/IP
TCP/IP模型同樣采用了分層結構,層與層相對獨立但是相互之間也具備非常密切的協作關系。
TCP/IP模型將網絡分為四層。TCP/IP模型不關注底層物理介質,主要關注終端之間的邏輯數據流轉發。TCP/IP模型的核心是網絡層和傳輸層:網絡層解決網絡之間的邏輯轉發問題,傳輸層保證源端到目的端之間的可靠傳輸。最上層的應用層通過各種協議向終端用戶提供業務應用。
數據封裝
應用數據需要經過TCP/IP每一層處理之后才能通過網絡傳輸到目的端,每一層上都使用該層的協議數據單元PDU(ProtocolDataUnit)彼此交換信息。
如上層數據在傳輸層添加TCP報頭后得到的PDU被稱為Segment(數據段);數據段被傳遞給網絡層,網絡層添加IP報頭得到的PDU被稱為Packet(數據包);數據包被傳遞到數據鏈路層,封裝數據鏈路層報頭得到的PDU被稱為Frame(數據幀);最后,幀被轉換為比特,通過網絡介質傳輸。這種協議棧逐層向下傳遞數據,並添加報頭和報尾的過程稱為封裝。
終端之間的通信
- 數據鏈路層控制數據幀在物理鏈路上傳輸。
數據包在以太網物理介質上傳播之前必須封裝頭部和尾部信息。封裝后的數據包稱為稱為數據幀,數據幀中封裝的信息決定了數據如何傳輸。以太網上傳輸的數據幀有兩種格式,選擇哪種格式由TCP/IP協議簇中的網絡層決定。
幀格式
以太網上使用兩種標准幀格式。第一種是上世紀80年代初提出的DIXv2格式,即EthernetII幀格式。EthernetII后來被IEEE802標准接納,並寫進了IEEE802.3x-1997的3.2.6節。第二種是1983年提出的IEEE802.3格式。
這兩種格式的主要區別在於,EthernetII格式中包含一個Type字段,標識以太幀處理完成之后將被發送到哪個上層協議進行處理。IEEE802.3格式中,同樣的位置是長度字段。
不同的Type字段值可以用來區別這兩種幀的類型,當Type字段值小於等於1500(或者十六進制的0x05DC)時,幀使用的是IEEE802.3格式。當Type字段值大於等於1536(或者十六進制的0x0600)時,幀使用的是EthernetII格式。以太網中大多數的數據幀使用的是EthernetII格式。
以太幀中還包括源和目的MAC地址,分別代表發送者的MAC和接收者的MAC,此外還有幀校驗序列字段,用於檢驗傳輸過程中幀的完整性。
Ethernet_II幀格式
- Ethernet_II幀類型值大於等於1536(0x0600)。
- 以太網數據幀的長度在64-1518字節之間。
Ethernet_II的幀中各字段說明如下:
- DMAC(DestinationMAC)是目的MAC地址。DMAC字段長度為6個字節,標識幀的接收者。
- SMAC(SourceMAC)是源MAC地址。SMAC字段長度為6個字節,標識幀的發送者。
- 類型字段(Type)用於標識數據字段中包含的高層協議,該字段長度為2個字節。類型字段取值為0x0800的幀代表IP協議幀;類型字段取值為0806的幀代表ARP協議幀。
- 數據字段(Data)是網絡層數據,最小長度必須為46字節以保證幀長至少為64字節,數據字段的最大長度為1500字節。
- 循環冗余校驗字段(FCS)提供了一種錯誤檢測機制。該字段長度為4個字節。
EEE802.3幀格式
- EEE802.3幀長度字段值小於等於1500(0x05DC)。
EEE802.3幀格式類似於Ethernet_II幀,只是Ethernet_II幀的Type域被802.3幀的Length域取代,並且占用了Data字段的8個字節作為LLC和SNAP字段。
- Length字段定義了Data字段包含的字節數。
- 邏輯鏈路控制LLC(LogicalLinkControl)由目的服務訪問點DSAP(DestinationServiceAccessPoint)、源服務訪問點SSAP(SourceServiceAccessPoint)和Control字段組成。
- SNAP(Sub-networkAccessProtocol)由機構代碼(OrgCode)和類型(Type)字段組成。Orgcode三個字節都為0。Type字段的含義與Ethernet_II幀中的Type字段相同。IEEE802.3幀根據DSAP和SSAP字段的取值又可分為以下幾類:
- 當DSAP和SSAP都取特定值0xff時,802.3幀就變成了Netware-ETHERNET幀,用來承載NetWare類型的數據。
- 當DSAP和SSAP都取特定值0xaa時,802.3幀就變成了ETHERNET_SNAP幀。ETHERNET_SNAP幀可以用於傳輸多種協議。
- DSAP和SSAP其他的取值均為純IEEE802.3幀。
數據幀傳輸
- 數據鏈路層基於MAC地址進行幀的傳輸。
以太網在二層鏈路上通過MAC地址來唯一標識網絡設備,並且實現局域網上網絡設備之間的通信。MAC地址也叫物理地址,大多數網卡廠商把MAC地址燒入了網卡的ROM中。發送端使用接收端的MAC地址作為目的地址。以太幀封裝完成后會通過物理層轉換成比特流在物理介質上傳輸。
以太網的MAC地址
網絡設備的MAC地址是全球唯一的。MAC地址長度為48比特,通常用十六進制表示。MAC地址包含兩部分:前24比特是組織唯一標識符(OUI,OrganizationallyUniqueIdentifier),由IEEE統一分配給設備制造商。
例如,華為的網絡產品的MAC地址前24比特是0x00e0fc。后24位序列號是廠商分配給每個產品的唯一數值,由各個廠商自行分配(這里所說的產品可以是網卡或者其他需要MAC地址的設備)。
單播
局域網上的幀可以通過三種方式發送。第一種是單播,指從單一的源端發送到單一的目的端。每個主機接口由一個MAC地址唯一標識,MAC地址的OUI中,第一字節第8個比特表示地址類型。對於主機MAC地址,這個比特固定為0,表示目的MAC地址為此MAC地址的幀都是發送到某個唯一的目的端。在沖突域中,所有主機都能收到源主機發送的單播幀,但是其他主機發現目的地址與本地MAC地址不一致后會丟棄收到的幀,只有真正的目的主機才會接收並處理收到的幀。
廣播
第二種發送方式是廣播,表示幀從單一的源發送到共享以太網上的所有主機。廣播幀的目的MAC地址為十六進制的FFFF
FF:FF,所有收到該廣播幀的主機都要接收並處理這個幀。
廣播方式會產生大量流量,導致帶寬利用率降低,進而影響整個網絡的性能。
當需要網絡中的所有主機都能接收到相同的信息並進行處理的情況下,通常會使用廣播方式。
組播
第三種發送方式為組播,組播比廣播更加高效。組播轉發可以理解為選擇性的廣播,主機偵聽特定組播地址,接收並處理目的MAC地址為該組播MAC地址的幀。
組播MAC地址和單播MAC地址是通過第一字節中的第8個比特區分的。組播MAC地址的第8個比特為1,而單播MAC地址的第8個比特為0。
當需要網絡上的一組主機(而不是全部主機)接收相同信息,並且其他主機不受影響的情況下通常會使用組播方式。
數據幀的接收與發送
幀從主機的物理接口發送出來后,通過傳輸介質傳輸到目的端。共享網絡中,這個幀可能到達多個主機。主機檢查幀頭中的目的MAC地址,如果目的MAC地址不是本機MAC地址,也不是本機偵聽的組播或廣播MAC地址,則主機會丟棄收到的幀。
如果目的MAC地址是本機MAC地址,則接收該幀,檢查幀校驗序列(FCS)字段,並與本機計算的值對比來確定幀在傳輸過程中是否保持了完整性。如果幀的FCS值與本機計算的值不同,主機會認為幀已被破壞,並會丟棄該幀。如果該幀通過了FCS校驗,則主機會根據幀頭部中的Type字段來確定將幀發送給上層哪個協議處理。本例中,Type字段的值為0x0800,表明該幀需要發送到IP協議上處理。在發送給IP協議之前,幀的頭部和尾部會被剝掉。
總結
網絡設備如何確定以太網數據幀的上層協議?
以太網幀中包含一個Type字段,表示幀中的數據應該發送到上層哪個協議處理。比如,IP協議對應的Type值為0x0800,ARP協議對應的Type值為0x0806。
終端設備接收到數據幀時,會如何處理?
主機檢查幀頭中的目的MAC地址,如果目的MAC地址不是本機MAC地址,也不是本機偵聽的組播或廣播MAC地址,則主機會丟棄收到的幀。如果目的MAC地址是本機MAC地址,則接收該幀,檢查幀校驗序列(FCS)字段,並與本機計算的值對比來確定幀在傳輸過程中是否保持了完整性。如果檢查通過,就會剝離幀頭和幀尾,然后根據幀頭中的Type字段來決定把數據發送到哪個上層協議進行后續處理。