ip table에서 rule을 검색하는 방식이 linear search인가요 ? BP
글쓴이: j8508 / 작성시간: 화, 2004/05/04 - 10:33오전
오늘 벌써 두개째 질문을 올리는 거미입니다.
요즘 열심히 ip_table을 갖고 놀기 위한 공부를 하고 있습니다.
그런데 ip_table의 소스를 분석하던 중 의문시 되는 사항이 있어서 질문 올립니다.
제가 처음에 풍설로 듣기에는 ip_table은 bsd 계열로부터 발전된 것이기 때문에 사용자에 의해 정의된 규칙으로부터 BPF 알고리즘을 적용해 drop/accept 여부를 판단한다고 들었습니다.
그런데, 관련 소스를 살펴보니...
특정 체인에 대해 선택 된 이후에는 linear search인것 같아 혼란스럽습니다.
소스 ip_tables.c에 보면
매치를 위해 아래와 같은 루틴이 있습니다.
do {
......
if (IPT_MATCH_ITERATE(e, do_match, *pskb, in, out, offset, protohdr, datalen, &hotdrop) != 0)
goto no_match;
......
no_match:
e = (void *)e + e->next_offset;
}
} while (!hotdrop);
위의 코드를 봐서는 특정 체인에 대해 루프를 돌면서 linear search를 하고,
또, 체인들에 대한 이동도 linear search를 하는 구조 같습니다...
어떤것이 정확한 것인지 알려주세요....
Forums:
linear 검색이 맞는걸루 알고 있습니다.
왜냐면... 룰은 우선순위가 있기 때문에 순차로 검색해서 패킷의 목적지를 최종 판단할 수 밖에 없습니다.
예를
1 : a.a.a.0/24 -> b.b.b.b = deny
2 : a.a.a.1/32 -> b.b.b.b = accept
1번 룰은 2번 룰보다 ip 포함범위가 큽니다.
a.a.a.1 -> b.b.b.b 로 가는 패킷이 있다면 deny 되겠죠....
이런식으로 순차 비교를 해나가면서 최종 패킷의 운명을 결정하게 됩니다.
만약 tree 방식이라든가 다차원 검색방식으로 바꿀려면 위의 우선순위를 반영하도록 고쳐야 겠죠.. (예를 들어 범위가 교차되는 부분은 순차검색으로 그렇지 않는 부분은 tree 방식으로...)
그럼 ^^
혹시나 했는데, 역시 그렇군요.. T-T
혹시나 했는데 역시 linear Search군요... T-T
아무튼, 답변 감사합니다. ^^
댓글 달기