Cisco Express Forwarding

Материал из Xgu.ru

(Перенаправлено с CEF)
Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.


Cisco Express Forwarding (CEF) — технология высокоскоростной маршрутизации/коммутации пакетов, использующаяся в маршрутизаторах и коммутаторах третьего уровня фирмы Cisco Systems, и позволяющая добиться более быстрой и эффективной обработки транзитного трафика.

Функционал, который поддерживает CEF:

  • QoS
  • ACL
  • Zone Based Firewall
  • NAT
  • Netflow
  • IPSec
  • GRE
  • PBR

CEF не работает в следующих случаях:

  • Включен ACL Logging (в конце ACL добавлено слово log, например deny ip any any log)
  • Пакеты предназначены для самого маршрутизатора/коммутатора.
  • Нет L2 Adjacency.

Содержание

[править] FIB

Forwarding Information Base (FIB) или CEF Table — таблица для быстрой пересылки пакетов. Строится на основе Routing Table и Adjacency Table. Adjacency Table в свою очередь строится на основе ARP Table. Различают 2 вида CEF - Software CEF (можно увидеть на ISR G1/G2 и 7200) и Hardware CEF (можно увидеть на 6500/7600, Nexus 7000 и ASR9000). Hardware CEF - это когда построенная FIB хранится в быстрой памяти TCAM (Ternary Content Addressable Memory). Итого FIB - это таблица, содержащая маршрут, исходящий интерфейс и L2 destination.


Note-icon.gif

Вывод и параметры команд, которые относятся к CEF, могут отличаться в зависимости от версии IOS и модели оборудования.

Но, как правило, команды просмотра начинаются на show cef, show ip cef, show adjacency

[править] Adjacency Table

R1#show adjacency detail
Protocol Interface                 Address
IP       FastEthernet0/0           100.0.0.2(7)
                                   0 packets, 0 bytes
                                   epoch 0
                                   sourced in sev-epoch 0
                                   Encap length 14
                                   CA0111480008CA00114800080800
                                   ARP

Строка CA0111480008CA00114800080800 читается следующим образом:

  • CA0011480008 - это source мак-адрес интерфейса, через который будет отправляться пакет на 100.0.0.2:
R1#sh int fa 0/0 | i addr
  Hardware is i82543 (Livengood), address is ca00.1148.0008 (bia ca00.1148.0008)
  Internet address is 100.0.0.1/30
  • CA0111480008 - это destenation мак-адрес ca01.1148.0008:
R2#sh int fa 0/0 | i addr
  Hardware is i82543 (Livengood), address is ca01.1148.0008 (bia ca01.1148.0008)
  Internet address is 100.0.0.2/30
  • 0800 - это EtherType (в данному случае у нас это IPv4 0x0800).

[править] CEF epoch

В FIB и adjacency table есть понятие версии, которая называется epoch. Диапазон значений epoch от 0 до 255.

Значение epoch увеличивается, при инициации перестроения таблицы. Это можно сделать вручную, очистив информацию CEF.

На практике epoch используется, например, при переключении между supervisor engine в технологии NSF:

  1. Во время переключения, в таблицах CEF увеличивается значение epoch.
  2. После того как протоколы маршрутизации обновили информацию в RIB, соответственно обновляются и записи в таблицах CEF. Обновленным записям назначается новое значение epoch.
  3. После завершения обновления, все записи в FIB и adjacency table, у которых значение epoch меньше текущего, удаляются.

[править] Просмотр значения epoch для FIB

Например, текущее значение epoch равно 0:

R3#sh ip cef epoch 
VRF: Default
 Database epoch:        0 (28 entries at this epoch)

При корректной работе, значение epoch для всех префиксов должно быть равным этому глобальному значению. Отображение значения epoch для конкретного префикса на примере маршрута по умолчанию:

R3#sh ip cef 0.0.0.0 0.0.0.0 detail 
0.0.0.0/0, epoch 0, flags default route
  recursive via 70.1.1.2
    attached to Ethernet0/0

Когда в FIB добавляется новая запись, то значение epoch для нее устанавливается равным текущему глобальному значению. То есть, значение epoch не увеличивается, когда добавляется какой-то префикс в FIB:

R3#sh ip cef 200.0.0.0 255.255.255.0
%Prefix not found

R3(config)#ip route 200.0.0.0 255.255.255.0 10.0.12.10

R3#sh ip cef 200.0.0.0 255.255.255.0 detail 
200.0.0.0/24, epoch 0
  recursive via 10.0.12.10
    recursive via 10.0.12.0/24
      attached to Ethernet0/2

[править] Обновление значения epoch для FIB

С помощью команды clear cef table ipv4 можно вручную обновить FIB и, соответственно, изменится значение epoch(в некоторых IOS также может быть команда clear ip cef epoch full):

R3#sh ip cef epoch 
VRF: Default
 Database epoch:        0 (30 entries at this epoch)

