본문 바로가기

Coding Note

[Network] Delivery & Forwarding

◇Delivery
네트워크 레이어는 이보다 하위의 레이어에서 패킷이 움직이는걸 다루는 역할을 하는데, 이때 패킷을 다루는 것을 패킷전달(packet delivery)라고 한다.
 패킷전달에는 두 가지 방식이 있는데, indirect와 direct delivery방식이 있다. indirect 전달방식은 라우터를 거쳐 전달되는 것을 의미하고, direct 전달방식은 같은 네트워크 상에서 패킷을 전달하는 것을 의미한다. 조금 혼동이 있을 수 있겠지만, 외부 라우터를 거치다가 마지막 해당 네트워크의 라우터(R)에서 호스트(H)로 가는  R-H의 전달방식도 direct 전달로 취급한다. (마찬가지로 맨 처음 호스트에서 라우터로갈 때의 전달또한 direct이다.)
정리하면, 
 Direct Delivery : Host to Host || Router to Host(To the rest of the Internet)
 Indirect Delivery : Router to Router

◇Forwarding 
목적지로 향하는 길 위에 무언가를 올려놓는 것을 forwarding이라고 한다. Internet 에서는 비슷하지만 조금 다른 개념으로, 다음 홉(Next hop)까지 패킷을 전달하는 행위를 forwarding이라고 부른다.
(라우팅(routing)은 포워딩과는 조금 다르며, 송신측에서 수신측까지의 경로를 설정하는 행위를 보통 라우팅이라고 부른다.)

포워딩에는 목적지 주소기반 포워딩과 레이블 기반 포워딩이 있는데, 여기선 목적지 주소 기반 포워딩(Forwarding, based on destination address)에 대해서만 살펴보자.

◎목적지 주소 기반 포워딩에서의 포워딩 기술
포워딩에는 라우팅 테이블(routing table)이 쓰이는데, 이를 작게 만들수록 자원의 절약이 크다.(공간적 시간적 자원 모두) 때문에 테이블의 크기를 줄이고 탐색 속도를 높이는 방향으로 기술이 발전하게 되었다.

1. 다음 홉 방법(Next hop method) : 테이블에 전체 경로에 대한 정보 대신에 다음 홉 까지의 정보만을 저장해서 관리하게 된다.

2. 네트워크 지정 방법 (Network-specific method) : 같은 네트워크에 연결된 모든 호스트들은 호스트들에 대한 모든 주소를 테이블에 저장하는 대신, 해당 네트워크에 대한 네트워크주소만을 테이블에 저장하는 방식이다. (패킷이 와서 해당 네트워크로 포워딩시키면, 해당 네트워크에서 알아서 호스트로 보내주리라 예상하는것이다.)

3. 호스트 지정 방법 (Host-specific method) : 네트워크 지정 방법과 반대로, 모든 호스트에 대한 정보를 라우팅 테이블에 넣는 방법. 일반적인 경우 잘 쓰이지 않지만, 관리자가 네트워크를 점검할 일이 있다면 사용될 수 있다.

4. 디폴트 방법 (Default method) : 다음 홉을 넘어가는 다른 모든 네트워크에 대해서는 디폴트 영역으로 삼고, 디폴트 영역으로 가기위한 디폴트 엔트리(default entry)만을 저장한다. 


이를 토대로 테이블을 구성하면, 위의 네트워크에서는 아래와 같은 테이블을 만들 수 있다.(classful addressing)



 그러면 패킷이 R1의 라우터에 오게되었을 때, 패킷의 목적지주소를 보고 클래스를 파악한 후 해당 클래스의 테이블에 정보가 있으면 포워딩을 해주고, 정보가 없으면 디폴트로 보내게되는것이다.
(서브넷이 없는 경우라고 가정했다. 서브넷이 있을때는 어떻게 될지 네트워크를 그려보며 해보면 어렵지 않다.)

classless addressing에서도 방식 자체는 큰 차이가 없다. 단지 테이블을 표현하는데만 조금 차이가 있는데, 일단 /n 정보가 테이블에 추가되고, 클래스별로 테이블을 만드는것이 아니라, /n이 큰것부터 테이블의 상위에 적어두게된다.
 이렇게 하면 패킷의 목적지 주소를 보고 /n에 따라 마스킹을 한 후 테이블에서 정보를 찾는다. (classful 보다 효과적이다.)

때문에 테이블은 아래와 같이 구성된다.

 
이번 포스팅에서는 각각의 주소체계에서 포워딩 시 서브넷의 여부는 고려하지 않았다. 이에 대해서는 조금 더 생각을 해보거나 다른 사람의 포스팅을 찾아본다면 도움이 될 것 같다.(크게 어렵지도, 차이가 나지도 않아서 빼버렸다.)

classless addressing의 경우 특이한 상황이 있을 수 있는데, 네트워크들이 우연찮게 비슷한 네트워크 주소를 가질 때가 있다. 이 때 aggregation이라는 기법으로 라우팅 테이블을 더욱 축소시킬 수 있다.

#Aggregation : 집합 이라는 단어인데, 단어 뜻 그대로 비슷한 네트워크 주소를 가지는 네트워크들을 하나의 집합으로써 다루는 것이다. 예를 들어보자.
 183.57.128.0/24   -------┒
 183.57.129.0/24    ------╋----◎(R1)
 183.57.130.0/24  --------┛
모양의 네트워크가 있다고 하자. (위의 세 네트워크는 서로 다른 네트워크이다.) 그런데 세 내트워크가 비슷한 네트워크주소를 가진다. 그러면 얘네들을  183.57.128.0/22  로 묶어서 관리해도 괜찮을듯 싶다. 이렇게 비슷한 네트워크 끼리 묶어주는 방법을 address aggregation이라고 한다.
(예외로 비슷한 네트워크 주소를 같은 또다른 네트워크가 아예 다른 hop상에 존재한다면, 테이블의 맨 위로 올려서 예외처리를 해준다. 테이블의 맨 위부터의 /n에 따라 마스킹을 한 후 검사하는 특징을 이용한것이다.)

실제로 포워딩 되는 과정을 직접 해본다면, 패킷의 포워딩을 이해하는데 엄청나게 도움이 될것이다.

'Coding Note' 카테고리의 다른 글

[OpenCL] About  (0) 2011.11.22
[winAPI] API 환경변수 가져오기  (0) 2011.11.08
[Network] Special Address  (0) 2011.11.05
[Network] Supernetting & Classless addressing  (0) 2011.10.26
[Network] IPv4 Address & classful addressing  (0) 2011.09.23