嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了

本文主要給大家分享網絡七層概念之網絡層,後續章節會跟大家講述物理層、鏈路層、傳輸層、應用層等,歡迎學習嵌入式網絡編程的朋友關注、轉載和發表評論!(難得的好文,建議先收藏!)


本文主要從以下幾個方面講解網絡層

網際協議 IP

IP 地址

與 IP 配套幾個協議

網絡地址翻譯器(NAT)

地址解析協議(ARP)

反向地址轉換協議(RARP)

因特網控制消息協議(ICMP)

IGMP

IP 數據報的格式

IP 數據報首部的固定部分中的各字段

IP 數據報首部的可變部分

IP 層轉發分組的流程

路由表

默認路由(default route)

路由表查找


網絡層是OSI參考模型中的第三層,介於運輸層和數據鏈路層之間,它在數據鏈路層提供的兩個相

鄰端點之間的數據幀的傳送功能上,進一步管理網絡中的數據通信,將數據設法從源端經過若直幹個中

間節點傳送到目的端,從而向運輸層提供最基本的端到端的數據傳送服務。主要內容有:虛電路分組交

換和數據報分組交換、路由選擇算法、阻塞控制方法、X.25協議、綜合業務數據網(ISDN)、異步傳

輸模式(ATM)及網際互連原理與實現。

IP是TCP/IP協議族中最為核心的協議。所有的TCP、UDP、ICMP及IGMP數據都以IP數據報格式傳。IP提供不可靠、無連接的數據報傳送服務。不可靠( unreliable)的意思是它不能保證I P數據報能成功地到達目的地。I P僅提供最好的傳輸服務。任何要求的可靠性必須由上層來提供(如TCP)。

無連接(connectionless)這個術語的意思是I P並不維護任何關於後續數據報的狀態信息。每個數據報的處理是相互獨立的。這也說明, I P數據報可以不按發送順序接收。如果一信源向相同的信宿發送兩個連續的數據報(先是A,然後是B),每個數據報都是獨立地進行路由選擇,可能選擇不同的路線,

因此B可能在A到達之前先到達。


1.1 網際協議 IP

IP是英文Internet Protocol(網絡之間互連的協議)的縮寫,中文簡稱為“網協”,也就是為計算機網絡相互連接進行通信而設計的協議。在因特網中,它是能使連接到網上的所有計算機網絡實現相互通信的一套規則,規定了計算機在因特網上進行通信時應當遵守的規則。任何廠家生產的計算機系統,只要遵守 IP協議就可以與因特網互連互通。

各個廠家生產的網絡系統和設備,如以太網、分組交換網等,它們相互之間不能互通,不能互通的主要原因是因為它們所傳送數據的基本單元(技術上稱之為“幀”)的格式不同。IP協議實際上是一套由軟件程序組成的協議軟件,它把各種不同“幀”統一轉換成(NNT流量)或者“IP數據包”格式,這種轉換是因特網的一個最重要的特點,使所有各種計算機都能在因特網上實現互通,即具有“開放性”的特點。

數據包也是分組交換的一種形式,就是把所傳送的數據分段打成 “包”,再傳送出去。但是,與傳統的“連接型”分組交換不同,它屬於“無連接型”,是把打成的每個“包”(分組)都作為一個“獨立的報文”傳送出去,所以叫做“數據包”。這樣,在開始通信之前就不需要先連接好一條電路,各個數據包不一定都通過同一條路徑傳輸,所以叫做“無連接型”。這一特點非常重要,它大大提高了網絡的堅固性和安全性。

每個數據包都有報頭和報文這兩個部分,報頭中有目的地址等必要內容,使每個數據包不經過同樣的路徑都能準確地到達目的地。在目的地重新組合還原成原來發送的數據。這就要IP具有分組打包和集合組裝的功能。

在實際傳送過程中,數據包還要能根據所經過網絡規定的分組大小來改變數據包的長度,IP數據包的最大長度可達 65535個字節。


 網絡互相連接起來要使用一些中間設備

• 中間設備又稱為中間系統或中繼(relay)系統。

• 物理層中繼系統:轉發器(repeater)。

• 數據鏈路層中繼系統:網橋或橋接器(bridge)。

• 網絡層中繼系統:路由器(router)

• 網橋和路由器的混合物:橋路器(brouter)。

• 網絡層以上的中繼系統:網關(gateway)

網絡互連使用路由器:

• 當中繼系統是轉發器或網橋時,一般並不稱之為網絡互連,因為這僅僅是把一個網絡擴

大了,而這仍然是一個網絡。

• 網關由於比較複雜,目前使用得較少。

• 互聯網都是指用路由器進行互連的網絡。

• 由於歷史的原因,許多有關 TCP/IP 的文獻將網絡層使用的路由器稱為網關。

 分組在互聯網中的傳送


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了

1.2 P IP 地址