R3#clear cef table ipv4

R3#sh ip cef epoch     
VRF: Default
 Database epoch:        1 (30 entries at this epoch)

[править] Просмотр значения epoch для adjacency table

Суммарная информация об adjacency table отображает и значение epoch:

R3#sh adjacency summary 
Adjacency table has 5 adjacencies:
  each adjacency consumes 292 bytes (0 bytes platform extension)
  4 complete adjacencies
  1 incomplete adjacency
  5 adjacencies of linktype IP
    4 complete adjacencies of linktype IP
    1 incomplete adjacency of linktype IP
    0 adjacencies with fixups of linktype IP
    4 adjacencies with IP redirect of linktype IP
    0 adjacencies post encap punt capable of linktype IP 

Adjacency database high availability:
  Database epoch:        3
  Epoch statistics:
    Epoch 2: 1 entry
    Epoch 3: 4 entries 

Adjacency manager summary event processing:
 Summary events epoch is 0
 Summary events queue contains 0 events (high water mark 2 events)

В текущей таблице adjacency есть 4 записи со значением epoch 3, которое соответствует глобальной версии таблицы. И одна запись со значением 2.

Также в суммарной информации видно, что одна запись в состоянии incomplete: 1 incomplete adjacency. Посмотрим более подробную информацию о записях в таблице adjacency:

R3#sh adjacency detail  
Protocol Interface                 Address
IP       Ethernet0/0               70.1.1.2(10)
                                  0 packets, 0 bytes
                                  epoch 3
                                  sourced in sev-epoch 0
                                  Encap length 14
                                  AABBCC006800AABBCC0067000800
                                  ARP
IP       Ethernet0/1               10.0.13.2(13)
                                  0 packets, 0 bytes
                                  epoch 3
                                  sourced in sev-epoch 0
                                  Encap length 14
                                  AABBCC006510AABBCC0067100800
                                  ARP
IP       Ethernet0/2               10.0.12.2(13)
                                  0 packets, 0 bytes
                                  epoch 3
                                  sourced in sev-epoch 0
                                  Encap length 14
                                  AABBCC006610AABBCC0067200800
                                  ARP
IP       Ethernet0/2               10.0.12.10(7) (incomplete)
                                  0 packets, 0 bytes
                                  epoch 2
                                  sourced in sev-epoch 0
                                  punt (rate-limited) packets
                                  no src set
IP       NVI0                      point2point(2)
                                  0 packets, 0 bytes
                                  epoch 3
                                  sourced in sev-epoch 0
                                  Encap length 14
                                  4141414142424242434343434444
                                  P2P-ADJ

В более подробном выводе можно увидеть значение epoch для каждой записи в adjacency table. А также теперь мы видим у какой записи значение epoch 2:

IP       Ethernet0/2               10.0.12.10(7) (incomplete)
                                  0 packets, 0 bytes
                                  epoch 2
                                  sourced in sev-epoch 0
                                  punt (rate-limited) packets
                                  no src set

Эта запись находится в состоянии incomplete, так как не известно какой MAC-адрес соответствует next-hop 10.0.12.10.

[править] Обновление значения epoch для adjacency table

R3#clear adjacency 
R3#sh adjacency summary 
...
  Database epoch:        3
  Epoch statistics:
    Epoch 2: 1 entry
    Epoch 3: 4 entries
...

R3#clear adjacency               
R3#sh adjacency summary
...
  Database epoch:        4
  Epoch statistics:
    Epoch 3: 1 entry
    Epoch 4: 4 entries
...

[править] Информация о таблице CEF

router1#sh ip cef tree 
Table Default tree information:
 MTRIE/RTREE storing IPv4 addresses
 42 entries (42/0 fwd/non-fwd)
 Forwarding tree:
  Forwarding lookup routine: IPv4 mtrie 8-8-8-8 optimized
  396 inserts, 354 deletes
  8-8-8-8 stride pattern
  short mask protection enabled for <= 4 bits without process suspension
  42 leaves (1176 bytes), 26 nodes (27040 bytes)
  29872 total bytes
  leaf ops: 396 inserts, 354 deletes
  leaf ops with short mask protection: 4 inserts, 2 deletes
  per-prefix length stats: lookup off, insert off, delete off
  refcounts: 6787 leaf, 6656 node
  node pools:
   pool[C/8 bits]: 26 allocated (0 failed), 27040 bytes
 Non-Forwarding tree:
  750 inserts, 750 deletes
  0 leaves (0 bytes), 0 nodes (0 bytes)
  0 total bytes

[править] Просмотр информации

