시작 끝 ip그룹을 만들고 단일ip에 대한 그룹 찾는 로직 구현 방법
안녕하세요
아이피가 해당하는 그룹을 찾는 로직을 만들고 있는데요
시작 ip와 끝 ip 가 존재 하고 시작ip 끝ip 폭이 작은게 우선순위가 높도록 만들려고 하고 있습니다.
바이너리 서치를 이용해서 해볼까 했는데 안 잘되네요..
아래 와 같은 그룹이 존재 한다고 하면 단일 대역(25~25) 이런건 바로 찾을수 있겠는데
단일 대역에 존재 하지 않은 (211)은 멀티 대역(1~255)[1] 에다가 넣어야 하는데 풀서치 말고
루프 횟수를 줄여서 찾을수 있는 방법이 있을까요??
ID start ip end ip
[1] 192.168.0.1 192.168.0.255
[2] 192.168.0.7 192.168.0.7
[3] 192.168.0.25 192.168.0.25
[4] 192.168.0.80 192.168.0.81
[5] 192.168.0.84 192.168.0.84
[6] 192.168.0.85 192.168.0.85
[7] 192.168.0.87 192.168.0.87
[8] 192.168.0.88 192.168.0.89
[9] 192.168.0.91 192.168.0.91
[10] 192.168.0.216 192.168.0.216
[11] 192.168.0.220 192.168.0.224
[12] 192.168.0.225 192.168.0.225
[13] 192.168.20.1 192.168.20.100
모든 IPv4 주소들은 16진 값에 대응합니다.
모든 IPv4 주소들은 16진 값에 대응합니다. 점으로 구분된 4개의 숫자를 각각 16진수로 변환한 다음 그걸 이어 붙이면 16진 IP가 됩니다. 예를 들어 192.168.0.1이라면 c0, a8, 0, 1이므로 0xc0a80001이 됩니다. 이렇게 변환한 값으로 찾는 게 쉬울 수도 있습니다.
트리를 이용해서 구현하면 되지 싶습니다.1.
트리를 이용해서 구현하면 되지 싶습니다.
1. 네트워크 주소 = prefix + postfix로 표현합니다.
2. 트리의 각 노드는 네트워크를 의미합니다.
3. 서브 네트워크인 경우 자식 노드로 표현합니다.
즉, 루트-> 리프노드로 갈 수록 네트워크 주소(prefix)의 길이가 길어집니다.
==================
탐색과정:
1. 루트 노드로 부터 시작합니다.
2. 주어진 노드에서 prefix가 같은 자식 노드를 선택합니다.
이때 주어진 노드에서 prefix가 같은 자식 노드는 유일합니다.
왜냐하면 prefix가 동일한 또 다른 노드가 존재할 경우
가정3에서 주어진 노드의 자식-자식이 되어야 하기 때문입니다.
(예를 들면, 192.180.1.0/25는 반드시 192.180.0.0/24 노드의 자식노드이어야 합니다.)
3. 2번 과정을 반복하여 더 이상 진행할 수 없으면
주어진 노드가 네트워크 주소(prefix)가 가장 긴 네트워크 입니다.
4. 만약 루트에서 더 이상 진행할 수 없으면 주어진 주소가 포함 될 수 있는
네트워크가 테이블에 존재하지 않습니다. 이 경우 Default gateway로 가야 할 것입니다.
댓글 달기