逆向转发

逆向路径转发（，简称RPF）是為路由器傳輸多播封包時確保一個無迴圈環境、以及在傳輸單播封包時防止IP地址欺騙的一種技術。

广播模式
当一个广播分组到达一个路由器的时候，该路由器对他进行检查，看它到来的线路是否是通常用来给广播源发送分组的线路。
如果是，则有可能此分组是沿着最佳线路被转发过来，路由器将该分组转发到除到来的那条线路之外的所有其他线路。
否则，此分组被当作一个可能的重复分组被丢弃。
通常[汇集树]被用作来判断是否是最佳线路。

多播RPF
多播RPF，也通常被直接了當地被稱呼作RPF， 配合MSDP及PIM等多播路由協議以確保無迴圈地傳遞多播封包。在多播路由中，用作決定轉遞封包的是來源地址，而非像單播中使用目的地地址。

當一個多播封包進入路由器介面，路由器會查看該介面可到達的網絡的清單，意即：路由器檢查封包的逆向路徑。如果路由器找到一個符合該來源地址的路由表條目，RPF检查通过，并且分组被转发到参与该多播组多播的所有其他接口。如果RPF檢查失敗，则該封包被丢弃。因此，分组转发的结果基于分组的反向路径而不是前向路径。RPF路由器只會轉遞那些路由表中有與來源地址所相應條目的封包，以確保不會產生任何迴圈。

這對有冗餘連接的多播環境來說是致命性地必要。因為同一個多播封包可以從不同的介面進入同一隻路由器，RPF測試是決定該封包繼續轉送與否時不可劃缺的一部份。如果路由器傳送所有來自介面A的多播封包到介面B，而同時傳送所有來自介面B的包封到介面A，兩個介面都可能會收到同一個封包，這將會產生很典形的路由迴圈因為封包只會一直被傳輸下去直到其TTL欄位到期。但即使考慮到TTL過期，任何類形的路由迴圈都理應盡可能地避免，因為這都會短暫地大幅減低網絡的可用性。

單播RPF（uRPF）

严格模式
在严格模式下，每个传入数据包都根据FIB进行测试，如果“传入”接口不是最佳反向路径，则数据包检查失败。默认情况下，失败的数据包被丢弃。
 Cisco设备上的示例命令：ip verify unicast source reachable-via {rx} - 严格模式, {any}-  宽松模式

可能模式
在可能模式中，FIB维护到给定IP地址的备用路由。如果“传入”接口与任何与该IP地址相关联的路由匹配，则该分组被转发。否则，数据包被丢弃。

寬鬆模式
在寬鬆模式，每個進入的單播封包的來源地址同樣會被檢查。如果來源地址是無經由該介面的路徑到達，檢查將失敗。

单播RPF混淆
RPF通常被错误地定义为反向路径过滤，特别是当涉及单播路由。这是一个可以理解的首字母缩写误解，当RPF与RFC 3704中的单播路由一起使用时，则基于RPF检查的通过或失败来允许或拒绝流量。这种想法是，RPF检查失败并因此被过滤则流量被拒绝，然而根据RFC 3704，正确的解释是：如果通过RPF检查，则流量被“转发”。正确使用的几个例子可以在许多文档的示例中找到，诸如Juniper 、Cisco 、 OpenBSD ，最重要的是RFC 3704，其定义了单播中RPF的使用。

虽然uRPF用作入口“过滤”机制，但是它受到反向路径“转发”的影响。

外部連結
 RFC 2827
 RFC 3704
 Juniper - Configuring uRPF 
 Brocade - Configuring uRPF 
 Cisco - Understanding uRPF 
 Multicast Reverse Forwarding(RPF)
 OpenBSD - Enabling uRPF in pf 
 Linux - Enabling RPF in kernel 
 Juniper Networks on multicast RPF 

路由