dyn1# sh ip cef
Prefix              Next Hop             Interface
0.0.0.0/0           drop                 Null0 (default route handler entry)
0.0.0.0/32          receive
192.168.1.0/24      attached             Null0
192.168.1.0/30      attached             FastEthernet1/0
192.168.1.0/32      receive
192.168.1.1/32      receive
192.168.1.2/32      192.168.1.2          FastEthernet1/0
192.168.1.3/32      receive
192.168.1.4/30      192.168.1.2          FastEthernet1/0
192.168.1.8/30      192.168.1.2          FastEthernet1/0
192.168.6.0/24      192.168.1.2          FastEthernet1/0
192.168.7.0/24      192.168.1.2          FastEthernet1/0
192.168.8.0/24      192.168.1.2          FastEthernet1/0
192.168.9.0/24      192.168.1.2          FastEthernet1/0
192.168.10.0/24     192.168.1.2          FastEthernet1/0
192.168.11.0/24     192.168.1.2          FastEthernet1/0
192.168.13.0/24     attached             FastEthernet2/0
192.168.13.0/32     receive
192.168.13.1/32     receive
192.168.13.255/32   receive
192.168.14.0/24     192.168.1.2          FastEthernet1/0
192.168.15.0/24     192.168.1.2          FastEthernet1/0
192.168.20.0/24     attached             FastEthernet0/0
192.168.20.0/32     receive
192.168.20.1/32     receive
192.168.20.8/32     192.168.20.8         FastEthernet0/0
192.168.20.9/32     192.168.20.9         FastEthernet0/0
192.168.20.255/32   receive
192.168.21.0/24     192.168.1.2          FastEthernet1/0
192.168.111.0/24    192.168.1.2          FastEthernet1/0
192.168.112.0/24    192.168.1.2          FastEthernet1/0
197.1.0.0/16        attached             Null0
197.1.1.0/24        attached             Loopback0
197.1.1.0/32        receive
197.1.1.1/32        receive
197.1.1.255/32      receive
197.1.8.0/24        attached             Loopback1
197.1.8.0/32        receive
197.1.8.1/32        receive
197.1.8.255/32      receive
199.1.1.0/24        attached             Loopback3
199.1.1.0/32        receive
199.1.1.1/32        receive
199.1.1.255/32      receive
199.2.2.0/24        192.168.1.2          FastEthernet1/0
199.2.2.2/32        192.168.1.2          FastEthernet1/0
199.3.3.0/24        192.168.1.2          FastEthernet1/0
199.3.3.3/32        192.168.1.2          FastEthernet1/0
199.4.4.0/24        192.168.1.2          FastEthernet1/0
199.4.4.4/32        192.168.1.2          FastEthernet1/0
224.0.0.0/4         drop
224.0.0.0/24        receive
255.255.255.255/32  receive
dyn1# show adjacency            
Protocol Interface                 Address
IP       FastEthernet1/0           192.168.1.2(43)
IP       FastEthernet0/0           192.168.20.8(5)
IP       FastEthernet0/0           192.168.20.9(5)

dyn1# show adjacency detail     
Protocol Interface                 Address
IP       FastEthernet1/0           192.168.1.2(43)
                                   57 packets, 7963 bytes
                                   00163E010101
                                   00163E01001D0800
                                   ARP        03:04:50  
                                   Epoch: 0
IP       FastEthernet0/0           192.168.20.8(5)
                                   9 packets, 378 bytes
                                   00163E0107C1
                                   00163E0100010800
                                   ARP        01:40:02  
                                   Epoch: 0
IP       FastEthernet0/0           192.168.20.9(5)
                                   0 packets, 0 bytes
                                   00163E0108C1
                                   00163E0100010800
                                   ARP        01:41:43  
                                   Epoch: 0

Очистить Cisco Express Forwarding adjacency table:

clear adjacency
dyn1#show cef interface  fa0/0
FastEthernet0/0 is up (if_number 3)
  Corresponding hwidb fast_if_number 3
  Corresponding hwidb firstsw->if_number 3
  Internet address is 192.168.20.1/24
  ICMP redirects are always sent
  Per packet load-sharing is disabled
  IP unicast RPF check is disabled
  Inbound access list is not set
  Outbound access list is not set
  Hardware idb is FastEthernet0/0
  Fast switching type 1, interface type 18
  IP CEF switching enabled
  IP Fast switching turbo vector
  IP Normal CEF switching turbo vector
  Input fast flags 0x0, Input fast flags2 0x0, Output fast flags 0x0, Output fast flags2 0x0
  ifindex 1(1)
  Slot 0 Slot unit 0 Unit 0 VC -1
  Transmit limit accumulator 0x0 (0x0)
  IP MTU 1500

На коммутаторе (hardware Layer 3-switching adjacency node):

show mls cef adjacency
router(config-if)# ip load-sharing <per-packet|per-destination>

[править] Балансировка нагрузки

Проверка балансировки нагрузки:

R1#show ip cef exact-route 192.168.1.1 192.168.10.5

[править] Дополнительная информация

Балансировка нагрузки: