1. 程式人生 > >TCP/IP詳解學習筆記——IP協議

TCP/IP詳解學習筆記——IP協議


一 概述
IP協議是TCP/IP協議簇中最核心的協議,所有的TCP、UDP、ICMP以及IGMP資料都以IP資料報格式傳輸。IP協議提供不可靠、無連線的資料傳輸服務。不可靠的意思是它不能保證IP資料報能成功到達目的地。IP僅僅提供最好的傳輸服務。意思就是,我盡我所能傳輸資料,實在沒傳過去,也不要怪我。當發生某種錯誤時,比如某個路由器的緩衝區慢了,此時路由器不能接收新的資料,直接丟棄處理,然後傳送ICMP訊息給信源端,告訴他我盡力了。如果需要可靠的傳輸,必須由上層協議來提供,比如TCP協議。無連線的意思是IP並不維護任何關於後續資料報的狀態資訊。每個資料報的處理時相互獨立的。也就是說,IP資料報不一定按照發送的順序接收。比如某一信源向同一個信宿傳送兩個連續的資料報(先發A,再發B),信宿收到時,可能B在A之前收到,因為A和B並不是通過同一個路徑傳送,他們是相互獨立的。除此之外,IP資料報在傳輸途中,還有可能被複制,或者遇到某些錯誤時資料被更改,這都是有可能的。而這些問題都需要通過上層協議去解決。 二 IP首部 如圖所示,IPv4資料報格式。IPv4首部正常大小是20位元組,如果有一些選項(options)需要設定的話,會大於20位元組,但是這種情況比較少見。IPv6首部大小是IPv4的兩倍,但是IPv6首部沒有選項(options),因此它的大小是固定的。然而IPv6可能會有擴充套件首部,我們將在後面討論。

關於位元組序:有兩種型別,小端位元組序(little-endian)和大端位元組序(big-endian)。兩者的區別是,小端位元組序是將低位位元組放在記憶體的低地址段,高位位元組放在記憶體的高地址段;大端位元組序是將高位位元組放在記憶體的低地址段,低位位元組放在記憶體的高地址段。舉個例子,對於0x12345678,最高位元組是12,最低位元組是78,因此按照小端模式儲存順序為:0x78,0x56,0x34,0x12。按照大端模式儲存的順序為:0x12,0x34,0x56,0x78。 在所有的TCP/IP協議首部中,資料傳輸都是按照大端進行傳輸的,這也叫做網路位元組序。但是在很多PC機上,儲存方式是小端儲存,因此,在傳輸資料時需要進行轉換。 在IP首部的圖中,我們可以看到,左邊是從0bit開始,代表高位,右邊是31bit,代表低位。在傳輸過程中,4位元組的傳輸順序是,0-7bit先傳,然後是8-15bit,接著是16-23bit,最後是24-31bit。 我們來看看IP首部。 最開始的4個bit是協議版本欄位。4代表IPv4,6代表IPv6。我們看到,在IPv4和IPv6的首部裡,都是這樣的。說明無論是用IPv4還是IPv6,每個IP資料報首部最開始的4bit要麼是4要麼是6。 Internet Header Lenght(IHL)欄位表示IP首部所佔32bit的數目。一般為5,這時IP首部長度是5個32bit,也就是20位元組。因為IHL佔用4bit,因此IP首部最大長度為60位元組。IPv6首部中沒有這個欄位,因為IPv6首部固定為40位元組。 接下來是6bit的DS欄位和2bit的ECN欄位,在IPv4和IPv6中都是一樣的,在資料報傳輸的過程中,這兩個欄位發揮著特殊的作用,我們後面再討論。 接下來是Total Length欄位,表示IPv4資料報的總byte數。通過該欄位和IHL欄位,我們就能知道IP資料報的資料部分(除了首部的其他部分)從哪兒開始,並且有多大了。因為該欄位佔用16bit,因此,IPv4資料報(包括首部)最大值為65535byte。之所以需要Total Length欄位,是因為在低層次的協議中,比如乙太網幀中包含IP資料報,如果IP資料報太小,則需要在其後面填充0,這樣乙太網就沒法判斷有效的IP資料報到底是哪些了。 儘管最大的IPv4資料報是65536byte,但是由於各種限制,往往不能傳輸這麼大的資料。當要傳輸大資料時,需要進行分片(fragment)。分片以後,Total Length欄位代表的是每個分片的長度(而不是分片之前資料報總長度)。 在IPv6中,首部不支援分片,而IPv6資料報長度是由Payload Length欄位表示的。該欄位表示除首部之外的IPv6資料。 Identification欄位用來標誌從傳送端傳送的每個IPv4資料報。因為每份資料都是不一樣的,因此該標誌的值也是不一樣的,沒傳送一份資料,該值加1。顯然,這個欄位與它後面的兩個欄位一樣,都是和分片功能息息相關的。我們後面再討論。 Time-to-Live(TTL)欄位,表示IPv4資料報的生存期。在IPv4資料報傳送出去時,有個初始值,在轉發的過程中,沒經過一個路由,該值減1,如果該值變為0(還沒到達目的地),它將被丟棄,然後想傳送者返回一個ICMP訊息。這樣做是為了防止某些資料在網路中無線迴圈的傳遞,這樣會導致網路擁塞。 協議(Protocol)欄位表示IPv4資料報的有效載荷部分的資料型別,比如17代表這是UDP資料,6代表TCP資料。通常情況下都是封裝的上層協議的資料,但是也有例外。 Header Checksum欄位計算IPv4首部的長度,並不包括有效載荷部分,這就意味著封裝在IPv4資料報裡面的上層協議的資料IP層不負責檢查它的正確性,所以我們說IP層提供的是不可靠的傳輸服務。因此,幾乎所有封裝在IP資料報中的協議(ICMP,IGMP,UDP和TCP),這些協議的資料中都包含有各自的檢測欄位,沒辦法,IP協議不提供,只能自己想辦法了。奇怪的是,IPv6並沒有提供checksum欄位。 用來計算checksum的演算法,我們稱之為Internet checksum。這個演算法是值得討論的,它並不像乙太網中的資料校驗,在這裡有個特殊的情況,比如IPv4首部中的TTL欄位,它是變化的,所以checksum就不能是簡單的校驗。然而我並不太關心這個,所以我就不說了。 當然,在IP首部中不可缺少的是源地址和目的地址,IPv4中是32bit,IPv6中是128bit。目的地址可能是多播或者廣播。 我們回過頭來看看DS欄位和ECN欄位。之前我們說,在IPv4中,這兩個欄位是在資料轉發過程中起到特殊作用的,我們現在來看看到底起什麼作用。IP資料報從源主機發送到目的主機的過程,要經過很多個路由,有很多條路徑可以選擇。把這兩個欄位設定成某些值之後,這些資料報和普通的資料報在轉發的時候會有不同的策略。它能讓資料在轉發時擁有不同的排隊延時,以及其他的影響。 DS欄位中的值稱為Differentiated Services Code Point(DSCP),它實際上是一個事先商定好的值,代表著資料報的優先順序。通常,這個值在傳輸過程中不會改變,但是也會有例外。 兩個bit的ECN欄位是用來做什麼的呢?當一個數據報經過一個比較擁塞的路由器時,ECN欄位將會被設定,作為一個擁塞指示器。有什麼用呢?想象一下,當目的主機收到一個ECN欄位被標記的資料報,它就能知道某個路由刺客發生擁塞,那麼某些協議(比如TCP)將會降低傳輸資料的速率,以此來緩解擁塞的路由。 DS欄位和ECN欄位的位置一開始是用來放置Type of Service(ToS)欄位,在IPv6中是Traffic Class欄位。儘管他們沒有得到廣泛的使用,但是現在的DS欄位仍然能夠向後相容。我們從ToS欄位開始說起吧。