所謂IP地址就是給每個連接在Internet上的主機分配的一個32bit地址。按照TCP/IP協議規定,IP地址用二進制來表示,每個IP地址長32bit,比特換算成字節,就是4個字節。例如一個採用二進制形式的IP地址是“00001010000000000000000000000001”,這麼長的地址,人們處理起來也太費勁了。為了方便人們的使用,IP地址經常被寫成十進制的形式,中間使用符號“.”分開不同的字節。於是,上面的IP地址可以表示為“10.0.0.1”。IP地址的這種表示法叫做“點分十進制表示法”,這顯然比1和0容易記憶得多。

 IP 地址及其分類原則

IP地址是一種層次地址,通用格式為:M——類的等級號,NET——網絡號,HOST——主機號。按照類

的等級號,IP地址分為五類:A、B、C、D、E。如下圖所示,網絡號和主機號隨不同等級在32位中佔有的位數不同。


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了


網絡地址的最高位必須是“110”。C類IP地址中網絡的標識長度為24位,主機標識的長度為8位,C類網

絡地址數量較多,適用於小規模的局域網絡,每個網絡最多隻能包含254臺計算機。

C類IP地址範圍192.0.1.1-223.255.254.254(二進制表示為: 11000000 00000000 00000001

00000001 - 11011111 11111111 11111110 11111110)。

C類IP地址的子網掩碼為255.255.255.0,每個網絡支持的最大主機數為256-2=254臺


特殊地址

除了以上三種類型的IP地址外,還有幾種特殊類型的IP地址,TCP/IP協議規定,凡IP地址中的第一

個字節以“lll0”開始的地址都叫多點廣播地址。因此,任何第一個字節大於223小於240的IP地址是多

點廣播地址;IP地址中的每一個字節都為0的地址(“0.0.0.0”)對應於當前主機;IP地址中的每一個

字節都為1的IP地址(“255.255.255.255”)是當前子網的廣播地址;IP地址中凡是以“llll0”的

地址都留著將來作為特殊用途使用;IP地址中不能以十進制“127”作為開頭,該類地址中數字127.0.

0.1到127.1.1.1用於迴路測試,如:127.0.0.1可以代表本機IP地址,用“http://127.0.0.1”就

可以測試本機中配置的Web服務器。網絡ID的第一個6位組也不能全置為“0”,全“0”表示本地網絡。

D類IP地址第一個字節以“1110”開始,它是一個專門保留的地址。它並不指向特定的網絡,目前這一

類地址被用在多點廣播(Multicast)中。多點廣播地址用來一次尋址一組計算機,它標識共享同一協

議的一組計算機。地址範圍224.0.0.1-239.255.255.254 。E類IP地址以“1111”開始,保留用於將來

和實驗使用。


 廣播地址,主機號全部是“1”的網絡地址用於廣播,必須知道信宿網絡的網絡號。

 有限廣播地址,TCP/IP規定,32比特全為“1”的網間網地址用於本網廣播。

“0”類地址,TCP/IP規定,各位全為“0”的網絡號被解釋為“本”網絡。

 “回送地址,A類網絡地址127是一個保留地址,用於網絡軟件的測試以及本地機進程間通信,叫做回送地址。無論什麼程序,一旦使用回送地址發送數據,協議軟件立即返回之,不進行任何網絡傳輸。 TCP/IP協議規定:含網絡號127的分組不能出現任何網絡上;主機和網關不能為該地址廣播任何尋徑信息。

 私有網絡地址(保留地址)

A類地址:10.1.1.1-10.254.254.254

B類地址: 172.16.1.1-172.31.254.254

C類地址: 192.168.1.1-192.168.254.254

 IP 地址的屏蔽碼

一般地,32位的IP地址分為兩部分,即網絡號和主機號,分別稱為IP地址的“網絡部分”和“主機部分”。子網掩碼用於將這兩個部分區分開來。

子網掩碼IP協議規定:每一個使用子網的網點都選擇一個32位的位模式,若模式中的某位置1,則對應IP地址中的某位為網絡地址中的一位。若位模式中某位為0,則對應IP地址中的某位為主機地址中的一位。

若將IP地址主機部分的各位均置為0,則稱為網絡地址(network address).另外在網絡地址後面追加了表示網絡地址長度的幾位數字,即在IP地址的後面劃一個斜槓”/”,在斜槓的後面寫上表示網絡地址部分位數的數字。


例子

IP地址是由“網絡地址”與“主機地址”所構成的

以IP地址為“192.168.10.68”,網絡地址為26位為例。

二進制數 11000000.10101000.00001010.01000000 /26


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了

嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了

 互聯網中的 IP 地址


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了

1.3 與 P IP 配套幾個協議

網際協議 IP 是 TCP/IP 體系中兩個最主要的協議之一。與 IP 協議配套使用的還有四個協議:

• 地址解析協議 ARP(Address Resolution Protocol)

• 逆地址解析協議 RARP(Reverse Address Resolution Protocol)

• 網際控制報文協議 ICMP(Internet Control Message Protocol)

• 網際組管理協議 IGMP(Internet Group Management Protocol)


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了

1.3.1 網絡地址翻譯器( NAT )

這種技術是在局部地區網中,設定私有 IP 地址,當與 Internet 連接的時候,再將其變換成全局IP 地址。並且,如果是能夠替換 TCP 或者 UDP 的端口號的網絡地址端口翻譯器(NAPT:Network Address Ports Translation),則使用一個全局 IP 地址就可以在多臺的主機之間進行通信。


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了

嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了

1.3.2 地址解析協議( ARP )

略。

1.3.3 反向地址轉換協議( RARP )

略。

1.3.4 因特網控制消息協議

( ICMP)

ICMP是(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然並不傳輸用戶數據,但是對於用戶數據的傳遞起著重要的作用。

基本簡介

ICMP協議是一種面向連接的協議,用於傳輸出錯報告控制信息。它是一個非常重要的協議,它對於網絡安全具有極其重要的意義。

它是TCP/IP協議族的一個子協議,屬於網絡層協議,主要用於在主機與路由器之間傳遞控制信息,包括報告錯誤、交換受限控制和狀態信息等。當遇到IP數據無法訪問目標、IP路由器無法按當前的傳輸速率轉發數據包等情況時,會自動發送ICMP消息。


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了

ICMP提供一致易懂的出錯報告信息。發送的出錯報文返回到發送原數據的設備,因為只有發送

設備才是出錯報文的邏輯接受者。發送設備隨後可根據ICMP報文確定發生錯誤的類型,並確定如何

才能更好地重發失敗的數據報。但是ICMP唯一的功能是報告問題而不是糾正錯誤,糾正錯誤的任務

由發送方完成。

我們在網絡中經常會使用到ICMP協議,比如我們經常使用的用於檢查網絡通不通的Ping命令

(Linux和Windows中均有),這個“Ping”的過程實際上就是ICMP協議工作的過程。還有其他的網

絡命令如跟蹤路由的Tracert命令也是基於ICMP協議的。

P ICMP 協定內容

ICMP的全稱是 Internet Control Message Protocol 。從技術角度來說,ICMP就是一個“錯誤偵測與回報機制”,其目的就是讓我們能夠檢測網路的連線狀況﹐也能確保連線的準確性﹐其功能主要有:

• 偵測遠端主機是否存在。

• 建立及維護路由資料。

• 重導資料傳送路徑。

• 資料流量控制


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了

嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了

類型字段為3,標識這是一個ICMP 目標不可達數據包。代碼字段的值進一步說明了出錯的具體

原因,其取值範圍為0-12。各值的含義如下表所示。


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了

另外我們注意到ICMP 目標不可達數據包中最後一個字段,該字段包含了出錯IP 數據包的lP

頭部和IP 數據包數據部分的頭64 位。之所以要包含這個字段是為了能讓IP 數據包的發送者知道

是哪個數據包出錯。

(3)源端關閉

路由器轉發IP 數據包時是僅僅根據單個數據包的信息進行轉發的,因此它無法為某個數據包預留一定的資源。由於路由器的資源(內存,計算時間等)是有限的,在網絡數據流量比較大時,路由器為了轉發數據包可能會耗盡其所有資源,這種情況稱為阻塞。出現阻塞就是路由器能力有限,無法轉發所有需要轉發的數據包。這時路由器會選擇丟棄一些數據包。但僅僅這樣做還是無法減輕網絡阻塞的情況,因為發送端在發出數據包後如果無法收到響應往往會發送更多的數據包到網絡上,使得網絡更加擁擠,使網絡的阻塞更加嚴重。因此路由器在丟棄數據包時會發送一個信息到數據包的發送方,通知它網絡已阻塞,請緩發數據包。用來發送這個通知的就是ICMP 源端關閉數據包。該數據包格式如下圖所示。

嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了

(4)超時錯誤

在IP 數據包中有個TTL 字段。IP 數據包每被路由器轉發一次該字段的值就至少減l。當該字段的值減少到0 時,路由器會將該數據包丟棄。但這種情況是很少發生的,因為IP 數據包都會將該字段的值設置的足夠大,使得該數據包被轉發到目標主機時該字段的值仍然大於0。但有時也會發生這種清況,例如幾個路由器組成一個環,而且路由器中的路由表有錯誤,這時在其中轉發的數據包可能一直在這個環中直到TTL 字段減為0。在將TTL 為0 的數據包丟棄之前,路由器需要通知數據包的源主機數據包轉發超時了。由於一個IP 數據包在轉發到目標主機的過程中可能被分成了多個段,而這些分段是單獨路由的。因此很有可能一個IP 數據包的多個分段只有部分能到達目標主機而其他的可能丟失了。目標主機在對一個IP 數據包的多個分段進行重組時,如果等待一定的時間後剩下的分段還沒有到達,目標主機就認為這些分段不會到達,並將已收到的分段丟棄。在丟棄這些分段之前,目標主機會通知源主機IP 數據包的分段在進行重組時超時了。

不管是上述兩種情況的哪一種,路由器和目標主機都是通過向源主機發送一個ICMP 超時數據包來通知它的。該數據包的格式如下圖所示。


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了

請求主機可以向路由器或者直接廣播該數據包,路由器會將網絡的子網掩碼通知給該主機。


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了


嵌入式linux網絡編程之—網絡層,終於有人將網絡的七層講清楚了


分享到:


相關文章: