[CS] 컴퓨터 네트워크 Delivery Forwarding

재오·2023년 5월 28일
7

CS

목록 보기
21/35
post-thumbnail

Direct delivery & Indirect delivery

Direct delivery는 최종 목적지가 보내는 쪽과 같은 네트워크에 있는 경우이다. 라우터가 같은 네트워크에 있는 컴퓨터에 바로 보내는 것도 Direct delivery이다.


위 그림과 같이 라우터를 거쳐서 다른 네트워크로 가는 것을 Indirect delivery라고 한다. 위 그림은 간접 - 간접 - 직접 이렇게 순차적으로 연결되어 있다.

라우터는 실질적인 모든 경로를 알고 있다. 위 그림의 (a)처럼 테이블에 모든 경로를 저장하는 것은 경로 중심 경로라고 한다. 하지만 외국에 데이터를 보내는 경우와 같이 path가 매우 길어지게 되는 경우에는 비효율적이어서 (b)와 같은 next hop 방식을 사용한다. next hop 방식은 다음 네트워크의 대표주소를 적는다.

Host-specific routing


위 그림과 같이 목적지에 Host가 있는데, 이는 어떠한 구체적인 경로를 가라고 지정할 때 사용한다. host 주소도 테이블에 있을 수 있다는 점을 알 수 있다.

Default routing


Routing Table은 주변에 있는 네트워크에 대한 정보만 가지고 있고, 모든 정보들을 저장하지는 않는다. 따라서 테이블에 없는 정보들은 모두 Default routing으로 보낸다.

Forwarding Module


모든 패킷들은 목적지 주소를 가지고 있다. 우선 패킷의 도착지 주소를 꺼내고, 이를 class로 분류하여 mask를 씌운 후 네트워크 주소를 찾는다. 그리고 나서 테이블에서 해당 네트워크가 있는지 확인한다. 이때 테이블은 위 그림과 같이 class별로 관리한다. 이를 통해 테이블에서 해당 클래스에 해당하는 주소를 찾는다.

Example



첫 번째 그림과 같이 네트워크가 구성되어 있다고 가정을 하면 R1라우터 테이블은 아래와 같다. 클래스 A,B에 속하는 주소들은 Direct delivery인 것을 확인할 수 있고, 클래스 C는 m0을 통해 R3를 거쳐가는 Indirect delivery인 것을 확인할 수 있다.
만약 192.16.7.14라는 주소를 보면 클래스 C임을 확인할 수 있다. mask를 통해 해당하는 네트워크 주소인 192.16.7.0을 구할 수 있다. 클래스 C 테이블을 통해 해당 주소가 존재하는 것을 확인하고 이를 m0 라우터로 전송해준다. 만약 주소가 테이블에 존재하지 않는다면 default router로 전송한다.


위 그림을 통해 서브넷 마스크가 18인 것을 확인할 수 있다. 이에 대해서는 라우터도 알고 있어야 한다. 라우터는 마스크를 통해 테이블에서 Searching을 진행한다.
만약 도착지 주소가 145.14.32.78인 패킷이 들어왔다고 가정하자. 그러면 일단 /18에 대해 마스크를 씌우고 확인한다. 그러면 145.14.0.0이 나오게 되고, 그 값을 테이블에서 찾으면 인터페이스 m0에 속하는 주소인 것을 알 수 있다.

Classless Addressing



class가 없으면 마스크까지 추가해야 한다. 우선 테이블에 마스크가 가장 긴 것부터 순차적으로 적혀있다. 그리고 순차적으로 해당 마스크를 씌운다. 맞으면 해당 인터페이스 넘버로 보내면 되고 아니면 계속 내리면 된다. 끝까지 없으면 default로 보낸다. 기존 클래스기반 주소할당 방식은 고정된 프리픽스로 인해 주소 공간 낭비가 발생한다. 하지만 Classless Addressing은 유연성과 효율성을 향상시킨다.

Typology 추측



테이블만 주어져있고, 이를 도식화하기 위해서는 우선 Direct delivery를 먼저 그리고난 후에 테이블 맨 위에 해당되는 애들을 순차적으로 그리면 된다.

Address aggregation


원래 R2 라우터 테이블도 R1처럼 모든 주소에 대한 테이블을 가지고 있어야 하지만, 이는 상당히 비효율적이다. 예를 들어, 172.16.0.0/24, 172.16.1.0/24, 172.16.2.0/24와 같이 인접한 세 개의 서브넷을 주소 집약을 통해 통합한다면, 이를 172.16.0.0/22와 같이 하나의 더 큰 주소 블록으로 표현할 수 있다. 이렇게 되면 이 세 개의 서브넷은 동일한 라우팅 엔트리를 공유하게 되므로 라우팅 테이블의 크기를 줄이고, 주소 공간을 더 효율적으로 사용할 수 있다. 테이블을 저장할 때에는 mask가 긴 주소부터 저장하는데 이를 longest mask matching이라고 한다.

MPLS


택배를 시키면 우편용지가 붙어있음에도 불구하고 택배 상자밖에 105동 801호와 같이 기사님이 알기 쉽게 적어둔다. 이것과 마찬가지로 컴퓨터에서도 라벨을 더블링할 때가 있는데 맨 왼쪽은 MAC 헤더이고 IP헤더와 사이에 MPLS 라는 헤더를 하나 추가한다. 여기에는 라벨이 들어간다.MPLS를 통해 고정된 라벨을 가지고 IP Forwarding의 속도를 높인다.

자기 네트워크를 관리할 때에만 MPLS 사용이 가능하다. R4 라우터에서 보면 목적지 A로 가려면 10번이라는 레이블을 붙이면 된다. 그러면 0번 인터페이스로 간다. R3에서는 10번으로 왔다. 그러면 A로 가기위해서 10번을 버리고 6번으로 바꿔친다. 중간에 있는 애들은 IP주소 안보고 레이블만 본다. 근데 왜 번호를 바꿀까? 그 이유는 보기에는 간단하지만 그 안에서 10번이 유일하게 sync 맞춰주는 것이 복잡하다. 그래서 로컬에서만 유효한 번호를 서로 주고받는다.

이 테이블은 어떻게 만들어질까? A입장에서는 다이렉트가 가능한 레이블에서 만든다. 들어오는 레이블을 본다. 6번은 해당 구역에서만 6번이 유효한지 아닌지만 본다. 한마디로 A로 보내려면 너네들은 6번으로 보내야해. 그러면 6번으로 보내주면 되는구나 하고(out label) 자기 연결되는 다른 애한테 다른 번호를 보내준다(in label).

옵션이 여러개라 문제가 생기면 다른걸로 바로 스위치가 가능해지고, 찾는데 더 빠른 시간이 걸린다.

profile
블로그 이전했습니다

3개의 댓글

comment-user-thumbnail
2023년 5월 29일

CS 공부할 때 참고하겠습니다 좋은 글 감사드려요 :)

1개의 답글
comment-user-thumbnail
2023년 6월 3일

너네들은 6번으로 보내야해

답글 달기