1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021
|
<pre>Internet Engineering Task Force (IETF) J. Bi
Request for Comments: 7513 J. Wu
Category: Standards Track G. Yao
ISSN: 2070-1721 Tsinghua Univ.
F. Baker
Cisco
May 2015
<span class="h1">Source Address Validation Improvement (SAVI) Solution for DHCP</span>
Abstract
This document specifies the procedure for creating a binding between
a DHCPv4/DHCPv6-assigned IP address and a binding anchor on a Source
Address Validation Improvement (SAVI) device. The bindings set up by
this procedure are used to filter packets with forged source IP
addresses. This mechanism complements <a href="https://www.rfc-editor.org/bcp/bcp38">BCP 38</a> (<a href="./rfc2827">RFC 2827</a>) ingress
filtering, providing finer-grained source IP address validation.
Status of This Memo
This is an Internet Standards Track document.
This document is a product of the Internet Engineering Task Force
(IETF). It represents the consensus of the IETF community. It has
received public review and has been approved for publication by the
Internet Engineering Steering Group (IESG). Further information on
Internet Standards is available in <a href="./rfc5741#section-2">Section 2 of RFC 5741</a>.
Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
<a href="http://www.rfc-editor.org/info/rfc7513">http://www.rfc-editor.org/info/rfc7513</a>.
Copyright Notice
Copyright (c) 2015 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to <a href="https://www.rfc-editor.org/bcp/bcp78">BCP 78</a> and the IETF Trust's Legal
Provisions Relating to IETF Documents
(<a href="http://trustee.ietf.org/license-info">http://trustee.ietf.org/license-info</a>) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
<span class="grey">Bi, et al. Standards Track [Page 1]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-2" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
Table of Contents
<a href="#section-1">1</a>. Introduction . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-4">4</a>
<a href="#section-2">2</a>. Requirements Language . . . . . . . . . . . . . . . . . . . . <a href="#page-5">5</a>
<a href="#section-3">3</a>. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-5">5</a>
<a href="#section-4">4</a>. Deployment Scenario and Configuration . . . . . . . . . . . . <a href="#page-8">8</a>
<a href="#section-4.1">4.1</a>. Elements and Scenario . . . . . . . . . . . . . . . . . . <a href="#page-8">8</a>
<a href="#section-4.2">4.2</a>. SAVI Binding Type Attributes . . . . . . . . . . . . . . <a href="#page-10">10</a>
<a href="#section-4.2.1">4.2.1</a>. Trust Attribute . . . . . . . . . . . . . . . . . . . <a href="#page-10">10</a>
<a href="#section-4.2.2">4.2.2</a>. DHCP-Trust Attribute . . . . . . . . . . . . . . . . <a href="#page-11">11</a>
<a href="#section-4.2.3">4.2.3</a>. DHCP-Snooping Attribute . . . . . . . . . . . . . . . <a href="#page-11">11</a>
<a href="#section-4.2.4">4.2.4</a>. Data-Snooping Attribute . . . . . . . . . . . . . . . <a href="#page-11">11</a>
<a href="#section-4.2.5">4.2.5</a>. Validating Attribute . . . . . . . . . . . . . . . . <a href="#page-12">12</a>
<a href="#section-4.2.6">4.2.6</a>. Table of Mutual Exclusions . . . . . . . . . . . . . <a href="#page-13">13</a>
<a href="#section-4.3">4.3</a>. Perimeter . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-13">13</a>
<a href="#section-4.3.1">4.3.1</a>. SAVI-DHCP Perimeter Overview . . . . . . . . . . . . <a href="#page-13">13</a>
<a href="#section-4.3.2">4.3.2</a>. SAVI-DHCP Perimeter Configuration Guideline . . . . . <a href="#page-14">14</a>
<a href="#section-4.3.3">4.3.3</a>. On the Placement of the DHCP Server and Relay . . . . <a href="#page-15">15</a>
<a href="#section-4.3.4">4.3.4</a>. An Alternative Deployment . . . . . . . . . . . . . . <a href="#page-15">15</a>
<a href="#section-4.3.5">4.3.5</a>. Considerations regarding Binding Anchors . . . . . . <a href="#page-16">16</a>
<a href="#section-4.4">4.4</a>. Other Device Configuration . . . . . . . . . . . . . . . <a href="#page-17">17</a>
<a href="#section-5">5</a>. Binding State Table (BST) . . . . . . . . . . . . . . . . . . <a href="#page-17">17</a>
<a href="#section-6">6</a>. DHCP Snooping Process . . . . . . . . . . . . . . . . . . . . <a href="#page-18">18</a>
<a href="#section-6.1">6.1</a>. Rationale . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-18">18</a>
<a href="#section-6.2">6.2</a>. Binding States Description . . . . . . . . . . . . . . . <a href="#page-19">19</a>
<a href="#section-6.3">6.3</a>. Events . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-19">19</a>
<a href="#section-6.3.1">6.3.1</a>. Timer Expiration Event . . . . . . . . . . . . . . . <a href="#page-19">19</a>
<a href="#section-6.3.2">6.3.2</a>. Control Message Arriving Events . . . . . . . . . . . <a href="#page-19">19</a>
<a href="#section-6.4">6.4</a>. The State Machine of DHCP Snooping Process . . . . . . . <a href="#page-21">21</a>
<a href="#section-6.4.1">6.4.1</a>. Initial State: NO_BIND . . . . . . . . . . . . . . . <a href="#page-21">21</a>
<a href="#section-6.4.2">6.4.2</a>. Initial State: INIT_BIND . . . . . . . . . . . . . . <a href="#page-24">24</a>
<a href="#section-6.4.3">6.4.3</a>. Initial State: BOUND . . . . . . . . . . . . . . . . <a href="#page-27">27</a>
<a href="#section-6.4.4">6.4.4</a>. Table of State Machine . . . . . . . . . . . . . . . <a href="#page-30">30</a>
<a href="#section-7">7</a>. Data Snooping Process . . . . . . . . . . . . . . . . . . . . <a href="#page-31">31</a>
<a href="#section-7.1">7.1</a>. Scenario . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-31">31</a>
<a href="#section-7.2">7.2</a>. Rationale . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-32">32</a>
<a href="#section-7.3">7.3</a>. Additional Binding States Description . . . . . . . . . . <a href="#page-33">33</a>
<a href="#section-7.4">7.4</a>. Events . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-33">33</a>
<a href="#section-7.5">7.5</a>. Message Sender Functions . . . . . . . . . . . . . . . . <a href="#page-35">35</a>
<a href="#section-7.5.1">7.5.1</a>. Duplicate Detection Message Sender . . . . . . . . . <a href="#page-35">35</a>
<a href="#section-7.5.2">7.5.2</a>. Leasequery Message Sender . . . . . . . . . . . . . . <a href="#page-36">36</a>
<a href="#section-7.5.3">7.5.3</a>. Address Verification Message Sender . . . . . . . . . <a href="#page-36">36</a>
<a href="#section-7.6">7.6</a>. Initial State: NO_BIND . . . . . . . . . . . . . . . . . <a href="#page-37">37</a>
7.6.1. Event: EVE_DATA_UNMATCH: A data packet without a
matched binding is received . . . . . . . . . . . . . <a href="#page-37">37</a>
<a href="#section-7.6.2">7.6.2</a>. Events Not Observed in NO_BIND for Data Snooping . . <a href="#page-38">38</a>
<span class="grey">Bi, et al. Standards Track [Page 2]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-3" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<a href="#section-7.7">7.7</a>. Initial State: DETECTION . . . . . . . . . . . . . . . . <a href="#page-39">39</a>
<a href="#section-7.7.1">7.7.1</a>. Event: EVE_ENTRY_EXPIRE . . . . . . . . . . . . . . . <a href="#page-39">39</a>
7.7.2. Event: EVE_DATA_CONFLICT: ARP Reply / NA Message
Received from Unexpected System . . . . . . . . . . . <a href="#page-39">39</a>
<a href="#section-7.7.3">7.7.3</a>. Events Not Observed in DETECTION . . . . . . . . . . <a href="#page-39">39</a>
<a href="#section-7.8">7.8</a>. Initial State: RECOVERY . . . . . . . . . . . . . . . . . <a href="#page-40">40</a>
7.8.1. Event: EVE_DATA_LEASEQUERY: A valid DHCPLEASEACTIVE
or successful LEASEQUERY-REPLY is received . . . . . <a href="#page-40">40</a>
<a href="#section-7.8.2">7.8.2</a>. Event: EVE_ENTRY_EXPIRE . . . . . . . . . . . . . . . <a href="#page-41">41</a>
<a href="#section-7.8.3">7.8.3</a>. Events Not Observed in RECOVERY . . . . . . . . . . . <a href="#page-41">41</a>
<a href="#section-7.9">7.9</a>. Initial State: VERIFY . . . . . . . . . . . . . . . . . . <a href="#page-41">41</a>
7.9.1. Event: EVE_DATA_LEASEQUERY: A valid DHCPLEASEACTIVE
or successful LEASEQUERY-REPLY is received . . . . . <a href="#page-41">41</a>
7.9.2. Event: EVE_DATA_VERIFY: A valid ARP Reply or NA is
received from the device attached via the binding
anchor . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-42">42</a>
<a href="#section-7.9.3">7.9.3</a>. Event: EVE_ENTRY_EXPIRE . . . . . . . . . . . . . . . <a href="#page-42">42</a>
<a href="#section-7.9.4">7.9.4</a>. Event: EVE_DATA_EXPIRE . . . . . . . . . . . . . . . <a href="#page-43">43</a>
<a href="#section-7.9.5">7.9.5</a>. Events Not Observed in VERIFY . . . . . . . . . . . . <a href="#page-43">43</a>
<a href="#section-7.10">7.10</a>. Initial State: BOUND . . . . . . . . . . . . . . . . . . <a href="#page-43">43</a>
<a href="#section-7.11">7.11</a>. Table of State Machine . . . . . . . . . . . . . . . . . <a href="#page-44">44</a>
<a href="#section-8">8</a>. Filtering Specification . . . . . . . . . . . . . . . . . . . <a href="#page-45">45</a>
<a href="#section-8.1">8.1</a>. Data Packet Filtering . . . . . . . . . . . . . . . . . . <a href="#page-46">46</a>
<a href="#section-8.2">8.2</a>. Control Packet Filtering . . . . . . . . . . . . . . . . <a href="#page-46">46</a>
<a href="#section-9">9</a>. State Restoration . . . . . . . . . . . . . . . . . . . . . . <a href="#page-47">47</a>
<a href="#section-9.1">9.1</a>. Attribute Configuration Restoration . . . . . . . . . . . <a href="#page-47">47</a>
<a href="#section-9.2">9.2</a>. Binding State Restoration . . . . . . . . . . . . . . . . <a href="#page-47">47</a>
<a href="#section-10">10</a>. Constants . . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-48">48</a>
<a href="#section-11">11</a>. Security Considerations . . . . . . . . . . . . . . . . . . . <a href="#page-48">48</a>
<a href="#section-11.1">11.1</a>. Security Problems with the Data Snooping Process . . . . <a href="#page-48">48</a>
<a href="#section-11.2">11.2</a>. Securing Leasequery Operations . . . . . . . . . . . . . <a href="#page-49">49</a>
<a href="#section-11.3">11.3</a>. Client Departure Issues . . . . . . . . . . . . . . . . <a href="#page-49">49</a>
11.4. Compatibility with Detecting Network Attachment (DNA) . 50
<a href="#section-11.5">11.5</a>. Binding Number Limitation . . . . . . . . . . . . . . . <a href="#page-51">51</a>
<a href="#section-11.6">11.6</a>. Privacy Considerations . . . . . . . . . . . . . . . . . <a href="#page-51">51</a>
<a href="#section-11.7">11.7</a>. Fragmented DHCP Messages . . . . . . . . . . . . . . . . <a href="#page-51">51</a>
<a href="#section-12">12</a>. References . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-52">52</a>
<a href="#section-12.1">12.1</a>. Normative References . . . . . . . . . . . . . . . . . . <a href="#page-52">52</a>
<a href="#section-12.2">12.2</a>. Informative References . . . . . . . . . . . . . . . . . <a href="#page-53">53</a>
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-54">54</a>
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-54">54</a>
<span class="grey">Bi, et al. Standards Track [Page 3]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-4" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<span class="h2"><a class="selflink" id="section-1" href="#section-1">1</a>. Introduction</span>
This document describes a fine-grained source address validation
mechanism for IPv4 and IPv6 packets. This mechanism creates bindings
between IP addresses assigned to network interfaces by DHCP and
suitable binding anchors (<a href="#section-4.3.5">Section 4.3.5</a>). As discussed in <a href="#section-3">Section 3</a>
and [<a href="./rfc7039" title=""Source Address Validation Improvement (SAVI) Framework"">RFC7039</a>], a "binding anchor" is an attribute that is immutable
or difficult to change that may be used to identify the system an IP
address has been assigned to; common examples include a Media Access
Control (MAC) address found on an Ethernet switch port or Wi-Fi
security association. The bindings are used to identify and filter
packets originated by these interfaces using forged source IP
addresses. In this way, this mechanism can prevent hosts from using
IP addresses assigned to any other attachment point in or not
associated with the network. This behavior is referred to as
"spoofing" and is key to amplification attacks, in which a set of
systems send messages to another set of systems claiming to be from a
third set of systems, and sending the replies to systems that don't
expect them. Whereas <a href="https://www.rfc-editor.org/bcp/bcp38">BCP 38</a> [<a href="./rfc2827" title=""Network Ingress Filtering: Defeating Denial of Service Attacks which employ IP Source Address Spoofing"">RFC2827</a>] protects a network from a
neighboring network by providing prefix granularity source IP address
validity, this mechanism protects a network, including a Local Area
Network, from itself by providing address granularity source IP
validity when DHCP/DHCPv6 is used to assign IPv4/IPv6 addresses.
Both provide a certain level of traceability, in that packet drops
indicate the presence of a system that is producing packets with
spoofed IP addresses.
SAVI-DHCP snoops DHCP address assignments to set up bindings between
IP addresses assigned by DHCP and corresponding binding anchors. It
includes the DHCPv4 and DHCPv6 Snooping Process (<a href="#section-6">Section 6</a>) and the
Data Snooping Process (<a href="#section-7">Section 7</a>), as well as a number of other
technical details. The Data Snooping Process is a data-triggered
procedure that snoops the IP header of data packets to set up
bindings. It is designed to avoid a permanent blockage of valid
addresses in the case that DHCP snooping is insufficient to set up
all the valid bindings.
This mechanism is designed for the stateful DHCP scenario [<a href="./rfc2131" title=""Dynamic Host Configuration Protocol"">RFC2131</a>]
[<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>]. Stateless DHCP [<a href="./rfc3736" title=""Stateless Dynamic Host Configuration Protocol (DHCP) Service for IPv6"">RFC3736</a>] is out of scope for this
document, as it has nothing to do with IP address allocation. An
alternative SAVI method would have be used in those cases. For hosts
using Stateless Address Autoconfiguration (SLAAC) to allocate
addresses, First-Come, First-Served Source Address Validation
Improvement (FCFS SAVI) [<a href="./rfc6620" title=""FCFS SAVI: First-Come, First-Served Source Address Validation Improvement for Locally Assigned IPv6 Addresses"">RFC6620</a>] should be enabled. SAVI-DHCP is
primarily designed for pure DHCP scenarios in which only addresses
assigned through DHCP are allowed. However, it does not block link-
<span class="grey">Bi, et al. Standards Track [Page 4]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-5" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
local addresses, as they are not assigned using DHCP. It is
RECOMMENDED that the administration deploy a SAVI solution for link-
local addresses, e.g., FCFS SAVI [<a href="./rfc6620" title=""FCFS SAVI: First-Come, First-Served Source Address Validation Improvement for Locally Assigned IPv6 Addresses"">RFC6620</a>].
This mechanism works for networks that use DHCPv4 only, DHCPv6 only,
or both DHCPv4 and DHCPv6. However, the DHCP address assignment
mechanism in IPv4/IPv6 transition scenarios, e.g., [<a href="./rfc7341" title=""DHCPv4-over-DHCPv6 (DHCP 4o6) Transport"">RFC7341</a>], are
beyond the scope of this document.
<span class="h2"><a class="selflink" id="section-2" href="#section-2">2</a>. Requirements Language</span>
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [<a href="./rfc2119" title=""Key words for use in RFCs to Indicate Requirement Levels"">RFC2119</a>].
<span class="h2"><a class="selflink" id="section-3" href="#section-3">3</a>. Terminology</span>
Binding anchor: A "binding anchor" is defined to be a physical and/or
link-layer property of an attached device, as in [<a href="./rfc7039" title=""Source Address Validation Improvement (SAVI) Framework"">RFC7039</a>]. A list
of sample binding anchors can be found in <a href="#section-3.2">Section 3.2</a> of that
document. To the degree possible, a binding anchor associates an IP
address with something unspoofable that identifies a single-client
system or one of its interfaces. See <a href="#section-4.3.5">Section 4.3.5</a> for more detail.
Attribute: A configurable property of each binding anchor (port, MAC
address, or other information) that indicates the actions to be
performed on packets received from the attached network device.
DHCP address: An IP address assigned via DHCP.
SAVI-DHCP: The name of this SAVI function for DHCP-assigned
addresses.
SAVI device: A network device on which SAVI-DHCP is enabled.
Non-SAVI device: A network device on which SAVI-DHCP is not enabled.
DHCP Client-to-Server message: A message that is sent from a DHCP
client to a DHCP server or DHCP servers and is one of the following
types:
o DHCPv4 Discover: DHCPDISCOVER [<a href="./rfc2131" title=""Dynamic Host Configuration Protocol"">RFC2131</a>].
o DHCPv4 Request: DHCPREQUEST generated during SELECTING state
[<a href="./rfc2131" title=""Dynamic Host Configuration Protocol"">RFC2131</a>].
o DHCPv4 Renew: DHCPREQUEST generated during RENEWING state
[<a href="./rfc2131" title=""Dynamic Host Configuration Protocol"">RFC2131</a>].
<span class="grey">Bi, et al. Standards Track [Page 5]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-6" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
o DHCPv4 Rebind: DHCPREQUEST generated during REBINDING state
[<a href="./rfc2131" title=""Dynamic Host Configuration Protocol"">RFC2131</a>].
o DHCPv4 Reboot: DHCPREQUEST generated during INIT-REBOOT state
[<a href="./rfc2131" title=""Dynamic Host Configuration Protocol"">RFC2131</a>].
o Note: DHCPv4 Request/Renew/Rebind/Reboot messages can be
identified based on Table 4 of [<a href="./rfc2131" title=""Dynamic Host Configuration Protocol"">RFC2131</a>].
o DHCPv4 Decline: DHCPDECLINE [<a href="./rfc2131" title=""Dynamic Host Configuration Protocol"">RFC2131</a>].
o DHCPv4 Release: DHCPRELEASE [<a href="./rfc2131" title=""Dynamic Host Configuration Protocol"">RFC2131</a>].
o DHCPv4 Inform: DHCPINFORM [<a href="./rfc2131" title=""Dynamic Host Configuration Protocol"">RFC2131</a>].
o DHCPv4 DHCPLEASEQUERY: A message sent to inquire about the lease
that might exist for an IPv4 address [<a href="./rfc4388" title=""Dynamic Host Configuration Protocol (DHCP) Leasequery"">RFC4388</a>].
o DHCPv6 Request: REQUEST [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>].
o DHCPv6 Solicit: SOLICIT [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>].
o DHCPv6 Confirm: CONFIRM [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>].
o DHCPv6 Decline: DECLINE [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>].
o DHCPv6 Release: RELEASE [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>].
o DHCPv6 Rebind: REBIND [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>].
o DHCPv6 Renew: RENEW [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>].
o DHCPv6 Information-Request: INFORMATION-REQUEST [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>].
o DHCPv6 LEASEQUERY: A message sent to inquire about the lease that
might exist for an IPv6 address [<a href="./rfc5007" title=""DHCPv6 Leasequery"">RFC5007</a>].
DHCP Server-to-Client message: A message that is sent from a DHCP
server to a DHCP client and is one of the following types:
o DHCPv4 ACK: DHCPACK [<a href="./rfc2131" title=""Dynamic Host Configuration Protocol"">RFC2131</a>].
o DHCPv4 NAK: DHCPNAK [<a href="./rfc2131" title=""Dynamic Host Configuration Protocol"">RFC2131</a>].
o DHCPv4 Offer: DHCPOFFER [<a href="./rfc2131" title=""Dynamic Host Configuration Protocol"">RFC2131</a>].
o DHCPv4 DHCPLEASEACTIVE: A response to a DHCPLEASEQUERY request
containing lease information [<a href="./rfc4388" title=""Dynamic Host Configuration Protocol (DHCP) Leasequery"">RFC4388</a>].
<span class="grey">Bi, et al. Standards Track [Page 6]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-7" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
o DHCPv4 DHCPLEASEUNKNOWN: A response to a DHCPLEASEQUERY request
indicating that the server does not manage the address [<a href="./rfc4388" title=""Dynamic Host Configuration Protocol (DHCP) Leasequery"">RFC4388</a>].
o DHCPv4 DHCPLEASEUNASSIGNED: A response to a DHCPLEASEQUERY request
indicating that the server manages the address and there is no
current lease [<a href="./rfc4388" title=""Dynamic Host Configuration Protocol (DHCP) Leasequery"">RFC4388</a>].
o DHCPv6 Reply: REPLY [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>].
o DHCPv6 Advertise: ADVERTISE [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>].
o DHCPv6 Reconfigure: RECONFIGURE [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>].
o DHCPv6 LEASEQUERY-REPLY: A response to a LEASEQUERY request
[<a href="./rfc5007" title=""DHCPv6 Leasequery"">RFC5007</a>].
Lease time: The lease time in IPv4 [<a href="./rfc2131" title=""Dynamic Host Configuration Protocol"">RFC2131</a>] or the valid lifetime in
IPv6 [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>].
Binding entry: A rule that associates an IP address with a binding
anchor.
Binding State Table (BST): The data structure that contains the
binding entries.
Binding entry limit: The maximum number of binding entries that may
be associated with a binding anchor. Limiting the number of binding
entries per binding anchor prevents a malicious or malfunctioning
node from overloading the binding table on a SAVI device.
Direct attachment: Ideally, a SAVI device is an access device that
hosts are attached to directly. In such a case, the hosts are direct
attachments (i.e., they attach directly) to the SAVI device.
Indirect attachment: A SAVI device MAY be an aggregation device that
other access devices are attached to and that hosts in turn attach
to. In such a case, the hosts are indirect attachments (i.e., they
attach indirectly) to the SAVI device.
Unprotected link: Unprotected links are links that connect to hosts
or networks of hosts that receive their DHCP traffic by another path
and are therefore outside the SAVI perimeter.
Unprotected device: An unprotected device is a device associated with
an unprotected link. One example might be the gateway router of a
network.
<span class="grey">Bi, et al. Standards Track [Page 7]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-8" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
Protected link: If DHCP messages for a given attached device always
use a given link, the link is considered to be "protected" by the
SAVI device and is therefore within the SAVI perimeter.
Protected device: A protected device is a device associated with a
protected link. One example might be a desktop switch in the
network, or a host.
Cut vertex: A cut vertex is any vertex whose removal increases the
number of connected components in a (network) graph. This is a
concept in graph theory. This term is used in <a href="#section-6.1">Section 6.1</a> to
accurately specify the required deployment location of SAVI devices
when they only perform the DHCP Snooping Process.
Identity Association (IA): "A collection of addresses assigned to a
client" [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>].
Detection message: A Neighbor Solicitation or ARP message intended by
the Data Snooping Process to detect a duplicate address.
DHCP_DEFAULT_LEASE: Default lifetime for a DHCPv6 address when the
binding is triggered by a DHCPv6 Confirm message but a DHCPv6
Leasequery exchange [<a href="./rfc5007" title=""DHCPv6 Leasequery"">RFC5007</a>] cannot be performed by the SAVI device
to fetch the lease.
<span class="h2"><a class="selflink" id="section-4" href="#section-4">4</a>. Deployment Scenario and Configuration</span>
<span class="h3"><a class="selflink" id="section-4.1" href="#section-4.1">4.1</a>. Elements and Scenario</span>
The essential elements in a SAVI-DHCP deployment scenario include at
least one DHCP server (which may or may not be assigned an address
using DHCP and therefore may or may not be protected), zero or more
protected DHCP clients, and one or more SAVI devices. It may also
include DHCP relays, when the DHCP server is not co-located with a
set of clients, and zero or more protected non-SAVI devices. Outside
the perimeter, via unprotected links, there may be many unprotected
devices.
<span class="grey">Bi, et al. Standards Track [Page 8]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-9" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
+-------------+
| Unprotected |
| Device |
+------+------+
|
+--------+ +-----+------+ +----------+
|DHCP +-----+ Non-SAVI +----+Bogus DHCP|
|Server A| | Device 1 | |Server |
+--------+ +-----+------+ +----------+
|trusted, unprotected link
. . . . . . . . . . . . . . . . .|. . . . . . . . . . . . . .
. | .
. Protection +---+------+ trusted link .
. Perimeter | SAVI +--------------+ .
. | Device C | | .
. +---+------+ | .
. | | .
. untrusted, +----------+ +---+------+ +------+---+ .
. protected | SAVI | | Non-SAVI | | SAVI | .
. link+------+ Device A +----+ Device 3 +-------+ Device B | .
. | +----+--+--+ +----------+ +-+---+----+ .
. | | +----------+ . . . . . | | .
. | . . . . . . | . . | | .
. | . | . | . +--------+ | .
. +----+-----+. +--+---+ . +----+-+ . +--+---+ . +---+----+ .
. | Non-SAVI |. |Client| . |DHCP | . |Client| . |DHCP | .
. | Device 2 |. |A | . |Relay | . |B | . |Server B| .
. +----------+. +------+ . +------+ . +------+ . +--------+ .
. . . . . . . . . . . . . . . . . . .
Figure 1: SAVI-DHCP Scenario
Figure 1 shows a deployment scenario that contains these elements.
Note that a physical device can instantiate multiple elements, e.g.,
a switch can be both a SAVI device and a DHCP relay, or in a cloud-
computing environment, a physical host may contain a virtual switch
plus some number of virtual hosts. In such cases, the links are
logical links rather than physical links.
Networks are not usually isolated. As a result, traffic from other
networks, including transit traffic as specified in [<a href="./rfc6620" title=""FCFS SAVI: First-Come, First-Served Source Address Validation Improvement for Locally Assigned IPv6 Addresses"">RFC6620</a>] (e.g.,
traffic from another SAVI switch or a router) may enter a SAVI-DHCP
network through the unprotected links. Since SAVI solutions are
limited to validating traffic generated from a local link, SAVI-DHCP
does not set up bindings for addresses assigned in other networks and
cannot validate them. Traffic from unprotected links should be
checked by an unprotected device or mechanisms described in
<span class="grey">Bi, et al. Standards Track [Page 9]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-10" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
[<a href="./rfc2827" title=""Network Ingress Filtering: Defeating Denial of Service Attacks which employ IP Source Address Spoofing"">RFC2827</a>]. The generation and deployment of such a mechanism is
beyond the scope of this document.
Traffic from protected links is, however, locally generated and
should have its source addresses validated by SAVI-DHCP if possible.
In the event that there is an intervening protected non-SAVI device
between the host and the SAVI device, however, use of the physical
attachment point alone as a binding anchor is insufficiently secure,
as several devices on a port or other point of attachment can spoof
each other. Hence, additional information such as a MAC address
SHOULD be used to disambiguate them.
<span class="h3"><a class="selflink" id="section-4.2" href="#section-4.2">4.2</a>. SAVI Binding Type Attributes</span>
As illustrated in Figure 1, a system attached to a SAVI device can be
a DHCP client, a DHCP relay/server, a SAVI device, or a non-SAVI
device. Different actions are performed on traffic originated from
different elements. To distinguish among their requirements, several
properties are associated with their point of attachment on the SAVI
device.
When a binding association is uninstantiated, e.g., when no host is
attached to the SAVI device using a given port or other binding
anchor, the binding port attributes take default values unless
overridden by configuration. By default, a SAVI switch does not
filter DHCP messages, nor does it attempt to validate source
addresses, which is to say that the binding attributes are ignored
until SAVI-DHCP is itself enabled. This is because a SAVI switch
that depends on DHCP cannot tell, a priori, which ports have valid
DHCP servers attached, or which have routers or other equipment that
would validly appear to use an arbitrary set of source addresses.
When SAVI has been enabled, the attributes take effect.
<span class="h4"><a class="selflink" id="section-4.2.1" href="#section-4.2.1">4.2.1</a>. Trust Attribute</span>
The "Trust Attribute" is a Boolean value. If TRUE, it indicates that
the packets from the corresponding attached device need not have
their source addresses validated. Examples of a trusted attachment
would be a port to another SAVI device, or to an IP router, as shown
in Figure 1. In both cases, traffic using many source IP addresses
will be seen. By default, the Trust attribute is FALSE, indicating
that any device found on that port will seek an address using DHCP
and be limited to using such addresses.
SAVI devices will not set up bindings for points of attachment with
the Trust attribute set TRUE; no packets, including DHCP messages,
from devices with this attribute on their attachments will be
validated. However, DHCP Server-to-Client messages will be snooped
<span class="grey">Bi, et al. Standards Track [Page 10]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-11" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
on attachment points with the Trust attribute set TRUE in the same
way as if they had the DHCP-Trust attribute set (see <a href="#section-4.2.2">Section 4.2.2</a>).
<span class="h4"><a class="selflink" id="section-4.2.2" href="#section-4.2.2">4.2.2</a>. DHCP-Trust Attribute</span>
The "DHCP-Trust Attribute" is similarly a Boolean attribute. It
indicates whether the attached device is permitted to initiate DHCP
Server-to-Client messages. In Figure 1, the points of attachment of
the DHCP server and the DHCP relay would have this attribute set
TRUE, and attachment points that have Trust set TRUE are implicitly
treated as if DHCP-Trust is TRUE.
If the DHCP-Trust attribute is TRUE, SAVI devices will forward DHCP
Server-to-Client messages from the points of attachment with this
attribute. If the DHCP Server-to-Client messages can trigger the
state transitions, the binding setup processes specified in Sections
6 and 7 will handle them. By default, the DHCP-Trust attribute is
FALSE, indicating that the attached system is not a DHCP server.
A DHCPv6 implementor can refer to [<a href="#ref-DHCPv6-SHIELD">DHCPv6-SHIELD</a>] for more details.
<span class="h4"><a class="selflink" id="section-4.2.3" href="#section-4.2.3">4.2.3</a>. DHCP-Snooping Attribute</span>
The "DHCP-Snooping Attribute" is similarly a Boolean attribute. It
indicates whether bindings will be set up based on DHCP snooping.
If this attribute is TRUE, DHCP Client-to-Server messages to points
of attachment with this attribute will trigger creation of bindings
based on the DHCP Snooping Process described in <a href="#section-6">Section 6</a>. If it is
FALSE, either the Trust attribute must be TRUE (so that bindings
become irrelevant) or another SAVI mechanism such as FCFS SAVI must
be used on the point of attachment.
The DHCP-Snooping attribute is configured on the DHCP client's point
of attachment. This attribute can be also used on the attachments to
protected non-SAVI devices that are used by DHCP clients. In
Figure 1, the attachment from Client A to SAVI Device A, the
attachment from Client B to SAVI Device B, and the attachment from
Non-SAVI Device 2 to SAVI Device A can be configured with this
attribute.
<span class="h4"><a class="selflink" id="section-4.2.4" href="#section-4.2.4">4.2.4</a>. Data-Snooping Attribute</span>
The "Data-Snooping Attribute" is a Boolean attribute. It indicates
whether data packets from the corresponding point of attachment may
trigger the binding setup procedure.
<span class="grey">Bi, et al. Standards Track [Page 11]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-12" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
Data packets from points of attachment with this attribute may
trigger the setup of bindings. SAVI devices will set up bindings on
points of attachment with this attribute based on the data-triggered
process described in <a href="#section-7">Section 7</a>.
If the DHCP-Snooping attribute is configured on a point of
attachment, the bindings on this attachment are set up based on DHCP
message snooping. However, in some scenarios, a DHCP client may use
a DHCP address without the DHCP address assignment procedure being
performed on its current attachment. For such attached devices, the
Data Snooping Process, which is described in <a href="#section-7">Section 7</a>, is necessary.
This attribute is configured on such attachments. The usage of this
attribute is further discussed in <a href="#section-7">Section 7</a>.
Since some networks require DHCP deployment and others avoid it,
there is no obvious universal default value for the Data-Snooping
attribute. Hence, the Data-Snooping attribute should default to
FALSE, and a mechanism should be implemented to conveniently set it
to TRUE on all points of attachment for which the Trust attribute is
FALSE.
<span class="h4"><a class="selflink" id="section-4.2.5" href="#section-4.2.5">4.2.5</a>. Validating Attribute</span>
The "Validating Attribute" is a Boolean attribute. It indicates
whether packets from the corresponding attachment will have their IP
source addresses validated based on binding entries on the
attachment.
If it is TRUE, packets coming from attachments with this attribute
will be validated based on binding entries on the attachment as
specified in <a href="#section-8">Section 8</a>. If it is FALSE, they will not. Since the
binding table is used in common with other SAVI algorithms, it merely
signifies whether the check will be done, not whether it will be done
for SAVI-DHCP originated bindings.
This attribute is by default the inverse of the Trust attribute;
source addresses on untrusted links are validated by default. It MAY
be set FALSE by the administration.
The expected use case is when SAVI is used to monitor but not block
forged transmissions. The network manager, in that case, may set the
DHCP-Snooping and/or Data-Snooping attribute TRUE but the Validating
attribute FALSE.
<span class="grey">Bi, et al. Standards Track [Page 12]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-13" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<span class="h4"><a class="selflink" id="section-4.2.6" href="#section-4.2.6">4.2.6</a>. Table of Mutual Exclusions</span>
Different types of attributes may indicate mutually exclusive actions
on a packet. Mutually exclusive attributes MUST NOT be set TRUE on
the same attachment. The compatibility of different attributes is
listed in Figure 2. Note that although Trust and DHCP-Trust are
compatible, there is no need to configure DHCP-Trust to TRUE on an
attachment with Trust attribute TRUE.
+----------+----------+----------+----------+----------+----------+
| | | | DHCP- | Data- | |
| | Trust |DHCP-Trust| Snooping | Snooping |Validating|
+----------+----------+----------+----------+----------+----------+
| | | | mutually | mutually | mutually |
| Trust | - |compatible| exclusive| exclusive| exclusive|
+----------+----------+----------+----------+----------+----------+
| | | | | | |
|DHCP-Trust|compatible| - |compatible|compatible|compatible|
+----------+----------+----------+----------+----------+----------+
|DHCP- |mutually | | | | |
|Snooping |exclusive |compatible| - |compatible|compatible|
+----------+----------+----------+----------+----------+----------+
|Data- |mutually | | | | |
|Snooping |exclusive |compatible|compatible| - |compatible|
+----------+----------+----------+----------+----------+----------+
| |mutually | | | | |
|Validating|exclusive |compatible|compatible|compatible| - |
+----------+----------+----------+----------+----------+----------+
Figure 2: Table of Mutual Exclusions
<span class="h3"><a class="selflink" id="section-4.3" href="#section-4.3">4.3</a>. Perimeter</span>
<span class="h4"><a class="selflink" id="section-4.3.1" href="#section-4.3.1">4.3.1</a>. SAVI-DHCP Perimeter Overview</span>
SAVI devices form a perimeter separating trusted and untrusted
regions of a network, as FCFS SAVI does (<a href="./rfc6620#section-2.5">Section 2.5 of [RFC6620]</a>).
The perimeter is primarily designed for scalability. It has two
implications.
o SAVI devices only need to establish bindings for directly attached
clients, or clients indirectly attached through a non-SAVI
protected device, rather than all of the clients in the network.
o Each SAVI device only needs to validate the source addresses in
traffic from clients attached to it, without checking all the
traffic passing by.
<span class="grey">Bi, et al. Standards Track [Page 13]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-14" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
Consider the example in Figure 1. The protection perimeter is formed
by SAVI Devices A, B, and C. In this case, SAVI Device B does not
create a binding for Client A. However, because SAVI Device A
filters spoofed traffic from Client A, SAVI Device B can avoid
receiving spoofed traffic from Client A.
The perimeter in SAVI-DHCP is not only a perimeter for data packets
but also a perimeter for DHCP messages. DHCP server response
messages incoming across the perimeter will be dropped (<a href="#section-8">Section 8</a>).
The placement of the DHCP relay and DHCP server, which are not
involved in [<a href="./rfc6620" title=""FCFS SAVI: First-Come, First-Served Source Address Validation Improvement for Locally Assigned IPv6 Addresses"">RFC6620</a>], is related to the construction of the
perimeter. The requirement on the placement and configuration of the
DHCP relay and DHCP server is discussed in <a href="#section-4.3.3">Section 4.3.3</a>.
<span class="h4"><a class="selflink" id="section-4.3.2" href="#section-4.3.2">4.3.2</a>. SAVI-DHCP Perimeter Configuration Guideline</span>
A perimeter separating trusted and untrusted regions of the network
is formed as follows:
(1) Configure the Validating and DHCP-Snooping attributes TRUE on
the direct attachments of all DHCP clients.
(2) Configure the Validating and DHCP-Snooping attributes TRUE on
the indirect attachments of all DHCP clients (i.e., DHCP clients
on protected links).
(3) Configure the Trust attribute TRUE on the attachments to other
SAVI devices.
(4) If a non-SAVI device, or a number of connected non-SAVI devices,
are attached only to SAVI devices, set the Trust attribute TRUE
on their attachments.
(5) Configure the DHCP-Trust attribute TRUE on the direct
attachments to trusted DHCP relays and servers.
In this way, the points of attachments with the Validating attribute
TRUE (and generally together with attachments of unprotected devices)
on SAVI devices can form a perimeter separating DHCP clients and
trusted devices. Data packet checks are only performed on the
perimeter. The perimeter is also a perimeter for DHCP messages. The
DHCP-Trust attribute is only TRUE on links inside the perimeter.
Only DHCP Server-to-Client messages originated within the perimeter
are trusted.
<span class="grey">Bi, et al. Standards Track [Page 14]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-15" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<span class="h4"><a class="selflink" id="section-4.3.3" href="#section-4.3.3">4.3.3</a>. On the Placement of the DHCP Server and Relay</span>
As a result of the configuration guidelines, SAVI devices only trust
DHCP Server-to-Client messages originated inside the perimeter.
Thus, the trusted DHCP relays and DHCP servers must be placed within
the perimeter. DHCP Server-to-Client messages will be filtered on
the perimeter. Server-to-Relay messages will not be filtered, as
they are within the perimeter. In this way, DHCP Server-to-Client
messages from bogus DHCP servers are filtered on the perimeter,
having entered through untrusted points of attachment. The SAVI
devices are protected from forged DHCP messages.
DHCP Server-to-Client messages arriving at the perimeter from outside
the perimeter are not trusted. There is no distinction between a
DHCP server owned and operated by the correct administration but
outside the SAVI perimeter and a bogus DHCP server. For example, in
Figure 1, DHCP Server A is valid, but it is attached to Non-SAVI
Device 1. A bogus DHCP server is also attached to Non-SAVI Device 1.
While one could imagine a scenario in which the valid one had a
statistically configured port number and MAC address, and therefore a
binding, by default SAVI-DHCP cannot distinguish whether a message
received from the port of Non-SAVI Device 1 is from DHCP Server A or
the bogus DHCP server. If DHCP Server A is contained in the
perimeter, Non-SAVI Device 1 will also be contained in the perimeter.
Thus, DHCP Server A cannot be contained within the perimeter apart
from manual configuration of the binding anchor.
Another consideration on the placement is that if the DHCP server/
relay is not inside the perimeter, the SAVI devices may not be able
to set up bindings correctly because the SAVI devices may not be on
the path between the clients and the server/relay, or the DHCP
messages are encapsulated (e.g., Relay-reply and Relay-forward).
<span class="h4"><a class="selflink" id="section-4.3.4" href="#section-4.3.4">4.3.4</a>. An Alternative Deployment</span>
In common deployment practice, the traffic from the unprotected
network is treated as trustworthy, which is to say that it is not
filtered. In such a case, the Trust attribute can be set TRUE on the
unprotected link. If non-SAVI devices, or a number of connected non-
SAVI devices, are only attached to SAVI devices and unprotected
devices, their attachment to SAVI devices can have the Trust
attribute set TRUE. Then an unclosed perimeter will be formed, as
illustrated in Figure 3.
<span class="grey">Bi, et al. Standards Track [Page 15]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-16" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
| . . Protection |
| | | Perimeter |
| | | |
| Unprotected | | Unprotected |
| Link | | Link |
| | | |
| | | |
| +----+---+ +----+---+ +--------+ |
| |SAVI +----+Non-SAVI+----+SAVI | |
| |Device | |Device | |Device | |
| +----+---+ +--------+ +----+---+ |
| | | |
\_____________+___________________________+________/
| |
| |
+--------+ +--------+
|DHCP | |DHCP |
|Client | |Client |
+--------+ +--------+
Figure 3: Alternative Perimeter Configuration
<span class="h4"><a class="selflink" id="section-4.3.5" href="#section-4.3.5">4.3.5</a>. Considerations regarding Binding Anchors</span>
The strength of this binding-based mechanism depends on the strength
of the binding anchor. The sample binding anchors in [<a href="./rfc7039" title=""Source Address Validation Improvement (SAVI) Framework"">RFC7039</a>] have
the property in which they associate an IP address with a direct
physical or secure virtual interface such as a switch port, a
subscriber association, or a security association. In addition,
especially in the case where a protected non-SAVI device such as a
desktop switch or a hub is between the client and SAVI devices, they
MAY be extended to also include a MAC address or other link-layer
attribute. In short, a binding anchor is intended to associate an IP
address with something unspoofable that identifies a single-client
system or one of its interfaces; this may be a physical or virtual
interface or that plus disambiguating link-layer information.
If the binding anchor is spoofable, such as a plain MAC address, or
non-exclusive, such as a switch port extended using a non-SAVI
device, an attacker can use a forged binding anchor to evade
validation. Indeed, using a binding anchor that can be easily
spoofed can lead to worse outcomes than allowing spoofed IP traffic.
Thus, a SAVI device MUST use a non-spoofable and exclusive binding
anchor.
<span class="grey">Bi, et al. Standards Track [Page 16]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-17" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<span class="h3"><a class="selflink" id="section-4.4" href="#section-4.4">4.4</a>. Other Device Configuration</span>
In addition to a possible binding anchor configuration specified in
<a href="#section-4.2">Section 4.2</a>, an implementation has the following configuration
requirements:
(1) Address configuration. For DHCPv4: the SAVI device MUST have an
IPv4 address. For DHCPv6: the client of a SAVI device MUST have
a link-local address; when the DHCPv6 server is not on the same
link as the SAVI device, the SAVI device MUST also have an IPv6
address of at least the same scope as the DHCPv6 Server.
(2) DHCP server address configuration: a SAVI device MUST store the
list of the DHCP server addresses that it could contact during a
leasequery process.
(3) A SAVI device may also require security parameters, such as
preconfigured keys to establish a secure connection for the
leasequery process [<a href="./rfc4388" title=""Dynamic Host Configuration Protocol (DHCP) Leasequery"">RFC4388</a>] [<a href="./rfc5007" title=""DHCPv6 Leasequery"">RFC5007</a>] connection.
<span class="h2"><a class="selflink" id="section-5" href="#section-5">5</a>. Binding State Table (BST)</span>
The Binding State Table, which may be implemented centrally in the
switch or distributed among its ports, is used to contain the
bindings between the IP addresses assigned to the attachments and the
corresponding binding anchors of the attachments. Note that in this
description, there is a binding entry for each IPv4 or IPv6 address
associated with each binding anchor, and there may be several of each
such address, especially if the port is extended using a protected
non-SAVI device. Each binding entry has six fields:
o Binding Anchor (listed as "Anchor" in subsequent figures): the
binding anchor, i.e., one or more physical and/or link-layer
properties of the attachment.
o IP Address (listed as "Address" in subsequent figures): the IPv4
or IPv6 address assigned to the attachment by DHCP.
o State: the state of the binding. Possible values of this field
are listed in Sections <a href="#section-6.2">6.2</a> and <a href="#section-7.3">7.3</a>.
o Lifetime: the remaining seconds of the binding. Internally, this
MAY be stored as the timestamp value at which the lifetime
expires.
o Transaction ID (TID): the Transaction ID [<a href="./rfc2131" title=""Dynamic Host Configuration Protocol"">RFC2131</a>] [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>] of
the corresponding DHCP transaction. The TID field is used to
<span class="grey">Bi, et al. Standards Track [Page 17]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-18" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
associate DHCP Server-to-Client messages with corresponding
binding entries.
o Timeouts: the number of timeouts that expired in the current state
(only used in the Data Snooping Process; see <a href="#section-7">Section 7</a>).
The IA is not present in the BST for three reasons:
o The lease of each address in one IA is assigned separately.
o When the binding is set up based on data snooping, the IA cannot
be recovered from the leasequery protocol.
o DHCPv4 does not define an IA.
An example of such a table is shown in Figure 4.
+---------+----------+-----------+-----------+--------+----------+
| Anchor | Address | State | Lifetime | TID | Timeouts |
+---------+----------+-----------+-----------+--------+----------+
| Port_1 | IP_1 | BOUND | 65535 | TID_1 | 0 |
+---------+----------+-----------+-----------+--------+----------+
| Port_1 | IP_2 | BOUND | 10000 | TID_2 | 0 |
+---------+----------+-----------+-----------+--------+----------+
| Port_2 | IP_3 | INIT_BIND | 1 | TID_3 | 0 |
+---------+----------+-----------+-----------+--------+----------+
Figure 4: Example Binding State Table
<span class="h2"><a class="selflink" id="section-6" href="#section-6">6</a>. DHCP Snooping Process</span>
This section specifies the process of setting up bindings based on
DHCP snooping. This process is illustrated using a state machine.
<span class="h3"><a class="selflink" id="section-6.1" href="#section-6.1">6.1</a>. Rationale</span>
The rationale of the DHCP Snooping Process is that if a DHCP client
is legitimately using a DHCP-assigned address, the DHCP address
assignment procedure that assigns the IP address to the client must
have been performed via the client's point of attachment. This
assumption works when the SAVI device is always on the path(s) from
the DHCP client to the DHCP server(s)/relay(s). Without considering
the movement of DHCP clients, the SAVI device should be the cut
vertex whose removal will separate the DHCP client and the remaining
network containing the DHCP server(s)/relay(s). For most of the
networks whose topologies are simple, it is possible to deploy this
SAVI function at proper devices to meet this requirement.
<span class="grey">Bi, et al. Standards Track [Page 18]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-19" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
However, if there are multiple paths from a DHCP client to the DHCP
server and the SAVI device is only on one of them, there is an
obvious failure case: the SAVI device may not be able to snoop the
DHCP procedure. Host movement may also make this requirement
difficult to meet. For example, when a DHCP client moves from one
attachment to another attachment in the same network, it may fail to
reinitialize its interface or send a Confirm message because of
incomplete protocol implementation. Thus, there can be scenarios in
which only performing this DHCP Snooping Process is insufficient to
set up bindings for all the valid DHCP addresses. These exceptions
and the solutions are discussed in <a href="#section-7">Section 7</a>.
<span class="h3"><a class="selflink" id="section-6.2" href="#section-6.2">6.2</a>. Binding States Description</span>
The following binding states are present in this process and the
corresponding state machine:
NO_BIND: No binding has been set up.
INIT_BIND: A potential binding has been set up.
BOUND: The binding has been set up.
<span class="h3"><a class="selflink" id="section-6.3" href="#section-6.3">6.3</a>. Events</span>
This section describes events in this process and the corresponding
state machine transitions. The DHCP message categories (e.g., DHCPv4
Discover) defined in <a href="#section-3">Section 3</a> are used extensively in the
definitions of events and elsewhere in the state machine definition.
If an event will trigger the creation of a new binding entry, the
binding entry limit on the binding anchor MUST NOT be exceeded.
<span class="h4"><a class="selflink" id="section-6.3.1" href="#section-6.3.1">6.3.1</a>. Timer Expiration Event</span>
EVE_ENTRY_EXPIRE: The lifetime of a binding entry expires.
<span class="h4"><a class="selflink" id="section-6.3.2" href="#section-6.3.2">6.3.2</a>. Control Message Arriving Events</span>
EVE_DHCP_REQUEST: A DHCPv4 Request or a DHCPv6 Request message is
received.
EVE_DHCP_CONFIRM: A DHCPv6 Confirm message is received.
EVE_DHCP_REBOOT: A DHCPv4 Reboot message is received.
EVE_DHCP_REBIND: A DHCPv4 Rebind or a DHCPv6 Rebind message is
received.
<span class="grey">Bi, et al. Standards Track [Page 19]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-20" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
EVE_DHCP_RENEW: A DHCPv4 Renew or a DHCPv6 Renew message is received.
EVE_DHCP_SOLICIT_RC: A DHCPv6 Solicitation message with the Rapid
Commit option is received.
EVE_DHCP_REPLY: A DHCPv4 ACK or a DHCPv6 Reply message is received.
EVE_DHCP_DECLINE: A DHCPv4 Decline or a DHCPv6 Decline message is
received.
EVE_DHCP_RELEASE: A DHCPv4 Release or a DHCPv6 Release message is
received.
EVE_DHCP_LEASEQUERY: A successful DHCPv6 LEASEQUERY-REPLY (refer to
<a href="./rfc5007#section-4.3.3">Section 4.3.3 of [RFC5007]</a>) is received.
Note: the events listed here do not cover all the DHCP messages in
<a href="#section-3">Section 3</a>. The messages that do not really determine address usage
(DHCPv4 Discover, DHCPv4 Inform, DHCPv6 Solicit without Rapid Commit,
DHCPv6 Information-Request, DHCPv4 Offer, DHCPv6 Advertise, and
DHCPv6 Reconfigure) and that are not necessary to snoop (DHCPv4
Negative Acknowledgment (NAK); refer to <a href="#section-6.4.2.3">Section 6.4.2.3</a>) are not
included. Note also that DHCPv4 DHCPLEASEQUERY is not used in the
DHCP Snooping Process to avoid confusion with <a href="#section-7">Section 7</a>. Also, since
the LEASEQUERY should have been originated by the SAVI device itself,
the destination check should verify that the message is directed to
this SAVI device, and it should not be forwarded once it has been
processed here.
Moreover, only if a DHCP message can pass the following checks, the
corresponding event is regarded as a valid event:
o Attribute check: the DHCP Server-to-Client messages and
LEASEQUERY-REPLY should be from attachments with the DHCP-Trust
attribute; the DHCP Client-to-Server messages should be from
attachments with the DHCP-Snooping attribute.
o Destination check: the DHCP Server-to-Client messages should be
destined to attachments with the DHCP-Snooping attribute. This
check is performed to ensure the binding is set up on the SAVI
device that is nearest to the destination client.
o Binding anchor check: the DHCP Client-to-Server messages that may
trigger modification or removal of an existing binding entry must
have a matching binding anchor with the corresponding entry.
<span class="grey">Bi, et al. Standards Track [Page 20]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-21" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
o TID check: the DHCP Server-to-Client/Client-to-Server messages
that may cause modification of existing binding entries must have
a matched TID with the corresponding entry. Note that this check
is not performed on LEASEQUERY and LEASEQUERY-REPLY messages as
they are exchanged between the SAVI devices and the DHCP servers.
Besides, this check is not performed on DHCP Renew/Rebind
messages.
o Binding limitation check: the DHCP messages must not cause new
binding setup on an attachment whose binding entry limitation has
been reached (refer to <a href="#section-11.5">Section 11.5</a>).
o Address check: the source address of the DHCP messages should pass
the check specified in <a href="#section-8.2">Section 8.2</a>.
On receiving a DHCP message without triggering a valid event, the
state will not change, and the actions will not be performed. Note
that if a message does not trigger a valid event but it can pass the
checks in <a href="#section-8.2">Section 8.2</a>, it MUST be forwarded.
<span class="h3"><a class="selflink" id="section-6.4" href="#section-6.4">6.4</a>. The State Machine of DHCP Snooping Process</span>
This section specifies state transitions and their corresponding
actions.
<span class="h4"><a class="selflink" id="section-6.4.1" href="#section-6.4.1">6.4.1</a>. Initial State: NO_BIND</span>
<span class="h5"><a class="selflink" id="section-6.4.1.1" href="#section-6.4.1.1">6.4.1.1</a>. Event: EVE_DHCP_REQUEST - A DHCPv4 Request or a DHCPv6 Request</span>
<span class="h5"> message is received</span>
The SAVI device MUST forward the message.
The SAVI device will generate an entry in the BST. The Binding
Anchor field is set to the binding anchor of the attachment from
which the message is received. The State field is set to INIT_BIND.
The Lifetime field is set to be MAX_DHCP_RESPONSE_TIME. The TID
field is set to the TID of the message. If the message is DHCPv4
Request, the Address field can be set to the address to request,
i.e., the 'requested IP address'. An example of the entry is
illustrated in Figure 5.
<span class="grey">Bi, et al. Standards Track [Page 21]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-22" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
+--------+-------+---------+-----------------------+-----+----------+
| Anchor |Address| State | Lifetime | TID | Timeouts |
+--------+-------+---------+-----------------------+-----+----------+
| Port_1 | |INIT_BIND|MAX_DHCP_RESPONSE_TIME | TID | 0 |
+--------+-------+---------+-----------------------+-----+----------+
Figure 5: Binding Entry in BST on Initialization Triggered by
Request/Rapid Commit/Reboot Messages
Resulting state: INIT_BIND - A potential binding has been set up.
<span class="h5"><a class="selflink" id="section-6.4.1.2" href="#section-6.4.1.2">6.4.1.2</a>. Event: EVE_DHCP_REBOOT - A DHCPv4 Reboot message is received</span>
The SAVI device MUST forward the message.
The SAVI device will generate an entry in the BST. The Binding
Anchor field is set to the binding anchor of the attachment from
which the message is received. The State field is set to INIT_BIND.
The Lifetime field is set to be MAX_DHCP_RESPONSE_TIME. The TID
field is set to the TID of the message. If the message is DHCPv4
Reboot, the Address field can be set to the address to request, i.e.,
the 'requested IP address'. An example of the entry is illustrated
in Figure 5.
Resulting state: INIT_BIND - A potential binding has been set up.
<span class="h5"><a class="selflink" id="section-6.4.1.3" href="#section-6.4.1.3">6.4.1.3</a>. Event: EVE_DHCP_SOLICIT_RC - A DHCPv6 Solicitation message</span>
<span class="h5"> with the Rapid Commit option is received</span>
The SAVI device MUST forward the message.
The SAVI device will generate an entry in the BST. The Binding
Anchor field is set to the binding anchor of the attachment from
which the message is received. The State field is set to INIT_BIND.
The Lifetime field is set to be MAX_DHCP_RESPONSE_TIME. The TID
field is set to the TID of the message. An example of the entry is
illustrated in Figure 5.
Resulting state: INIT_BIND - A potential binding has been set up.
<span class="h5"><a class="selflink" id="section-6.4.1.4" href="#section-6.4.1.4">6.4.1.4</a>. Event: EVE_DHCP_CONFIRM - A DHCPv6 Confirm message is received</span>
The SAVI device MUST forward the message.
The SAVI device will generate corresponding entries in the BST for
each address in each Identity Association (IA) option of the Confirm
message. The Binding Anchor field is set to the binding anchor of
the attachment from which the message is received. The State field
<span class="grey">Bi, et al. Standards Track [Page 22]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-23" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
is set to INIT_BIND. The Lifetime field is set to be
MAX_DHCP_RESPONSE_TIME. The TID field is set to the TID of the
message. The Address field is set to the address(es) to confirm. An
example of the entries is illustrated in Figure 6.
+--------+-------+---------+-----------------------+-----+----------+
| Anchor |Address| State | Lifetime | TID | Timeouts |
+--------+-------+---------+-----------------------+-----+----------+
| Port_1 | Addr1 |INIT_BIND|MAX_DHCP_RESPONSE_TIME | TID | 0 |
+--------+-------+---------+-----------------------+-----+----------+
| Port_1 | Addr2 |INIT_BIND|MAX_DHCP_RESPONSE_TIME | TID | 0 |
+--------+-------+---------+-----------------------+-----+----------+
Figure 6: Binding Entry in BST on Confirm-Triggered Initialization
Resulting state: INIT_BIND - A potential binding has been set up.
<span class="h5"><a class="selflink" id="section-6.4.1.5" href="#section-6.4.1.5">6.4.1.5</a>. Events That Cannot Happen in the NO_BIND State</span>
o EVE_ENTRY_EXPIRE: The lifetime of a binding entry expires
o EVE_DHCP_REBIND: A DHCPv4 Rebind or a DHCPv6 Rebind message is
received
o EVE_DHCP_RENEW: A DHCPv4 Renew or a DHCPv6 Renew message is
received
o EVE_DHCP_REPLY: A DHCPv4 ACK or a DHCPv6 Reply message is received
o EVE_DHCP_DECLINE: A DHCPv4 Decline or a DHCPv6 Decline message is
received
o EVE_DHCP_RELEASE: A DHCPv4 Release or a DHCPv6 Release message is
received
o EVE_DHCP_LEASEQUERY: A successful DHCPv6 LEASEQUERY-REPLY is
received
These cannot happen because they are each something that happens
AFTER a binding has been created.
<span class="grey">Bi, et al. Standards Track [Page 23]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-24" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<span class="h4"><a class="selflink" id="section-6.4.2" href="#section-6.4.2">6.4.2</a>. Initial State: INIT_BIND</span>
<span class="h5"><a class="selflink" id="section-6.4.2.1" href="#section-6.4.2.1">6.4.2.1</a>. Event: EVE_DHCP_REPLY - A DHCPv4 ACK or a DHCPv6 Reply message</span>
<span class="h5"> is received</span>
The message MUST be forwarded to the corresponding client.
If the message is DHCPv4 ACK, the Address field of the corresponding
entry (i.e., the binding entry whose TID is the same as the message)
is set to the address in the message (i.e., 'yiaddr' in DHCPv4 ACK).
The Lifetime field is set to the sum of the lease time in the ACK
message and MAX_DHCP_RESPONSE_TIME. The State field is changed to
BOUND.
If the message is DHCPv6 Reply, note the following cases:
1. If the status code is not "Success", no modification of
corresponding entries will be made. Corresponding entries will
expire automatically if no "Success" Reply is received during the
lifetime. The entries are not removed immediately because the
client may be able to use the addresses whenever a "Success"
Reply is received ("If the client receives any Reply messages
that do not indicate a NotOnLink status, the client can use the
addresses in the IA and ignore any messages that indicate a
NotOnLink status" [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>]).
2. If the status code is "Success", the SAVI device checks the IA
options in the Reply message.
A. If there are IA options in the Reply message, the SAVI device
checks each IA option. When the first assigned address is
found, the Address field of the binding entry with a matched
TID is set to the address. The Lifetime field is set to the
sum of the lease time in the Reply message and
MAX_DHCP_RESPONSE_TIME. The State field is changed to BOUND.
If there is more than one address assigned in the message,
new binding entries are set up for the remaining address
assigned in the IA options. An example of the entries is
illustrated in Figure 8. SAVI devices do not specially
process IA options with a NoAddrsAvail status because there
should be no address contained in such IA options.
B. Otherwise, the DHCP Reply message is in response to a Confirm
message. The state of the binding entries with a matched TID
is changed to BOUND. Because [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>] does not require the
lease time of addresses to be contained in the Reply message,
the SAVI device SHOULD send a LEASEQUERY [<a href="./rfc5007" title=""DHCPv6 Leasequery"">RFC5007</a>] message
querying by IP address to the All_DHCP_Servers multicast
<span class="grey">Bi, et al. Standards Track [Page 24]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-25" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
address [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>] or a list of configured DHCP server
addresses. The LEASEQUERY message is generated for each IP
address if multiple addresses are confirmed. The lifetime of
corresponding entries is set to 2*MAX_LEASEQUERY_DELAY. If
there is no response message after MAX_LEASEQUERY_DELAY, send
the LEASEQUERY message again. An example of the entries is
illustrated in Figure 7. If the SAVI device does not send
the LEASEQUERY message, a preconfigured lifetime
DHCP_DEFAULT_LEASE MUST be set on the corresponding entry.
(Note: it is RECOMMENDED to use T1 configured on DHCP servers
as the DHCP_DEFAULT_LEASE.)
Note: the SAVI devices do not check if the assigned addresses are
duplicated because in SAVI-DHCP scenarios, the DHCP servers are the
only source of valid addresses. However, the DHCP servers should be
configured to make sure no duplicated addresses are assigned.
+--------+-------+-------+------------------------+-----+----------+
| Anchor |Address| State | Lifetime | TID | Timeouts |
+--------+-------+-------+------------------------+-----+----------+
| Port_1 | Addr1 | BOUND | 2*MAX_LEASEQUERY_DELAY | TID | 0 |
+--------+-------+-------+------------------------+-----+----------+
| Port_1 | Addr2 | BOUND | 2*MAX_LEASEQUERY_DELAY | TID | 0 |
+--------+-------+-------+------------------------+-----+----------+
Figure 7: From INIT_BIND to BOUND on DHCP Reply in Response to
Confirm
Transition
+--------+-------+-------+------------------------+-----+----------+
| Anchor |Address| State | Lifetime | TID | Timeouts |
+--------+-------+-------+------------------------+-----+----------+
| Port_1 | Addr1 | BOUND |Lease time+ | TID | 0 |
| | | |MAX_DHCP_RESPONSE_TIME | | |
+--------+-------+-------+------------------------+-----+----------+
| Port_1 | Addr2 | BOUND |Lease time+ | TID | 0 |
| | | |MAX_DHCP_RESPONSE_TIME | | |
+--------+-------+-------+------------------------+-----+----------+
Figure 8: From INIT_BIND to BOUND on DHCP Reply in Response to
Request
Resulting state: BOUND - The binding has been set up.
<span class="grey">Bi, et al. Standards Track [Page 25]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-26" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<span class="h5"><a class="selflink" id="section-6.4.2.2" href="#section-6.4.2.2">6.4.2.2</a>. Event: EVE_ENTRY_EXPIRE - The lifetime of a binding entry</span>
<span class="h5"> expires</span>
The entry MUST be deleted from the BST.
Resulting state: An entry that has been deleted from the BST may be
considered to be in the "NO_BIND" state - No binding has been set up.
<span class="h5"><a class="selflink" id="section-6.4.2.3" href="#section-6.4.2.3">6.4.2.3</a>. Events That Are Ignored in INIT_BIND</span>
If no DHCP Server-to-Client messages that assign addresses or confirm
addresses are received, corresponding entries will expire
automatically. Thus, other DHCP Server-to-Client messages (e.g.,
DHCPv4 NAK) are not specially processed.
As a result, the following events, should they occur, are ignored
until either a DHCPv4 ACK or a DHCPv6 Reply message is received or
the lifetime of the binding entry expires.
o EVE_DHCP_REQUEST: A DHCPv4 Request or a DHCPv6 Request message is
received
o EVE_DHCP_CONFIRM: A DHCPv6 Confirm message is received
o EVE_DHCP_REBOOT: A DHCPv4 Reboot message is received
o EVE_DHCP_REBIND: A DHCPv4 Rebind or a DHCPv6 Rebind message is
received
o EVE_DHCP_RENEW: A DHCPv4 Renew or a DHCPv6 Renew message is
received
o EVE_DHCP_SOLICIT_RC: A DHCPv6 Solicitation message with the Rapid
Commit option is received
o EVE_DHCP_DECLINE: A DHCPv4 Decline or a DHCPv6 Decline message is
received
o EVE_DHCP_RELEASE: A DHCPv4 Release or a DHCPv6 Release message is
received
o EVE_DHCP_LEASEQUERY: A successful DHCPv6 LEASEQUERY-REPLY is
received
In each case, the message MUST be forwarded.
Resulting state: INIT_BIND - A potential binding has been set up.
<span class="grey">Bi, et al. Standards Track [Page 26]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-27" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<span class="h4"><a class="selflink" id="section-6.4.3" href="#section-6.4.3">6.4.3</a>. Initial State: BOUND</span>
<span class="h5"><a class="selflink" id="section-6.4.3.1" href="#section-6.4.3.1">6.4.3.1</a>. Event: EVE_ENTRY_EXPIRE - The lifetime of a binding entry</span>
<span class="h5"> expires</span>
The entry MUST be deleted from the BST.
Resulting state: An entry that has been deleted from the BST may be
considered to be in the "NO_BIND" state - No binding has been set up.
<span class="h5"><a class="selflink" id="section-6.4.3.2" href="#section-6.4.3.2">6.4.3.2</a>. Event: EVE_DHCP_DECLINE - A DHCPv4 Decline or a DHCPv6 Decline</span>
<span class="h5"> message is received</span>
The message MUST be forwarded.
First, the SAVI device gets all the addresses ("Requested IP address"
in DHCPv4 Decline, "ciaddr" in DHCPv4 Release, and addresses in all
the IA options of DHCPv6 Decline/Release) to decline/release in the
message. Then, the corresponding entries MUST be removed.
Resulting state in each relevant BST entry: An entry that has been
deleted from the BST may be considered to be in the "NO_BIND" state -
No binding has been set up.
<span class="h5"><a class="selflink" id="section-6.4.3.3" href="#section-6.4.3.3">6.4.3.3</a>. Event: EVE_DHCP_RELEASE - A DHCPv4 Release or a DHCPv6 Release</span>
<span class="h5"> message is received</span>
The message MUST be forwarded.
First, the SAVI device gets all the addresses ("Requested IP address"
in DHCPv4 Decline, "ciaddr" in DHCPv4 Release, and addresses in all
the IA options of DHCPv6 Decline/Release) to decline/release in the
message. Then, the corresponding entries MUST be removed.
Resulting state in each relevant BST entry: An entry that has been
deleted from the BST may be considered to be in the "NO_BIND" state -
No binding has been set up.
<span class="h5"><a class="selflink" id="section-6.4.3.4" href="#section-6.4.3.4">6.4.3.4</a>. Event: EVE_DHCP_REBIND - A DHCPv4 Rebind or a DHCPv6 Rebind</span>
<span class="h5"> message is received</span>
The message MUST be forwarded.
In such a case, a new TID will be used by the client. The TID field
of the corresponding entries MUST be set to the new TID. Note that
the TID check will not be performed on such messages.
Resulting state: BOUND: The binding has been set up.
<span class="grey">Bi, et al. Standards Track [Page 27]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-28" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<span class="h5"><a class="selflink" id="section-6.4.3.5" href="#section-6.4.3.5">6.4.3.5</a>. Event: EVE_DHCP_RENEW - A DHCPv4 Renew or a DHCPv6 Renew</span>
<span class="h5"> message is received</span>
The message MUST be forwarded.
In such a case, a new TID will be used by the client. The TID field
of the corresponding entries MUST be set to the new TID. Note that
the TID check will not be performed on such messages.
Resulting state: BOUND: The binding has been set up.
<span class="h5"><a class="selflink" id="section-6.4.3.6" href="#section-6.4.3.6">6.4.3.6</a>. Event: EVE_DHCP_REPLY - A DHCPv4 ACK or a DHCPv6 Reply message</span>
<span class="h5"> is received</span>
The message MUST be forwarded.
The DHCP Reply messages received in current states should be in
response to DHCP Renew/Rebind.
If the message is DHCPv4 ACK, the SAVI device updates the binding
entry with a matched TID, with the Lifetime field set to be the sum
of the new lease time and MAX_DHCP_RESPONSE_TIME, leaving the entry
in the BOUND state.
If the message is DHCPv6 Reply, the SAVI device checks each IA
Address option in each IA option. For each:
1. If the IA entry in the REPLY message has the status "NoBinding",
there is no address in the option, and no operation on an address
is performed.
2. If the valid lifetime of an IA Address option is 0, the binding
entry with a matched TID and address is removed, leaving it
effectively in the NO_BIND state.
3. Otherwise, set the Lifetime field of the binding entry with the
matched TID and address to be the sum of the new valid lifetime
and MAX_DHCP_RESPONSE_TIME, leaving the entry in the BOUND state.
Resulting state: NO_BIND or BOUND, as specified.
<span class="grey">Bi, et al. Standards Track [Page 28]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-29" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<span class="h5"><a class="selflink" id="section-6.4.3.7" href="#section-6.4.3.7">6.4.3.7</a>. Event: EVE_DHCP_LEASEQUERY - A successful DHCPv6</span>
<span class="h5"> LEASEQUERY_REPLY is received</span>
The message MUST be forwarded.
The message should be in response to the LEASEQUERY message sent in
<a href="#section-6.4.2">Section 6.4.2</a>. The related binding entry can be determined based on
the address in the IA Address option in the LEASEQUERY-REPLY message.
The Lifetime field of the corresponding binding entry is set to the
sum of the lease time in the LEASEQUERY-REPLY message and
MAX_DHCP_RESPONSE_TIME.
Resulting state: BOUND: The binding has been set up.
<span class="h5"><a class="selflink" id="section-6.4.3.8" href="#section-6.4.3.8">6.4.3.8</a>. Events Not Processed in the State BOUND</span>
The following events are ignored if received while the indicated
entry is in the BOUND state. Any required action will be the result
of the next message in the client/server exchange.
o EVE_DHCP_REQUEST: A DHCPv4 Request or a DHCPv6 Request message is
received
o EVE_DHCP_CONFIRM: A DHCPv6 Confirm message is received
o EVE_DHCP_REBOOT: A DHCPv4 Reboot message is received
o EVE_DHCP_SOLICIT_RC: A DHCPv6 Solicitation message with the Rapid
Commit option is received
<span class="grey">Bi, et al. Standards Track [Page 29]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-30" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<span class="h4"><a class="selflink" id="section-6.4.4" href="#section-6.4.4">6.4.4</a>. Table of State Machine</span>
The main state transits are listed as follows. Note that not all the
details are specified in the table and the diagram.
State Event Action Next State
---------------------------------------------------------------------
NO_BIND RQ/RC/CF/RE Generate entry INIT_BIND
INIT_BIND RPL Record lease time BOUND
(send leasequery if no lease)
INIT_BIND EVE_ENTRY_EXPIRE Remove entry NO_BIND
BOUND RLS/DCL Remove entry NO_BIND
BOUND EVE_ENTRY_EXPIRE Remove entry NO_BIND
BOUND RPL Set new lifetime BOUND
BOUND LQR Record lease time BOUND
Figure 9: State Transition Table
RQ: EVE_DHCP_REQUEST
RC: EVE_DHCP_SOLICIT_RC
CF: EVE_DHCP_CONFIRM
RE: EVE_DHCP_REBOOT
RPL: EVE_DHCP_REPLY
RLS: EVE_DHCP_RELEASE
DCL: EVE_DHCP_DECLINE
LQR: EVE_DHCP_LEASEQUERY
<span class="grey">Bi, et al. Standards Track [Page 30]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-31" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
+-------------+
| |
/--------+ NO_BIND |<--------\
| ----->| | |
| | +-------------+ |EVE_DHCP_RELEASE
EVE_DHCP_REQUEST | | |EVE_DHCP_DECLINE
EVE_DHCP_CONFIRM | |EVE_ENTRY_EXPIRE |EVE_ENTRY_EXPIRE
EVE_DHCP_SOLICIT_RC| | |
EVE_DHCP_REBOOT | | |
| | |
| | |
v | |
+-------------+ +------------+
| | EVE_DHCP_REPLY | |
| INIT_BIND --------------------->| BOUND |<-\
| | | | |
+-------------+ +------------+ |
| |
\--------/
EVE_DHCP_REPLY
EVE_DHCP_LEASEQUERY
Figure 10: Diagram of Transit
<span class="h2"><a class="selflink" id="section-7" href="#section-7">7</a>. Data Snooping Process</span>
<span class="h3"><a class="selflink" id="section-7.1" href="#section-7.1">7.1</a>. Scenario</span>
The rationale of the DHCP Snooping Process specified in <a href="#section-6">Section 6</a> is
that if a DHCP client's use of a DHCP address is legitimate, the
corresponding DHCP address assignment procedure must have been
finished during the attachment of the DHCP client. This is the case
when the SAVI device is continuously on the path(s) from the DHCP
client to the DHCP server(s)/relay(s). However, there are two cases
in which this does not work:
o Multiple paths: there is more than one feasible link-layer path
from the client to the DHCP server/relay, and the SAVI device is
not on every one of them. The client may get its address through
one of the paths that does not pass through the SAVI device, but
packets from the client can travel on paths that pass through the
SAVI device, such as when the path through the link-layer network
changes. Because the SAVI device could not snoop the DHCP packet
exchange procedure, the DHCP Snooping Process cannot set up the
corresponding binding.
<span class="grey">Bi, et al. Standards Track [Page 31]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-32" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
o Dynamic path: there is only one feasible link-layer path from the
client to the DHCP server/relay, but the path is dynamic due to
topology change (for example, some link becomes broken due to
failure or some planned change) or link-layer path change. This
situation also covers the local-link movement of clients without
the address confirm/reconfiguration process. For example, a host
changes its attached switch port in a very short time. In such
cases, the DHCP Snooping Process will not set up the corresponding
binding.
The Data Snooping Process can avoid the permanent blocking of
legitimate traffic in case one of these two exceptions occurs. This
process is performed on attachments with the Data-Snooping attribute.
Data packets without a matching binding entry may trigger this
process to set up bindings.
Snooping data traffic introduces a considerable burden on the
processor and ASIC-to-Processor bandwidth of SAVI devices. Because
of the overhead of this process, the implementation of this process
is OPTIONAL. This function SHOULD be enabled unless the
implementation is known to be used in the scenarios without the above
exceptions. For example, if the implementation is to be used in
networks with tree topology and without host local-link movement,
there is no need to implement this process in such scenarios.
This process is not intended to set up a binding whenever a data
packet without a matched binding entry is received. Instead,
unmatched data packets trigger this process probabilistically, and
generally a number of unmatched packets will be discarded before the
binding is set up. The parameter(s) of this probabilistic process
SHOULD be configurable, defaulting to a situation where data snooping
is disabled.
<span class="h3"><a class="selflink" id="section-7.2" href="#section-7.2">7.2</a>. Rationale</span>
This process makes use of NS/ARP and DHCP Leasequery to set up
bindings. If an address is not used by another client in the
network, and the address has been assigned in the network, the
address can be bound with the binding anchor of the attachment from
which the unmatched packet is received.
The Data Snooping Process provides an alternative path for binding
entries to reach the BOUND state in the exceptional cases explained
in <a href="#section-7.1">Section 7.1</a> when there are no DHCP messages that can be snooped by
the SAVI device.
<span class="grey">Bi, et al. Standards Track [Page 32]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-33" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
In some of the exceptional cases (especially the dynamic topology
case), by the time the binding has reached the BOUND state, the DHCP
messages may be passing through the SAVI device. In this case, the
events driven by DHCP messages that are expected in the BOUND state
in the DHCP Snooping Process may occur, and the binding can be
handled by the DHCP Snooping Process state machine.
In any event, the lease expiry timeout event will occur even if no
others do. This will cause the binding to be deleted and the state
to logically return to NO_BIND state. Either the DHCP or the Data
Snooping Process will be reinvoked if the lease is still in place.
If DHCP messages are still not passing through the SAVI device, there
will be a brief disconnection during which data packets passing
through the SAVI device will be dropped. The probabilistic
initiation of the Data Snooping Process can then take over again and
return the binding state to BOUND in due course.
The security issues concerning this process are discussed in
<a href="#section-11.1">Section 11.1</a>.
<span class="h3"><a class="selflink" id="section-7.3" href="#section-7.3">7.3</a>. Additional Binding States Description</span>
In addition to NO_BIND and BOUND from <a href="#section-6.2">Section 6.2</a>, three new states
used in this process are listed here. The INIT_BIND state is not
used, as it is entered by observing a DHCP message.
DETECTION: The address in the entry is undergoing local duplication
detection.
RECOVERY: The SAVI device is querying the assignment and lease time
of the address in the entry through DHCP Leasequery.
VERIFY: The SAVI device is verifying that the device connected to the
attachment point has a hardware address that matches the one returned
in the DHCP Leasequery.
Because the mechanisms used for the operations carried out while the
binding is in these three states operate over unreliable protocols,
each operation is carried out twice with a timeout that is triggered
if no response is received.
<span class="h3"><a class="selflink" id="section-7.4" href="#section-7.4">7.4</a>. Events</span>
To handle the Data Snooping Process, six extra events, described
here, are needed in addition to those used by the DHCP Snooping
Process (see <a href="#section-6.3">Section 6.3</a>). If an event will trigger the creation of
a new binding entry, the binding entry limit on the binding anchor
MUST NOT be exceeded.
<span class="grey">Bi, et al. Standards Track [Page 33]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-34" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
EVE_DATA_UNMATCH: A data packet without a matched binding is
received.
EVE_DATA_CONFLICT: An ARP Reply / Neighbor Advertisement (NA) message
against an address in the DETECTION state is received from a host
other than the one for which the entry was added (i.e., a host
attached at a point other than the one on which the triggering data
packet was received).
EVE_DATA_LEASEQUERY:
o IPv4: A DHCPLEASEACTIVE message with the IP Address Lease Time
option is received. Note that the DHCPLEASEUNKNOWN and
DHCPLEASEUNASSIGNED replies are ignored.
o IPv6: A successful LEASEQUERY-REPLY is received.
EVE_DATA_VERIFY: An ARP Reply / NA message has been received in the
VERIFY state from the device connected to the attachment point on
which the data packet was received.
The triggering packet should pass the following checks to trigger a
valid event:
o Attribute check: the data packet should be from attachments with
the Data-Snooping attribute; the DHCPLEASEACTIVE/LEASEQUERY-REPLY
messages should be from attachments with the DHCP-Snooping
attribute.
o Binding limitation check: the data messages must not cause new
binding setup on an attachment whose binding entry limitation has
been reached (refer to <a href="#section-11.5">Section 11.5</a>).
o Address check: For EVE_DATA_LEASEQUERY, the source address of the
DHCPLEASEQUERY messages must pass the check specified in
<a href="#section-8.2">Section 8.2</a>. For EVE_DATA_CONFLICT and EVE_DATA_VERIFY, the
source address and target address of the ARP or NA messages must
pass the check specified in <a href="#section-8.2">Section 8.2</a>.
o Interval check: the interval between two successive
EVE_DATA_UNMATCH events triggered by an attachment MUST be no
smaller than DATA_SNOOPING_INTERVAL.
o TID check: the DHCPLEASEACTIVE/LEASEQUERY-REPLY messages must have
a matched TID with the corresponding entry.
o Prefix check: the source address of the data packet should be of a
valid local prefix, as specified in <a href="./rfc7039#section-7">Section 7 of [RFC7039]</a>.
<span class="grey">Bi, et al. Standards Track [Page 34]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-35" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
EVE_DATA_EXPIRE: A timer expires indicating that a response to a
hardware address verification message sent in the VERIFY state has
not been received within the specified DETECTION_TIMEOUT period.
EVE_ENTRY_EXPIRE: A timer expires after the Lifetime indicated in the
relevant BST entry has elapsed. This is identical to the usage in
the DHCP Snooping Process.
<span class="h3"><a class="selflink" id="section-7.5" href="#section-7.5">7.5</a>. Message Sender Functions</span>
The Data Snooping Process involves sending three different messages
to other network devices. Each message may be sent up to two times
since they are sent over unreliable transports and are sent in
different states. The functions defined in this section specify the
messages to be sent in the three cases. In each case, the message to
be sent depends on whether the triggering data packet is an IPv4 or
an IPv6 packet.
<span class="h4"><a class="selflink" id="section-7.5.1" href="#section-7.5.1">7.5.1</a>. Duplicate Detection Message Sender</span>
Send a message to check if the source address in the data packet that
triggered the Data Snooping Process has a local conflict (that is, it
uses an address that is being used by another node):
IPv4 address: Broadcast an Address Resolution Protocol (ARP) Request
[<a href="./rfc826" title=""Ethernet Address Resolution Protocol: Or Converting Network Protocol Addresses to 48.bit Ethernet Address for Transmission on Ethernet Hardware"">RFC826</a>] or an ARP Probe [<a href="./rfc5227" title=""IPv4 Address Conflict Detection"">RFC5227</a>] for the address to the local
network. An ARP Response will be expected from the device on
the attachment point on which the triggering data packet was
received. An ARP Reply received on any other port indicates a
duplicate address.
IPv6 address: Send a Duplicate Address Detection (DAD) message
(Neighbor Solicitation message) to the solicited-node multicast
address [<a href="./rfc4861" title=""Neighbor Discovery for IP version 6 (IPv6)"">RFC4861</a>] targeting the address. Ideally, only the
host on that point of attachment responds with a Neighbor
Advertisement. A Neighbor Advertisement received on any other
port indicates a duplicate address.
As both the ARP and DAD processes are unreliable (the packet either
to or from the other system may be lost in transit; see [<a href="./rfc6620" title=""FCFS SAVI: First-Come, First-Served Source Address Validation Improvement for Locally Assigned IPv6 Addresses"">RFC6620</a>]),
if there is no response after the DETECTION_TIMEOUT, an
EVE_ENTRY_EXPIRE is generated.
<span class="grey">Bi, et al. Standards Track [Page 35]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-36" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<span class="h4"><a class="selflink" id="section-7.5.2" href="#section-7.5.2">7.5.2</a>. Leasequery Message Sender</span>
Send a DHCPLEASEQUERY message to the DHCP server(s) to determine if
it has given out a lease for the source address in the triggering
data packet. A list of authorized DHCP servers is kept by the SAVI
device. The list should be either preconfigured with the IPv4 and/or
IPv6 addresses or dynamically discovered: For networks using IPv4,
this can be done by sending DHCPv4 Discover messages and parsing the
returned DHCPv4 Offer messages; for networks using IPv6, discovery
can be done by sending DHCPv6 SOLICIT messages and parsing the
returned ADVERTISE messages. The same TID should be used for all
LEASEQUERY messages sent in response to a triggering data message on
an attachment point. The TID is generated if the TID field in the
BST entry is empty and recorded in the TID field of the BST entry
when the first message is sent. Subsequent messages use the TID from
the BST entry.
(1) IPv4 address: Send a DHCPLEASEQUERY [<a href="./rfc4388" title=""Dynamic Host Configuration Protocol (DHCP) Leasequery"">RFC4388</a>] message querying
by IP address to each DHCPv4 server in the list of authorized
servers with an IP Address Lease Time option (option 51). If
the server has a valid lease for the address, the requested
information will be returned in a DHCPLEASEACTIVE message.
(2) IPv6 address: Send a LEASEQUERY [<a href="./rfc5007" title=""DHCPv6 Leasequery"">RFC5007</a>] message querying by IP
address to each DHCPv6 server in the list of authorized servers
using the server address as the link-address in the LEASEQUERY
message. If the server has a valid lease for the address, the
requested information will be returned in a LEASEQUERY-REPLY
message marked as successful (i.e., without an
OPTION_STATUS_CODE in the reply). The IA Address option(s)
returned contains any IPv6 addresses bound to the same link
together with the lease validity time.
As DHCP Leasequeries are an unreliable process (the packet either to
or from the server may be lost in transit), if there is no response
after the MAX_LEASEQUERY_DELAY, an EVE_DATA_EXPIRE is generated.
Note that multiple response messages may be received if the list of
authorized servers contains more than one address of the appropriate
type and, in the case of DHCPv6, the responses may contain additional
addresses for which leases have been allocated.
<span class="h4"><a class="selflink" id="section-7.5.3" href="#section-7.5.3">7.5.3</a>. Address Verification Message Sender</span>
Send a message to verify that the link-layer address in the attached
device that sent the triggering data packet matches the link-layer
address contained in the leasequery response:
<span class="grey">Bi, et al. Standards Track [Page 36]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-37" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
IPv4 address: Send an ARP Request with the Target Protocol Address
set to the IP address in the BST entry. The ARP Request is
only sent to the attachment that triggered the binding. If the
attached device has the IP address bound to the interface
attached to the SAVI device, an ARP Reply should be received
containing the hardware address of the interface on the
attached device that can be compared with the leasequery value.
IPv6 address: Send a Neighbor Solicitation (NS) message with the
target address set to the IP address in the BST entry. The NS
is only sent to the attachment that triggered the binding. If
the attached device has the IP address bound to the interface
attached to the SAVI device, an NA should be received
indicating that the attached device has the IP address
configured on the interface.
As both the ARP and NS/NA processes are unreliable (the packet either
to or from the other system may be lost in transit; see [<a href="./rfc6620" title=""FCFS SAVI: First-Come, First-Served Source Address Validation Improvement for Locally Assigned IPv6 Addresses"">RFC6620</a>]),
if there is no response after the DETECTION_TIMEOUT, an
EVE_DATA_EXPIRE is generated.
<span class="h3"><a class="selflink" id="section-7.6" href="#section-7.6">7.6</a>. Initial State: NO_BIND</span>
<span class="h4"><a class="selflink" id="section-7.6.1" href="#section-7.6.1">7.6.1</a>. Event: EVE_DATA_UNMATCH: A data packet without a matched binding</span>
<span class="h4"> is received</span>
Make a probabilistic determination as to whether to act on this
event. The probability may be configured or calculated based on the
state of the SAVI device. This probability should be low enough to
mitigate the damage from DoS attacks against this process.
Create a new entry in the BST. Set the Binding Anchor field to the
corresponding binding anchor of the attachment. Set the Address
field to the source address of the packet.
Address conflicts MUST be detected and prevented.
If local address detection is performed:
Set the State field to DETECTION. Set the Lifetime of the
created entry to DETECTION_TIMEOUT. Set the Timeouts field to
0. Start the detection of any local address conflicts by
sending a Duplicate Address Detection Message (<a href="#section-7.5.1">Section 7.5.1</a>).
Transition to DETECTION state.
<span class="grey">Bi, et al. Standards Track [Page 37]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-38" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
If local address detection is not performed:
Set the State field to RECOVERY. Set the Lifetime of the
created entry to LEASEQUERY_DELAY. Set the Timeouts field to
0. Start the recovery of any DHCP lease associated with the
source IP address by sending one or more LEASEQUERY messages
(<a href="#section-7.5.2">Section 7.5.2</a>). Transition to RECOVERY state.
The packet that triggers this event SHOULD be discarded.
An example of the BST entry during duplicate address detection is
illustrated in Figure 11.
+--------+-------+---------+-----------------------+-----+----------+
| Anchor |Address| State | Lifetime | TID | Timeouts |
+--------+-------+---------+-----------------------+-----+----------+
| Port_1 | Addr1 |DETECTION| DETECTION_TIMEOUT | | 0 |
+--------+-------+---------+-----------------------+-----+----------+
Figure 11: Binding Entry in BST on Data-Triggered Initialization
Resulting state: DETECTION - The address in the entry is undergoing
local duplication detection - or RECOVERY - The DHCP lease(s)
associated with the address is being queried.
<span class="h4"><a class="selflink" id="section-7.6.2" href="#section-7.6.2">7.6.2</a>. Events Not Observed in NO_BIND for Data Snooping</span>
EVE_DATA_CONFLICT: An ARP Reply / NA message is received from an
unexpected system.
EVE_DATA_LEASEQUERY: A valid DHCPLEASEACTIVE or LEASEQUERY-REPLY is
received.
EVE_DATA_VERIFY: A valid ARP Reply or NA message is received from the
attached device.
All EVE_DHCP_* events defined in <a href="#section-6.3.2">Section 6.3.2</a> are treated as
described in the DHCP Snooping Process (<a href="#section-6.4.1">Section 6.4.1</a>) and may result
in that process being triggered.
EVE_ENTRY_EXPIRE: Expiration of the DECTECTION_TIMEOUT
EVE_DATA_EXPIRE: Expiration of the DECTECTION_TIMEOUT
<span class="grey">Bi, et al. Standards Track [Page 38]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-39" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<span class="h3"><a class="selflink" id="section-7.7" href="#section-7.7">7.7</a>. Initial State: DETECTION</span>
<span class="h4"><a class="selflink" id="section-7.7.1" href="#section-7.7.1">7.7.1</a>. Event: EVE_ENTRY_EXPIRE</span>
When this event occurs, no address conflict has been detected during
the previous DETECTION_TIMEOUT period.
If the Timeouts field in the BST entry is 0:
Set the Lifetime of the BST entry to DETECTION_TIMEOUT. Set
the Timeouts field to 1. Restart the detection of any local
address conflicts by sending a second Duplicate Address
Detection Message (<a href="#section-7.5.1">Section 7.5.1</a>). Remain in DETECTION state.
If the Timeouts field in the BST entry is 1:
Assume that there is no local address conflict. Set the State
field to RECOVERY. Set the Lifetime of the BST entry to
LEASEQUERY_DELAY. Set the Timeouts field to 0. Start the
recovery of any DHCP lease associated with the source IP
address by sending one or more LEASEQUERY messages
(<a href="#section-7.5.2">Section 7.5.2</a>). Transition to RECOVERY state.
An example of the entry is illustrated in Figure 12.
+--------+-------+----------+----------------------+-----+----------+
| Anchor |Address| State | Lifetime | TID | Timeouts |
+--------+-------+----------+----------------------+-----+----------+
| Port_1 | Addr1 | RECOVERY | MAX_LEASEQUERY_DELAY | TID | 0 |
+--------+-------+----------+----------------------+-----+----------+
Figure 12: Binding Entry in BST on Leasequery
Resulting state: DETECTION - If a second local conflict period is
required - or RECOVERY - The SAVI device is querying the assignment
and lease time of the address in the entry through DHCP Leasequery.
<span class="h4"><a class="selflink" id="section-7.7.2" href="#section-7.7.2">7.7.2</a>. Event: EVE_DATA_CONFLICT: ARP Reply / NA Message Received from</span>
<span class="h4"> Unexpected System</span>
Remove the entry.
Resulting state: NO_BIND - No binding has been set up.
<span class="h4"><a class="selflink" id="section-7.7.3" href="#section-7.7.3">7.7.3</a>. Events Not Observed in DETECTION</span>
EVE_DATA_UNMATCH: A data packet without a matched binding is received
All EVE_DHCP_* events defined in <a href="#section-6.3.2">Section 6.3.2</a>
<span class="grey">Bi, et al. Standards Track [Page 39]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-40" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
EVE_DHCP_REBIND: A DHCPv4 Rebind or a DHCPv6 Rebind message is
received
<span class="h3"><a class="selflink" id="section-7.8" href="#section-7.8">7.8</a>. Initial State: RECOVERY</span>
<span class="h4"><a class="selflink" id="section-7.8.1" href="#section-7.8.1">7.8.1</a>. Event: EVE_DATA_LEASEQUERY: A valid DHCPLEASEACTIVE or</span>
<span class="h4"> successful LEASEQUERY-REPLY is received</span>
Set the State in the BST entry to VERIFY. Depending on the type of
triggering source IP address, process the received DHCP Leasequery
response:
IPv4 address: Update the Lifetime field in the BST entry to the sum
of the value encoded in the IP Address Lease Time option of the
DHCPLEASEACTIVE message and MAX_DHCP_RESPONSE_TIME. Record the
value of the "chaddr" field (hardware address) in the message
for checking against the hardware address received during
verification in the next state. Set the Timeouts field to 0.
Start the verification process by sending an Address
Verification Message (see <a href="#section-7.5.3">Section 7.5.3</a>). Transition to VERIFY
state. Start an additional verification timer with a duration
of DETECTION_TIMEOUT. When this expires, an EVE_DATA_EXPIRE
event will be generated.
IPv6 address: Update the Lifetime field in the BST entry to the sum
of the valid lifetime extracted from the OPTION_CLIENT_DATA
option in the LEASEQUERY-REPLY message and
MAX_DHCP_RESPONSE_TIME. Set the Timeouts field to 0. Start
the verification process by sending an Address Verification
Message (see <a href="#section-7.5.3">Section 7.5.3</a>). Transition to VERIFY state.
Start an additional verification timer with a duration of
DETECTION_TIMEOUT. When this expires, an EVE_DATA_EXPIRE event
will be generated.
If multiple addresses are received in the LEASEQUERY-REPLY, new
BST entries MUST be created for the additional addresses using
the same binding anchor. The entries are created with state
set to VERIFY and the other fields set as described in this
section for the triggering source IP address. Also, start the
verification process and start verification timers for each
additional address.
Resulting state: VERIFY - Awaiting verification or otherwise of the
association of the IP address with the connected interface.
<span class="grey">Bi, et al. Standards Track [Page 40]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-41" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<span class="h4"><a class="selflink" id="section-7.8.2" href="#section-7.8.2">7.8.2</a>. Event: EVE_ENTRY_EXPIRE</span>
Depending on the value of the Timeouts field in the BST entry, either
send repeat LEASEQUERY messages or discard the binding:
If the Timeouts field in the BST entry is 0:
No responses to the LEASEQUERY message(s) sent have been
received during the first LEASEQUERY_DELAY period. Set the
Lifetime of the BST entry to LEASEQUERY_DELAY. Set the
Timeouts field to 1. Restart the recovery of any DHCP lease
associated with the source IP address by sending one or more
LEASEQUERY messages (<a href="#section-7.5.2">Section 7.5.2</a>). Remain in RECOVERY state.
If the Timeouts field in the BST entry is 1:
No responses to the LEASEQUERY messages sent during two
LEASEQUERY_DELAY periods were received. Assume that no leases
exist and hence that the source IP address is bogus. Delete
the BST entry. Transition to NO_BIND state.
Resulting state: RECOVERY - If repeat leasequeries are sent - or
NO_BIND - If no successful responses to LEASEQUERY messages have been
received.
<span class="h4"><a class="selflink" id="section-7.8.3" href="#section-7.8.3">7.8.3</a>. Events Not Observed in RECOVERY</span>
EVE_DATA_UNMATCH: A data packet without a matched binding is received
EVE_DATA_CONFLICT: An ARP Reply / NA message is received from an
unexpected system
EVE_DATA_VERIFY: A valid ARP Reply or NA message is received from the
attached device
All EVE_DHCP_* events defined in <a href="#section-6.3.2">Section 6.3.2</a>
EVE_DATA_EXPIRE: Expiration of the DECTECTION_TIMEOUT
<span class="h3"><a class="selflink" id="section-7.9" href="#section-7.9">7.9</a>. Initial State: VERIFY</span>
<span class="h4"><a class="selflink" id="section-7.9.1" href="#section-7.9.1">7.9.1</a>. Event: EVE_DATA_LEASEQUERY: A valid DHCPLEASEACTIVE or</span>
<span class="h4"> successful LEASEQUERY-REPLY is received</span>
If LEASEQUERY messages were sent to more than one DHCP server during
RECOVERY state, additional successful leasequery responses may be
received relating to the source IP address. The conflict resolution
mechanisms specified in <a href="./rfc4388#section-6.8">Section 6.8 of [RFC4388]</a> and <a href="./rfc5007#section-4.3.4">Section 4.3.4 of
[RFC5007]</a> can be used to determine the message from which values are
used to update the BST Lifetime entry and the hardware address
<span class="grey">Bi, et al. Standards Track [Page 41]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-42" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
obtained from DHCP, as described in <a href="#section-7.8.1">Section 7.8.1</a>. In the case of
DHCPv6 queries, the LEASEQUERY-REPLY may contain additional addresses
as described in <a href="#section-7.8.1">Section 7.8.1</a>. If so, additional BST entries MUST be
created or ones previously created updated as described in that
section.
Resulting state: VERIFY (no change).
<span class="h4"><a class="selflink" id="section-7.9.2" href="#section-7.9.2">7.9.2</a>. Event: EVE_DATA_VERIFY: A valid ARP Reply or NA is received from</span>
<span class="h4"> the device attached via the binding anchor</span>
Depending on the type of triggering source IP address, this event may
indicate that the device attached via the binding anchor in the BST
entry is configured by DHCP using the IP address:
IPv4 address: Check that the value of the sender hardware address in
the ARP Reply matches the saved "chaddr" field (hardware
address) from the previously received DHCPLEASEACTIVE message.
If not, ignore this event; a subsequent retry may provide
verification. If the hardware addresses match, the binding
entry has been verified.
IPv6 address: Simple receipt of a valid NA from the triggering
source IP address at the binding anchor port provides
verification for the binding entry.
If the binding entry has been verified, set the state in the BST
entry to BOUND. Clear the TID field. Cancel the verification timer.
Resulting state: VERIFY (no change) - If the IPv4 DHCPLEASEQUERY
"chaddr" address does not match the ARP Reply hardware address.
Otherwise, the resulting state is BOUND.
<span class="h4"><a class="selflink" id="section-7.9.3" href="#section-7.9.3">7.9.3</a>. Event: EVE_ENTRY_EXPIRE</span>
The DHCP lease lifetime has expired before the entry could be
verified. Remove the entry. Transition to NO_BIND state.
Resulting state: NO_BIND - No binding has been set up.
<span class="grey">Bi, et al. Standards Track [Page 42]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-43" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<span class="h4"><a class="selflink" id="section-7.9.4" href="#section-7.9.4">7.9.4</a>. Event: EVE_DATA_EXPIRE</span>
Depending on the value of the Timeouts field in the BST entry, either
send a repeat validation message or discard the binding:
If the Timeouts field in the BST entry is 0:
No response to the verification message sent has been received
during the first DETECTION_TIMEOUT period. Set the Timeouts
field to 1. Restart the verification process by sending an
Address Verification Message (see <a href="#section-7.5.3">Section 7.5.3</a>). Start a
verification timer with a duration of DETECTION_TIMEOUT. When
this expires, an EVE_DATA_EXPIRE event will be generated.
Remain in VERIFY state.
If the Timeouts field in the BST entry is 1:
No responses to the verification messages sent during two
DETECTION_TIMEOUT periods were received. Assume that the
configuration of the triggering source IP address cannot be
verified and hence that the source IP address is bogus. Delete
the BST entry. Transition to NO_BIND state.
Resulting state: VERIFY - Additional verification message sent - or
NO_BIND - No binding has been set up.
<span class="h4"><a class="selflink" id="section-7.9.5" href="#section-7.9.5">7.9.5</a>. Events Not Observed in VERIFY</span>
EVE_DATA_UNMATCH: A data packet without a matched binding is received
EVE_DATA_CONFLICT: An ARP Reply / NA message is received from an
unexpected system
All EVE_DHCP_* events defined in <a href="#section-6.3.2">Section 6.3.2</a>
<span class="h3"><a class="selflink" id="section-7.10" href="#section-7.10">7.10</a>. Initial State: BOUND</span>
Upon entry to the BOUND state, control of the system continues as if
a DHCP message assigning the address has been observed, as in
<a href="#section-6.4.3">Section 6.4.3</a>. The BST entry has been restored.
Note that the TID field contains no value after the binding state
changes to BOUND. The TID field is recovered from snooping DHCP
Renew/Rebind messages if these are observed as described in the DHCP
Snooping Process. Because TID is used to associate binding entries
with messages from DHCP servers, it must be recovered or else a
number of state transitions of this mechanism will not be executed
normally.
<span class="grey">Bi, et al. Standards Track [Page 43]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-44" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<span class="h3"><a class="selflink" id="section-7.11" href="#section-7.11">7.11</a>. Table of State Machine</span>
The main state transitions are listed as follows.
State Event Action Next State
---------------------------------------------------------------------
NO_BIND EVE_DATA_UNMATCH Start duplicate detect DETECTION
DETECTION EVE_ENTRY_EXPIRE 1 Repeat duplicate detect DETECTION
DETECTION EVE_ENTRY_EXPIRE 2 Start leasequery RECOVERY
DETECTION EVE_DATA_CONFLICT Remove entry NO_BIND
RECOVERY EVE_ENTRY_EXPIRE 1 Repeat leasequery RECOVERY
RECOVERY EVE_ENTRY_EXPIRE 2 No lease found; remove entry NO_BIND
RECOVERY EVE_DATA_LEASEQUERY Set lease time; start verify VERIFY
VERIFY EVE_ENTRY_EXPIRE Lease expiry; remove entry NO_BIND
VERIFY EVE_DATA_LEASEQUERY Resolve lease conflict(s) VERIFY
VERIFY EVE_DATA_VERIFY Finish validation BOUND or NO_BIND
VERIFY EVE_DATA_EXPIRE 1 Repeat verify VERIFY
VERIFY EVE_DATA_EXPIRE 2 Verify failed; remove entry NO_BIND
BOUND EVE_ENTRY_EXPIRE Lease expiry; remove entry NO_BIND
BOUND RENEW/REBIND Record TID BOUND
Figure 13: State Transition Table
<span class="grey">Bi, et al. Standards Track [Page 44]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-45" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
+-------------+ EVE_ENTRY_EXPIRE
/---------+ |<------------------------\
| | NO_BIND | EVE_DATA_EXPIRE |
EVE_DATA_UNMATCH | /----->| |<----\ (2nd VRF_DELAY) |
| | +-------------+ | |
| | EVE_ENTRY_EXPIRE | |
| | (2nd LQ_DELAY) | |
EVE_ENTRY_EXPIRE | | | EVE_ENTRY_EXPIRE |
(1st DAD_DELAY) | | | (1st LQ_DELAY) |
/------\ | | | /--------\ |
| | | | EVE_DATA_CONFLICT \---\ | | |
| v v | | v | |
| +-------------+ EVE_ENTRY_EXPIRE +------------+ | |
| | | (2nd DAD_DELAY) | | | |
\----+ DETECTION ------------------------>| RECOVERY +--/ |
| | | | |
+-------------+ (To NO_BIND) +------------+ |
^ | |
| EVE_DATA_LEASEQUERY | |
/----------\ | | |
| | | EVE_ENTRY_EXPIRE | |
EVE_DHCP_RENEW| v | v |
EVE_DHCP_REBIND| +-------------+ +-------------+ |
| | | | +--/
\----+ BOUND |<---------------+ VERIFY |
| | EVE_DATA_VERIFY| |<-\
+-------------+ +-------------+ |
| |
\----------/
EVE_DATA_LEASEQUERY
EVE_DATA_EXPIRE
(1st VRF_DELAY)
Figure 14: Diagram of Transit
LQ_DELAY: MAX_LEASEQUERY_DELAY
VRF_DELAY: DETECTION_TIMEOUT
<span class="h2"><a class="selflink" id="section-8" href="#section-8">8</a>. Filtering Specification</span>
This section specifies how to use bindings to filter out packets with
spoofed source addresses.
Filtering policies are different for data packets and control
packets. DHCP, ARP, and Neighbor Discovery Protocol (NDP) [<a href="./rfc4861" title=""Neighbor Discovery for IP version 6 (IPv6)"">RFC4861</a>]
messages are classified as control packets. All other packets are
classified as data packets.
<span class="grey">Bi, et al. Standards Track [Page 45]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-46" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<span class="h3"><a class="selflink" id="section-8.1" href="#section-8.1">8.1</a>. Data Packet Filtering</span>
Data packets from attachments with the Validating attribute TRUE MUST
have their source addresses validated. There is one exception to
this rule.
A packet whose source IP address is a link-local address cannot be
checked against DHCP assignments, as it is not assigned using DHCP.
Note: as explained in <a href="#section-1">Section 1</a>, a SAVI solution for link-local
addresses, e.g., FCFS SAVI [<a href="./rfc6620" title=""FCFS SAVI: First-Come, First-Served Source Address Validation Improvement for Locally Assigned IPv6 Addresses"">RFC6620</a>], can be enabled to check packets
with a link-local source address.
If the source IP address of a packet is not a link-local address, but
there is not a matching entry in the BST with BOUND state, this
packet MUST be discarded. However, the packet may trigger the Data
Snooping Process (<a href="#section-7">Section 7</a>) if the Data-Snooping attribute is set on
the attachment.
Data packets from an attachment with the Validating attribute set
FALSE will be forwarded without having their source addresses
validated.
The SAVI device MAY log packets that fail source address validation.
<span class="h3"><a class="selflink" id="section-8.2" href="#section-8.2">8.2</a>. Control Packet Filtering</span>
For attachments with the Validating attribute:
DHCPv4 Client-to-Server messages in which the source IP address is
neither all zeros nor bound with the corresponding binding anchor in
the BST MUST be discarded.
DHCPv6 Client-to-Server messages in which the source IP address is
neither a link-local address nor bound with the corresponding binding
anchor in the BST MUST be discarded.
NDP messages in which the source IP address is neither a link-local
address nor bound with the corresponding binding anchor MUST be
discarded.
NA messages in which the target address is neither a link-local
address nor bound with the corresponding binding anchor MUST be
discarded.
ARP messages in which the protocol is IP and the sender protocol
address is neither all zeros nor bound with the corresponding binding
anchor MUST be discarded.
<span class="grey">Bi, et al. Standards Track [Page 46]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-47" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
ARP Reply messages in which the target protocol address is not bound
with the corresponding binding anchor MUST be discarded.
For attachments with other attributes:
DHCP Server-to-Client messages not from attachments with the DHCP-
Trust attribute or Trust attribute MUST be discarded.
For attachments with no attribute:
DHCP Server-to-Client messages from such attachments MUST be
discarded.
The SAVI device MAY record any messages that are discarded.
<span class="h2"><a class="selflink" id="section-9" href="#section-9">9</a>. State Restoration</span>
If a SAVI device reboots, the information kept in volatile memory
will be lost. This section specifies the restoration of attribute
configuration and the BST.
<span class="h3"><a class="selflink" id="section-9.1" href="#section-9.1">9.1</a>. Attribute Configuration Restoration</span>
The loss of attribute configuration will not break the network: no
action will be performed on traffic from attachments with no
attribute. However, the loss of attribute configuration makes this
SAVI function unable to work.
To avoid the loss of binding anchor attribute configuration, the
configuration MUST be able to be stored in non-volatile storage.
After the reboot of the SAVI device, if the configuration of binding
anchor attributes is found in non-volatile storage, the configuration
MUST be used.
<span class="h3"><a class="selflink" id="section-9.2" href="#section-9.2">9.2</a>. Binding State Restoration</span>
The loss of binding state will cause the SAVI devices to discard
legitimate traffic. Simply using the Data Snooping Process to
recover a large number of bindings is a heavy overhead and may cause
considerable delay. Thus, recovering bindings from non-volatile
storage, as specified below, is RECOMMENDED.
Binding entries MAY be saved into non-volatile storage whenever a new
binding entry changes to BOUND state. If a binding with BOUND state
is removed, the saved entry MUST be removed correspondingly. The
time when each binding entry is established is also saved.
<span class="grey">Bi, et al. Standards Track [Page 47]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-48" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
If the BST is stored in non-volatile storage, the SAVI device SHOULD
restore binding state from the non-volatile storage immediately after
reboot. Using the time when each binding entry was saved, the SAVI
device should check whether the entry has become obsolete by
comparing the saved lifetime and the difference between the current
time and time when the binding entry was established. Obsolete
entries that would have expired before the reboot MUST be removed.
<span class="h2"><a class="selflink" id="section-10" href="#section-10">10</a>. Constants</span>
The following constants are recommended for use in this context:
o MAX_DHCP_RESPONSE_TIME (120s): Maximum Solicit timeout value
(SOL_MAX_RT from [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>])
o MAX_LEASEQUERY_DELAY (10s): Maximum LEASEQUERY timeout value
(LQ_MAX_RT from [<a href="./rfc5007" title=""DHCPv6 Leasequery"">RFC5007</a>])
o DETECTION_TIMEOUT (0.5s): Maximum duration of a hardware address
verification step in the VERIFY state (TENT_LT from [<a href="./rfc6620" title=""FCFS SAVI: First-Come, First-Served Source Address Validation Improvement for Locally Assigned IPv6 Addresses"">RFC6620</a>])
o DATA_SNOOPING_INTERVAL: Minimum interval between two successive
EVE_DATA_UNMATCH events triggered by an attachment.
Recommended interval: 60s and configurable
o OFFLINK_DELAY: Period after a client is last detected before the
binding anchor is being removed. Recommended delay: 30s
<span class="h2"><a class="selflink" id="section-11" href="#section-11">11</a>. Security Considerations</span>
<span class="h3"><a class="selflink" id="section-11.1" href="#section-11.1">11.1</a>. Security Problems with the Data Snooping Process</span>
There are two security problems with the Data Snooping Process
(<a href="#section-7">Section 7</a>):
(1) The Data Snooping Process is costly, but an attacker can trigger
it simply through sending a number of data packets. To avoid
Denial-of-Service attacks against the SAVI device itself, the
Data Snooping Process MUST be rate limited. A constant
DATA_SNOOPING_INTERVAL is used to control the frequency. Two
Data Snooping Processes on one attachment MUST be separated by a
minimum interval time of DATA_SNOOPING_INTERVAL. If this value
is changed, the value needs to be large enough to minimize DoS
attacks.
(2) The Data Snooping Process may set up incorrect bindings if the
clients do not reply to the detection probes (<a href="#section-7.6.1">Section 7.6.1</a>).
An attack will pass the duplicate detection if the client
<span class="grey">Bi, et al. Standards Track [Page 48]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-49" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
assigned the target address does not reply to the detection
probes. The DHCP Leasequery procedure performed by the SAVI
device just tells whether or not the address is assigned in the
network. However, the SAVI device cannot determine whether the
address is just assigned to the triggering attachment from the
DHCPLEASEQUERY Reply.
<span class="h3"><a class="selflink" id="section-11.2" href="#section-11.2">11.2</a>. Securing Leasequery Operations</span>
In [<a href="./rfc4388" title=""Dynamic Host Configuration Protocol (DHCP) Leasequery"">RFC4388</a>] and [<a href="./rfc5007" title=""DHCPv6 Leasequery"">RFC5007</a>], the specific case of DHCP Leasequeries
originated by "access concentrators" is addressed extensively. SAVI
devices are very similar to access concentrators in that they snoop
on DHCP traffic and seek to validate source addresses based on the
results. Accordingly, the recommendations for securing leasequery
operations for access concentrators in <a href="./rfc4388#section-7">Section 7 of [RFC4388]</a> and
<a href="./rfc5007#section-5">Section 5 of [RFC5007]</a> MUST be followed when leasequeries are made
from SAVI devices. [<a href="./rfc5007" title=""DHCPv6 Leasequery"">RFC5007</a>] RECOMMENDS that communications between
the querier and the DHCP server are protected with IPsec. It is
pointed out that there are relatively few devices involved in a given
administrative domain (SAVI devices, DHCP relays, and DHCP servers)
so that manual configuration of keying material would not be overly
burdensome.
<span class="h3"><a class="selflink" id="section-11.3" href="#section-11.3">11.3</a>. Client Departure Issues</span>
After a binding is set up, the corresponding client may leave its
attachment point. It may depart temporarily due to signal fade or
permanently by moving to a new attachment point or leaving the
network. In the signal fade case, since the client may return
shortly, the binding should be kept momentarily, lest legitimate
traffic from the client be blocked. However, if the client leaves
permanently, keeping the binding can be a security issue. If the
binding anchor is a property of the attachment point rather than the
client, e.g., the switch port but not incorporating the MAC address,
an attacker using the same binding anchor can send packets using IP
addresses assigned to the client. Even if the binding anchor is a
property of the client, retaining binding state for a departed client
for a long time is a waste of resources.
Whenever a direct client departs from the network, a link-down event
associated with the binding anchor will be triggered. SAVI-DHCP
monitors such events and performs the following mechanism.
(1) Whenever a client with the Validating attribute leaves, a timer
of duration OFFLINK_DELAY is set on the corresponding binding
entries.
<span class="grey">Bi, et al. Standards Track [Page 49]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-50" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
(2) If a DAD Neighbor Solicitation / Gratuitous ARP request is
received that targets the address during OFFLINK_DELAY, the
entry MAY be removed.
(3) If the client returns on-link during OFFLINK_DELAY, cancel the
timer.
In this way, the bindings of a departing client are kept for
OFFLINK_DELAY. In cases of link flapping, the client will not be
blocked. If the client leaves permanently, the bindings will be
removed after OFFLINK_DELAY.
SAVI-DHCP does not handle the departure of indirect clients because
it will not be notified of such events. Switches supporting indirect
attachment (e.g., through a separate non-SAVI switch) SHOULD use
information specific to the client such as its MAC address as part of
the binding anchor.
<span class="h3"><a class="selflink" id="section-11.4" href="#section-11.4">11.4</a>. Compatibility with Detecting Network Attachment (DNA)</span>
DNA [<a href="./rfc4436" title=""Detecting Network Attachment in IPv4 (DNAv4)"">RFC4436</a>] [<a href="./rfc6059" title=""Simple Procedures for Detecting Network Attachment in IPv6"">RFC6059</a>] is designed to decrease the handover latency
after reattachment to the same network. DNA mainly relies on
performing a reachability test by sending unicast Neighbor
Solicitation / Router Solicitation / ARP Request messages to
determine whether a previously configured address is still valid.
Although DNA provides optimization for clients, there is insufficient
information for this mechanism to migrate the previous binding or
establish a new binding. If a binding is set up only by snooping the
reachability test message, the binding may be invalid. For example,
an attacker can perform the reachability test with an address bound
to another client. If a binding is migrated to the attacker, the
attacker can successfully obtain the binding from the victim.
Because this mechanism wouldn't set up a binding based on snooping
the DNA procedure, it cannot achieve perfect compatibility with DNA.
However, it only means the reconfiguration of the interface is slowed
but not prevented. Details are discussed as follows.
In Simple DNAv6 [<a href="./rfc6059" title=""Simple Procedures for Detecting Network Attachment in IPv6"">RFC6059</a>], the probe is sent with the source address
set to a link-local address, and such messages will not be discarded
by the policy specified in <a href="#section-8.2">Section 8.2</a>. If a client is reattached to
a previous network, the detection will be completed, and the address
will be regarded as valid by the client. However, the candidate
address is not contained in the probe. Thus, the binding cannot be
recovered through snooping the probe. As the client will perform
DHCP exchange at the same time, the binding will be recovered from
the DHCP Snooping Process. The DHCP Request messages will not be
filtered out in this case because they have link-local source
<span class="grey">Bi, et al. Standards Track [Page 50]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-51" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
addresses. Before the DHCP procedure is completed, packets will be
filtered out by the SAVI device. In other words, if this SAVI
function is enabled, Simple DNAv6 will not help reduce the handover
latency. If the Data-Snooping attribute is configured on the new
attachment of the client, the data-triggered procedure may reduce
latency.
In DNAv4 [<a href="./rfc4436" title=""Detecting Network Attachment in IPv4 (DNAv4)"">RFC4436</a>], the ARP Probe will be discarded because an
unbound address is used as the sender protocol address. As a result,
the client will regard the address under detection as valid.
However, the data traffic will be filtered. The DHCP Request message
sent by the client will not be discarded because the source IP
address field should be all zeros as required by [<a href="./rfc2131" title=""Dynamic Host Configuration Protocol"">RFC2131</a>]. Thus, if
the address is still valid, the binding will be recovered from the
DHCP Snooping Process.
<span class="h3"><a class="selflink" id="section-11.5" href="#section-11.5">11.5</a>. Binding Number Limitation</span>
A binding entry will consume certain high-speed memory resources. In
general, a SAVI device can afford only a quite limited number of
binding entries. In order to prevent an attacker from overloading
the resources of the SAVI device, a binding entry limit is set on
each attachment. The binding entry limit is the maximum number of
bindings supported on each attachment with the Validating attribute.
No new binding should be set up after the limit has been reached. If
a DHCP Reply assigns more addresses than the remaining binding entry
quota of each client, the message will be discarded and no binding
will be set up.
<span class="h3"><a class="selflink" id="section-11.6" href="#section-11.6">11.6</a>. Privacy Considerations</span>
A SAVI device MUST delete binding anchor information as soon as
possible (i.e., as soon as the state for a given address is back to
NO_BIND), except where there is an identified reason why that
information is likely to be involved in the detection, prevention, or
tracing of actual source-address spoofing. Information about hosts
that never spoof (probably the majority of hosts) SHOULD NOT be
logged.
<span class="h3"><a class="selflink" id="section-11.7" href="#section-11.7">11.7</a>. Fragmented DHCP Messages</span>
This specification does not preclude reassembly of fragmented DHCP
messages, but it also does not require it. If DHCP fragmentation
proves to be an issue, the issue will need to be specified and
addressed. (This topic is beyond the scope of this document.)
<span class="grey">Bi, et al. Standards Track [Page 51]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-52" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
<span class="h2"><a class="selflink" id="section-12" href="#section-12">12</a>. References</span>
<span class="h3"><a class="selflink" id="section-12.1" href="#section-12.1">12.1</a>. Normative References</span>
[<a id="ref-RFC826">RFC826</a>] Plummer, D., "Ethernet Address Resolution Protocol: Or
Converting Network Protocol Addresses to 48.bit Ethernet
Address for Transmission on Ethernet Hardware", STD 37,
<a href="./rfc826">RFC 826</a>, DOI 10.17487/RFC0826, November 1982,
<<a href="http://www.rfc-editor.org/info/rfc826">http://www.rfc-editor.org/info/rfc826</a>>.
[<a id="ref-RFC2119">RFC2119</a>] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", <a href="https://www.rfc-editor.org/bcp/bcp14">BCP 14</a>, <a href="./rfc2119">RFC 2119</a>,
DOI 10.17487/RFC2119, March 1997,
<<a href="http://www.rfc-editor.org/info/rfc2119">http://www.rfc-editor.org/info/rfc2119</a>>.
[<a id="ref-RFC2131">RFC2131</a>] Droms, R., "Dynamic Host Configuration Protocol",
<a href="./rfc2131">RFC 2131</a>, DOI 10.17487/RFC2131, March 1997,
<<a href="http://www.rfc-editor.org/info/rfc2131">http://www.rfc-editor.org/info/rfc2131</a>>.
[<a id="ref-RFC3315">RFC3315</a>] Droms, R., Ed., Bound, J., Volz, B., Lemon, T., Perkins,
C., and M. Carney, "Dynamic Host Configuration Protocol
for IPv6 (DHCPv6)", <a href="./rfc3315">RFC 3315</a>, DOI 10.17487/RFC3315, July
2003, <<a href="http://www.rfc-editor.org/info/rfc3315">http://www.rfc-editor.org/info/rfc3315</a>>.
[<a id="ref-RFC4388">RFC4388</a>] Woundy, R. and K. Kinnear, "Dynamic Host Configuration
Protocol (DHCP) Leasequery", <a href="./rfc4388">RFC 4388</a>,
DOI 10.17487/RFC4388, February 2006,
<<a href="http://www.rfc-editor.org/info/rfc4388">http://www.rfc-editor.org/info/rfc4388</a>>.
[<a id="ref-RFC4436">RFC4436</a>] Aboba, B., Carlson, J., and S. Cheshire, "Detecting
Network Attachment in IPv4 (DNAv4)", <a href="./rfc4436">RFC 4436</a>,
DOI 10.17487/RFC4436, March 2006,
<<a href="http://www.rfc-editor.org/info/rfc4436">http://www.rfc-editor.org/info/rfc4436</a>>.
[<a id="ref-RFC4861">RFC4861</a>] Narten, T., Nordmark, E., Simpson, W., and H. Soliman,
"Neighbor Discovery for IP version 6 (IPv6)", <a href="./rfc4861">RFC 4861</a>,
DOI 10.17487/RFC4861, September 2007,
<<a href="http://www.rfc-editor.org/info/rfc4861">http://www.rfc-editor.org/info/rfc4861</a>>.
[<a id="ref-RFC5007">RFC5007</a>] Brzozowski, J., Kinnear, K., Volz, B., and S. Zeng,
"DHCPv6 Leasequery", <a href="./rfc5007">RFC 5007</a>, DOI 10.17487/RFC5007,
September 2007, <<a href="http://www.rfc-editor.org/info/rfc5007">http://www.rfc-editor.org/info/rfc5007</a>>.
[<a id="ref-RFC5227">RFC5227</a>] Cheshire, S., "IPv4 Address Conflict Detection", <a href="./rfc5227">RFC 5227</a>,
DOI 10.17487/RFC5227, July 2008,
<<a href="http://www.rfc-editor.org/info/rfc5227">http://www.rfc-editor.org/info/rfc5227</a>>.
<span class="grey">Bi, et al. Standards Track [Page 52]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-53" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
[<a id="ref-RFC6059">RFC6059</a>] Krishnan, S. and G. Daley, "Simple Procedures for
Detecting Network Attachment in IPv6", <a href="./rfc6059">RFC 6059</a>,
DOI 10.17487/RFC6059, November 2010,
<<a href="http://www.rfc-editor.org/info/rfc6059">http://www.rfc-editor.org/info/rfc6059</a>>.
[<a id="ref-RFC6620">RFC6620</a>] Nordmark, E., Bagnulo, M., and E. Levy-Abegnoli, "FCFS
SAVI: First-Come, First-Served Source Address Validation
Improvement for Locally Assigned IPv6 Addresses",
<a href="./rfc6620">RFC 6620</a>, DOI 10.17487/RFC6620, May 2012,
<<a href="http://www.rfc-editor.org/info/rfc6620">http://www.rfc-editor.org/info/rfc6620</a>>.
<span class="h3"><a class="selflink" id="section-12.2" href="#section-12.2">12.2</a>. Informative References</span>
[<a id="ref-DHCPv6-SHIELD">DHCPv6-SHIELD</a>]
Gont, F., Liu, W., and G. Van de Velde, "DHCPv6-Shield:
Protecting Against Rogue DHCPv6 Servers", Work in
Progress, <a href="./draft-ietf-opsec-dhcpv6-shield-07">draft-ietf-opsec-dhcpv6-shield-07</a>, May 2015.
[<a id="ref-RFC2827">RFC2827</a>] Ferguson, P. and D. Senie, "Network Ingress Filtering:
Defeating Denial of Service Attacks which employ IP Source
Address Spoofing", <a href="https://www.rfc-editor.org/bcp/bcp38">BCP 38</a>, <a href="./rfc2827">RFC 2827</a>, DOI 10.17487/RFC2827,
May 2000, <<a href="http://www.rfc-editor.org/info/rfc2827">http://www.rfc-editor.org/info/rfc2827</a>>.
[<a id="ref-RFC3736">RFC3736</a>] Droms, R., "Stateless Dynamic Host Configuration Protocol
(DHCP) Service for IPv6", <a href="./rfc3736">RFC 3736</a>, DOI 10.17487/RFC3736,
April 2004, <<a href="http://www.rfc-editor.org/info/rfc3736">http://www.rfc-editor.org/info/rfc3736</a>>.
[<a id="ref-RFC7039">RFC7039</a>] Wu, J., Bi, J., Bagnulo, M., Baker, F., and C. Vogt, Ed.,
"Source Address Validation Improvement (SAVI) Framework",
<a href="./rfc7039">RFC 7039</a>, DOI 10.17487/RFC7039, October 2013,
<<a href="http://www.rfc-editor.org/info/rfc7039">http://www.rfc-editor.org/info/rfc7039</a>>.
[<a id="ref-RFC7341">RFC7341</a>] Sun, Q., Cui, Y., Siodelski, M., Krishnan, S., and I.
Farrer, "DHCPv4-over-DHCPv6 (DHCP 4o6) Transport",
<a href="./rfc7341">RFC 7341</a>, DOI 10.17487/RFC7341, August 2014,
<<a href="http://www.rfc-editor.org/info/rfc7341">http://www.rfc-editor.org/info/rfc7341</a>>.
<span class="grey">Bi, et al. Standards Track [Page 53]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-54" ></span>
<span class="grey"><a href="./rfc7513">RFC 7513</a> SAVI DHCP May 2015</span>
Acknowledgments
Special thanks to Jean-Michel Combes, Christian Vogt, Joel M.
Halpern, Eric Levy-Abegnoli, Marcelo Bagnulo Braun, Jari Arkko, Elwyn
Davies, Barry Leiba, Ted Lemon, Leaf Yeh, Ralph Droms, and Alberto
Garcia for careful review and evaluation comments on the mechanism
and text.
Thanks to Mark Williams, Erik Nordmark, Mikael Abrahamsson, David
Harrington, Pekka Savola, Xing Li, Lixia Zhang, Bingyang Liu, Duanqi
Zhou, Robert Raszuk, Greg Daley, John Kaippallimalil, and Tao Lin for
their valuable contributions.
Authors' Addresses
Jun Bi
Network Research Center, Tsinghua University
Beijing 100084
China
EMail: junbi@tsinghua.edu.cn
Jianping Wu
Dept. of Computer Science, Tsinghua University
Beijing 100084
China
EMail: jianping@cernet.edu.cn
Guang Yao
Network Research Center, Tsinghua University
Beijing 100084
China
EMail: yaoguang@cernet.edu.cn
Fred Baker
Cisco Systems
Santa Barbara, CA 93117
United States
EMail: fred@cisco.com
Bi, et al. Standards Track [Page 54]
</pre>
|