以太網數據包架構

以太網數據包架構


如果您想要了解相關內容,可以點擊跳轉本文所在的系列的檢索目錄,點擊跳轉


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

首先我們看一下以太網數據結構



 

注意數據長度爲46~1500

從物理層上看,一個完整的以太網幀有7個字段,事實上前兩個字段(前同步碼和SFD碼)並不能算是真正的以太網數據幀,它們是網卡在物理層上發送以太網數據時添加上的,是爲了實現底層的正確傳輸。上圖中的目的地址,源地址,長度/類型屬於以太網首部的部分。

 

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

 

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

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 on the 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/BOOTP:I want to get an IP address

DNS:what is the IP address of www.st.com?

 

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

 

所謂的協議就是雙方進行數據傳輸的一種格式。整個網絡中使用的協議有很多,所幸的是每一種協議都有RFC文檔。

從網絡上傳來的數據。我們一層層扒去它的外層(各種協議做的封裝),得到真正我們需要的數據。發送網絡上的數據也是在添加完各種協議頭(封裝),纔開始發送到網絡上,下面我們來看一下網絡上數據包的IP--TCP結構。以便我們更好的分析解析出真正的數據。

一、應用層

應用層直接和應用程序接口並提供常見的網絡應用服務。應用層是開放系統的最高層,是直接爲應用進程提供服務的。其作用是在實現多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。應用層使用最爲廣泛,需要的協議標準也是最多的。在應用層可以實現運輸、訪問和管理,收發電子郵件以及虛擬終端目錄服務遠程作業錄入信息通信等等。例如DNS、HTTP、FTP等協議都是應用在這一層。

二、傳輸層

傳輸層是最關鍵的一層,也是唯一負責總體的數據傳輸和數據控制的一層。傳輸層提供端到端的交換數據的機制。傳輸層對應用層提供可靠的傳輸服務,對網絡層提供可靠的目的地站點信息。TCP是最常用的的傳輸層協議,它的主要功能是:對一個進行的對話或連接提供可靠的傳輸服務,在通向網絡的單一物理連接上實現該連接的複用,在單一連接上提供端到端的序號與流量控制、差錯控制及恢復等服務。

1、TCP連接建立

(a)連接建立 (b)連接終止

圖2 TCP協議的建立與終止過程

TCP是因特網中的傳輸層協議,使用三次握手協議建立連接。當主動方發出SYN連接請求後,等待對方回答SYN+ACK,並最終對對方的 SYN 執行 ACK 確認。如圖2(a)所示,TCP三次握手的過程如下:

客戶端發送SYN(SEQ=x)報文給服務器端,進入SYN_SEND狀態。

服務器端收到SYN報文,迴應一個SYN (SEQ=y)ACK(ACK=x+1)報文,進入

SYN_RECV狀態。

客戶端收到服務器端的SYN報文,迴應一個ACK(ACK=y+1)報文,進入

Established狀態。

三次握手完成,TCP客戶端和服務器端成功地建立連接,可以開始傳輸數據了。

2、TCP連接終止

建立一個連接需要三次握手,而終止一個連接要經過四次握手,這是由TCP的半關閉(half-close)造成的。具體過程如圖2(b)所示。

(1) 某個應用進程首先調用close,稱該端執行"主動關閉"(active close)。該端的TCP於是發送一個FIN分節,表示數據發送完畢。

(2) 接收到這個FIN的對端執行 "被動關閉"(passive close),這個FIN由TCP確認。

(3) 一段時間後,接收到這個文件結束符的應用進程將調用close關閉它的套接字。這導致它的TCP也發送一個FIN。

(4) 接收這個最終FIN的原發送端TCP(即執行主動關閉的那一端)確認這個FIN。

三、網絡層

TCP/IP協議體系中的網絡層功能由IP協議規定和實現,故又稱IP層。網絡層介於運輸層和數據鏈路層之間,它在數據鏈路層提供的兩個相鄰端點之間的數據幀的傳送功能上,進一步管理網絡中的數據通信,將數據設法從源端經過若干個中間節點傳送到目的端,從而向運輸層提供最基本的端到端的數據傳送服務。

