1. 程式人生 > >Linux--深入解析IP協議

Linux--深入解析IP協議

IP協議屬於網路層協議,它是網路層最終要的協議,沒有之一!首先我們先從IP協議的報頭格式看起
IP協議報頭格式
這裡寫圖片描述
下面我們一個一個分析這些欄位的意思:

  1. 4位版本號:最常見的就是IPV4和IPV6了
  2. 4位首部長度:表示IP協議首部最大長度為15*4(位元組)=60(位元組)
  3. 8為服務型別:這裡不多做介紹
  4. 16為總長度:表示IP資料報整體佔多少個位元組(包含首部和有效載荷)
  5. 16位標識:第二行是用來進行分片和組裝的,因為底層(MTU最大傳送單元的限制),所以傳送的資料不能無限大,如果IP報文太大就可能會有分片的需求,分片是在資料鏈路層完成的,而組裝是在對方的IP層完成的,如果要進行分片的話,就要對第二層的這些欄位進行設定用來在對方IP層可以恢復,分片完成後,每一個報文的首部都和源報文差不多,16位標識唯一記錄了一個IP包的ID(ipid),具有同一個ID的IP分片將會重新組裝,因為對方可能會收到很多報文,就可以通過16位標識來識別同一臺主機的同一個報文,即同臺主機的同一個報文經過分片後,16位標識是相同的。
  6. 3位標誌位:用來標識最後一個分片報文,因為對方不知道“你”到底分了多少片。
  7. 13位片偏移:可以通過13位片偏移的偏移量大小將分片的報文有序的組裝起來,並且還可以判斷出哪些報文丟失。
  8. 8位生存時間:(Time To Live)這裡的時間不是我們理解的那種時間,更像是一種“計數器”, 他表示資料報到達目的地的最大報文跳數(通常為64),沒經過一個路由,值就 -= 1;如果減到0還沒到達目的地,就會丟棄該報文。
  9. 16位首部校驗和:通過CRC校驗,鑑別首部是否正確。
  10. 32位源IP地址和32位目的IP地址:表示傳送端和接收端(從哪來到哪去)

    在網路上傳送資料的時候,我們都知道,要通過目的IP地址在網路上找到對方主機,那麼該怎麼通過IP地址找呢?首先我們要知道IP地址都代表什麼含義,其實IP地址分為兩個部分,分別為網路號和主機號,是通過網段劃分來將IP地址分為網路號和主機號,在找目標主機的時候,先通過網路號找到目標主機所在的目標網路,再根據主機號找到目標主機,那麼為什麼要劃分呢?不能直接通過IP地址找嗎?其實這裡最主要的原因就是為了方便查詢,試著想想,學校為了方便標識每一名學生,也是將學號(201506020925)劃分為不同的欄位,前面幾個(2015)表示你的年紀,接下來(0602)表示你所在的學院和專業,最後為班級和編號,為什麼這麼做呢?還不是為了方便找到你,網段劃分也是為了方便查詢,所以劃分。

當資料到達IP層後,它就要關注資料要怎麼到目標主機,這個“怎麼到”更像是為到目的地而找一條通往目的地的路線,而不是關心具體怎麼到。而找一條通往目的地的路線就要通過路由器路由來完成了。主機也擁有路由的功能。

路由
路由的過程更像是“問路”的過程,當我們要去一個地方時當時並不知道它具體在哪,只是知道地名,可能就會去找一個路人問路,通常情況下,問一個陌生人可能會得到三種結果,第一種,他知道怎麼去,他會告訴你,不能直接到,你得先去哪,再去哪……第二種,他不知道怎麼去,但是他知道路邊的另一個人知道怎麼去目的地,然後你就去問那個人;第三種,他會告訴你,你已經到了。這三種情況就是對應路由的過程,在進行路由時,路由器會在自己的路由表上查詢目的IP,有的話,就是第一種情況,資料包得先被髮送到那個路由器上,才有可能到;如果沒有,因為路由表上都會有一個預設路由(他不知道,預設路由肯定知道),這種情況對應第二種,最後一種,發現你要找的目標網路就是路由器所處得目標網路,他會告訴你“小夥子,你已經到了!”