
Ipsec是在逐個包上執行的。當實現了 Ipsec時,每一個發往外部的IP包都會在發送之前有Ipsec邏輯進行處理,而每一個發往內部的P包也會在接收到之後並且在傳遞給上一層(如TCP或UDP)之前有 Ipsec處理。我們依次來看一下這兩種情形的過程。
向外發包
例如將TCP層的上一層的數據塊傳遞到IP層並形成IP包,IP包是由IP頭和IP正文組成的。然後執行如下步驟
(1) Ipsec搜索與該包匹配的SPD。
(2)假如為找到匹配的SPD,則丟棄該包並生成錯誤信息。
(3)假如找到匹配的SPD,則由找到的第一個SPD人口決定往後的過程。假如對該包的策略是丟棄,則丟棄該包;假如對該包的策略是顺利获得,則 Ipsec過程結束,IP包就用於網絡傳輸。
(4)假如對該包的策略是保護,則搜索匹配的SAD。如果沒有找到SAD,則喚醒IKE用合適的私鑰生成SA以及SA的入口。
(5)假如找到匹配的SAD,則進一步的處理就由SAD決定。加密、認證或兩者都執行,使用傳輸或隧道模式。然後IP包用於網絡傳輸。
向內發包
一個到來的IP包觸發 Ipsec處理過程,然後執行如下步驟:
(1) Ipsec顺利获得檢查IP協議域(IPv4)或下一個頭域(IP6)來判斷該包是一個非安全的IP包還是有ESP或AH頭/尾的IP包。
(2)假如是非安全的包, Ipsec搜索匹配的SPD。假如第一個匹配的入口的策略是顺利获得,則處理PP頭然後將包的正文傳遞給上一層,如TCP層。假如第一個匹配的入口的策略是保護或丟棄,或沒有找到匹配的SPD,則丟棄該包。
(3)如果是安全的包, Ipsec就搜索SAD。假如沒有找到匹配的SAD入口,則丟棄該包;否則Ipsec執行合適的ESP或AH過程。然後處理IP報頭並將包正文發送給上一層,例如TCP層。
