이 글은 go언어를 활용한 네트워크 프로그래밍을 기반으로 작성되었습니다
이전 글까지는 인터넷 프로토콜 주소 지정에 대해 살펴보았었다. 이제 패킷이 어떻게 인터넷을 통해 주소를 사용하여 한 노드로부터 다른 노드까지 도착할 수 있는지 알아보자. 첫번째 장에서 출발지 노드의 네트워크 스택으로부터 물리적 매체를 거쳐 목적지 노드의 네트워크 스택까지 도달할 수 있는지 살펴보았다.
첫장의 패킷 전송처럼 노드들이 직접 연결되어 있는 경우는 많지 않다. 데이터의 전송을 위해서는 중간의 다른 노드들을 거쳐야 한다. 이 부분이 핵심이다.
아래 그림은 이 과정을 잘 보여준다.
위 그림에서 나와있는 중간 노드1,2는 한 노드로 부터 다른 노드로 이동하는 데이터를 제어하는 라우터이거나 방화벽이다.
노드 유형에 관계없이 중간 노드에는 각 네트워크 인터페이스와 연결된 네트워크 스택이 존재한다.
노드1, 노드2의 수신 및 송신 네트워크 인터페이스는 IPv4를 사용하여 서로 다른 미디어 유형을 통해 데이터를 전송할 수 있으므로 캡슐화를 사용하여 각 미디어 유형의 구현 세부 정보를 전송되는 데이터로부터 분리해야 한다.
예를 들어 노드1이 무선 네트워크를 통해 클라이언트로부터 데이터를 수신하고, 클라이언트가 이더넷 연결을 통해 노드2로 데이터 전송을 한다고 가정해보자.
이러한 방식으로 클라언트에서 전송되는 데이터들은 전송 과정에서 여러 노드를 지나게 되더라도 변경되지 않는다.