- 介紹
IP協(xié)議是TCP/IP的網(wǎng)絡(luò)層協(xié)議,下層是數(shù)據(jù)鏈路層,上層是傳輸層,IP協(xié)議有兩個特點:
1.不可靠
不可靠(u n r e l i a b l e)的意思是它不能保證 I P數(shù)據(jù)報能成功地到達(dá)目的地。
I P僅提供最好的傳輸服務(wù)。
如果發(fā)生某種錯誤時,如某個路由器暫時用完了緩沖區(qū), I P有一個簡單的錯誤處理算法:丟棄該數(shù)據(jù)報,然后發(fā)送 I C M P消息報給信源端。
任何要求的可靠性必須由上層來提供(如T C P)。
2.無連接
是 I P并不維護(hù)任何關(guān)于后續(xù)數(shù)據(jù)報的狀態(tài)信息。每個數(shù)據(jù)報的處理是相互獨立的。這也說明, I P數(shù)據(jù)報可以不按發(fā)送順序接收。
如果一信源向相同的信宿發(fā)送兩個連續(xù)的數(shù)據(jù)報(先是 A,然后是B),每個數(shù)據(jù)報都是獨立地進(jìn)行路由選擇,可能選擇不同的路線,因此 B可能在A到達(dá)之前先到達(dá)。
- IP數(shù)據(jù)報

IP數(shù)據(jù)報由IP數(shù)據(jù)報首部+選項+數(shù)據(jù)組成。如果不包含選項,那么頭部長20字節(jié)。其中,數(shù)據(jù)是傳輸層的數(shù)據(jù)報,長度不定。
IP數(shù)據(jù)報首部中,0是高地址,31是地址,傳輸順序按照07,815,1623,2431進(jìn)行傳輸。這種數(shù)據(jù)的高位放在存儲的高地址,數(shù)據(jù)的地位放在低地址的方式叫做大端存儲。因為TCP/IP也正式采用大端存儲方式,所以這種存放數(shù)據(jù)的方式也叫網(wǎng)絡(luò)字節(jié)序,所以,為了保證數(shù)據(jù)是以網(wǎng)絡(luò)字節(jié)序的方式進(jìn)行傳輸,socket有接口有專門的函數(shù)對IP數(shù)據(jù)報進(jìn)行轉(zhuǎn)換。
和大端存儲相反,小端存儲將數(shù)據(jù)的高位存放在內(nèi)存的低地址,數(shù)據(jù)的地位存放在數(shù)據(jù)的高地址。<<匯編語言 王爽>>
4位版本:目前是0010,也就是4,這個版本的IP協(xié)議稱為IPv4,IP長度是32
4位首部長度:指的是IP首部+選項一共多少個字節(jié)(TCP/IP詳解-卷一 中說的是“首部長度指的是首部占 32 bit字的數(shù)目,這翻譯真不怎樣”),從上面的IP數(shù)據(jù)報圖中我們可以看出,如果沒有選項,首部長度就是5,普通IP數(shù)據(jù)報是沒有選項的,所以就是5。
8位服務(wù)類型(TOS): 8位服務(wù)類型包括:
一個3 bit的優(yōu)先權(quán)子字段(現(xiàn)在已被忽略)
4 bit的TOS子字段
1 bit未用位字段,但必須置0

