其中ARP 協(xié)議用來(lái)找到目標主機的 Ethernet 網(wǎng)卡 Mac 地址;
IP 則承載要發(fā) 送的傳輸層消息。
數據鏈路層可以從 ARP 得到數據的傳送信息,而從 IP 得到要傳輸的數據信息。
IP 協(xié)議是 TCP/IP 協(xié)議的核心,也是最基礎的,所有的 TCP,UDP,IMCP,IGCP 等等這些協(xié)議的數據都以 IP 數據格式傳輸。特別要注意的是,IP 不是可靠的協(xié)議,也就是說(shuō),IP 協(xié)議沒(méi)有提供一種數據未傳達以后的處理機制,并不能保證數據能夠到達對方。而這件事的重任被放在了上層協(xié)議--TCP 或 UDP 要做的事情。所以這也就出現了 我們常說(shuō)的TCP 是一個(gè)可靠協(xié)議,而 UDP 就沒(méi)有那么可靠的區別。(UDP和TCP的區別可以看我之前的文章)
要想了解IP協(xié)議首先我們先看下協(xié)議頭:
在這里我就不挨個(gè)解釋了,太枯燥了。我感興趣的只是那八位的 TTL 字段,看過(guò)教科書(shū)的童鞋應該還記得這個(gè)字段是做什么的么?這個(gè)字段規定該數據包在經(jīng)過(guò) 多少個(gè)路由之后才會(huì )被拋棄 (看懂了沒(méi),這句話(huà)的意思就是 IP 協(xié)議包并不可靠,不保證數據被送達,可能會(huì )被丟棄)。某個(gè) ip 數據包每穿過(guò)一個(gè)路由器,該數 據包的 TTL 數值就會(huì )減少1,當該數據包的 TTL 成 為零,它就會(huì )被自動(dòng)拋棄。
這個(gè)字段的最大值也就是255,也就是說(shuō)一個(gè)協(xié)議包也就 在路由器里面穿行255次就會(huì )被拋棄了,根據系統的不同,這個(gè)數字也不一 樣,一般是32或者是64,Tracerouter 這個(gè)工具就是用這個(gè)原理的,tranceroute 的-m 選項要求最大值是255,也就是因為這個(gè) TTL 在 IP 協(xié)議里面只有8bit。大家不清楚可以去windows 的cmd下面操作下。
為什么我們會(huì )在這里談到路由的呢?先留個(gè)懸念。我們接著(zhù)往下看。
當一個(gè) IP 數據包準備好了的時(shí)候,IP 數據包(或者說(shuō)是路由器)是如何將數據包送到目的地的呢?它是怎么選擇一個(gè)合適的路 徑來(lái)"送貨"的呢?
我們先來(lái)看個(gè)最特殊的情況:目的主機和主機直連。那么主機根本不用尋找路由,直接把數據傳遞過(guò)去就可以了。至于是怎么直接傳遞的,這就要靠依靠ARP 協(xié)議了,后面會(huì )講到。
稍微一般一點(diǎn)的情況是:主機通過(guò)若干個(gè)路由器(router)和目的主機連接。那么路由器就要通過(guò) ip 包的信息來(lái)為 ip 包尋找到一 個(gè)合適的目標來(lái)進(jìn)行傳遞,比如合適的主機或者合適的路由。怎么去理解?其實(shí)數據真正走的是數據鏈路層,這也是為什么數據鏈路層名字的由來(lái)。怎么去找個(gè)合適目標傳遞其實(shí)是通過(guò)IP來(lái)的。
路由器處理IP數據包,我們分為以下幾種情況:
1, 如果IP數據包的TTL(生命周期)以到,則該IP數據包就被拋棄。
2,搜索路由表,優(yōu)先搜索匹配主機,如果能找到和IP地址完全一致的目標主機,則將該包發(fā)向目標主機
3,搜索路由表,如果匹配主機失敗,則匹配同子網(wǎng)的路由器,這需要“子網(wǎng)掩碼”的協(xié)助。如果找到路由器,則將該包發(fā)向路由器。
4,搜索路由表,如果匹配同子網(wǎng)路由器失敗,則匹配同網(wǎng)號路由器,如果找到路由器,則將該包發(fā)向路由器。 搜索路由表,如果以上都失敗了,就搜索默認路由,如果默認路由存在,則發(fā)包。
5,如果都失敗了,就丟掉這個(gè)包。
如果大家有興趣,可以去看我之前的TCP疑難雜癥