대부분의 고객은 하나의 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 의 붕괴로 라우팅 테이블은 다시 증가하게 되었다.
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)이라는 쓰레기통이 존재해 루프 현상은 없지만 패킷이 전송도중 사라지는 블랙홀 현상이 발생한다.
인터넷상 최상위 라우터는 받은 패킷을 어디론가 보내야 하므로 디폴트가 없다.


python 을 좋아하는 게임 프로그래머