1. 노드, 네트워크, 라우터

 

노드

노드는 데이터를 송수신하는 모든 장치를 의미한다. 노드에는 휴대폰, 노트북, 서버 장비 등이 해당한다. 

 

네트워크

이런 각 노드가 서로 데이터를 주고받기 위해 연결된 시스템을 네트워크라고 한다. 예시로 공유기에 연결된 휴대폰이나 컴퓨터가 하나의 네트워크를 구성하는 것이 있다.

 

패킷

노드가 네트워크를 통해 전송하는 데이터의 단위를 패킷이라고 한다. 패킷은 헤더(header)와 페이로드(payload)로 구성된다. 데이터는 일정 크기를 가진 여러 패킷으로 나뉘어 전송된다.

 

  • 헤더 : 패킷의 발신자, 수신자 정보를 포함
  • 페이로드 : 데이터 포함

 

라우터

동일한 네트워크에 있지 않은 노드와 통신을 해야할 때가 있는데, 이때 서로 다른 네트워크에 속한 노드는 직접 연결해서 패킷을 송수신할 수 없다. 이때 사용되는 것을 라우터(router)라고 한다. 라우터는 네트워크 간에 패킷을 전송하는 역할을 한다.

 

예시로 집에서 핸드폰 앱에 접속해 앱 서버에 연결될 때 여러 라우터를 거쳐 최종적으로 패킷이 전송되는 과정을 거친다. 라우터 경로는 하나만 있지 않고 여러 경로가 있다. 각 라우터는 목적지 노드의 주소에 따라 알맞은 다음 라우터를 선택해 데이터를 전송한다.

 

2. IP 주소와 도메인

 

IP 주소

IP 주소는 네트워크의 노드에서 패킷을 전송할 때 각 노드를 구분하기 위해 사용하는 주소를 의미한다. 현재 일반적으로 사용하는 IP 주소는 IPv4주소이다. v4는 버전이 4라는 의미이고, IPv4 주소는 223.130.192.248과 같이 4개의 1byte(8bit) 크기 숫자 블록으로 구성되어 있다. 각 숫자 블록은 0부터 255까지의 값을 갖는다. IPv4는 32비트를 사용하고, 10진수로 표현된다.

 

 

IPv6

IPv4 주소는 32비트로 구성되므로 약 43억 개의 고유한 주소가 존재한다. 한 사람당 하나의 IP를 사용한다고 가정했을때, 인구수는 IPv4 수를 능가했으므로 이 IP주소 고갈을 해결하기 위해 6개의 숫자 블록으로 이루어진 IP주소인 IPv6가 만들어졌다.

 

IPv6는 2001:4860:4860:0000:0000:0000:0000:8888 처럼 콜론(:)으로 구분한 4자리의 16진수 8블록으로 이루어진 주소이다. 따라서 총128(16 * 8)비트를 사용하고, 16진수로 표현된다. 따라서 2^128의 IP 주소를 할당할 수 있기에 전세계에서 IP주소가 고갈될 문제를 해결할 수 있다. 하지만 기대와 달리 지금도 여전히 IPv4 주소를 사용하고 있고, 그 이유로는 사설 IP와 NAT가 있다.

 

도메인 이름

각 노드의 IP주소는 모두 숫자로 이루어진 조금은 긴 문자열이므로 기억하기가 쉽지 않아 IP 주소에 기억하기 쉬운 이름을 도메인 이름이라 한다. 이 도메인 이름을 IP 주소로 변환하는 체계가 DNS(Domain Name System)이라고 한다. DNS는 일종의 인터넷 전화번호부인 것이다.

 

도메인 이름은 계층 구조를 갖는다. 도메인 이름의 각 계층은 점(.)으로 구분되며 오른쪽이 상위 계층이고, 왼쪽이 하위 계층이다.

 

계층구조

최상위 계층 : 가장 오른쪽 값, 일반 최상위 도메인과 국가 최상위 도메인 존재

  • 일반 최상위 도메인 : com, org, net, gov, app, biz, tech 등
    • 2번째 계층(2차 도메인) : 회사/브랜드 이름, naver.com에서 naver, google.com에서 google
    • 3차 도메인 이후 : cafe.naver.com, www.google.com  같은 용도에 맞는 이름 사용
  • 국가 최상위 도메인 : kr, jp, au 등
    • 2번째 계층(2차 도메인) : 국가 최상위 도메인은 두 번째 계층까지 미리 정의되어 있다.
      • ac.kr : 대학 같은 교육 기관 용도
      • co.kr : 기업 용도
    • 3차 도메인 이후 : 국가 최상위 도메인에서는 gasapp.co.kr과 같이 세 번째 계층이 도메인의 주요 이름이 된다.

 

