리피터 허브나 스위치 허브를 경유한 패킷은 라우터에 도착한다. 라우터는 최적경로로 목적지에 도달하기 위한 다음 라우터를 찾아 중계하며 이러한 중계의 반복으로 이동하고자 하는 컴퓨터로 패킷이 전달된다.
라우터에 대해 자세히 알아보자.
라우터는 여러 네트워크들을 구분시켜줌과 동시에 연결시켜주는 장치이다. 앞으로 살펴볼 NAT는 구분에 포함될 것이며, 위에서 언급했던 중계행위는 연결에 포함될 것이다.
라우터가 어떤 원리로 여러 네트워크를 중계할 수 있는지 살펴보자.
라우터의 내부구조는 입력 포트(Input ports), 출력 포트(Output ports), 라우팅 프로세서(Routing processor), 스위칭 패브릭(Switching Fabric)으로 이루어져 있다.
(입력 포트 모습)
송신한 신호는 라우터의 입력 포트를 거친다. 수신된 신호가 입력포트에서 Physical layer processor(PHY회로)를 통해 디지털 데이터로 변환되고, Datalink layer processor(MAC 회로)를 통해 FCS 검사와 MAC 헤더 일치 검사를 진행한 후 버퍼에 저장한다.
이후 포워딩 테이블을 참고하여 출력 포트를 결정한다. 포워딩 속도가 느리다면, 큐에서 대기하는 버퍼링 현상이 일어난다.
(출력 포트 모습)
출력 포트가 결정이 되었다면 출력 포트에 의해 비트 데이터가 신호로 바뀌어 다음 라우터(혹은 컴퓨터)를 향해 송신한다. 출력 포트는 입력 포트와는 거꾸로 동작한다. 여러가지 통신 회선에 따라 각각의 규칙이 적용되며, ARP를 통해 MAC 주소를 획득하여 MAC 헤더를 추가한 후, 신호로 바꾸어 내보낸다.
출력 포트를 결정하는 작업이 라우팅 프로세서에서 일어난다. 라우팅 프로세서는 라우팅 프로토콜을 실행한다. 즉, 라우팅 테이블을 관리하고 갱신한다.
우선 라우팅 방식은 갱신 방법에 따라
으로 나뉘며, 라우팅 프로토콜은 동적 라우팅에 속하는 방식들을 일컫는다. 대부분의 라우터들은 라우팅 프로토콜에 의해 테이블을 갱신한다.
일반적으로 공유하는 정보에 따라 거리 벡터 라우팅 프로토콜 방식과 링크 상태 라우팅 프로토콜 방식으로 나뉜다.
거리 벡터 방식들은 이웃 노드들과 정보를 공유하여 이를 바탕으로 목적지까지의 거리와 방향(벡터)를 결정하는 방식이다. 링크 상태 방식들은 노드가 모든 노드에 상태를 전달한 후, 이를 바탕으로 최단 경로를 구성하는 방식이다.
링크 상태 방식들은 시간 복잡도와 공간 복잡도 모두 우수한 다익스트라 알고리즘을 사용하며, 거리 벡터 방식에서는 점진적으로 획득되는 정보들로 최적 경로를 구성할 수 있는 분산 벨만포드 알고리즘을 사용한다.
작은 규모 혹은 가정에서는 간단하고 자원 소모가 적은 RIP 방식(거리 벡터의 일종)을 사용하며 대규모 환경에서는 성능이 우수한 OSPF 방식(링크 상태의 일종)을 사용한다.
라우팅 프로토콜에 의해 라우팅 테이블이 작성되며 이를 기반으로 출력 포트를 결정한다. 참고로 포워딩 테이블은 수신한 패킷을 어떤 출력 포트로 내보낼 것인지에 대한 표이고, 라우팅 테이블은 이러한 포워딩 테이블과 최적의 경로 정보까지 포함한 표이다.
(포워딩은 단순히 패킷을 전달하는 행위, 라우팅은 알고리즘을 통하여 최적 경로를 찾은 후 포워딩하는 행위이다. 참고: 링크)
Destination | Netmask | Gateway | Interface | Metric |
---|---|---|---|---|
10.10.1.0 | 255.255.255.0 | - | e2 | 1 |
10.10.1.101 | 255.255.255.255 | - | e2 | 1 |
192.168.1.0 | 255.255.255.0 | - | e3 | 1 |
192.168.1.10 | 255.255.255.255 | - | e3 | 1 |
0.0.0.0 | 0.0.0.0 | 192.0.2.1 | e1 | 1 |
(라우팅 테이블의 모습)
수신한 패킷의 목적지를 Destination과 Netmask를 통해 구분한다. 이후, Interface(포트)를 통해 Gateway로 패킷을 중계한다. Metric은 목적지까지의 거리를 나타낸다.
기타 사례
10.10.X.0/24
)들을 하나의 서브넷(10.10.0.0/16
) 으로 등록한다.패킷을 수신하였을 때, MAC 헤더를 제거한 후 IP 헤더를 통해 어느 포트로 중계할 것인지를 정한다. 앞서 살펴봤던 Destination과 Netmask를 활용한다. 이 때, 일치하는 행이 여러 개 존재할 수도 있는데 이러한 경우는 Metric이 짧은 것을 우선한다. 또한, 일치하는 행이 없는 경우는 패킷을 폐지하고 ICMP를 통해 이를 알린다.
Netmask가 0.0.0.0
인 행은 기본경로로써, 일치하는 행이 없는 경우 해당 행의 게이트웨이로 중계가 일어난다.
앞서, 입력 포트로 들어온 패킷이 라우터 프로세서에 의해 출력 포트로 매핑된다고 언급하였다. 이를 주관하는 장치가 스위칭 패브릭이다.
매핑 방식에는 3가지 방식이 있으며, 고성능이 필요한 경우 Crossbar 방식을 사용하고 일반적인 경우는 Shared Memory, Bus 방식을 택한다고 한다.
(3가지 방식의 모습)
메모리에 노드들이 저장되어있고, CPU 연산(제어)을 통해 출력 포트를 결정한다. 공유 메모리를 사용함으로써, 병목 현상이 발생한다.
별도의 연산 없이 버스 매핑으로 출력 포트를 결정한다. 단일 버스를 모두 사용함으로써 동시에 매핑할 수 없고 속도가 제한된다.
각각 N개의 입출력 포트가 격자(바둑판)를 이룬다. 교차 지점마다 스위치가 존재해야 하여 비용이 크지만, 여러 입력을 병렬로 처리할 수 있다. 대역폭 한계를 극복했다고도 한다.
TTL(Time To Live)를 가진다. 라우터를 경유할 때마다 1씩 감소하여, 0이되면 폐기한다. 무한 순환을 막기위해 존재한다.
출력 포트에서 가질 수 있는 최대 길이(MTU)보다 입력으로 들어온 패킷의 길이가 큰 경우 Fragmentation을 활용한다.
이렇게 입력포트를 거쳐 들어온 패킷이 라우팅 프로세서가 갱신한 라우팅 테이블을 참고하여 출력 포트를 정한 뒤, 스위칭 패브릭에 의해 출력포트로 내보내진다. 이후 이와 같이 여러 라우터들을 거쳐 목적지까지 도달하게 된다.
추가로, 라우터의 부가기능 중 핵심인 NAT에 대해서 살펴보자.
IPv4의 경우 232 개의 주소를 가질 수 있다. 90년대 이후 인터넷 사용이 일반인들에게도 활발해지며 IP 고갈 이슈가 생겨났다. 이를 해결하기 위해 NAT라는 방식이 등장하였다.
이전까지 각각의 기기는 고유한 IP 주소(global address)를 가졌으나, 이후로 사용하게된 NAT는 외부로 하나의 공인 IP만을 노출하고, 내부로 여러 개의 가상 IP(private address)를 사용하는 방식이다.
(NAT 방식)
private address는
위와 같은 주소를 사용하는데, 이는 만드는 시점에 할당되지 않았던 범위들이다.
NAT의 동작에 대해 살펴보자.
위에 있는 그림과 마찬가지로,
1. 192.168.1.102:33543
에서 요청이 외부로 나간다.
2. 라우터가 NAT Table을 검색하여 Local Address (+ Port)에 대응되는 Internet IP, PORT를 찾는다.
3. 대체되어 요청이 나간다. (Host C를 통해 65.96.14.76:4
로 대체된다.)
참고로, 테이블에서 찾지 못한 경우 미사용된 적당한 번호를 사용한 후 테이블에 기입한다.
요청이 나갈 때와 반대로 동작한다.
1. 65.96.14.76:3
에서 요청이 내부로 들어온다.
2. 라우터가 NAT Table을 검색하여 Internet Address (+ Port)에 대응되는 Local IP, PORT를 찾는다.
3. 대체되어 요청이 들어온다. (Host B를 통해 192.168.1.103:24123
으로 대체된다.)
악의적인 목적을 가진 공격자가 라우터 내부에 존재하는 컴퓨터에 접근하려고 한다고 가정하자. 자세하게는 웹 서버를 털기 위해 65.06.14.76:80
으로 공격을 하려고 한다고 하자. 위 그림을 살펴보면 80번 포트번호가 NAT Table에 존재하지 않는다. 만약 공격을 하려하더라도 공격자의 패킷은 폐기(필터링)될 것이다. 이처럼 NAT는 방화벽과 같은 역할도 수행한다.
NAT의 요청을 여러 대의 컴퓨터로 나누어줄 수 있다는 점을 응용하여, 서버에 들어오는 많은 양의 요청을 분산해주는 로드밸런싱 역할을 수행할 수도 있다.
AWS NAT gateway 와 같이 VPC(Virtual Private Cloud)를 구성할 때 NAT를 활용할 수 있다.
영상 에 공유기를 소개하며 NAT가 자세히 소개되었으니, 참고하자.