주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 ‐ 모르면 답답해지는 네트워크 기초 - woojin-playground/Backend-PlayGround GitHub Wiki

네트워크와 라우터

  • 데이터를 송수신하는 장치를 노드라고 표현한다.
  • 이런 각 노드가 서로 데이터를 주고받기 위해 연결된 시스템을 네트워크라고 한다.
  • 노트가 네트워크를 통해 전송하는 데이터의 단위를 패킷(packet)이라고 부른다. 패킷은 헤더와 페이로드로 구성된다. 헤더는 패킷의 발신자와 수신자 정보를 포함하며 페이로드에는 데이터가 포함된다. 데이터는 일정 크기를 가진 여러 패킷으로 나뉘어 전송된다.

IP 주소와 도메인

IPv6 주소

  • IPv4 주소는 32비트로 구성되므로 약 43억개의 고유한 주소가 존재한다.
  • 더 많은 노드에 고유한 주소를 부여할 수 있는 IPv6 주소를 만들었다.
  • 32비트를 사용하는 IPv4와 달리 IPv6는 128비트를 사용한다. 128비트를 사용하는 만큼 IPv6는 전 세계의 모든 기기에 고유 주소를 할당해도 차고 넘칠 정도로 많은 IP 주소를 제공한다.
  • 각 노드의 IP 주소를 기억하기 쉽지 않다. 그래서 IP 주소에 기억하기 쉬운 이름을 붙이는데 그 이름이 도메인 이름이다.
  • 도메인 이름과 IP 주소로 변환하는 체계가 DNS이다.

고정 IP와 동적 IP

  • 동일 네트워크 상에서 각 노드는 서로 다른 IP 주소를 가져야 한다.
  • IP 주소를 사용해서 패킷을 전송한 노드를 선택하기 때문에 같은 IP 주소를 가진 노드가 존재하면 IP 충돌이 발생한다.
  • 고정 IP는 말 그대로 노드가 고정된 IP를 가진다. 많은 서버가 바뀌지 않는 IP 주소를 가진다. 고정 IP를 사용하는 노드는 IP 주소를 직접 지정한다.
  • 동적 IP 노드가 네트워크에 연결할 때마다 IP를 할당한다. 동적 IP는 DHCP 서버를 통해 제공받는다.
  • 인터넷에 연결하려면 IP 주소, 게이트웨이 주소, 서브넷 마스크, DNS 서버 주소를 설정해야 하는데 DHCP가 이 값을 모두 제공한다.

NAT

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

프로토콜

  • 네트워크 상에서 두 노드가 데이터를 주고받기 위해 정의한 규칙을 프로토콜이라고 한다.
  • 네트워크는 여러 계층으로 구성되며 각 계층마다 사용하는 프로토콜이 존재한다.
  • TCP, UDP는 대표적인 전송 계층 프로토콜로 두 프로토콜은 각각 안정성과 속도에 중점을 두고 있다.

TCP

  • 두 노드 간에 먼저 연결을 맺은 뒤 데이터를 주고 받는다.
  • TCP에서 두 노드가 연결을 맺기 위한 과정을 3-Way Handshake라고 한다.
  • TCP는 패킷 순서를 보장하고 패킷이 유실될 경우 재전송하는 기능을 제공하고 있어 안정적으로 데이터를 전송할 수 있다.
  • 이런 이유로 애플리케이션 계층의 HTTP, SMTP와 같은 프로토콜이 TCP를 기반으로 동작한다.

UDP

  • UDP는 응답 확인이나 패킷 정렬과 같은 과정을 거치지 않기 때문에 전송 속도는 TCP 대비 빠르다.
  • 이런 이유로 UDP는 속도가 중요하거나 일부 데이터가 유실되더라도 문제되지 않는 통신에 주로 사용된다.

QUIC

  • TCP는 신뢰성이 있지만 느리고 UDP는 빠르지만 신뢰성이 없다.
  • 이런 목적으로 개발된 프로토콜이 바로 QUIC이다.
  • QUIC는 TLS(Transport Layer Security)를 통합했다.
  • QUIC 패킷은 기본적으로 암호화되어 전송된다.
  • 또한 TPC 기준의 HTTPS는 TCP 연결을 위한 3-Way Handshake와 TLS 연결을 위한 TLS Handshake를 진행해서 여러 차례 통신을 한 뒤에 연결이 수립되는데, QUIC는 TLS를 통합함으로써 이 과정을 단축시켰다.