網路基本功(一):細說網路傳輸
來自專欄計算機網路學習筆記
轉載請在文首保留原文出處:EMC中文支持論壇https://community.emc.com/go/chinese
介紹
常言道:欲練神功,必先練好基本功。之前做了一個關於IP路由,默認網關和掩碼的問答貼,做完這個帖子覺得如果對網路知識點做一個系統的闡述,應該會很有幫助。
本系列文章著重於講解網路管理實際應用中常常涉及的重要知識點,盡量以實用為主。準備寫的幾個章節暫時有(可能會有增減):
- 網路傳輸
- 交換機
- VLAN與Trunk
- 路由(上)
- 路由(下)
- 鏈路聚合
- IP地址與子網
- NAT原理與配置
- ICMP與ARP
- TCP滑動窗口
- TCP重傳
- TCP確認機制
- TCP窗口調整與流控
- Wireshark抓包實例診斷TCP連接問題 (精)
- Wireshark抓包實例診斷TCP重傳 (精)
- Wireshark抓包實例診斷TCP重複ACK與亂序 (精)
- Wireshark抓包實例診斷TCP窗口與reset (精)
- Wireshark抓包實例診斷HTTP問題 (精)
- Wireshark抓包實例診斷資料庫問題
- HTTP(上)
- HTTP(下)
- DNS(上) (NEW)
- 細說Linux網路配置(上)
- 細說Linux網路配置(下)
- 常用診斷工具:ping
- 網路性能監測與實例(上)
- 網路性能監測與實例(下)
- tcpdump的妙用 (上)
- tcpdump的妙用(下)
更多信息
首先來看一個例子:
示例:網路伺服器向客戶端傳送數據的過程:
在詳細闡述網路傳輸過程之前,先來看一個最常見的例子,下圖顯示了一個網路伺服器向客戶端傳送數據的完整過程:
1. 需要傳送的數據是網路伺服器的HTML頁面。 2. 應用協議HTTP報文頭添加到HTML數據之前。報文頭信息包括:伺服器所使用的HTTP版本,以及表明它包含發給網路客戶端信息的狀態編碼。 3. HTTP應用層協議將HTML格式的網頁數據發送給傳輸層。TCP傳輸層用於管理網路伺服器和客戶端之間的會話。 4. IP信息添加到TCP信息之前。IP指定適當的源和目的IP地址。這些信息就構成了IP報文。 5. 乙太網協議添加到IP報文的兩端之後,就形成了數據鏈路幀。上述幀發送至通向網路客戶端的路徑上的最近一個路由器。路由器移除乙太網信息,觀察IP報文,判定最佳路徑,將報文插入一個新的幀,並發送至目標路徑上下一個相鄰路由器。每一個路由器在轉發之前都移除並添加新的數據鏈路層信息。 6. 數據通過互聯網路傳輸,互聯網路包含媒介和中間設備。 7. 客戶端接收到包含數據的數據鏈路幀,處理各層協議頭,之後以添加時相反的順序移除協議頭。首先處理並移除乙太網信息,之後是IP協議信息,接下來TCP信息,最後是HTTP信息。 8. 之後,將網頁信息傳遞給客戶端網頁瀏覽器軟體。
數據封裝:
消息要在網路中傳輸,必須對它進行編碼,以特定的格式進行封裝,同時需要適當地封裝以足夠的控制和地址信息,以使它能夠從發送方移動到接收方。
消息大小
理論上,視頻或郵件信息是能夠以大塊非中斷型流從網路源地址傳送到目的地址,但這也意味著同一時刻同一網路其他設備就無法收發消息。這種大型數據流會造成顯著延時。並且,如果傳輸過程中連接斷開,整個數據流都會丟失需要全部重傳。因此更好的方法是將數據流分割(segmentation)為較小的,便於管理的片段,能夠帶來兩點好處:
- 發送較小片段,網路上同時可有多個會話交錯進行。這種在網路上將不同會話片段交錯進行的過程稱為多路傳輸(multiplexing)。
- 分割可提高網路通訊的可靠性。各消息片段從源地址到目的地址無需經過相同路徑,如果一條路徑被堵塞或斷開,其餘消息可從替換路徑到達目的地址。如果部分消息到不了目的地址,那隻需重傳丟失部分。
通過對片段打上標籤的方式來保證順序以及在接收時重組。
協議數據單元(Protocol Data Unit, PDU)
應用層數據在傳輸過程中沿著協議棧傳遞,每一層協議都會向其中添加信息。這就是封裝的過程。
數據片段在各層網路結構中採用的形式就稱為協議數據單元(PDU)。封裝過程中,下一層對從上一層收到的PDU進行封裝。在處理的每一個階段PDU都有不同的名字來反應它的功能。
PDU按照TCP/IP協議的命名規範:
- 數據(Data):應用層PDU的常用術語
- 分段(Segment):傳輸層PDU
- 幀(Frame):網路層PDU
- 比特(Bits):在介質上物理傳輸數據所使用的PDU。
封裝
封裝是指在傳輸之前為數據添加額外的協議頭信息的過程。在絕大多數數據通信過程中,源數據在傳輸前都會封裝以數層協議。在網路上發送消息時,主機上的協議棧從上至下進行操作。
以網路伺服器為例,HTTP應用層協議發送HTML格式網頁數據到傳輸層,應用層數據被分成TCP分段。各TCP分段被打上標籤,稱為頭(header),表明接收方哪一個進程應當接收此消息。同時也包含使得接收方能夠按照原有的格式來重組數據的信息。
傳輸層將網頁HTML數據封裝成分段並發送至網路層,執行IP層協議。整個TCP分段封裝成IP報文,也就是再添上IP頭標籤。IP頭包括源和目的IP地址,以及發送報文到目的地址所必須的信息。
之後,IP報文發送到接入層,封裝以幀頭和幀尾。每個幀頭都包含源和目的物理地址。物理地址唯一指定了本地網路上的設備。幀尾包含差錯校正信息。最後,由伺服器網卡將比特編碼傳輸給介質。
解封裝
接收主機以相反的方式進行操作稱為解封裝。解封裝是接收設備移除一層或多層協議頭的過程。數據在協議棧中向上移動直到終端應用層伴隨著解封裝。
訪問本地資源:
訪問本地網路資源需要兩種類型的地址:網路層地址和數據鏈路層地址。網路層和數據鏈路層負責將數據從發送設備傳輸至接收設備。兩層協議都有源和目的地址,但兩種地址的目的不同。
示例:客戶端PC1與FTP在同一IP網路的通信
網路地址
網路層地址或IP地址包含兩個部分:網路前綴和主機。路由器使用網路前綴部分將報文轉發給適當的網路。最後一個路由器使用主機部分將報文發送給目標設備。同一本地網路中,網路前綴部分是相同的,只有主機設備地址部分不同。
源IP地址:發送設備,即客戶端PC1的IP地址:192.168.1.110
目的IP地址:接收設備,即FTP伺服器:192.168.1.9
數據鏈路地址
數據鏈路地址的目的是在同一網路中將數據鏈路幀從一個網路介面發送至另一個網路介面。乙太網LAN和無線網LAN是兩種不同物理介質的網路示例,分別有自己的數據鏈路協議。
當IP報文的發送方和接收方位於同一網路,數據鏈路幀直接發送到接收設備。乙太網上數據鏈路地址就是乙太網MAC地址。MAC地址是物理植入網卡的48比特地址。
源MAC地址:發送IP報文的PC1乙太網卡MAC地址,AA-AA-AA-AA-AA-AA。
目的MAC地址:當發送設備與接收設備位於同一網路,即為接收設備的數據鏈路地址。本例中,FTP MAC地址:CC-CC-CC-CC-CC-CC。
源和目的MAC地址添加到乙太網幀中。
MAC與IP地址
發送方必須知道接收方的物理和邏輯地址。發送方主機能夠以多種方式學習到接收方的IP地址:比如域名系統(Domain Name System, DNS),或通過應用手動輸入,如用戶指定FTP地址。
乙太網MAC地址是怎麼識別的呢?發送方主機使用地址解析協議(Address Resolution Protocol, ARP)以檢測本地網路的所有MAC地址。如下圖所示,發送主機在整個LAN發送ARP請求消息,這是一條廣播消息。ARP請求包含目標設備的IP地址,LAN上的每一個設備都會檢查該ARP請求,看看是否包含它自身的IP地址。只有符合該IP地址的設備才會發送ARP響應。ARP響應包含ARP請求中IP地址相對應的MAC地址。
訪問遠程資源:
默認網關
當主機發送消息到遠端網路,必須使用路由器,也稱為默認網關。默認網關就是位於發送主機同一網路上的路由器的介面IP地址。有一點很重要:本地網路上的所有主機都能夠配置自己的默認網關地址。如果該主機的TCP/IP設置中沒有配置默認網關地址,或指定了錯誤的默認網關地址,則遠端網路消息無法被送達。
如下圖所示,LAN上的主機PC 1使用IP地址為192.168.1.1的R1作為默認網關,如果PDU的目的地址位於另一個網路,則主機將PDU發送至路由器上的默認網關。
與遠端網路設備通訊
下圖顯示了客戶端主機PC 1與遠端IP網路伺服器進行通訊的網路層地址與數據鏈路層地址:
網路地址
當報文的發送方與接收方位於不同網路,源和目的IP地址將會代表不同網路上的主機。
源IP地址:發送設備即客戶端主機PC 1的IP地址:192.168.1.110。
目的IP地址:接收設備即網路伺服器的IP地址:172.16.1.99。
數據鏈路地址
當報文的發送方與接收方位於不同網路,乙太網數據鏈路幀無法直接被發送到目的主機。乙太網幀必須先發送給路由器或默認網關。本例中,默認網關是R1,R1的介面IP地址與PC 1屬於同一網路,因此PC 1能夠直接達到路由器。
源MAC地址:發送設備即PC 1的MAC地址,PC1的乙太網介面MAC地址為:AA-AA-AA-AA-AA-AA。
目的MAC地址:當報文的發送方與接收方位於不同網路,這一值為路由器或默認網關的乙太網MAC地址。本例中,即R1的乙太網介面MAC地址,即:11-11-11-11-11-11。
IP報文封裝成的乙太網幀先被傳輸至R1,R1再轉發給目的地址即網路伺服器。R1可以轉發給另一個路由器,如果目的伺服器所在網路連接至R1,則直接發送給伺服器。
發送設備如何確定路由器的MAC地址?每一個設備通過自己的TCP/IP設置中的默認網關地址得知路由器的IP地址。之後,它通過ARP來得知默認網關的MAC地址,該MAC地址隨後添加到幀中。
PS:在gitbook上看到一本好書,但是無奈gitbook不掛梯子訪問太慢了。為了方便自己查閱,也方便知識共享,將文章轉載到知乎專欄,由於沒有聯繫到作者(據說是個女神)冒昧掛上來,如果有冒犯的地方,聯繫我我隨時進行刪除。謝謝。
作者:Zhang Jiawen
來源:網路基本功系列:細說網路那些事兒
推薦閱讀:
※現在民用領域什麼電腦最好?
※與傳統郵箱對比,商務密郵的安全優勢有哪些?
※有哪些人類科技你並不覺得是個理所當然的事情?
※為什麼中國現在還沒有出現全面抵制三星的行為?
※CES 2016 會有哪些值得關注的無人機相關展台?