이 글은 go언어를 활용한 네트워크 프로그래밍을 기반으로 작성되었습니다


인터넷 트래픽 라우팅

이전 글까지는 인터넷 프로토콜 주소 지정에 대해 살펴보았었다. 이제 패킷이 어떻게 인터넷을 통해 주소를 사용하여 한 노드로부터 다른 노드까지 도착할 수 있는지 알아보자. 첫번째 장에서 출발지 노드의 네트워크 스택으로부터 물리적 매체를 거쳐 목적지 노드의 네트워크 스택까지 도달할 수 있는지 살펴보았다.

첫장의 패킷 전송처럼 노드들이 직접 연결되어 있는 경우는 많지 않다. 데이터의 전송을 위해서는 중간의 다른 노드들을 거쳐야 한다. 이 부분이 핵심이다.
아래 그림은 이 과정을 잘 보여준다.

위 그림에서 나와있는 중간 노드1,2는 한 노드로 부터 다른 노드로 이동하는 데이터를 제어하는 라우터이거나 방화벽이다.

  • 방화벽: 병화벽 뒤의 네트워크를 보호하기 위해 네트워크 내부 및 외부의 트래픽 흐름을 제어하는 역할을 한다.

노드 유형에 관계없이 중간 노드에는 각 네트워크 인터페이스와 연결된 네트워크 스택이 존재한다.

  1. 위 그림에서 노드1은 수신하는 네트어크 인터페이스에서 데이터를 수신한다.
  2. 이후 데이터는 3계층까지 올라가며 나가는 네트워크 인터페이스의 스택으로 전달된다.
  3. 이후 서버로 라우팅되기 전에 노드2의 들어오는 네트워크 인터페이스로 이동한다.

노드1, 노드2의 수신 및 송신 네트워크 인터페이스는 IPv4를 사용하여 서로 다른 미디어 유형을 통해 데이터를 전송할 수 있으므로 캡슐화를 사용하여 각 미디어 유형의 구현 세부 정보를 전송되는 데이터로부터 분리해야 한다.

예를 들어 노드1이 무선 네트워크를 통해 클라이언트로부터 데이터를 수신하고, 클라이언트가 이더넷 연결을 통해 노드2로 데이터 전송을 한다고 가정해보자.

  1. 노드 1의 수신 1계층은 무선 네트워크에서 전송되는 무선 신호를 비트로 변환한다.
  2. 1계층은 2계층으로 비트를 전송한다.
  3. 2계층은 비트를 프레임으로 변환하여 패킷을 추출하여 3계층으로 전송한다.
  4. 들어오는 NIC와 나가는 NIC의 3계층은 IPv4를 사용하여 두 인터페이스 네트워크 스택 간에 패킷을 라우팅한다.
  5. 나가는 NIC의 2계층은 3계층에서 패킷을 수신하고, 해당 1계층에 프레임을 비트로 보내기 전에 캡슐화한다.
  6. 송신 1계층은 비트를 이더넷을 통한 전송에 적합한 전기신호로 변환한다.

이러한 방식으로 클라언트에서 전송되는 데이터들은 전송 과정에서 여러 노드를 지나게 되더라도 변경되지 않는다.


0개의 댓글