IPv6에서 가장 긴 준비된 일치를 구현하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/511903

  •  21-08-2019
  •  | 
  •  

문제

IPv6 라우터는 여러 경로를 첫 번째로 저장합니다. n 주소의 비트. 2000 년에 연구원들은 1500 개의 IPv6 노선에서 14 개의 독특한 접두사 길이 만 발견했습니다. 들어오는 패킷은 가장 긴 접두사 일치를 기반으로 다른 발신 포트로 라우팅되므로 처음 8 비트의 패킷 X가 8 비트 경로와 일치하지만 동일한 패킷의 첫 48 비트가 48 비트 경로와 일치하는 경우 라우터는 다음을 선택해야합니다. 48 비트 경로.

내 라우터는 너무 많은 패킷을 처리하여 라우팅 테이블에 대한 메모리 조회 속도가 제한 요소입니다. 내 라우팅 테이블에서 가장 긴 일치 접두사를 찾는 좋은 알고리즘은 무엇입니까?

도움이 되었습니까?

해결책

a를 사용하십시오 트리 또는 a 래디 틱 트리 "표준"접두사를 저장합니다. 접미사 트리/어레이는 불필요한 과잉 사망입니다. 그들은 사이의 경기를 찾는 데 사용됩니다 디픽스 (모든 문자열이 접미사의 접두사라는 사실을 사용하고, 여러 줄 사이의 일치를 찾으려면 접두사 사이에도가 아니라 서로 연결하십시오).

다른 팁

나는 a를 찾았다 멋진 종이 이 주제에 대해 블룸 필터를 사용하여 가장 긴 접두사 일치.

추상적인: LPM (Longe Prefix Matching)에 블룸 필터를 사용하기 위해 알고있는 첫 번째 알고리즘을 소개합니다. 이 알고리즘은 접두사 길이로 정렬 된 접두사 세트의 주소 접두사 멤버쉽을 결정하기 위해 멤버십 쿼리의 효율적인 데이터 구조 인 Bloom Filters에서 병렬 쿼리를 수행합니다. 우리는 인터넷 프로토콜 (IP) 라우팅 조회 에이 알고리즘을 사용하면 TCAM 기반 접근 방식보다 성능과 확장 성을 더 잘 제공하는 검색 엔진이 나타납니다.

그들의 기본 아이디어는 프로세서의 임베디드 SRAM (FAST)에 저장된 블룸 필터를 사용하여 느리게하지만 더 풍부한 메모리에서 접두사 해시 테이블 조회를 안내하는 것입니다. IPv4 케이스의 경우 대부분의 라우팅 테이블 접두사가 24 비트라는 사실을 설명하기 위해 알고리즘을 조정합니다. IPv6의 경우 1550 BGP 항목에서 14 개의 고유 한 접두사 길이 만 발견했습니다.

가장 긴 일반적인 접두사를 계산하는 가장 효율적인 방법은 일반적으로 접미사 트리 또는 a 접미사 배열 (런타임은 전처리 후 접두사 길이에 선형입니다).

여분의 기억이 있습니까?

다음과 같은 구조를 만드십시오.

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;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top