4 bit的TO S分別代表:
TOS表示該數(shù)據(jù)報所使用的服務(wù)類型,分別有最小時延、最大吞吐量、最高可靠性和最小費用這四個類型,只能選擇一種服務(wù)類型,標(biāo)志位為1就是選擇,為0就是不選擇。如果所有4 bit均為0,那么就意味著是一般服務(wù)。例如:
一般服務(wù): 0000
最小時延:1000 ,Telnet和Rlogin推薦使用
最大吞吐量:0100
最高可靠性:0010
最小費用:0001
途中最后一列的16進(jìn)制值正式tcpdump所打印的。
現(xiàn)在大多數(shù)的T C P / I P實現(xiàn)都不支持TO S特性,但是自4.3BSD Reno以后的新版系統(tǒng)都對它
進(jìn)行了設(shè)置。另外,新的路由協(xié)議如 O S P F和I S - I S都能根據(jù)這些字段的值進(jìn)行路由決策。
16位總長度:
總長度字段是指整個 I P數(shù)據(jù)報的長度,以字節(jié)為單位。利用首部長度字段和總長度字段,
就可以知道 I P數(shù)據(jù)報中數(shù)據(jù)內(nèi)容的起始位置和長度。由于該字段長 1 6比特,所以 I P數(shù)據(jù)報最
長可達(dá) 6 5 5 3 5字節(jié)(回憶圖 2 - 5,超級通道的 M T U為6 5 5 3 5。它的意思其實不是一個真正的
M T U—它使用了最長的I P數(shù)據(jù)報)。當(dāng)數(shù)據(jù)報被分片時,該字段的值也隨著變化,這一點將
在11 . 5節(jié)中進(jìn)一步描述。
盡管可以傳送一個長達(dá) 6 5 5 3 5字節(jié)的I P數(shù)據(jù)報,但是大多數(shù)的鏈路層都會對它進(jìn)行分片。而且,主機也要求不能接收超過 5 7 6字節(jié)的數(shù)據(jù)報。
總長度字段是 I P首部中必要的內(nèi)容,因為一些數(shù)據(jù)鏈路(如以太網(wǎng))需要填充一些數(shù)據(jù)以達(dá)到最小長度。盡管以太網(wǎng)的最小幀長為 4 6字節(jié)(見圖 2 - 1),但是I P數(shù)據(jù)可能會更短。如果沒有總長度字段,那么I P層就不知道4 6字節(jié)中有多少是I P數(shù)據(jù)報的內(nèi)容。(IP層會收到數(shù)據(jù)貞嗎?)
目標(biāo)/源IP地址:不同于數(shù)據(jù)鏈路的MAC地址,IPv4的地址是32位的
16位標(biāo)識字段:標(biāo)識字段唯一地標(biāo)識主機發(fā)送的每一份數(shù)據(jù)報。通常每發(fā)送一份報文它的值就會加 1
3位標(biāo)志:
13位片偏移:
8位生存時間:T T L(t i m e - t o - l i v e)生存時間字段設(shè)置了數(shù)據(jù)報可以經(jīng)過的最多路由器數(shù)。T T L的初始值由源主機設(shè)置(通常為 3 2或6 4),一旦經(jīng)過一個處理它的路由器,它的值就減去 1。當(dāng)該字段的值為 0時,數(shù)據(jù)報就被丟棄,并發(fā)送 I C M P報文通知源主機。討論Tr a c e r o u t e程序時將再回來討論該字段
8位協(xié)議:根據(jù)它可以識別是哪個協(xié)議向 I P傳送數(shù)據(jù)。
16位首部檢驗和:
首部檢驗和字段是根據(jù)I P首部計算的檢驗和,不包括后面的【數(shù)據(jù)】部分。I C M P、I G M P、U D P和T C P協(xié)議中,它們各自的首部中都有檢驗和字段,他們的檢驗和值不只是首部,還包括數(shù)據(jù)的檢驗和。
- IP路由選擇
如果目的主機與源主機直接相連(如點對點鏈路)那么I P數(shù)據(jù)報就直接送到目的主機上。
如果目標(biāo)主機和源主機都在同一個局域網(wǎng)(以太網(wǎng)或令牌環(huán)網(wǎng)),那么I P數(shù)據(jù)報就會送給路由器,然后由路由器以單播的形式直接發(fā)到目標(biāo)主機上。
否則,主機把數(shù)據(jù)報發(fā)往網(wǎng)關(guān),由網(wǎng)關(guān)來轉(zhuǎn)發(fā)該數(shù)據(jù)報到下一站路由器。
計算機IP協(xié)議的工作原理
IP接受的數(shù)據(jù)包可以從本機的TCP、UDP、ICMP、IGMP而來,也可以從網(wǎng)絡(luò)接口(也就是數(shù)據(jù)鏈路層)接受數(shù)據(jù)報。
IP層有一個路由表,當(dāng)IP層收到一份數(shù)據(jù)報的時候,IP層回去對比路由表:
1.當(dāng)數(shù)據(jù)包來自數(shù)據(jù)鏈路層的時候,IP層會去檢查目的IP是不是當(dāng)前計算機的某個IP地址(一個計算機可以有多個IP地址,一般的情況下,loopback是127.0.0.1,其他的網(wǎng)卡都有對應(yīng)的IP地址,可以用ifconfig查看當(dāng)前計算機的網(wǎng)卡和對應(yīng)的IP):
1)如果目的IP是當(dāng)前計算機或者是廣播IP,就會將數(shù)據(jù)報交給IP數(shù)據(jù)報的“協(xié)議”字段中所指的協(xié)議模塊,可能是ARP,RARP,IP。

