플랫폼/Docker & k8s

개발자를 위한 네트워크 노트 (1)

Algorithmus 2023. 4. 7. 04:43

개발을 하다 보면 네트워크 지식이 간절해진다. 쿠버네티스를 하다보면 포트는 왜 그리 자주 나오며, 원격 접속만 하려 해도 IP와 맥주소가 뭔지 괴로운 것이 하나 둘이 아니다. 그래서 공부하기로 했다. 이 글은 나를 위한 참고 노트이기도 하다. 그리고 늘 그렇듯 공부를 하기 전에 전체적 체계를 잡는 것이 가장 시간을 절약하는 길이기에 오늘은 전체를 조망하고자 한다.

네트워크 계층


OSI 7계층 모델은 통신의 계층을 가장 세세하게 나눈 표준이지만 이에 완전히 대응하는 프로토콜은 존재하지 않기에 통상 4계층인 TCP/IP 모델 중 1계층을 OSI의 물리-데이터링크 계층으로 세분하여 5계층으로 보면 현실을 설명하고 업무하기에 적절하다고 한다. 즉, 1계층부터 5계층까지가, 물리-데이터링크-네트워크-트랜스포트-애플리케이션이다. 계층은 명확히 주어진 각자의 역할로 구분되며, 낮은 계층부터 맡은 역할을 수행하면서 데이터의 수신이 이루어진다. 송신측에서는 애플리케이션을 통해 사용자가 데이터를 조작하고 데이터의 변환 및 전송을 지시하기 때문에 이 데이터가 계층의 낮은 단계로 점차 이동하면서 그 계층별 역할에 따라 변환(캡슐화)되면서 송신을 준비하게 된다. 구체적으로, 송신 단말에서의 애플리케이션 데이터에 계층별 헤더가 차례로 붙은 후 물리 계층에서는 송신을 위한 부호화가 된다. 다시 이를 수신처에서 받기 위해서는 물리 계층의 복호화 후 각 계층에 해당하는 헤더를 차례로 읽어 마지막으로 애플리케이션 계층에서 수신 단말에서 읽을 수 있는 데이터 형태로 변환(비캡슐화)한다. 스택과 같다고 해석할 수 있다. 통상 각 계층(level)을 나타내는 말이 길기 때문에 간단히 L1~L7 처럼 부른다. 데이터는 각 계층에서 처리할 수 있는 적절한 단위로 분할하는데, 각 계층별 데이터 단위를 PDU (protocol data unit) 이라고 하고 이는 제어 정보를 갖는 헤더와 데이터 자체인 페이로드로 구성되며, 각 계층마다의 PDU를 부르는 이름이 다르다: L1은 비트, L2는 프레임, L3은 패킷, L4는 세그먼트(TCP)나 데이터그램(UDP), L5는 메시지.

계층별 역할과 기기


각 계층에서 맡은 역할을 수행하기 위한 기기가 상황에 따라 다양하다. 각 기기는 그 계층 및 하위 계층의 프로토콜을 처리할 수 있다. 먼저 물리 계층은 NIC (네트워크 인터페이스 카드), 미디어 컨버터나 액세스 포인트, 데이터링크 계층은 브리지나 L2 스위치 등이다. 데이터링크 계층은 같은 네트워크에 있는 단말끼리 연결할 수 있도록 하며 MAC 주소 (NIC에 내장된 물리적 주소) 에 기반해 프레임을 전송한다. 네트워크 계층은 네트워크 간을 연결한다. 라우터, L3 스위치 등 기기가 역할을 담당하고, IP 패킷의 헤더에 포함된 IP 주소 (OS상 설정된 논리적 주소) 에 기반해 패킷을 전송한다. 라우터는 기본적으로 자기가 속한 네트워크를 넘어 IP 패킷을 릴레이해서 목적지로 보내는 기본 기능 외에도, NAT (네트워크 주소 변환), VPN (가상적 전용선을 만들어 단말을 연결), PPPoE (거점 간을 일대일로 연결) 등의 기능을 제공한다. 트랜스포트 계층은 (포트 번호를 통해) 애플리케이션을 식별하고 그 요건에 맞게 통신을 제어한다. 어떤 네트워크 안에 들어오면 서비스 별로 포트번호가 붙는데 이것이 바로 동 계층에서 동작하는 기기가 패킷 전송시 애플리케이션을 식별하기 위한 기준이다. 서비스는 예를 들어 http (80번), https (443번) 등이다. 기기의 예로는 전통적인 방화벽이 있다. 애플리케이션 계층은 사용자에게 애플리케이션을 제공하는 계층이다. 기기로는 차세대 방화벽, WAF, 로드 밸런서 (L7 스위치) 가 있다. k8s (쿠버네티스) 를 쓰다 보면 로드밸런서를 제어하는 ingress와 매칭해서 생각해 볼 수 있다. 그도 그럴 것이 네트워크 기기로는 물리 어플라이언스 (box) 외에도 가상 어플라이언스가 자원의 효율적 이용을 위해 널리 사용되고 있기 때문이다.

네트워크란


앞서 언급한 네트워크에 대해 다시 정의한다. 가정이나 기업 등 한정된 범위의 네트워크를 LAN 이라 하며, 가정에서는 브로드밴드 라우터를 통해 인터넷에 접속하며 기업에서는 단말을 모으는 엣지 스위치 - 이를 다시 모으는 코어 스위치 - 다중화 된 인터넷 라우터를 통해 인터넷 등에 연결된다. 여기서 LAN 이 연결하는 인터넷 등 멀리 떨어진 범위의 네트워크 혹은 closed-area VPN (본사-지사 간 연결과 같이 LAN 간을 연결) 등을 WAN 이라고 한다. 그리고 WAN을 거쳐서, 결국 대용량의 저장 및 처리를 위해서는 인터넷에 공개하는 서버를 설치한 네트워크인 DMZ에 접속한다. DMZ에서는 서버들을 네트워크와 연결하는 각 계층별 기기의 액티브-스탠바이 등 다중화를 통해 가동의 안정성을 추구한다. 지금까지 설명한 것은 전통적 네트워크 형태이나 최근에는 SDN, CDN, IoT, IaaS 등이 등장했다.

아주 간략한 개요지만 이 체계를 잡고 보면 지금까지 외계어처럼 여겨졌던 네트워크 관련 항목들이 덜 낯설 것 이라고 생각된다. 다음 포스팅 들에서는 각 계층에 대한 내용을 좀 더 상세히 설명해 보겠다.

참고문헌: 그림으로 공부하는 TCP/IP 구조 1장 (p1-49), 미야타 히로시 저

반응형