개발자에게 필요한 네트워크 상식

백엔드 프레임워크 만들기 (개정판), 제로 - 인프런 에서 배운 내용을 정리한다.

개발자라면 다음과 같은 문제에 대답할 수 있어야 한다.

private IP 주소를 사용하는 외부 서버에 접속할 수 있는 방법
웹 브라우저의 MAC 주소를 알 수 있는 방법
IP 주소를 사용자 식별자로 사용할 수 있는 방법
80 포트를 사용하는 톰캣을 여러 개 실행할 수 있는 방법

나는 첫 두 개는 모르고 있었다. 갈 길이 멀다.

private IP 주소를 사용하는 외부 서버에 접속할 수 있는 방법: public IP 주소를 할당받아야 함.
  1. public IP 주소를 할당받아 DMZ 영역에 서버를 구성
  2. public IP 주소를 할당받아 STUN, TURN 등 기술을 사용
웹 브라우저의 MAC 주소를 알 수 있는 방법
  1. 사용자의 MAC 주소를 알 방법은 없음
  2. 별도의 프로그램으로 수집할 수 있지만 개인정보 침해 소지가 있음
아이피 주소를 사용자 식별자로 사용하는 방법
  1. 논리적 아이피 주소는 환경에 따라 변경가능하기 때문에 식별자로 사용할 수 없음.
80 포트를 사용하는 톰캣을 여러 개 실행할 수 있는 방법
  1. 포트는 운영체제에서 실행되는 프로세스를 식별할 수 있는 key 로서, 동시에 여러 개 실행하는 것은 불가능
  2. 하나의 컴퓨터에 여러 개 가상화 환경을 준비하고 실행하는 방법은 있음.

이제 왜 위와 같은 결론이 나오는지 알아보자.

통신 3요소

  1. 송신자
    • 데이터를 전송하고 결과를 기다림.
    • 데이터를 전송하기 위해 수신자 정보인 MAC, IP, PORT 가 필요함.
      • MAC (Media Access Control Address): 호스트를 식별할 수 있는 물리적 식별 값 (네트워크 카드에 할당됨)
      • IP (Internet Protocol) 주소: 인터넷을 통해 특정 호스트를 찾을 수 있는 논리적 식별값
      • PORT: 프로그램(프로세스)를 구분할 수 있는 유일한 정보로, 특정 프로그램에 접속할 때 사용함.
  2. 수신자
    • 데이터를 받고 결과를 전송함. 필요한 것만 받음 (protocol)
  3. 통신매체
    • 유선 (LAN), 무선 (WIFI). 계속 신호를 주고 받음.

데이터 송신: 스위치 이용 (내부망)

  1. 송신자는 데이터를 스위치로 보낸다.
    • 데이터는 송신자 MAC, 수신자 MAC 을 포함한다.
  2. 스위치는 스위치에 연결된 모든 장비에 데이터를 전송한다 (broadcasting).
  3. 데이터를 수신한 호스트는 자기 MAC 정보와 같지 않을 경우 무시한다.

참고로 broadcasting 은 감청에 취약할 수 있다. 스위치는 모든 호스트에 데이터를 보내기 때문에, 스위치에만 연결되면 감청이 가능하기 때문이다.

데이터 송신: 라우터 이용 (인터넷)

스위치에 연결되지 않은 외부 호스트와 통신하기 위해서는 IP 주소가 필요하다.

  1. 송신자의 IP 주소를 송신자의 라우터에 할당한다.
  2. 수신자의 IP 주소를 수신자의 라우터에 할당한다.
  3. IP 주소를 이용해 라우터끼리 통신한다.
    • 이 방식은 broadcasting 과 달리 특정 호스트와 직접 통신한다.
    • 이 때 전달되는 MAC 정보는 라우터의 MAC 정보뿐이다.

참고로 인터넷은 세상의 모든 라우터가 서로 연결된 네트워크 망이다.

Public IP 주소를 라우터에 할당하면 다른 라우터가 public IP 주소를 찾을 수 있지만, private IP 주소는 찾을 수 없다. 전송되는 데이터를 패킷 이라고 부르며, 여기에는 전송자와 수신자의 IP 주소가 포함돼 있다.

PORT: 호스트 내부의 실제 수신자

위에서 설명한 것처럼 스위치는 MAC 을 통해, 라우터는 IP 주소를 이용해 데이터를 전송한다. 최종적으로 데이터는 호스트가 가진 여러 개의 수신자 (process) 중 하나가 받는다. 어떤 수신자가 패킷을 받는지는 port 로 구분한다.

통신 방식에 port 번호가 없는 경우가 있으나, 이건 실제로 port 가 없는 게 아니라 기본값이 지정된 경우다. 다음은 통신 방법에 따른 port 기본값이다.

http: 80
telnet: 23
tftp: 69

데이터 수신: protocol 사용

수신자는 데이터를 받은 후 protocol 을 이용해 데이터를 확인한다. Protocol 이란 송신자와 수신자가 데이터를 주고 받을 때 필요한 약속이다. Protocal 에는 여러 가지가 있는데, 각 protocol 의 특징을 비교하는 기준으로 흐름 제어, 오류 제어, 혼잡 제어 등이 있다.

  • 흐름제어는 연결과 종료, 오류제어는 타임아웃 및 패킷 손상에 대한 보완, 혼잡제어는 인터넷의 혼잡도에 따라 데이터 송신량을 조정하는 것과 관련이 있다.
protocol 종류
  1. TCP 는 연결 지향의 프로토콜로, 흐름/오류/혼잡제어가 기본으로 제공된다.
    • 그래서 TCP/IP 로 대부분의 네트워크 송수신이 이루어진다 (예: SQL 실행).
  2. UDP 는 전송 지향 프로토콜이다.
    • 수신자가 데이터를 받았는지 확인하거나, 수신에 실패했을 때 다시 시도하는 등의 처리는 애플리케이션에서 따로 구현해야 한다.
    • 단방향으로 데이터를 보내기 때문에 TCP 보다 속도가 빠르다. 그래서 동영상 재생에서 사용된다.
  3. HTTP 는 application layer 의 프로토콜이다. 즉, network layer 가 TCP 를 사용하든 UDP 를 사용하든 통신을 할 수 있다. 또한, HTTP 의 가장 큰 특징은 송신자의 IP 주소가 변경될 수 있다는 것이다.
    • HTTP 1.0 은 HTTP 의 특징인 비연결성 때문에 매번 접속/끊기가 반복된다.
    • HTTP 1.1 은 TCP/IP 연결을 끊지 않고 하나의 스트림으로 받는 방식으로 비연결성을 보완한다.
      • keep-alive 기능으로 하나의 웹페이지에서 html img css 등 여러 개의 컨텐츠를 다운받을 수 있다.
    • HTTP 2 에서는 압축 기능을 사용해 인터넷 부하를 줄인다. HTTP 통신은 ASCII 로 데이터를 주고 받기 때문에 데이터량이 많기 때문이다.
      • 보통 HTTP 2 는 인프라를 제공하는 WAS 에서 유용하다. 가장 적합한 예시가 Google 이다 (크롬).

Reference