도메인 이름에 해당하는 IP 주소는 DNS 서버를 통해 확인하는데, 다음 과정을 따른다.

  • www.naver.com을 브라우저에 입력 
  • 브라우저는 운 서버에 www.naver.com의 IP 주소를 물어본다.
  • DNS 서버는 응답으로 대응하는 IP 주소를 알려준다.
  • 브라우저는 응답으로 받은 IP 주소에 패킷을 전송한다.

 

localhost

로컬에 서버를 띄우고 연결할 때 사용하는 localhost는 특별한 주소다. localhost의 IP 주소는 127.0.0.1인데, 이는 루프백(loopback) 주소로서 자기 자신을 참조할 때 사용하는 IP 주소이다.

 

hosts 파일

호스트 이름과 IP 주소에 대한 매핑을 정의한 파일

  • 경로
    • 리눅스 : /etc 디렉토리
    • 윈도우 : C:\Windows\System32\drivers\etc

동일하게 localhost에 대한 IP 매핑 정보를 담은 파일을 찾아야 할 때에도 위 경로의 hosts 파일을 확인하면 된다.

 

 

nslookup

하나의 도메인 이름에 매핑되는 IP 주소는 여러개일 수 있는데, 이 때 nslookup 명령어를 사용해 도메인의 IP 주소를 확인할 수 있다.

하나의 도메인 이름에 IP 주소를 여러 개 매핑하는 이유 중 하나는 부하 분산에 있다. 하나의 도메인 이름에 다른 IP 주소를 제공하면, 하나의 서버가 아닌 여러 서버에 요청을 분산해 보낼 수 있기 때문이다.

 

고정 IP와 동적 IP

동일 네트워크 상에서 각 노드는 서로 다른 IP 주소를 가져야 한다. IP 주소를 사용해서 패킷을 전송할 노드를 선택하기 때문에, 동일 네트워크 내 같은 IP 주소를 가진 노드가 존재하면 IP 충돌이 발생한다.

 

노드 IP 주소는 다음 2가지 방식으로 지정한다.

고정 IP

  • 서버 IP처럼 노드가 고정된 IP를 가진다.
  • 고정 IP를 사용하는 노드는 IP 주소를 직접 지정한다.
  • 대부분의 서버가 고정 IP 주소를 갖는다.

 

동적 IP

  • 노드가 네트워크에 연결할 때마다 IP를 일시적 또는 일정기간 동안 할당한다.
  • 동적 IP는 DHCP(Dynamic Host Configuration Protocol) 서버를 통해 제공받는다.
  • DHCP가 IP주소, 게이트웨이 주소, 서브넷 마스크, DNS 서버 주소를 모두 제공한다.
  • 가정에서 사용하는 공유기가 주로 동적 IP 방식을 사용한다.

 

공인 IP와 사설 IP

 

공인(Public) IP 주소

  • 공용 IP 주소라고도 한다
  • 인터넷에서 접근 가능한 IP 주소
  • 인터넷에 접속하는 모든 네트워크에 적용되는 주소
  • 방화벽으로 막지 않았다면 누구나 공인 IP 주소를 가진 노드에 연결 가능하다.

 

사설(Private) IP 주소

  • 특정 네트워크에 속한 노드에 할당하는 주소
  • 외부 네트워크에서는 접근 불가능
  • 공유기에 연결된 휴대폰, 태블릿, 컴퓨터가 사설 IP 주소를 갖는다.
  • 네트워크가 다를 때 사설 IP는 중복 가능하다. 노드에 할당된 사설 IP는 네트워크 내부에서만 고유하면 되기 때문이다.
  • 사설 IP를 사용해 회사/가정 같은 환경에서 사용하는 공인 IP가 줄어들고, 공인 IP를 홈페이지나, 공개 API처럼 인터넷에서 서비스를 제공해야 하는 대상에만 사용하니 아직까지 IPv4를 사용해서 IP 주소가 고갈되지 않고 있다.

 

3. NAT

NAT(Network Address Translation, 네트워크 주소 변환)는 네트워크 주소를 변환하는 기술이다. 인터넷에 연결하려면 내부에서 사용하는 사설 IP와 인터넷에서 사용하는 공인 IP 주소 간의 변환이 필요한데, NAT가 이 변환을 담당한다.

 

SNAT

NAT는 주로 인터넷에 연결된 라우터 같은 네트워크 장비가 담당한다. 라우터는 내부 네트워크에서 나가는 패킷의 사설 IP를 공인 IP로 변환한다(소스 사설 IP -> 공인 IP). 소스 IP의 주소를 변환한다고 해서 이를 Source NAT, SNAT라고 한다.

변환할 공인IP를 알 수 있는 방법은 https://ifconfig.me 같은 공인 IP 주소를 알려주는 사이트에 접속해서 확인하는 것이다. 또는 리눅스에서 curl ifconfig.me 명령어로 공인 IP 주소를 확인할 수 있다.

 

