IPv6에서 가장 긴 준비된 일치를 구현하는 가장 좋은 방법은 무엇입니까?
문제
IPv6 라우터는 여러 경로를 첫 번째로 저장합니다. n
주소의 비트. 2000 년에 연구원들은 1500 개의 IPv6 노선에서 14 개의 독특한 접두사 길이 만 발견했습니다. 들어오는 패킷은 가장 긴 접두사 일치를 기반으로 다른 발신 포트로 라우팅되므로 처음 8 비트의 패킷 X가 8 비트 경로와 일치하지만 동일한 패킷의 첫 48 비트가 48 비트 경로와 일치하는 경우 라우터는 다음을 선택해야합니다. 48 비트 경로.
내 라우터는 너무 많은 패킷을 처리하여 라우팅 테이블에 대한 메모리 조회 속도가 제한 요소입니다. 내 라우팅 테이블에서 가장 긴 일치 접두사를 찾는 좋은 알고리즘은 무엇입니까?
다른 팁
나는 a를 찾았다 멋진 종이 이 주제에 대해 블룸 필터를 사용하여 가장 긴 접두사 일치.
추상적인: LPM (Longe Prefix Matching)에 블룸 필터를 사용하기 위해 알고있는 첫 번째 알고리즘을 소개합니다. 이 알고리즘은 접두사 길이로 정렬 된 접두사 세트의 주소 접두사 멤버쉽을 결정하기 위해 멤버십 쿼리의 효율적인 데이터 구조 인 Bloom Filters에서 병렬 쿼리를 수행합니다. 우리는 인터넷 프로토콜 (IP) 라우팅 조회 에이 알고리즘을 사용하면 TCAM 기반 접근 방식보다 성능과 확장 성을 더 잘 제공하는 검색 엔진이 나타납니다.
그들의 기본 아이디어는 프로세서의 임베디드 SRAM (FAST)에 저장된 블룸 필터를 사용하여 느리게하지만 더 풍부한 메모리에서 접두사 해시 테이블 조회를 안내하는 것입니다. IPv4 케이스의 경우 대부분의 라우팅 테이블 접두사가 24 비트라는 사실을 설명하기 위해 알고리즘을 조정합니다. IPv6의 경우 1550 BGP 항목에서 14 개의 고유 한 접두사 길이 만 발견했습니다.
여분의 기억이 있습니까?
다음과 같은 구조를 만드십시오.
typedef struct node {
struct node* table[256];
Port_type port;
} Node;
Node* root[256];
이제 당신은 다음과 같은 조회를 할 수 있습니다.
Node* table = root;
for (i=0; table != NULL; i++)
{
node = table[address_byte[i]];
table = node->table;
}
destination = node->port;
제휴하지 않습니다 StackOverflow