ToS欄位內容如上圖所示,D、T、R分別代表延時(delay)、吞吐量(throughput)和可靠程度(reliability)。當置1時,代表著更好的效能,更低的時延,更大的吞吐量和更高的可靠性。Precedence部分的值從000到111,分別代表一般優先順序和網路控制優先順序,也就是最低優先順序和最高優先順序。具體對應關係如下表:
在設計DS欄位的時候,為了向後相容,precedence被考慮進來。我們來看看DS欄位的內容:
標準情況下,DS0的值都是0。其他五位去不同值的時候,代表著不同的優先順序,具體如下圖:
我們看到,最開始的八行,跟之前Tos欄位表示的含義是一樣的,這就是向後相容。不同的資料報擁有不同的優先順序,這裡的優先順序是指,在轉發的時候,會享有不同的特權。比如有的能優先轉發。 正常情況下,IPv4首部總共20位元組,我們已經都討論過了。但是IPv4首部中還有可能新增一些額外的選項(IP Options)。這些選項有各種各樣的用途,但是他們很少用到,我們不再詳述。 三 IPv6擴充套件首部 IPv6是一個還在發展和完善中的協議。有機會單獨拿出來整理。 四 IP路由選擇 IP路由選擇是IP協議裡面非常重要的一部分,也是非常複雜的一部分內容。但是,對於傳送端來說,這個過程非常簡單。如果目的端和傳送端直接相連(點對點連線),或者在一個區域網(比如乙太網),這時候傳送端只需要將資料報直接傳送給目的端即可,不需要路由器。否則,傳送端將資料傳送到預設路由器,然後讓該路由器將資料報傳送給目的端。大多數情況下,就是這麼簡單。 當然,情況可能會更加複雜,我們從路由表開始談起。 1.路由表(Forwarding Table) 路由表或者說轉發表,是每個路由器都會儲存的那麼一張表,就像ARP協議裡每個介面都會有一個ARP快取記憶體一樣,它記錄了一些資訊。路由表記錄的資訊就是,當路由器接收到一個數據報,它能通過路由表記錄的這些資訊,知道把該資料報往哪兒發。每條資訊包括以下幾點 (1) 目的地址(Destination)。可以是一個完整的主機地址,也可以是一個網路地址。如果主機號為0,將發給指定網路的所有主機,否則,發給某個特定的主機。 (2) 掩碼(Mask) (3) 下一跳(Next-hop) (4) 介面(Interface) 我發現,在看上面這些詞彙的資訊的時候,我似懂非懂,看了後面的例子之後,立馬明白了,所以不要在意這些定義和解釋,直接看後面的例子就懂了。 我們需要知道的是,IP資料報在轉發的過程中,是一跳一跳的,從一個路由器跳到另外一個路由器,直到到達目的地或者被丟棄。它只知道下一跳往哪兒走,不知道整個的路徑是什麼樣的。並且總是假設下一跳裡目的地更近。有的人對這個事情很費解,它怎麼就一定會到達目的地呢?這個是由專門的路由演算法來保證的,比如RIP,OSPE等。 2 IP路由轉發過程 當路由器接收到一個IP資料報,到它將該資料報發往下一跳,這個過程就是IP路由轉發過程。具體如下: 接收到資料時,路由器提取目的IP地址D,將D與該路由器的路由表中每一個條目中的mask按位做與運算,得到的結果中含有1最多的,即為最佳匹配結果。那個mask對應條目中的下一跳就是該資料報應該前往的下一跳。 3 例子 舉兩個例子,直接傳輸和間接傳輸。直接傳輸就是在同一區域網,或者直接相連的,間接傳輸顯然就是另外的情況了。

下面是間接傳輸的例子,非常清楚明白。

相關推薦

TCP/IP學習筆記——IP協議

