IP是TCP/IP協議族中最為核心的協議。所有的TCP、UDP、ICMP及IGMP資料都以IP資料報格式傳輸。其是一種不可靠、不需連線的資料報傳送服務。
不可靠(unreliable)的意思是它不能保證IP資料報能成功地到達目的地。IP僅提供最好的傳輸服務。
無串連(connectionless)這個術語的意思是IP並不維護任何關於後續資料報的狀態資訊。每個資料報的處理是相互獨立的。
1、IP首部
最高位在左邊,記為0bit;最低位在右邊,記為31bit。4個位元組的32bit值以下面的次序傳輸:首先是0~7bit,其次8~15bit,然後16~23bit,最後是24~31bit。這種傳輸次序稱作bigendian位元組序。
目前的協議版本號碼是4,因此IP有時也稱作IPv4。
首部長度指的是首部佔32bit字的數目,包括任何選項。由於它是一個4位元欄位,因此首部最長為60個位元組。
服務類型(TOS)欄位包括一個3bit的優先權子欄位(現在已被忽略),4bit的TOS子欄位和1bit未用位但必須置0。4bit的TOS分別代表:最小時延、最大輸送量、最高可靠性和最小費用。4bit中只能置其中1bit。如果所有4bit均為0,那麼就意味著是一般服務。現在大多數的TCP/IP實現都不支援TOS特性,但是自4.3BSDReno以後的新版系統都對它進行了設定。
總長度欄位是指整個IP資料報的長度,以位元組為單位。總長度欄位是IP首部中必要的內容,因為一些資料鏈路(如乙太網路)需要填充一些資料以達到最小長度。
識別欄位唯一地標識主機發送的每一份資料報。通常每發送一份報文它的值就會加1。
TTL(time-to-live)存留時間欄位設定了資料報可以經過的最多路由器數。它指定了資料報的存留時間。TTL的初始值由源主機設定(通常為32或64),一旦經過一個處理它的路由器,它的值就減去1。當該欄位的值為0時,資料報就被丟棄,並發送ICMP報文通知源主機。
協議欄位被IP用來對資料報進行分用,可以識別哪個協議向IP傳送資料。
為了計算一份資料報的IP檢驗和,首先把檢驗和欄位置為0。然後,對首部中每個16bit進行二進位反碼求和(整個首部看成是由一串16bit的字組成),結果存在檢驗和欄位中。當收到一份IP資料報後,同樣對首部中每個16bit進行二進位反碼的求和。ICMP、IGMP、UDP和TCP都採用相同的檢驗和演算法。
每一份IP資料報都包含源IP地址和目的IP地址。
最後一個欄位是任選項,是資料報中的一個可變長的可選資訊。
2、IP路由選擇
IP可以從TCP、UDP、ICMP和IGMP接收資料報(即在本地產生的資料報)並進行發送,或者從一個網路介面接收資料報(待轉寄的資料報)並進行發送。IP層在記憶體中有一個路由表。當收到一份資料報並進行發送時,它都要對該表搜尋一次。當資料報來自某個網路介面時,IP首先檢查目的IP地址是否為原生IP地址之一或者IP廣播位址。如果確實是這樣,資料報就被送到由IP首部協議欄位所指定的協議模組進行處理。如果資料報的目的不是這些地址,那麼(1)如果IP層被設定為路由器的功能,那麼就對資料報進行轉寄(也就是說,像下面對待發出的資料報一樣處理);否則(2)資料報被丟棄。
路由表中的每一項都包含下面這些資訊:
目的IP地址。它既可以是一個完整的主機地址,也可以是一個網路地址,由該表目中的標誌欄位來指定(如下所述)。主機地址有一個非0的主機號,以指定某一特定的主機,而網路地址中的主機號為0,以指定網路中的所有主機(如乙太網路,令牌環網)。
下一站(或下一跳)路由器(next-hoprouter)的IP地址,或者有直接連接的網路IP地址。下一站路由器是指一個在直接相連網路上的路由器,通過它可以轉寄資料報。下一站路由器不是最終的目的,但是它可以把傳送給它的資料報轉寄到最終目的。
標誌。其中一個標誌指明目的IP地址是網路地址還是主機地址,另一個標誌指明下一站路由器是否為真正的下一站路由器,還是一個直接相連的介面。
為資料報的傳輸指定一個網路介面。
IP路由選擇主要完成以下這些功能:
1)搜尋路由表,尋找能與目的IP地址完全符合的表目(網路號和主機號都要匹配)。如果找到,則把報文發送給該表目指定的下一站路由器或直接連接的網路介面(取決於標誌欄位的值)。
2)搜尋路由表,尋找能與目的網路號相匹配的表目。如果找到,則把報文發送給該表目指定的下一站路由器或直接連接的網路介面(取決於標誌欄位的值)。目的網路上的所有主機都可以通過這個表目來處置。例如,一個乙太網路上的所有主機都是通過這種表目進行尋徑的。這種搜尋網路的匹配方法必須考慮可能的子網路遮罩。
3)搜尋路由表,尋找標為“預設(default)”的表目。如果找到,則把報文發送給該表目指定的下一站路由器。
如果上面這些步驟都沒有成功,那麼該資料報就不能被傳送。
完整主機地址匹配在網路號匹配之前執行。只有當它們都失敗後才選擇預設路由。
3、子網定址
現在所有的主機都要求支援子網編址。不是把IP地址看成由單純的一個網路號和一個主機號組成,而是把主機號再分成一個子網號和一個主機號。
原因:因為A類和B類地址為主機號分配了太多的空間,可分別容納的主機數為2^24-2和2^16-2。事實上,在一個網路中人們並不安排這麼多的主機由於全0或全1的主機號都是無效的,因此總數減去2。
4、子網路遮罩
除了IP地址以外,主機還需要知道有多少位元用於子網號及多少位元用於主機號。這是在引導過程中通過子網路遮罩來確定的。這個掩碼是一個32bit的值,其中值為1的位元留給網路號和子網號,為0的位元留給主機號。
給定IP地址和子網路遮罩以後,主機就可以確定IP資料報的目的是:(1)本子網上的主機;(2)本網路中其他子網中的主機;(3)其他網路上的主機。