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层。