網絡層的目的是實現兩個端系統之間的數據透明傳送,具體功能包括尋址和路由選擇、連接的建立、保持和終止等。它提供的服務使傳輸層不需要了解網絡中的數據傳輸和交換技術。IP定義了在TCP/IP互聯網上數據傳送的基本單元和數據格式,完成路由選擇功能,選擇數據傳送的路徑並且包含了一組不可靠分組傳送的規則,指明瞭分組處理、差錯信息發生以及分組的規則。IP協議的主要功能有:無連接數據報傳輸、數據報路由選擇和差錯控制。與IP協議配套使用實現其功能的還有地址解析協議ARP、逆地址解析協議RARP、因特網報文協議ICMP、因特網組管理協議IGMP。

四、數據鏈層

數據鏈路層在物理層提供的服務的基礎上向網絡層提供服務,其最基本的服務是將源自網絡層來的數據可靠地傳輸到相鄰節點的目標機網絡層。爲達到這一目的,數據鏈路必須具備一系列相應的功能,主要有:如何將數據組合成數據塊,在數據鏈路層中稱這種數據塊爲幀(frame),幀是數據鏈路層的傳送單位;如何控制幀在物理信道上的傳輸,包括如何處理傳輸差錯,如何調節發送速率以使與接收方相匹配;以及在兩個網絡實體之間提供數據鏈路通路的建立、維持和釋放的管理。

五、物理層

物理層(Physical Layer)是TCP/IP協議棧中最低的一層,它直接面向實際承擔數據傳輸的物理媒體(即通信通道),物理層的傳輸單位爲比特(bit),即一個二進制位("0"或"1")。實際的比特傳輸必須依賴於傳輸設備和物理媒體,但是,物理層不是指具體的物理設備,也不是指信號傳輸的物理媒體,而是指在物理媒體之上爲上一層(數據鏈路層)提供一個傳輸原始比特流的物理連接。物理層規定:爲傳輸數據所需要的物理鏈路創建、維持、拆除,而提供具有機械的,電子的,功能的和規範的特性。簡單的說,物理層確保原始的數據可在各種物理媒體上傳輸。包括網線的制式,網卡的定義等,這一層無協議的編寫。

 

概念:

在 TCP/IP 內部

TCP/IP 中包含一系列用於處理數據通信的協議:

  • TCP (傳輸控制協議) - 應用程序之間通信
  • UDP (用戶數據包協議) - 應用程序之間的簡單通信
  • IP (網際協議) - 計算機之間的通信
  • ICMP (因特網消息控制協議) - 針對錯誤和狀態
  • DHCP (動態主機配置協議) - 針對動態尋址

你將在本教程中學習到更多關於這些標準的知識。

端口

TC PU D P採用16 bit的端口號來識別應用程序。那麼這些端口號是如何選擇的呢?

服務器一般都是通過知名端口號來識別的。例如,對於每個T C P / I P實現來說, F T P服務器的T C P端口號都是2 1,每個Te l n e t服務器的T C P端口號都是2 3,每個T F T P (簡單文件傳送協議)服務器的U D P端口號都是6 9。任何T C P / I P實現所提供的服務都用知名的11 0 2 3之間的端口號。這些知名端口號由I n t e r n e t號分配機構( Internet Assigned Numbers Authority, IANA)來管理。

1 9 9 2年爲止,知名端口號介於12 5 5之間。2 5 61 0 2 3之間的端口號通常都是由U n i x系統佔用,以提供一些特定的U n i x服務也就是說,提供一些只有U n i x系統纔有的、而其他操作系統可能不提供的服務。現在IANA管理11023之間所有的端口號。I n t e r n e t擴展服務與U n i x特定服務之間的一個差別就是Te l n e tR l o g i n。它們二者都允許通過計算機網絡登錄到其他主機上。Te l n e t是採用端口號爲2 3T C P / I P標準且幾乎可以在所有操作系統上進行實現。相反,R l o g i n最開始時只是爲U n i x系統設計的(儘管許多非Unix系統現在也提供該服務),因此在80年代初,它的有名端口號爲513。客戶端通常對它所使用的端口號並不關心,只需保證該端口號在本機上是唯一的就可以了。客戶端口號又稱作臨時端口號(即存在時間很短暫)。這是因爲它通常只是在用戶運行該客戶程序時才存在,而服務器則只要主機開着的,其服務就運行。