一 概述 IP協議是TCP/IP協議簇中最核心的協議,所有的TCP、UDP、ICMP以及IGMP資料都以IP資料報格式傳輸。IP協議提供不可靠、無連線的資料傳輸服務。不可靠的意思是它不能保證IP資料報能成功到達目的地。IP僅僅提供最好的傳輸服務。意思就是,我盡我所能傳輸資料

TCP/IP學習筆記(3)IP協議ARP協議和RARP協議

out 處理機 傳輸 包含 發送 res 這也 進行 默認 把這三個協議放到一起學習是因為這三個協議處於同一層,ARP協議用來找到目標主機的Ethernet網卡Mac地址,IP則承載要發送的消息。數據鏈路層可以從ARP得到數據的傳送信息,而從IP得到要傳輸的數據信息。   

TCP/IP學習筆記——地址解析協議ARP

一 概述 我們知道,IP協議是用來在不同的物理網路之間傳輸資料的。要在不同的網路之間傳輸資料,至少需要將IP協議所用的地址轉換成特定網路所使用的實體地址。一般來說,就是將IPv4地址轉換為mac地址。要想與一個特定的裝置進行資料交換,光知道它的IP地址是不夠的,還需要知道它

TCP/IP學習筆記(5)-- ICMP:internet 控制報文協議

