IP數(shù)據(jù)報
IP是TCP/IP協(xié)議族中最核心的協(xié)議,所有的TCP、UDP、ICMP、IGMP數(shù)據(jù)都以IP數(shù)據(jù)報的格式傳輸。IP僅提供盡力而為的傳輸服務(wù),如果發(fā)生某種錯誤,IP會丟失該數(shù)據(jù),然后發(fā)送ICMP消息給信源端。另外,IP數(shù)據(jù)報可以不按發(fā)送順序接受。
IP數(shù)據(jù)報的格式如下:
前20字節(jié)和緊接其后的選項部分是IP數(shù)據(jù)報的首部,前20個字節(jié)是固定的,選項可有可無。首部的每一行是一個32位字的單位,最高位在左邊,為0bit,最低位在右邊,為31bit。4字節(jié)的32bit值按照以下次序傳輸:首先0-7bit,其次8-15比特,然后16-23bit,最后是24-31bit,這種傳輸次序稱為big endian字節(jié)序(我們在C語言寫位操作的算法時常用到該詞)。TCP/IP首部中的所有二進(jìn)制整數(shù)在網(wǎng)絡(luò)中傳輸時都要求以這種次序,因此它又稱作網(wǎng)絡(luò)字節(jié)序,其他形式存儲的二進(jìn)制數(shù)據(jù),如little endian格式,則必須在傳輸數(shù)據(jù)之前把首部轉(zhuǎn)化成網(wǎng)絡(luò)字節(jié)序。
首部長度是指首部占32bit字的數(shù)目,因為4位的最大值為15,因此首部最長為60字節(jié),也即是說選項部分的最大值為40字節(jié),不夠4的倍數(shù),要用0填充,使數(shù)據(jù)部分的起始地址為4的倍數(shù)。
總長度指整個IP數(shù)據(jù)報的長度,包括首部和數(shù)據(jù)部分,16bit,最長可達(dá)65535字節(jié)。盡管理論上可以傳送一個長達(dá)65535的IP數(shù)據(jù)報,但實際上還要考慮網(wǎng)絡(luò)的最大承載能力等因素,標(biāo)準(zhǔn)的TCP/IP分組大小為576字節(jié),減去IP首部的20個字節(jié),TCP首部的20個字節(jié),路由協(xié)議頭的24個字節(jié),為512字節(jié),因此主機接受的數(shù)據(jù)報的數(shù)據(jù)部分一般不超過512個字節(jié)。(PS:這點看的也不是太懂,網(wǎng)上很多人也有此疑問,謝希仁的計算機網(wǎng)絡(luò)中寫的一次IP數(shù)據(jù)報最少576字節(jié),尼瑪這里翻譯的是不超過576字節(jié),先往后看吧,說不定看到后面就豁然開朗了)。
3個標(biāo)志位主要用來標(biāo)識分片的IP數(shù)據(jù)報,片位移為分片的數(shù)據(jù)報的首個字節(jié)偏離整個原始數(shù)據(jù)報的位置。
IP路由選擇
主機通過路由器和目的主機連接。主機通過IP數(shù)據(jù)報連接目的主機時,按照如下步驟搜索(同一網(wǎng)絡(luò)中的搜索要經(jīng)過ARP協(xié)議將目的主機的IP地址解析為MAC地址):
1、搜索路由表,優(yōu)先搜索匹配主機,如果能找到和IP地址完全一致的目標(biāo)主機,則將該包發(fā)向目標(biāo)主機
2、搜索路由表,如果匹配主機失敗,則匹配同子網(wǎng)的路由器,這需要子網(wǎng)掩碼的協(xié)助。如果找到路由器,則將該包發(fā)向路由器。
3、搜索路由表,如果匹配同子網(wǎng)路由器失敗,則匹配同網(wǎng)號路由器,如果找到路由器,則將該包發(fā)向路由器。
4、搜索路由表,如果以上都失敗了,就搜索默認(rèn)路由,如果默認(rèn)路由存在,則發(fā)包
5、如果都失敗了,就丟掉這個包。
子網(wǎng)掩碼
主機號再分成一個子網(wǎng)號和主機號,便將一個網(wǎng)絡(luò)又劃分成了若干子網(wǎng),子網(wǎng)掩碼與該子網(wǎng)中的IP地址相與,便得到該子網(wǎng),另外,子網(wǎng)對于子網(wǎng)內(nèi)部的路由器是不透明的,也就是說IP數(shù)據(jù)報傳到該網(wǎng)絡(luò)的網(wǎng)關(guān)時,網(wǎng)關(guān)再將該數(shù)據(jù)報傳送到子網(wǎng)的默認(rèn)路由器上,最后通過該路由器再交付給該主機。
ARP協(xié)議和RARP協(xié)議
前面已經(jīng)說過,ARP協(xié)議只用在局域網(wǎng)中,它用來將IP地址解析為MAC地址。局域網(wǎng)中的每個主機都有一個ARP緩存,它保存了最近發(fā)起的IP地址到MAC地址的映射記錄,當(dāng)該主機要向局域網(wǎng)中的某一主機發(fā)送數(shù)據(jù)時,它會先從自己的緩存中查找,看是否存在目標(biāo)IP地址,如果找到,就通過映射找到它的MAC地址,從而發(fā)送過去,如果沒有找到該目的IP地址,它就向該局域網(wǎng)內(nèi)發(fā)送一個廣播,廣播中包含自己的IP地址、MAC地址和目的主機的IP地址,局域網(wǎng)內(nèi)的所有主機都會收到該廣播,但只有目的IP地址的主機會做出回應(yīng),并把自己的MAC地址發(fā)送給源主機,源主機收到后,在自己的ARP緩存中增加上該映射,并根據(jù)發(fā)來的MAC地址將數(shù)據(jù)發(fā)送給目的主機。
ARP高速緩存中的表項一般都要設(shè)置超時值,如果一段時間內(nèi)沒有與某主機通信,就將該主機對應(yīng)的IP與MAC之間的映射關(guān)系去掉,下次在需要通信時,依然發(fā)送廣播。
如果ARP請求是從一個網(wǎng)絡(luò)的主機到另一個網(wǎng)絡(luò)的主機,那么連接這兩個網(wǎng)絡(luò)的路由器就可以回答該請求,這個過程成為ARP代理。
RARP協(xié)議則剛好相反,它將MAC地址解析成為對應(yīng)的IP地址,現(xiàn)在已很少單獨使用。