大多數T C P / I P實現給臨時端口分配1 0 2 45 0 0 0之間的端口號。大於5 0 0 0的端口號是爲其他服務器預留的( I n t e r n e t上並不常用的服務)。我們可以在後面看見許多這樣的給臨時端口分配端口號的例子。

TCP 使用固定的連接

TCP 用於應用程序之間的通信。

當應用程序希望通過 TCP 與另一個應用程序通信時,它會發送一個通信請求。這個請求必須被送到一個確切的地址。在雙方"握手"之後,TCP 將在兩個應用程序之間建立一個全雙工 (full-duplex) 的通信。

這個全雙工的通信將佔用兩個計算機之間的通信線路,直到它被一方或雙方關閉爲止。

UDP TCP 很相似,但是更簡單,同時可靠性低於 TCP

IP 是無連接的

IP 用於計算機之間的通信。

IP 是無連接的通信協議。它不會佔用兩個正在通信的計算機之間的通信線路。這樣,IP 就降低了對網絡線路的需求。每條線可以同時滿足許多不同的計算機之間的通信需要。

通過 IP,消息(或者其他數據)被分割爲小的獨立的包,並通過因特網在計算機之間傳送。

IP 負責將每個包路由至它的目的地。

IP 路由器

當一個 IP 包從一臺計算機被髮送,它會到達一個 IP 路由器。

IP 路由器負責將這個包路由至它的目的地,直接地或者通過其他的路由器。

在一個相同的通信中,一個包所經由的路徑可能會和其他的包不同。而路由器負責根據通信量、網絡中的錯誤或者其他參數來進行正確地尋址。

TCP/IP

TCP/IP 意味着 TCP IP 在一起協同工作。

TCP 負責應用軟件(比如你的瀏覽器)和網絡軟件之間的通信。

IP 負責計算機之間的通信。

TCP 負責將數據分割並裝入 IP 包,然後在它們到達的時候重新組合它們。

IP 負責將包發送至接受者。

IP地址

每個計算機必須有一個 IP 地址才能夠連入因特網。

每個 IP 包必須有一個地址才能夠發送到另一臺計算機。

在本教程下一節,你會學習到更多關於 IP 地址和 IP 名稱的知識。

IP 地址包含 4 個數字:

這是你的 IP 地址:222.66.141.10

TCP/IP 使用 4 個數字來爲計算機編址。每個計算機必須有一個唯一的 4 個數字的地址。

數字在 0 255 之間,並由點號隔開,像這樣:192.168.1.60

TCP 使用固定的連接

TCP 用於應用程序之間的通信。

當應用程序希望通過 TCP 與另一個應用程序通信時,它會發送一個通信請求。這個請求必須被送到一個確切的地址。在雙方"握手"之後,TCP 將在兩個應用程序之間建立一個全雙工 (full-duplex) 的通信。

這個全雙工的通信將佔用兩個計算機之間的通信線路,直到它被一方或雙方關閉爲止。

UDP TCP 很相似,但是更簡單,同時可靠性低於 TCP

32 比特 = 4 字節

TCP/IP 使用 32 個比特來編址。一個計算機字節是 8 比特。所以 TCP/IP 使用了 4 個字節。

一個計算機字節可以包含 256 個不同的值:

000000000000000100000010000000110000010000000101000001100000011100001000 ....... 直到 11111111

現在,你知道了爲什麼 TCP/IP 地址是介於 0 255 之間的 4 個數字。

域名

12 個阿拉伯數字很難記憶。使用一個名稱更容易。

用於 TCP/IP 地址的名字被稱爲域名。www.baidu.com就是一個域名。

當你鍵入一個像https://www.baidu.com/這樣的域名,域名會被一種 DNS 程序翻譯爲數字。

在全世界,數量龐大的 DNS 服務器被連入因特網。DNS 服務器負責將域名翻譯爲 TCP/IP 地址,同時負責使用新的域名信息更新彼此的系統。

當一個新的域名連同其 TCP/IP 地址一同註冊後,全世界的 DNS 服務器都會對此信息進行更新。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章