DNAT

공인 IP로 들어온 패킷의 목적지를 사설 IP로 변환하기도 하는데, 목적지 IP의 주소를 변환한다고 해서 이를 Destination NAT, DNAT라고 한다.

DNAT는 서버를 구성할 때 사용된다. 일반적으로 네트워크를 구성할 때 보안, 이중화 등을 고려해 서버 노드는 공인 IP가 아닌 사설 IP 주소를 갖는다. 공인 IP 주소는 네트워크 연결을 관리하는 장비(라우터, 방화벽 등)에 할당한다. 해당 장비는 DNAT를 이용해 공인 IP로 들어온 패킷을 사설 IP를 가진 서버 노드에 전송한다.

 

4. VPN

 

서버를 운영하려면 서버 네트워크에 구성된 노드에 안전하게 접근할 수 있게 해주는 게 VPN(Virtual Private Network)이다. VPN은 인터넷과 같은 공용 네트워크에서 서로 다른 네트워크 간에 암호화된 연결을 제공한다. 두 네트워크는 마치 하나의 사설 네트워크에 존재하는 것처럼 연결될 수 있다. 이를 통해 개발자는 안전하게 서버 네트워크에 접근할 수 있다.

 

 

5. 프로토콜, TCP/UDP/QUIC

 

네트워크 상에서 두 노드가 데이터를 주고받기 위해 정의한 규칙을 프로토콜(protocol)이라고 한다. 네트워크는 여러 계층으로 구성되며 각 계층마다 사용하는 프로토콜이 존재한다.

 

TCP/IP 모델 계층별 프로토콜

개발자는 주로 전송 계층과 애플리케이션 계층의 프로토콜을 사용한다. 전송 계층에서 사용하는 프로토콜로는 TCP와 UDP가 있다. TCP는 안정성에, UDP는 속도에 중점을 두고 있다.

 

TCP, Transmission Control Protocol

TCP는 연결 기반 프로토콜이다. TCP는 두 노드 간에 먼저 연결을 맺은 뒤에 데이터를 주고 받는다. TCP에서 두 노드가 연결을 맺기 위한 과정을 3-Way Handshake라고 한다.


클라이언트와 서버는 위 과정을 거친 뒤 연결이 완료되며, 이후 서로 데이터를 주고 받을 수 있다.

 

  • 장점
    • 신뢰성
    • 패킷 순서 보장, 패킷 유실시 재전송하는 기능이 있기에 안정적인 데이터 전송가능하다
    • 신뢰성으로 HTTP/SMTP 같은 프로토콜이 TCP를 기반으로 동작한다
  • 단점
    • 느린 속도
    • 전송을 보장하기 위해 사용하는 시퀀스 번호, 확인 응답, 재전송 등의 정보로 속도가 느려짐
    • HOP 블로킹(Head of Line Blocking) : 일부 패킷 유실 시 해당 패킷이 도착할 때까지 이후 패킷을 제대로 처리 못하는 문제

 

UDP, User Datagram Protocol

  • 장점
    • 속도
    • 연결 과정 없이 바로 데이터 전송하기 때문에 데이터 전송 속도가 빠르다
  • 단점
    • 신뢰성
    • 데이터 정상 전송 확인 불가능, 순서 미보장, 데이터 유실 가능성

 

속도가 중요하거나 일부 데이터가 유실되더라도 문제되지 않는 통신에 주로 사용되고, 예시로는 DNS, VoIP, 게임 등이 있다.

 

QUIC

QUIC 프로토콜은 TCP의 신뢰성 있는 데이터 전송과 UDP의 빠른 속도를 목적으로 개발된 프로토콜이다. HTTP/3에서 HOL 블로킹 없는 멀티플렉싱을 지원하는 QUIC을 지원하고, 구글, 페이스북 등 주요 기업도 HTTP/3을 지원하고 있는 등 HTTP/3 지원 서비스가 증가하는 추세다.

 

 

QUIC의 특징은 다음과 같다.

  • UDP 기반에 TCP 연결 관리 기능 제공
  • 데이터에 연결 ID 포함, 연결 ID로 두 노드 간 연결 유지
  • TCP의 혼잡 제어, 패킷 유실 복구 같은 기능을 QUIC 프로토콜 수준에서 제어한다.
  • TLS(Transport Layer Security) 통합
    • QUIC 패킷은 기본적으로 암호화되어 전송, 3-Way Handshake + TLS Handshake를 통합해서 연결 과정을 단축했다.
  • 멀티플렉싱 지원
    • 한 연결에서 여러 스트림을 동시에 처리할 수 있다.
    • 여러 스트림을 동시에 처리하므로 1개의 스트림에서 HOL 블로킹이 발생해도 다른 스트림에 영향을 주지 않는다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts