TCP/IP網路協議棧:乙太網資料包結構、802.3、MTU

rtoax發表於2020-12-06

TCP/IP網路協議棧:乙太網資料包結構、802.3

TCP/IP網路協議棧:ARP協議詳解

TCP / IP攻擊:ARP快取中毒的基本原理、TCP序列號預測和TCP重置攻擊

目錄

01 概述

02 TCP/IP四層模型

1、主機到網路層

2、網路互聯層

3、傳輸層

4、應用層

IEEE802網路的IP資料包封裝

常用的乙太網的封裝格式(RFC894)

MAC地址解析


01 概述


乙太網這個術語一般是指數字裝置公司(Digital Equipment Corp.)、英特爾公司(IntelCorp.)和Xerox公司在1982年聯合公佈的一個標準。它是當今TCP/IP採用的主要的區域網技術。幾年後,IEEE(電子電氣工程師協會)802委員會公佈了一個稍有不同的標準集,其中802.3針對整個CSMA/CD網路,802.4針對令牌匯流排網路,802.5針對令牌環網路。

網際網路早期的時候,主機間的互連使用的是NCP協議。這種協議本身有很多缺陷,如:不能互連不同的主機,不能互連不同的作業系統,沒有糾錯功能。為了改善這種缺點,大牛弄出了TCP/IP協議。現在幾乎所有的作業系統都實現了TCP/IP協議棧。TCP/IP不是一個單一協議,而是一個協議族的統稱。裡面包括了IP協議,IMCP協議,TCP協議,以及我們更加熟悉的HTTP、FHP協議等等。

首先我們看一下乙太網資料結構

注意資料長度為46~1500

從物理層上看,一個完整的乙太網幀有7個欄位,事實上前兩個欄位(前同步碼和SFD碼)並不能算是真正的乙太網資料幀,它們是網路卡在物理層上傳送乙太網資料時新增上的,是為了實現底層的正確傳輸。上圖中的目的地址,源地址,長度/型別屬於乙太網首部的部分。

特別說明:上面的目的地址和源地址是MAC,不是IP!!!!

關於OSI七層模型:應用層、表示層、會話層、傳輸層、網路層、資料鏈路層、和物理層,如下圖

 

02 TCP/IP四層模型


ISO制定的OSI參考模型的過於龐大、複雜招致了許多批評。與此對照,由技術人員自己開發的TCP/IP協議棧獲得了更為廣泛的應用。下圖,是TCP/IP參考模型和OSI參考模型的對比示意圖

TCP/IP參考模型分為四個層次:應用層、傳輸層、網路互連層和主機到網路層

在TCP/IP參考模型中,去掉了OSI參考模型中的會話層和表示層(這兩層的功能被合併到應用層實現)。同時將OSI參考模型中的資料鏈路層和物理層合併為主機到網路層。下面,分別介紹各層的主要功能。

 

1、主機到網路層


實際上TCP/IP參考模型沒有真正描述這一層的實現,只是要求能夠提供給其上層-網路互連層一個訪問介面,以便在其上傳遞IP分組。由於這一層次未被定義,所以其具體的實現方法將隨著網路型別的不同而不同。  

 

2、網路互聯層


網路互聯層是整個TCP/IP協議棧的核心。它的功能是把分組發往目標網路或主機。同時,為了儘快地傳送分組,可能需要沿不同的路徑同時進行分組傳遞。因此,分組到達的順序和傳送的順序可能不同,這就需要上層必須對分組進行排序。

網路互聯層定義了分組格式和協議,即IP協議(InternetProtocol)。

網路互聯層除了需要完成路由的功能外,也可以完成將不同型別的網路(異構網)互連的任務。除此之外,網路互聯層還需要完成擁塞控制的功能。

 

3、傳輸層


在TCP/IP模型中,傳輸層的功能是使源端主機和目標端主機上的對等實體可以進行會話。在傳輸層定義了兩種服務質量不同的協議。即:傳輸控制協議TCP(transmissioncontrol protocol)和使用者資料包協議UDP(userdatagram protocol)。

TCP協議是一個面向連線的、可靠的協議。它將一臺主機發出的位元組流無差錯地發往網際網路上的其他主機。在傳送端,它負責把上層傳送下來的位元組流分成報文段並傳遞給下層。在接收端,它負責把收到的報文進行重組後遞交給上層。TCP協議還要處理端到端的流量控制,以避免緩慢接收的接收方沒有足夠的緩衝區接收傳送方傳送的大量資料。

UDP協議是一個不可靠的、無連線協議,主要適用於不需要對報文進行排序和流量控制的場合。  

 

4、應用層


TCP/IP模型將OSI參考模型中的會話層和表示層的功能合併到應用層實現。

應用層面向不同的網路應用引入了不同的應用層協議。其中,有基於TCP協議的,如檔案傳輸協議(FileTransfer Protocol,FTP)、虛擬終端協議(TELNET)、超文字連結協議(HyperText Transfer Protocol,HTTP),也有基於UDP協議的。

各行資訊分別為:

  • Frame:   物理層的資料幀概況
  • Ethernet II: 資料鏈路層乙太網幀頭部資訊
  • Internet Protocol Version 4: 網際網路層IP包頭部資訊
  • Transmission ControlProtocol:  傳輸層T的資料段頭部資訊,此處是TCP
  • Hypertext Transfer Protocol:  應用層的資訊,

幾個常用的協議的功能我們通過一個形象的說法來展現

  • IP:I want to send data to 192.168.0.127
  • UDP:I want to send a datagram on the port N
  • TCP:I want to send data in a reliable way onthe port N (reliable:可靠的)
  • ARP:who knows 192.168.0.127's MAC address?
  • RARP:who knows 21.21.12.21.21.12's IP address?
  • ICMP:I send or receive queries or error message
  • DHCP:I want to get an IP address
  • DNS:what is the IP address of www.baidu.com?

 

IEEE802網路的IP資料包封裝


在TCP/IP世界中,乙太網IP資料包的封裝是在RFC894中定義的,IEEE802網路的IP資料包封裝是在RFC1042中定義的。最常使用的封裝格式是RFC 894定義的格式。下圖顯示了兩種不同形式的封裝格式。

從上圖看到,兩種幀格式都採用48bit(6位元組)的目的地址和源地址。

接下來的2個位元組在兩種幀格式中互不相同。

在802標準定義的幀格式中,長度欄位是指它後續資料的位元組長度,但不包括CRC檢驗碼。

乙太網的型別欄位定義了後續資料的型別。而在802標準定義的幀格式中,型別欄位則由後續的子網接入協議的首部給出。

幸運的是,802定義的有效長度值與乙太網的有效型別值無一相同,這樣,就可以對兩種幀格式進行區分。

長度/型別有兩個意義,小於1518,代表後面欄位的長度(也就是IEEE802.2/802.3(RFC1042)),大於1518,代表不同的型別(乙太網的封裝格式(RFC894))

  • 0800 指IP資料型別
  • 0806 指ARP協議,通過IP地址獲得對應的MAC地址,稱為地址解析協議
  • 8035 指RARP協議,通過MAC地址來獲得對應的IP地址,稱為逆向地址解析協議

在乙太網幀格式中,型別欄位之後就是資料。而在802幀格式中,後面是3位元組的802.2LLC,它是由目的服務訪問點(DestinationService Access Point,DSAP)、源服務訪問點(SourceService Access Point,SSAP)和Ctrl欄位組成,DSAP和SSAP預設值是0xaa,Ctrl預設是3。再接下來的2個位元組型別欄位和乙太網幀格式一樣。

802.3標準定義的幀和乙太網的幀都有最小長度要求。802.3規定資料部分必須至少為38位元組,而對於乙太網,則要求最少要有46位元組。為了保證這一點,必須在不足的空間插入填充(pad)位元組。

 

常用的乙太網的封裝格式(RFC894)


下面只講最常用的乙太網的封裝格式(RFC894)

特別說明:上面的目的地址和源地址是MAC,不是IP!!!!

 

MAC地址解析


MAC地址前3個位元組:組織身份標記  後3個位元組:組織自行分配

第1個位元組

  • b0:0表示單播,1表示組播
  • b1:0表示被某個組織使用,1表示個人使用

例子:

02-00-00-00-00-01:本地分配

00-50-C2-xx-xx-xx:ST的MAC地址

01-00-5E-xx-xx-xx:IPv4的多播地址

FF-FF-FF-FF-FF-FF:廣播地址

上文說到,乙太網和802.3對資料幀的長度都有一個限制,其最大值分別是1500和1492位元組。鏈路層的這個特性稱作MTU,最大傳輸單元。不同型別的網路大多數都有一個上限。如果IP層有一個資料包要傳,而且資料的長度比鏈路層的MTU還大,那麼IP層就需要進行分片,把資料包分成若干片,這樣每一片都小於MTU,IP分片的問題會在講解IP協議的時候講解。下圖列出了一些典型的MTU值。

我們將用netstat命令列印出網路介面的MTU。

- i引數將列印出介面資訊,- n引數則列印出IP地址,而不是主機名字。

這個命令列印出每個介面的MTU、輸入分組數、輸入錯誤、輸出分組數、輸出錯誤、衝突以及當前的輸出佇列長度。

 

相關文章