linux下ip層的一些概念

2021-08-30 01:59:21 字數 2753 閱讀 6387

首先來看這個ip層的結構:

這裡看到非常多的netfilter hook,這是因為netfilter主要是針對ip層的。

ip層的主要任務有下面5個方面:

1 ip資料報的校驗

2 防火牆的處理(也就是netfilter子系統)

3 處理options(這裡的options包含了一些可選的資訊。比如時間戳或者源路由option).

4 切包和組包(由於mtu的存在,因此我們需要切包和組包).

5 接收,輸出和**操作。

接下來我們來看ip頭的結構:

這裡每個欄位的意思也就沒什麼好解釋得了,基本上對網路協議有些了解的都會知道。我下面會介紹幾個主要的域。這裡可以看到在

首先來看options域。

前面已經說過了,這個域也就是包含一些其他程式(比如路由)需要的資訊。這個域的大小為0到40位,一般不會超過40個位,再大的options基本上很罕見。

options被分為2種,一種是單位元組的,一種是多位元組的。下面我們就來看這兩種的結構:

先來看type欄位,它的結構:

clas也就是這個options的型別了,copied如果被設定,則當資料報切片的時候,這個option必須被複製到每乙個切好的包。而number則是型別所對應的值:下面這個圖就是ip option的一些型別值:

主要的型別定義在linux/ip.h裡面。

接下來length表示這個option的長度。poionter這個指標表示options的起始位移。option data儲存一些需要的資料。

隨便舉個ip options的例子,比如record route option,這個option用來儲存輸出介面的ip位址,但它有大小限制,只能儲存9個位址們如果超過九個就會忽略,接下來看下面的圖,a主機傳送包到b主機:

最後我們來看一下資料報的切片和組包。

df,表示不切片,因為有時切片並組包耗時太長,影響效能。可是如何解決mtu等問題呢,這裡linux採用了path mtu discovery演算法,來取得所能傳輸的最大mtu,而不是根據輸入幀的頭來判斷。

mf表示需要更多的切好的片。當乙個包被切片之後,它設定mg為true,知道最後乙個分片,而這個分片的mf會被設定為false(也就是0).當接收端接收到這最後乙個切片時,就會開始組包,哪怕其他的切片還沒到達。

fragment offset表示這個分片的資料報在原來資料報中的位移,只有憑藉這個才能正確組包。

id,ip包的id,乙個ip包的所有幀切片的id都是相同的。通過這個域,接受者能知道那些切片是屬於同乙個包的。

我們再來看切片和組包有可能會出現的問題。

先來看丟包的問題,首先我們要知道只有當ip包全部接收到(也就是被切片的包)之後,才會組包並將此資料報傳送給高層。

丟包有3種情況:

1 有可能被路由器丟掉。

2 有可能由於crc校驗不通過而被丟掉。

3 有可能被防火牆過濾掉。

解決方法就是,如果一些切片沒有在給定的時間內到達的話,每乙個路由器和主機都有乙個定時器來清理傳送過的ip包的切片。

這裡要注意,ip層是沒有重傳機制的(ip協議是無連線的),因此必須等待高層來告訴它重傳整個資料報。

重傳的資料報不能重新使用未傳輸成功的資料報的id,也就是id不能相同。

由於kernel不能交換資料到硬碟,因此handling切片在記憶體中,會影響路由器的效能,因此linux對於切片的記憶體有了乙個限制。

由於ip是乙個無連線的協議,因此沒有流量控制什麼的,所以這些都交給上層去做。

標識每乙個切片是屬於哪乙個資料報,在linux中使用4個域來確定:

源位址,目的位址,ip包id,l4協議型別。

可是這有乙個問題,那就是有可能不同的包,這四個引數都是相同的,比如經過nat**後的資料報。比如下面的例子,當pc1,pc2發出去的包被路由r修改掉源位址,並切片後,然後同時抵達s,這時就會出問題:

而ipv6就會更好的處理這個問題,他將只允許在原始的host進行切片。

最後看一下packet id,在linux中,是每個目的位址乙個ip packet id,每個id是乙個16位的整數。這樣的話就降低了資料報的id有可能老的還沒到,新的就要重新使用老的的id。

安裝linux前的一些概念

所謂的目錄樹結構 directory tree 就是以根目錄為主,然後向下呈現分支狀的目錄結構的一種檔案結構。所以,整個目錄樹結構最重要的就是那個根目錄 root directory 這個根目錄的表示方法為一條斜線 所有的檔案都與目錄數有關。所有的檔案都是由根目錄 衍生來的,而次目錄之下還能夠有其他...

Linux 下的一些目錄

bin 存放使用者最長用的命令,如 cp ls cat,等等。boot 啟動linux時使用的一些核心檔案。dev 是device 裝置 的縮寫,這個目錄下是所有linux的外圍裝置。d document chat myim myim bin release etc 這個目錄用來存放系統管理所需要的...

Linux下的一些命令

su linux下在超級使用者 root 和普通使用者之間進行切換的命令 sudo su 普通使用者切換到超級使用者 su username 超級使用者切換回普通使用者 username 下 tar 範例一 將整個 etc 目錄下的檔案全部打包成為 tmp etc.tar root linux ta...