2)如果目的地址不是當(dāng)前網(wǎng)卡的某個IP或者廣播地址,那么計算機就會:
2.1)如果計算機不是沒設(shè)置成路由器,那么就丟棄數(shù)據(jù)包,并通過ICMP協(xié)議發(fā)送一個報錯信息給源主機。
2.2)如果被設(shè)置成路由器,那么計算機就作為一個路由器對數(shù)據(jù)報進(jìn)行轉(zhuǎn)發(fā)。
普通的計算機是不會使用路由表的,對于普通的主機后來說,接到一個數(shù)據(jù)報后,所做的事情很簡單,那就是看一下目的IP是否是當(dāng)前某個網(wǎng)卡的IP,如果不是,就丟棄該數(shù)據(jù)包,然后使用ICMP協(xié)議發(fā)送一個報錯信息給源IP主機。
而對于路由器(或者設(shè)置成路由器的主機)來說,如果數(shù)據(jù)報不是給他的,他還會將數(shù)據(jù)報轉(zhuǎn)發(fā)到下一站路由器,或者轉(zhuǎn)發(fā)到直接相連的網(wǎng)絡(luò)IP地址(就是直接和當(dāng)前路由器永寬帶連接起來的多臺計算機)。
路由表的字段:
1. 目標(biāo)IP地址:
可以是一個完整的主機地址,主機地址的主機號是非0的。
也可以是一個網(wǎng)絡(luò)地址,如果主機號為0,就表示目標(biāo)地址是一個網(wǎng)絡(luò)地址。
應(yīng)該也可以是一個網(wǎng)絡(luò)中的多臺主機,或者網(wǎng)絡(luò)中的一個網(wǎng)段
2.下一站(或下一跳)路由器( next-hop router)的I P地址,或者有直接連接的網(wǎng)絡(luò) I P地址:
下一站路由器是指一個在直接相連網(wǎng)絡(luò)上的路由器,通過它可以轉(zhuǎn)發(fā)數(shù)據(jù)報。
下一站路由器不是最終的目的,但是它可以把傳送給它的數(shù)據(jù)報轉(zhuǎn)發(fā)到最終目的。
3.標(biāo)志:
一個標(biāo)志指明目的 I P地址是網(wǎng)絡(luò)地址還是主機地址
一個標(biāo)志指明下一站路由器是否為真正的下一站路由器,還是一個直接相連的接口(我們將在 9 . 2節(jié)中詳細(xì)介紹這些標(biāo)志)。
4.為數(shù)據(jù)報的傳輸指定一個網(wǎng)絡(luò)接口:指定要用哪個網(wǎng)卡(網(wǎng)絡(luò))發(fā)送數(shù)據(jù)報。
下一站路由器
- 子網(wǎng)尋址
簡單的IP地址組成:

支持子網(wǎng)的計算機的IP地址組成:

子網(wǎng)掩碼
特殊情況的IP地址
