네트워크 CIDR의 붕괴!

Posted at 2009/04/15 21:48// Posted in study/network
대부분의 고객은 하나의 ISP 에 연결되어있다. KT만 쓴다던지, 데이콤만 쓴다던지 하는 것이다.이것을 싱글호밍(Single Homing)이라고 부른다. 대개는 ISP 가 확보한 주소를 받아서 사용한다.

그런데 일부 학교나 연구소는 ISP가 확보한 주소가 아닌 자체적인 주소를 소유하고 있는 경우가 있다. ISP는 전혀 다른 주소이므로 CIDR 을 사용해 결집(aggregation)이 안된다.

어떤 고객은 연결된 ISP 와의 접속이 사고로 중단되었을때  비스가 중지되는 위기 상황에 대비하기 위해 여러개의 ISP와 연결하는 경우가 있다. 이것을 멀티호밍(Multihoming)이라고 부른다.

멀티호밍 상황1)
ISP1 은 xxx.xxx.0.0/3 을 관리하고
ISP2 는 xxx.yyy.0.0/13 을 관리한다
XXX 는 xxx.xxx.0.0/18 을 관리하며
ISP1 과 ISP2 는 NAP 으로 연결되어있다.

문제의 고객 xxx.xxx.0.0/20 이란 주소를 사용하고 있으며 ISP1 과 ISP2 에 연결되어있다.
문제의 고객에게 들어와야하는 패킷은 가장 긴주소 매칭에 의해 XXX 로 흘러가게 되어 전혀 수신을 못하게 된다.

멀티호밍 상황2)
ISP1 은 xxx.xxx.0.0/3 을 관리하고
ISP2 는 xxx.yyy.0.0/13 을 관리한다.
ISP1 과 ISP2 는 NAP 으로 연결되어있다.

ISP1 과 ISP2 에 둘다 연결된 고객은 ISP1 과의 접속이 갑자기 중단되면 ISP2 를 통해서
인터넷을 사용할 수 있어야 하지만 패킷은 ISP1로만 보내려고 하므로 패킷을 받지 못하게 된다.



모든 해결책은 최상위 라우터에
고객의 상세한 주소를 직접 업데이트시키는 수밖에 없다.

결국 CIDR의 핵심은 결집(aggregation)은 깨졌으며
CIDR 의 붕괴로 라우팅 테이블은 다시 증가하게 되었다.





이올린에 북마크하기(0) 이올린에 추천하기(0)
2009/04/15 21:48 2009/04/15 21:48

네트워크 CIDR 의 위기!

Posted at 2009/04/15 21:04// Posted in study/network
CIDR 은 쉽고 간단한 해결 방법이었지만, 시간이 흐름에 따라 한두개씩 문제점이 발생하기 시작했다.

1. Fragment 문제
xxx.xxx.xxx.xxx/17 은 C클래스(xxx.xxx.xxx.xxx/24) 7개(24-17=7)의 모음이다.

하지만 7개는 매우 이상적인 숫자로 현실에서는 IP 를 더 이상 사용하지 않는 경우로 인해 구멍이 생겨 7개보다 적은 숫자의 C클래스들만 존재하게 된다. 전체적으로 보면 512개 주소가 남았다 하더라도 연속적이지 않으면 300개의 주소를 사용은 불가능하다.

2. 중복 주소 문제
R(a) 는 xxx.xxx.1.0/24 를 담당하고
R(b) 는 xxx.xxx.0.0/16 를 담당한다
R(c) 는 R(a) 와 R(b)의 상위에 있다

R(c) 라우팅 테이블에는 R(a) 와 R(b)에 해당하는 네트워크 주소가 들어있다.
- R(a) : xxx.xxx.0.0/16
- R(b) : xxx.xxx.1.0/24

문제는 xxx.xxx.1.1 이란 주소가 들어왔을때 발생한다.
/16 로 마스킹하면 xxx.xxx.0.0 이 되어 R(a)의 xxx.xxx.0.0 에 일치하고
/24 로 마스킹해도 xxx.xxx.1.0 이 되어 R(b)의 xxx.xxx.1.0 에 일치한다

양쪽도 일치하므로 어느쪽으로 나가야 할지 혼란에 빠지게 된다.

해결책은 네트워크 주소가 좀더 일치하는 쪽으로 보내는 것이다.

s: xxx.xxx.1.0
a: xxx.xxx.0.0 (x)
b: xxx.xxx.1.0 (o)

R(b) 쪽이 좀더 많이 일치하므로 R9b)쪽으로 보내게 된다


3. 루프 발생
R(a) 는 xxx.xxx.0.0/24 를 담당하고
R(b) 는 xxx.xxx.1.0/24 를 담당하고
R(c) 는 R(a)와 R(b)의 상위에 있는 라우터로 xxx.xxx.0.0/23 을 담당한다.
R(d) 는 R(c) 와 연결된 외부 라우터이다.

R(d)에서 xxx.xxx.1.1를 목적 주소로 패킷이 도착해
R(c)로 전송했는데 불행히도 R(c) 와 R(b) 의 접속이 끊어졌다.

이때 R(c) 의 라우팅 테이블은 다음과 같다
xxx.xxx.0.0/24 R(a)로 보내라
xxx.xxx.0.0/23 R(d)로 보내라

도착한 패킷의 목적 주소인 xxx.xxx.1.1 에 가장 일치하는 주소는
"xxx.xxx.0.0/23 R(d)로 보내라" 이므로 R(c) 는 R(d)로 패킷을 돌려보낸다.
패킷을 받은 R(d)는 원래 보내던 것처럼 다시 R(c)로 보내게 되고
패킷은 무한반복에 빠진다.

해결책은 패킷을 받은 라우터는 자신이 aggregated 한 경로보다 낮은 곳으로는 보낼 수 없게 하는 것이다. /13 은 /10 으로 갈 수 없다.

시스코 라우터는 디폴트(Null0)이라는 쓰레기통이 존재해 루프 현상은 없지만 패킷이 전송도중 사라지는 블랙홀 현상이 발생한다.

인터넷상 최상위 라우터는 받은 패킷을 어디론가 보내야 하므로 디폴트가 없다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
2009/04/15 21:04 2009/04/15 21:04

네트워크 CIDR

Posted at 2009/04/15 20:53// Posted in study/network
인터넷이 발달하면서 인터도메인에서 라우팅해야할 테이블 엔트리 개수가 기하급수적으로 늘어났다. 라우팅 테이블이 커질수록 라우팅 처리시간이 오래걸리게 된다. 하지만 네트워크 프로세서내의 하이스피드 메모리 크기는 무한정으로 커질 수 가 없다. 캐쉬는 크기가 작을 수록 빠르고, 커질 수록 느려지기 때문이다.

C클래스의 개수는 2의 24승, 100만개정도이나 당시 라우터의 한계는 10만개 정도였고,
라우팅 테이블 크기를 줄이기 위한 방법으로 CIDR(Classless InterDomain Routing)이 등장하게 되었다.

대부분의 인터넷 서비스는 ISP 하의 계층적인 구조로 이루어져있다. 인접한 주소대의 네트워크를 묶어 하나의 네트워크 주소로 만드는 것을 반복하면 상위로 갈수록 네트워크 주소가 매우 간단해진다.

R(a) xxx.xxx.0.0/24
R(b) xxx.xxx.1.0/24
R(c) xxx.xxx.2.0/24
R(d) xxx.xxx.3.0/24

a와 b를 묶어 R(x) xxx.xxx.0.0/23 으로 만들고
c와 d를 묶어 R(y) xxx.xxx.2.0/23 으로 만든다

다시 x 와 y 를 묶어 R(z) xxx.xxx.0.0/22 를 만든다

최상단 라우터 R(z)는 단 하나의 xxx.xxx.0.0/22 주소만 외부에 있는 라우터에게 전달하면 된다.
이로인해 라우팅 테이블의 엔트리 개수는 대폭 감소하게 되어 인터넷은 계속 정상적으로 운영될 수 있게 되었다.

B클래스를 사용하지 않고 C클래스를 묶어서 사용한다.
사실상 클래스 개념은 더 이상 의미가 없어지게 되었으며,
그래서 클래스 없는(Classless) 인터 도메인 라우팅이라고 부른다.

참고)
네트워크 주소는 net 주소와 host 주소로 나누어져 있으며
host주소를 나누는 것을 서브넷이라 하고
net주소를 나누는 것을 슈퍼넷이라고 부른다

이올린에 북마크하기(0) 이올린에 추천하기(0)
2009/04/15 20:53 2009/04/15 20:53