【網絡協議】IP協議、ARP協議、RARP協議

    IP數據報

    IP是TCP/IP協議族中最核心的協議,所有的TCP、UDP、ICMP、IGMP數據都以IP數據報的格式傳輸。IP僅提供盡力而爲的傳輸服務,如果發生某種錯誤,IP會丟失該數據,然後發送ICMP消息給信源端。另外,IP數據報可以不按發送順序接受。

    IP數據報的格式如下:


    前20字節和緊接其後的選項部分是IP數據報的首部,前20個字節是固定的,選項可有可無。首部的每一行是一個32位字的單位,最高位在左邊,爲0bit,最低位在右邊,爲31bit。4字節的32bit值按照以下次序傳輸:首先0-7bit,其次8-15比特,然後16-23bit,最後是24-31bit,這種傳輸次序稱爲big endian字節序(我們在C語言寫位操作的算法時常用到該詞)。TCP/IP首部中的所有二進制整數在網絡中傳輸時都要求以這種次序,因此它又稱作網絡字節序,其他形式存儲的二進制數據,如little endian格式,則必須在傳輸數據之前把首部轉化成網絡字節序。

    首部長度是指首部佔32bit字的數目,因爲4位的最大值爲15,因此首部最長爲60字節,也即是說選項部分的最大值爲40字節,不夠4的倍數,要用0填充,使數據部分的起始地址爲4的倍數。

    總長度指整個IP數據報的長度,包括首部和數據部分,16bit,最長可達65535字節。儘管理論上可以傳送一個長達65535的IP數據報,但實際上還要考慮網絡的最大承載能力等因素,標準的TCP/IP分組大小爲576字節,減去IP首部的20個字節,TCP首部的20個字節,路由協議頭的24個字節,爲512字節,因此主機接受的數據報的數據部分一般不超過512個字節。(PS:這點看的也不是太懂,網上很多人也有此疑問,謝希仁的計算機網絡中寫的一次IP數據報最少576字節,尼瑪這裏翻譯的是不超過576字節,先往後看吧,說不定看到後面就豁然開朗了)。

    這兩天差不多算是搞明白了,很多基於UDP協議的應用之所以要求UDP的數據部分不超過512個字節(576-20-20),主要是考慮整個傳輸路徑上的效率,因爲鏈路層爲X2.5的網絡的MTU爲576個字節,這基本也是各種鏈路層網絡的最小MTU,大於這個值就不會產生分片,之所以建議不超過這個值應該是考慮到網絡承載能力和傳輸效率、每臺主機的接受能力等很多因素的權衡。當然書上也說,576只是建議值,實際上大於它也是可以的,只是這樣在遇到X2.5網絡時可能產生分片。暫時是這麼理解的,不知道看到後面會不會有新的收穫。

    第十一章中又有說:現在許多但不是所有的廣域網都可以處理大於512字節的分組。

    3個標誌位主要用來標識分片的IP數據報,片位移爲分片的數據報的首個字節偏離整個原始數據報的位置。

    

    IP路由選擇    

    主機通過路由器和目的主機連接。主機通過IP數據報連接目的主機時,按照如下步驟搜索(同一網絡中的搜索要經過ARP協議將目的主機的IP地址解析爲MAC地址):

  1. 搜索路由表,優先搜索匹配主機,如果能找到和IP地址完全一致的目標主機,則將該包發向目標主機
  2. 搜索路由表,如果匹配主機失敗,則匹配同子網的路由器,這需要子網掩碼的協助。如果找到路由器,則將該包發向路由器。
  3. 搜索路由表,如果匹配同子網路由器失敗,則匹配同網號路由器,如果找到路由器,則將該包發向路由器。
  4. 搜索路由表,如果以上都失敗了,就搜索默認路由,如果默認路由存在,則發包
  5. 如果都失敗了,就丟掉這個包。
    子網掩碼
    主機號再分成一個子網號和主機號,便將一個網絡又劃分成了若干子網,子網掩碼與該子網中的IP地址相與,便得到該子網,另外,子網對於子網內部的路由器是不透明的,也就是說IP數據報傳到該網絡的網關時,網關再將該數據報傳送到子網的默認路由器上,最後通過該路由器再交付給該主機。

    ARP協議和RARP協議
    前面已經說過,ARP協議只用在局域網中,它用來將IP地址解析爲MAC地址。局域網中的每個主機都有一個ARP緩存,它保存了最近發起的IP地址到MAC地址的映射記錄,當該主機要向局域網中的某一主機發送數據時,它會先從自己的緩存中查找,看是否存在目標IP地址,如果找到,就通過映射找到它的MAC地址,從而發送過去,如果沒有找到該目的IP地址,它就向該局域網內發送一個廣播,廣播中包含自己的IP地址、MAC地址和目的主機的IP地址,局域網內的所有主機都會收到該廣播,但只有目的IP地址的主機會做出迴應,並把自己的MAC地址發送給源主機,源主機收到後,在自己的ARP緩存中增加上該映射,並根據發來的MAC地址將數據發送給目的主機。
    ARP高速緩存中的表項一般都要設置超時值,如果一段時間內沒有與某主機通信,就將該主機對應的IP與MAC之間的映射關係去掉,下次在需要通信時,依然發送廣播。
    如果ARP請求是從一個網絡的主機到另一個網絡的主機,那麼連接這兩個網絡的路由器就可以回答該請求,這個過程成爲ARP代理。
    RARP協議則剛好相反,它將MAC地址解析成爲對應的IP地址,通常在DHCP中有集成,現在已很少單獨使用。
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章