IP協議介紹網絡
一、IP協議是TCP/IP協議族中最爲核心的協議。IP協議將多個包交換網絡鏈接起來,它在源地址和目的地址之間傳送一種稱爲數據包的東西,它還提供對數據大小的從新組裝功能,以適應不一樣網絡對包大小的要求。IP協議承載全部上層的TCP、UDP、ICMP數據都以IP數據報格式進行傳輸。less
二、IP提供不可靠、無鏈接的數據報傳送服務。不可靠(unreliable)意爲它不提供端到端的或(路由)結點到(路由)結點的確認,對數據沒有差錯控制,它只使用報頭的校驗碼,它不提供重發和流量控制,若是出錯能夠經過ICMP報告,ICMP在IP模塊中實現,任何須要可靠傳輸的數據都須要TCP來提供。無鏈接(connetionless)意爲它不維護任何後續數據報的狀態信息,每一個數據報的處理是相互獨立的,數據報能夠不按發送順序接收。測試
IPv4協議結構大數據
一、版本(4bit):目前的協議版本號是4,IP也稱爲IPv4。spa
二、首部長度(4bit):指的是包括IP首部固定部分和可變部分的總長(不含數據部分)。因爲首部長度佔4bit,能夠表示的最大數值爲15(二進制數爲1111),那它能表示的最長首部長度爲60字節。這60字節是怎麼計算的呢?由於規定是1bit位表明32bit,那麼15 * 4B(32bit/8bit) = 60B(字節)。這也就說明了IP首部的長度最小值是5最大值是15,能夠表示的最小長度是20B(字節)最大長度是60B(字節)。blog
三、區分服務(8bit):包括一個3位的優先字段,4位的TOS字段和1位的保留字段(必須置0)。接口
優先字段3位:設置了數據包的重要性,取值越大數據越重要,取值範圍爲:0(正常)- 7(網絡控制),延遲字段:1位,取值:0(正常)、1(期特低的延遲)。路由
流量字段:1位,取值:0(正常)、1(期特高的流量)。it
可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)。io
成本字段:1位,取值:0(正常)、1(期特最小成本)。
四、總長度(16bit):總長度是指數個IP數據報的長度,以字節爲單位。利用IP首部長度字段和總長度字段,就能夠知道IP數據報中數據內容的起始位置和長度。該字段長16bit,所以數據報的最大長度爲2^16-1=65535字節。當一個數據報封裝成鏈路層的幀時,此數據報的總長度(即首部加上數據部分)必定不能超過下面的數據鏈路層的MTU值。
五、標識(16bit):IP協議在存儲器中維持一個計數器,每產生一個數據報,計數器就加1,並將此值賦給標識字段。但這個「標識」並非序號,由於IP是無鏈接服務,數據報不存在按序接收的問題。當數據報因爲長度超過網絡的MTU而必須分片時,這個標識字段的值就被複制到全部的數據報的標識字段中,所以同一個數據報的全部分片都具備相同的標識值。
六、標誌(3bit):第一位保留。第二位(Don’t Fragment,DF)表示「禁止分片」。若是設置了這個位,IP模塊將不對數據報進行分片,在這種狀況下,若是IP數據報長度超過MTU的話,IP模 塊將丟棄該數據報並返回一個ICMP差錯報文,第三位(More Fragment,MF)表示「更多分片」,除了數據報的最後一個分片外,其餘分片都要把它置1。
七、片偏移(13bit):較長的分組在分片後,某片在原分組中的相對位置。也就是說,相對用戶數據字段的起點,該片從何處開始,片偏移以8個字節爲偏移單位,這就是說,除了最後一個分片,每一個分片的長度必定是8字節(64位)的整數倍。
八、生存時間(8bit):(Time To Live,TTL)是數據報到達目的地以前容許通過的路由器跳數。TTL值被髮送端設置(常見的值是64)。數據報在轉發過程當中每通過一個路由,該值就被路由器減1。當TTL值減爲0時,路由器將丟棄數據報,並向源端發送一個ICMP差錯報文。TTL值能夠防止數據報陷入路由循環。
九、協議(8bit):用來區分上層協議,其中,ICMP是1,TCP是6,UDP是17。
十、首部檢驗和(16bit):這個字段只檢驗數據報的首部,但不包括數據部分,這是由於數據報每通過一個路由器,路由器都要從新計算一下首部檢驗和。(交換機是二層設備不識別IP數據報文這要注意)
十一、源地址(32bit):
十二、源端IP地址和目的端IP地址:用來標識數據報的發送端和接收端。通常狀況下,這兩個地址在整個數據報的傳遞過程當中保持不變,而不論它中間通過多少箇中轉路由器。
1三、可選字段(40bit):這部分最多包含40字節,由於IP頭部最長是60字節(其中包含固定部分20字節)。此字段的長度可變,從1個字節到40個字節不等,取決於所選擇的項目,某些選項項目只須要1個字節,它只包括1個字節的選項代碼。但還有些選項須要多個字節,這些選項一個個拼接起來,中間不須要有分隔符,最後用全0的填充字段補齊成爲4字節的整數倍。可選包括:
記錄路由(record route),告訴數據報途經的全部路由器都將本身的IP地址填入IP頭部的選項部分,這樣咱們就能夠跟蹤數據報的傳遞路徑。
時間戳(timestamp),告訴每一個路由器都將數據報被轉發的時間,填入IP頭部的選項部分,這樣就能夠測量途經路由之間數據報傳輸的時間。
鬆散源路由選擇(loose source routing),指定一個路由器IP地址列表,數據報發送過程當中必須通過其中全部的路由器。
嚴格源路由選擇(strict source routing),和鬆散源路由選擇相似,不過數據報只能通過被指定的路由器。
IP路由選擇(實例 )
測試路由的走向,我用H3c模擬器作了實驗,整個環境中有R一、R二、R3三臺路由器,路由器的MAC、IP都標識以下:
測試項目
一、目標IP與本地IP是同一地址段(如172.16.1.1 -> 172.16.1.2),不須要網關轉發,便可通訊,
請求時,源MAC地址(78:51:7b:21:0f:05)、源IP地址(172.16.1.1) 向 目標MAC地址(78:51:84:11:10:05)目標IP地址(172.16.1.2)發請求包;
回覆時,目標MAC地址(78:51:84:11:10:05)、目標IP地址(172.16.1.2)向 源MAC地址(78:51:7b:21:0f:05)、源IP地址(172.16.1.1) 發回復包。
二、目標IP與本地IP是不一樣地址段(如172.16.1.1 -> 172.16.2.2),須要網關轉發,纔可通訊,
請求時,源MAC地址(78:51:7b:21:0f:05)、源IP地址(172.16.1.1) 向 目標MAC地址(78:51:84:11:10:05)目標IP地址(172.16.2.2)發請求包;
回覆時,目標MAC地址(78:51:84:11:10:05)、目標IP地址(172.16.2.2)向 源MAC地址(78:51:7b:21:0f:05)、源IP地址(172.16.1.1) 發回復包。
注:經過觀查測試結果能夠知道,當目標IP與本地IP是不一樣地址段時,請求和回覆時,都須要經過R1路由器上的網關R2上的接口地址請求和回覆,也就是須要網關來完成數據報的轉發,而IP地址不管是請求仍是回覆兩種測試項目中都無變化(沒有作NAT的狀況)。