# IP - 인터넷 프로토콜

  • 서버와 클라이언트 사이의 인터넷은 거대하고 복잡한 네트워크 구조를 가진다. 목적지를 정확히 찾아가기 위한 규칙으로 IP(인터넷 프로토콜)가 사용된다.
    • 지정한 IP 주소(예: 100.100.100.1)로 데이터를 전달
    • 패킷(헤더 + 페이로드로 구성된 통신 단위)으로 데이터를 분할하여 전달
  • IP 패킷은 아래와 같이 구성된다.
    • 헤더: 출발지 IP, 목적지 IP, TTL, 프로토콜 등 제어 정보
    • 페이로드: 실제 전송 데이터
    • 각 노드(라우터)는 헤더의 목적지 IP를 보고 다음 경로를 결정하며, 이를 반복해 목적지까지 데이터를 전달한다.
  • IP 프로토콜의 한계
    1. 비연결성: 수신 대상의 상태를 확인하지 않고 패킷을 전송 (대상이 없거나 서비스 불능 상태여도 전송)
    2. 비신뢰성: 패킷 소실 시 재전송 메커니즘 없음, 패킷 순서 보장 안 됨
    3. 포트 구분 없음: 동일 IP의 서버에서 여러 애플리케이션이 통신할 경우 데이터 수신 대상을 특정할 수 없음

# TCP / UDP

  • 인터넷 프로토콜 스택의 4계층
    1. 애플리케이션 계층 - HTTP, FTP
    2. 전송 계층 - TCP, UDP
    3. 인터넷 계층 - IP
    4. 네트워크 인터페이스 계층
  • 프로토콜 계층
    • 애플리케이션 계층: 웹 브라우저, 네트워크 게임, 채팅 프로그램 등 사용자와 직접 상호작용하는 계층
    • OS 계층 (전송 + 인터넷)
      • 소켓 라이브러리를 통해 애플리케이션 데이터를 OS에 전달
      • TCP 또는 UDP로 데이터를 감싸고(세그먼트), IP로 한 번 더 감싸(패킷) 전송 준비
    • 네트워크 인터페이스 계층: 랜 드라이버 및 랜 장비를 통해 IP 패킷을 프레임으로 감싸 인터넷망으로 송신
  • TCP/IP 패킷 구성
    • IP 헤더: 출발지 IP, 목적지 IP
    • TCP 헤더: 출발지 PORT, 목적지 PORT, 전송 제어 정보, 순서(SEQ) 번호, 검증(체크섬) 정보
  • TCP 특징
    • 연결지향: TCP 3way handshake
    • 데이터 전달 보장
    • 순서 보장
  • 3 way handshake (논리적 연결)
    1. 클라이언트에서 서버로 SYN
    2. 서버에서 클라이언트로 SYN + ACK
    3. 클라이언트에서 서버로 ACK
  • SYN은 접속 요청, ACK는 요청 수락
    • ACK와 함께 데이터 전송 가능.
  • UDP 특징
    • 연결지향 X, 데이터 전달보증 X, 순서보장 X
    • IP와 거의 유사하며 PORT, 체크섬 정도만 추가됨
    • 애플리케이션에서 추가 작업 필요
    • 단순하고 빠름

# PORT

  • 포트(PORT): 같은 IP 내에서 실행 중인 프로세스를 구분하기 위한 논리적 번호 (0 ~ 65535)
    • 0 ~ 1023: 잘 알려진 포트 (Well-known Port) — HTTP: 80, HTTPS: 443, FTP: 21
    • 1024 ~ 49151: 등록된 포트 — 애플리케이션이 관례적으로 사용
    • 49152 ~ 65535: 동적 포트 — OS가 클라이언트 측에 임시 할당

# DNS(Domain Name System)

  • IP 주소는 숫자로 이루어져 기억하기 어렵고, 서버 이전 등의 이유로 변경될 수 있다.
  • 이를 해결하기 위해 DNS(Domain Name System)가 사용된다.
    • DNS 서버는 도메인 이름과 IP 주소의 매핑 테이블을 관리한다.
    • 클라이언트가 도메인 이름으로 DNS 서버에 질의하면, DNS 서버는 해당 IP 주소를 반환한다.
    • 클라이언트는 반환받은 IP 주소로 목적지 서버에 접속한다.