網(wǎng)絡(luò)層的出現(xiàn)也是網(wǎng)絡(luò)發(fā)展的結(jié)果。當(dāng)數(shù)據(jù)通信需要跨越網(wǎng)段并且有多個通信路徑可供選擇時,這就產(chǎn)生了如何連接任意兩臺主機(jī)進(jìn)行遠(yuǎn)距離數(shù)據(jù)傳輸?shù)膯栴}。網(wǎng)絡(luò)層的IP協(xié)議很好地解決了這個問題。這里需要先了解IP協(xié)議和IP數(shù)據(jù)單元的格式,然后再分析IP協(xié)議的工作原理。1. IP協(xié)議
IP協(xié)議(Internet Protocol,網(wǎng)際協(xié)議)是互聯(lián)網(wǎng)互連協(xié)議。 IP 協(xié)議是一組應(yīng)遵循的約定或規(guī)則,以使所有連接到Internet 的計算機(jī)能夠相互通信。這套規(guī)則保證了跨網(wǎng)連接、跨網(wǎng)尋址、跨網(wǎng)數(shù)據(jù)轉(zhuǎn)發(fā)等功能的實(shí)現(xiàn)。因此,它是網(wǎng)絡(luò)層中最重要的協(xié)議。它與TCP 協(xié)議一起構(gòu)成了TCP/IP 協(xié)議族的核心。 IP協(xié)議在網(wǎng)絡(luò)層提供無連接、不可靠的數(shù)據(jù)傳輸服務(wù)。
什么是無連接、不可靠的數(shù)據(jù)傳輸?
在網(wǎng)絡(luò)層傳輸IP數(shù)據(jù)包就像我們?nèi)粘I钪性卩]局發(fā)送的普通信件一樣。每一封普通信件都有一個明確的目的地地址。普通信件在傳輸過程中的路徑可能會有所不同。途中普通信件不保;寄件人和收件人之間沒有直接的限制關(guān)系(理解為斷開連接),如果平信在傳輸過程中丟失(理解為不可靠),郵局概不負(fù)責(zé)。也就是說,IP數(shù)據(jù)包在網(wǎng)絡(luò)傳輸過程中,發(fā)送端網(wǎng)絡(luò)層和接收端網(wǎng)絡(luò)層之間不需要建立連接,發(fā)送端網(wǎng)絡(luò)層也不需要建立連接。關(guān)心IP數(shù)據(jù)包是否發(fā)送到接收端的網(wǎng)絡(luò)層。2. IP數(shù)據(jù)單元格式
IP協(xié)議的數(shù)據(jù)單元也很復(fù)雜,如圖4-14所示。 IP協(xié)議頭主要由12個字段組成,從傳輸層傳下來的數(shù)據(jù)單元構(gòu)成了網(wǎng)絡(luò)層的IP數(shù)據(jù)報,也稱為IP包。 IP協(xié)議頭的組成,每行32位,各字段含義解釋如下。版本(Version):是指IP協(xié)議版本號,目前是4,是指IPv4a頭的長度(Internet Header Length,IH L):是指IF協(xié)議頭的長度,有4個B為一個單位,最小值為5,即最小的IP協(xié)議頭有20個字節(jié)(沒有選項(xiàng)時)。
服務(wù)類型(TOS):由8位組成,不同位置的位設(shè)置可以代表不同的服務(wù)類型。有數(shù)據(jù)優(yōu)先級(現(xiàn)在忽略)、低延遲、高吞吐量、高可靠性和最低費(fèi)用等類型的服務(wù),否則就是一般服務(wù)。
總長度(Total Length,TL):是指整個中頻包的長度,在B中。利用協(xié)議頭的長度和總長度,可以知道中頻包中數(shù)據(jù)的起始位置和長度.
標(biāo)識(Identification) : 標(biāo)識主機(jī)發(fā)送的每個中頻數(shù)據(jù)包的代碼(ID),占16位。通常,每發(fā)送一個IP 數(shù)據(jù)包,其值都會增加1。
中頻報文是網(wǎng)絡(luò)層傳輸?shù)臄?shù)據(jù)單元,不同的網(wǎng)絡(luò)類型在鏈路層具有最大傳輸單元(MTU)限制的特點(diǎn)。比如以太網(wǎng)的MTU是1500B,這個1500B就是網(wǎng)絡(luò)層的IP協(xié)議數(shù)據(jù)單元。最大值。如果IP包的總長度超過MTU,網(wǎng)絡(luò)層會對IF包進(jìn)行分片,使每個包的長度小于等于MTU。此時,IF包被分片后,16位的標(biāo)識符會被復(fù)制到每個分片中。在接收端,數(shù)據(jù)報分片重組的依據(jù)就是這個ID。
R: 保留未使用。
DF(Don't Fragment) : IP包未分片標(biāo)志,占1位。值為1 表示網(wǎng)絡(luò)層不會對IP 數(shù)據(jù)包進(jìn)行分段。
MF(More Fragment) : 報紙標(biāo)志。值為0 表示當(dāng)前數(shù)據(jù)報是最后一塊;值為1 表示它不是最后一塊,以后還會有其他塊。
分片偏移量(Fragment Offset,F(xiàn)O) : 分片偏移原始數(shù)據(jù)報開頭的位置。偏移字節(jié)數(shù)是偏移值乘以8。
另外,當(dāng)IP包被分片時,需要將每個分片的總長度值改為分片的長度值。接收端收到最后一個分片,根據(jù)其長度和分片偏移量計算出數(shù)據(jù)報的總長度,并與所有到達(dá)分片的長度之和進(jìn)行比較,判斷分片的完整性,然后重新組裝。
Time To Live (TTL) : 設(shè)置了IP數(shù)據(jù)包最多可以通過的路由器數(shù)量(TTL的單位請參考第十一章問題4-5的解釋)。 TTL的初始值由源主機(jī)設(shè)置,經(jīng)過路由器后減1。當(dāng)該字段的值為0時,IP包被路由器丟棄,并發(fā)送ICMP報文通知源主機(jī)。
協(xié)議(Protocol,PROT) : 表示上層的協(xié)議類型。具體指TCP或UDP的協(xié)議編碼。
包頭校驗(yàn)和(Header checksum) :是根據(jù)IP協(xié)議包頭計算的“校驗(yàn)和”碼。如果“校驗(yàn)和”錯誤,則丟棄IP 數(shù)據(jù)包,但不會生成錯誤消息。重傳控制將由傳輸層控制,以檢測丟棄的數(shù)據(jù)報并重傳它們。
源IP地址: 每個Ip包必須包含發(fā)送方的
源IP地址,是一個32bit的值。目的IP地址:每個IP包也都需要包含接收端的IP地址,也是一個32bit的值。
可選字段(Options):一個可變長的選項(xiàng),用于安全、調(diào)試等,也為以后擴(kuò)展或升級之用(該字段的應(yīng)用請參見第11章問題4-6解釋)。
填充(Padding):在必要時插人一定的填充字節(jié),以確保IP協(xié)議頭始終是32bit的整數(shù)倍。
數(shù)據(jù):是傳輸層提交下來的協(xié)議數(shù)據(jù)單元。
從IP包的協(xié)議頭可知,IP協(xié)議頭的大小有兩種:當(dāng)沒有“選項(xiàng)”這個域時,為160位即20個字節(jié);當(dāng)有“選項(xiàng)”域時,為192位即24個字節(jié)。
3. IP協(xié)議的工作原理
IP是怎樣實(shí)現(xiàn)網(wǎng)絡(luò)互聯(lián)的?
早期各公司的網(wǎng)絡(luò)系統(tǒng)不能互通,也不能互連。原因是它們在各自網(wǎng)絡(luò)中所傳送的數(shù)據(jù)基本單元(即數(shù)據(jù)幀)的格式不同。有了IP協(xié)議,不同的網(wǎng)絡(luò)系統(tǒng)實(shí)現(xiàn)了互聯(lián)。可以這樣理解lip協(xié)議就是一套由程序構(gòu)成的協(xié)議軟件,它把各種不同的“數(shù)據(jù)幀”統(tǒng)一轉(zhuǎn)換成“IP包”格式,實(shí)現(xiàn)在互聯(lián)網(wǎng)上的傳送。這種轉(zhuǎn)換是Internet的一個最重要的特點(diǎn),它使異種網(wǎng)絡(luò)的計算機(jī)系統(tǒng)也能在Internet上實(shí)現(xiàn)相互通信,也使Internet具有了真正意義上的“開放性”特征。
那么,"IP包"是什么?
由IP數(shù)據(jù)單元格式的構(gòu)成可見,IP包就是一個無連接的,并且是獨(dú)立的數(shù)據(jù)傳輸單元,它攜帶了數(shù)據(jù)來自哪里,以及將要送到哪里等明確的標(biāo)識(即IP地址)。這樣,IP包在網(wǎng)絡(luò)間傳送時,就不需要一定先建立一條數(shù)據(jù)通道,而是每個IP包都可經(jīng)由不同的傳輸路徑獨(dú)立地向目的地傳送。
【舉例】如圖4-15所示,IP協(xié)議的基本工作原理分析。當(dāng)通信兩端(主機(jī)A和主機(jī)B)位于不同的網(wǎng)絡(luò)時,數(shù)據(jù)的傳送需要經(jīng)由路由器跨網(wǎng)傳遞。發(fā)送端A只需將IP包(需要分片時先分片處理)交給第一路由器RI即可。路由器R1根據(jù)IP包攜帶的目的標(biāo)識,進(jìn)行路徑選擇并轉(zhuǎn)發(fā)給下一路由器(R2或R3).下一路由器再轉(zhuǎn)發(fā)到其下一路由器R4,路由器R4最后將IP包傳送到目的主機(jī)。在目的主機(jī)B端,收到IP包后進(jìn)行協(xié)議頭校驗(yàn)和檢驗(yàn),將檢驗(yàn)失敗的IP包.直接丟棄(不會向發(fā)送端回送任何差錯報文);將校驗(yàn)無誤的IP包提取數(shù)據(jù)報數(shù)據(jù)直接交給上層傳輸層。
由此可見,在網(wǎng)絡(luò)層IP包的傳送不僅是無連接的,而且目的端IP包的到達(dá)是無序的,并且是不可靠的。
4.網(wǎng)絡(luò)層其他協(xié)議
在網(wǎng)絡(luò)層,除了非常重要的IP協(xié)議之外,還有兩個比較重要的協(xié)議在此簡單介紹如下。
1)ICMP協(xié)議
ICMP(Internet Control Message Protocollnternet,網(wǎng)際控制消息協(xié)議)是TCP/IP協(xié)議族的一個子協(xié)議,主要用于在主機(jī)、路由器之間傳遞控制信息。這些控制消息是指網(wǎng)絡(luò)本身的消息,如網(wǎng)絡(luò)是否通暢、主機(jī)是否可達(dá)、路由是否可用、IP包路由傳送已超過“生存時間”等,還包括報告錯誤、交換受限等控制和狀態(tài)信息.這些控制消息雖然并不傳輸用戶數(shù)據(jù),但是對于用戶數(shù)據(jù)的傳遞起著重要的作用。
在網(wǎng)絡(luò)應(yīng)用中,我們經(jīng)常會得到ICMP提供的消息,只不過常常被忽略了而已。如某主機(jī)處于關(guān)閉或維護(hù)狀態(tài),不提供網(wǎng)絡(luò)服務(wù)時,ICMP就可以對發(fā)起的TCP連接給出一個終止(Destination Unreachable)通告,告知主機(jī)不可達(dá)。又如我們在檢查網(wǎng)絡(luò)是否通暢時,常常使用ping命令,這個命令就是一項(xiàng)基于ICMP協(xié)議的應(yīng)用,ping命令返回的信息均是由ICMP協(xié)議提供的報告。
2) ARP協(xié)議
ARP(Address Resolution Protocol,地址解析協(xié)議)用于通過主機(jī)的網(wǎng)絡(luò)地址(即32位的IP地址)解析出該主機(jī)的物理地址(即48位的MAC地址)。
在Internet網(wǎng)中,網(wǎng)絡(luò)層之下是網(wǎng)絡(luò)訪問層,其對應(yīng)于局域網(wǎng)的數(shù)據(jù)鏈路層和物理層。在數(shù)據(jù)鏈路層中,數(shù)據(jù)通信是以“數(shù)據(jù)幀”為傳輸單位,而“數(shù)據(jù)幀”的尋址方式是依據(jù)通信兩端點(diǎn)的MAC地址來實(shí)現(xiàn)的。因此,網(wǎng)絡(luò)層的IP包進(jìn)人網(wǎng)絡(luò)訪問層后,下一步的傳輸必須要知道下一鏈接點(diǎn)或目的節(jié)點(diǎn)的物理地址即MAC地址。如何找到下一鏈接點(diǎn)或目的節(jié)點(diǎn)的MAC地址,就是由ARP協(xié)議實(shí)現(xiàn)的。
我們專注高端建站,小程序開發(fā)、軟件系統(tǒng)定制開發(fā)、BUG修復(fù)、物聯(lián)網(wǎng)開發(fā)、各類API接口對接開發(fā)等。十余年開發(fā)經(jīng)驗(yàn),每一個項(xiàng)目承諾做到滿意為止,多一次對比,一定讓您多一份收獲!