以太網數據格式與封裝解封
我們在上一文中介紹了以太網5層模型,這一節我想學習一下以太網數據封裝與解封的知識,了解以太網數據是如何傳輸的。
一、數據封裝
當我們應用程序用TCP傳輸數據的時候,數據被送入協議棧中,然后逐個通過每一層,知道最后到物理層數據轉換成比特流,送入網絡。而再這個過程中,每一層都會對要發送的數據加一些首部信息。整個過程如下圖。

如圖可以看出,每一層數據是由上一層數據+本層首部信息組成的,其中每一層的數據 ,稱為本層的協議數據單元 ,即PDU.
應用層數據在傳輸層添加TCP報頭后得到的PDU被稱為 Segment(數據段 ),圖示為TCP段
傳輸層的數據(TCP段)傳給網絡層,網絡層添加IP報頭得到的PDU被稱為Packet(數據包); 圖示為IP數據包
網絡層數據報(IP數據包)被傳遞到數據鏈路層,封裝數據鏈路層報頭得到的PDU被稱為Frame(數據幀),圖示為以太網幀。
最后,幀被轉換為比特,通過網絡介質傳輸。這種協議棧逐層向下傳遞數據,並添加報頭和報尾的過程稱為封裝。
二、數據格式
需要注意的是,這里所說的以太網幀,與我們常說的以太網是不一樣的。下面我們就來介紹每一層數據的 首部信息 內容。
首先我們知道世界上有個協會叫作IEEE,即電子工程師協會,里面有個分會,叫作IEEE802委員會,是專門來制定局域網各種標准的。而802下面還有個分部,叫作802.3.就是我們經常提到的 IEEE802.3,這個部門制定的規范叫以太網規范,
這個以太網規范中就定義了上面提到的“以太網首部”,這個以太網規范,實際只定義了數據鏈路層中的MAC層和物理層規范。(注意數據鏈路層包括MAC子層和LLC子層兩個子層,而LLC子層是在IEEE802.2中規范的)。
1、以太網幀格式
以太網常用幀格式有兩種,一種是Ethernet II,另一種是IEEE 802.3 格式。這兩種格式區別是:Ethernet II中包含一個Type字 段,。而IEEE 802.3格式中,此位置是長度字段。 其中Type字段描述了,以太網首部 后面所跟數據包的類型,例如Type為0x8000時為IP協議包,Type為8060時,后面為ARP協議包。以太網中多數數據幀使用的是Ethernet II幀格式。
a、 Ethernet II幀格式

b、IEEE 802.3 幀格式

前導碼:Ethernet II是由8個8‘b10101010構成,IEEE802.3由7個8‘b10101010+1個字節SFD..
目的地址:目的設備的MAC物理地址。
源 地址 :發送設備的MAC物理地址。
類型(Ethernet II):以太網首部 后面所跟數據包的類型,例如Type為0x8000時為IP協議包,Type為8060時,后面為ARP協議包。
長度(IEEE802.3):當長度小於1500時,說明該幀為IEEE802.3幀格式,大於1500時,說明該幀為Ethernet II幀格式。
數據:數據長度最小為46字節,不足46字節時,填充至46字節。因為最小幀長度是64字節,所以,46+6+6+2+4=64。(不算前導碼)
FCS: 就是CRC校驗值
以太網首部就是:

2、IP數據包格式
IP數據包格式如下圖。IP首部,如圖也表示出來了。

3、TCP數據段格式
如圖所示為TCP首部和TCP數據段格式

下面我們再介紹幾個常見的數據格式
4、UDP數據段格式--傳輸層的

其中UDP首部如上圖所示。
5、ARP數據包格式(摘自:來源:
http://blog.sina.com.cn/s/blog_9c5d29f70101dwgk.html)

(1)硬件類型字段指明了發送方想知道的硬件接口類型,以太網的值為1;
(2)協議類型字段指明了發送方提供的高層協議類型,IP為0800(16進制);
(3)硬件地址長度和協議長度指明了硬件地址和高層協議地址的長度,這樣ARP報文就可以在任意硬件和任意協議的網絡中使用;
(4)操作字段用來表示這個報文的類型,ARP請求為1,ARP響應為2,RARP請求為3,RARP響應為4;
(5)發送方的硬件地址(0-3字節):源主機硬件地址的前3個字節;
(6)發送方的硬件地址(4-5字節):源主機硬件地址的后3個字節;
(7)發送方IP(0-1字節):源主機硬件地址的前2個字節;
(8)發送方IP(2-3字節):源主機硬件地址的后2個字節;
(9)目的硬件地址(0-1字節):目的主機硬件地址的前2個字節;
(10)目的硬件地址(2-5字節):目的主機硬件地址的后4個字節;
(11)目的IP(0-3字節):目的主機的IP地址。
來自:https://www.cnblogs.com/qishui/p/5437301.html