linux高性能服務器編程學習筆記二:IP協議詳解

1、IP協議是TCP/IP協議族的核心協議。要理解IP協議應當從瞭解它的頭部信息開始。網絡層主要的作用是路由選址和轉發。選址當然選的是IP地址,所以頭部信息應當包括源IP地址和目的IP地址。要知道以太網幀數據的最大長度爲1500字節,那麼在網絡層傳遞給數據鏈路層的時候就需要對IP數據包進行分片,那麼IP頭部信息應當有分片字段。爲了多個分片的數據包能夠重組,應當有唯一一個標識字段來確認多個分片的包同屬於一個IP數據包。網絡層還可以調節各種各樣的情況,例如最小延時,最大吞吐量,因此應當有個服務字段。防止IP數據包在網絡流當中無限循環,應當有個生存時間字段。IP協議又分爲IPV4和IPV6,所以應當有版本號字段。爲了知道頭部長度和總長度,應當有頭部長度字段和總長度字段。爲了知曉在傳輸的過程中IP數據包是否正確傳輸,應當有校驗和字段。具體格式見:

這裏特意強調以下幾個字段

   4位頭部長度字段,1位代表4個字節,4位最大爲15,表示最長爲60字節,也就是選項字段有40字節。

8位的服務類型字段,前3位通常被忽略,緊接着的4位TOS字段分別表示最小延時,最大吞吐量,最高可靠性和最小費用。最後一位保留字段置0。

3位標誌字段,第一位保留,第二位DF(Don’t Fragment)表示“禁止分片”,如果設置了這個位就表示不進行分片,假如在這種情況下,數據包長度超過MTU,則會丟棄該包併發送一個ICMP差錯報文。第三位MF(More Fragment)表示“更多分片”,表示還有其它分片。除了數據包的最後一個分片外,其它分片第三位都要置1.

   8位協議字段區分是哪個上層協議傳遞下來的包,1是ICMP,6是TCP,17是UDP。

   16位頭部校驗和字段利用CRC檢驗頭部在傳輸過程中是否損壞。32位的源IP地址和目的IP地址在整個數據報的傳輸中都不變,即使經過了多次轉發。

選項字段一般包括:記錄路由(記錄途徑的所有路由器的IP地址)、時間戳(記錄每次經過一個路由器時的轉發的時間)、鬆散源路由選擇(一個路由器IP地址表,途徑過程中應當包括其所有的路由器)、嚴格源路由選擇(一個路由器IP地址表,途徑過程只能是地址表中的路由器)。

2、路由轉發和選址主要的硬件設備是路由器,路由器當中有個路由表對接收到的IP數據包進行分類,主要和IP數據包的目標IP地址有關。路由機制如下:

(1)查找路由表中和數據包的目標IP地址完全匹配的主機IP地址。如果找到,就使用該路由項。如沒有找到,進行步驟2

(2)查找路由表中和數據包的目標IP地址的網絡ID匹配的網絡IP地址,如果找到,就使用該路由項。如沒有找到,進行步驟2

(3)選擇默認路由項,這通常意味着數據包的下一跳爲默認網關。

3、當需要對一個數據包進行轉發時,應當執行如下操作

(1)檢查頭部的TTL值,爲0則丟棄

(2)查看數據頭部的嚴格源路由選項,假如該選項被設置,則檢測數據包的目標IP地址是否爲本機的某個IP地址,若不是,則發送一個ICMP源站選路失敗報文給發送端,並且有必要的的話,發送一個ICMP重定向報文,告訴源端合理的下一跳IP地址

(3)TTL值減1,處理IP頭部選項,假如有必要,對其進行分片再轉發。

4、IPV6與IPV4不同,其用十六進制字符串表示而不是點分十進制。例如:FE80:0000:0000:0000:1234:5678:0000:0012。每個部分2個字節。一般情況下,對於多個連續的0000可以省略,因此上述可變成:FE80::1234:5678:0000:0012。全0壓縮只能使用一次,否則不知道中間省略了多少個全0組。

發佈了35 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章