1.概述      ICMP是(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制訊息。控制訊息是指網路通不通、主機是否可達、路由是否可用等網路本身的訊息。這些控制訊息雖然並不傳輸使用者資料

TCP/IP學習筆記(8)-DNS域名系統

dns 支持 設置 類型 hosts name 安裝 報文 定義 前面已經提到了訪問一臺機器要靠IP地址和MAC地址,其中,MAC地址可以通過ARP協議得到,所以這對用戶是透明的,但是IP地址就不行,無論如何用戶都需要用一個指定的IP來訪問一臺計算機,而IP地址又非常不好記

TCP/IP學習筆記(1)-基本概念【轉】

網絡號 最大的 net 容易 學習 ip地址 其他 title 編寫 轉自:http://blog.csdn.net/goodboy1881/article/details/665041 為什麽會有TCP/IP協議 在世界上各地,各種各樣的電腦運行著各自不同的操作系統為大家

基礎才是王道——TCP/IP學習筆記 這位仁兄寫得太好了

TCP/IP詳解學習筆記   這位仁兄寫得太好了. http://blog.csdn.net/goodboy1881/category/204448.aspx TCP/IP詳解學習筆記(13)-TCP堅持定時器,TCP保活定時器 TCP/IP詳解學習筆記(12)-TCP的超時

TCP/IP學習筆記(13)-- TCP連線的建立與終止

1.TCP連線的建立            設主機B執行一個伺服器程序,它先發出一個被動開啟命令,告訴它的TCP要準備接收客戶程序的連續請求,然後服務程序就處於聽的狀態。不斷檢測是否有客戶程序發起連續請求,如有,作出響應。設客戶程序執行在主機A中,他先向自己的TCP發出主動開啟的命令,表明要向某個IP地址

TCP/IP學習筆記——資料鏈路層(2)

五 Wireless LANs(Wi-Fi) 如今非常流行的一種接入網際網路的方式就是Wi-Fi了,我們用的ipad、手機、膝上型電腦等等都可以用這種方式接入網際網路,非常方便靈活。一個典型的Wi-Fi網路如下圖所示,一些基本概念大致瞭解。 1. 802.11標準幀格式

TCP/IP學習筆記(5)-IP選路,動態選路,和一些細節

1.靜態IP選路 1.1.一個簡單的路由表 選路是IP層最重要的一個功能之一。前面的部分已經簡單的講過路由器是通過何種規則來根據IP資料包的IP地址來選擇路由。這裡就不重複了。首先來看看一個簡單的系統路由表。 Destination     Gateway        

TCP/IP學習筆記(10)-TCP連線的建立與中止

TCP是一個面向連線的協議,所以在連線雙方傳送資料之前,都需要首先建立一條連線。這和前面講到的協議完全不同。前面講的所有協議都只是傳送資料而已,大多數都不關心傳送的資料是不是送到,UDP尤其明顯,從程式設計的角度來說,UDP程式設計也要簡單的多----UDP都不用考慮資料分片

TCP/IP學習筆記 這位仁兄寫得太好了.

TCP/IP詳解學習筆記(1)-基本概念 為什麼會有TCP/IP協議 在世界上各地,各種各樣的電腦執行著各自不同的作業系統為大家服務,這些電腦在表達同一種資訊的時候所使用的方法是千差萬別。就好像聖經中上帝打亂了各地人的口音,讓他們無法合作一

TCP/IP學習筆記(2)-資料鏈路層

資料鏈路層有三個目的: 為IP模組傳送和 接收IP資料報。 為ARP模組傳送ARP請求和接收ARP應答。 為RARP傳送RARP請 求和接收RARP應答 ip大家都聽說過。至於ARP和RARP,ARP叫做地址解析協議,是用IP地址換MAC地址的一種協議,而

TCP/IP學習筆記(1)-基本概念

為什麼會有TCP/IP協議 在世界上各地,各種各樣的電腦執行著各自不同的作業系統為大家服務,這些電腦在表達同一種資訊的時候所使用的方法是千差萬別。就好像聖經中上帝打亂了各地人的口音,讓他們無法合作一樣。計算機使用者意識到,計算機只是單兵作戰並不會發揮太大的作用。只有把它們聯合

TCP/IP筆記——IP選路

本系列是針對《TCP/IP詳解》的筆記總結,包含各章節的主要內容。有助於幫助你快速瞭解並掌握TCP/IP協議的相關內容。 目錄  1、概述  2、選路原理  3、ICMP重定向差錯  4、ICMP發現報文 1、概述 IP層工作步驟

TCP-IP卷1:協議 學習筆記(6) Ping

參考:TCP-IP詳解卷1:協議 Ping程式的目的是為了測試另一臺主機是否可達。該程式傳送一份ICMP回顯請求報文給主機,並等待返回ICMP回顯應答。 一般來說,如果不能Ping到某臺主機,那麼久不能Telnet或者FTP到那臺主機。反過來,如果不能Telnet到某臺主機,可

TCP-IP卷1:協議 學習筆記(5) RARP ICMP

參考:TCP-IP詳解卷1:協議 RARP RARP分組的格式與ARP分組基本一致,它們之間的主要差別是RARP請求或應答的幀型別為0x8035,RARP請求的操作碼為3,應答操作碼為4。 RARP請求以廣播的方式傳送,RARP應答一般是單播傳送的。 RARP伺服器實現

TCP-IP卷1:協議 學習筆記(4) ARP

參考:TCP-IP詳解卷1:協議 ARP(地址解析協議)和RARP(逆地址解析協議) ARP為IP地址到對應的硬體地址之間提供動態對映,這個過程是自動完成的,一般應用程式使用者或者系統管理員不必關心。 RARP是被那些沒有磁碟驅動器的系統使用(一般是無盤工作站或X終端),需

TCP-IP卷1:協議 學習筆記(3) IP:網際協議

參考:TCP-IP詳解卷1:協議 IP首部: 服務型別TOS欄位包括一個3bit的優先權子欄位(現在已經被忽略),4bit的TOS子欄位和1bit未用位但必須置0。4bit的TOS分別代表:最小時延、最大吞吐量、最高可靠性和最小費用。4bit中只能置其中1bit。如果所有

TCP-IP卷1:協議 學習筆記(2) 鏈路層

參考:TCP-IP詳解卷1:協議 鏈路層的三個主要目的: (1)為IP模組傳送和接收IP資料報 (2)為ARP模組傳送ARP請求和接收ARP應答 (3)為RARP傳送RARP請求和接收RARP應答。 乙太網一般是指Digital Equipment Crop.、In