01. 인터넷 네트워크

01. 인터넷 네트워크

인터넷 통신의 기본

인터넷에서 컴퓨터 간의 통신은 클라이언트-서버 모델을 기반으로 하며, 복잡한 인터넷 망의 노드를 통해 데이터가 전달됩니다.

┌──────────┐                                        ┌──────────┐
│  Client  │ ──── 인터넷(노드 → 노드 → 노드) ────→ │  Server  │
│ (요청자) │                                        │ (응답자) │
└──────────┘                                        └──────────┘

IP (Internet Protocol)

IP는 컴퓨터에 **IP 주소(IP Address)**를 부여하고, 지정된 IP 주소로 데이터를 전달하는 역할을 합니다.

IP 패킷의 구조

┌─────────────────────────────────────────────────────┐
│                    IP 패킷                          │
├─────────────────────────────────────────────────────┤
│  출발지 IP: 192.168.0.1                             │
│  목적지 IP: 203.0.113.50                            │
├─────────────────────────────────────────────────────┤
│                  전송 데이터                         │
│            (Payload / Message)                      │
└─────────────────────────────────────────────────────┘

IP 프로토콜의 한계

한계점설명
비연결성대상이 없거나 서비스 불능 상태여도 패킷 전송
비신뢰성패킷 소실, 순서 보장 안됨
프로그램 구분 불가같은 IP 내의 여러 애플리케이션 구분 불가

TCP (Transmission Control Protocol)

TCP는 IP의 한계를 보완하는 신뢰할 수 있는 프로토콜입니다.

TCP/IP 패킷의 구조

┌─────────────────────────────────────────────────────┐
│                    IP 패킷                          │
├─────────────────────────────────────────────────────┤
│  출발지 IP / 목적지 IP                              │
├─────────────────────────────────────────────────────┤
│                   TCP 세그먼트                       │
│  ┌───────────────────────────────────────────────┐  │
│  │ 출발지 PORT / 목적지 PORT                      │  │
│  │ 순서 번호 / 확인 응답 번호                     │  │
│  │ 제어 플래그 (SYN, ACK, FIN 등)                │  │
│  ├───────────────────────────────────────────────┤  │
│  │               전송 데이터                      │  │
│  └───────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────┘

TCP 3-way Handshake

TCP는 연결 지향 프로토콜로, 데이터 전송 전에 3-way handshake를 통해 연결을 설정합니다.

     Client                              Server
        │                                   │
        │ ──── 1. SYN (연결 요청) ────→     │
        │                                   │
        │ ←─── 2. SYN+ACK (요청 수락) ───   │
        │                                   │
        │ ──── 3. ACK (확인) ────→          │
        │                                   │
        │ ═══════ 연결 완료 ═══════         │
        │                                   │
        │ ←──── 데이터 전송 가능 ────→      │
        │                                   │

TCP의 핵심 특징

특징설명
연결 지향3-way handshake로 가상 연결 설정
데이터 전달 보증ACK를 통해 데이터 수신 확인
순서 보장시퀀스 번호로 올바른 순서 재조립

UDP (User Datagram Protocol)

UDP는 IP에 PORT와 체크섬 정보만 추가된 단순하고 빠른 프로토콜입니다.

TCP vs UDP 비교

특성TCPUDP
연결 방식연결 지향비연결
신뢰성높음 (데이터 보증)낮음 (보증 없음)
순서 보장보장됨보장 안됨
속도상대적으로 느림빠름
헤더 크기20바이트 이상8바이트
사용 예웹, 이메일, 파일 전송실시간 스트리밍, DNS, VoIP

UDP 활용 사례

// Java UDP 클라이언트 예제
DatagramSocket socket = new DatagramSocket();
byte[] data = "Hello, UDP!".getBytes();

InetAddress address = InetAddress.getByName("localhost");
DatagramPacket packet = new DatagramPacket(data, data.length, address, 9876);

socket.send(packet);  // 전송 확인 없이 바로 반환
socket.close();

PORT

PORT는 같은 IP 내에서 여러 애플리케이션(프로세스)을 구분하기 위해 사용됩니다.

포트 번호 범위

┌──────────────────────────────────────────────────────────────────┐
│                        포트 번호 범위                              │
├──────────────────────────────────────────────────────────────────┤
│  0 ~ 1023      │ Well-known Ports   │ 시스템 예약 (사용 자제)      │
│  1024 ~ 49151  │ Registered Ports   │ 응용 프로그램 등록용         │
│  49152 ~ 65535 │ Dynamic Ports      │ 클라이언트 임시 사용         │
└──────────────────────────────────────────────────────────────────┘

주요 Well-known 포트

포트프로토콜용도
20, 21FTP파일 전송
22SSH보안 쉘
23Telnet원격 접속
25SMTP이메일 전송
53DNS도메인 이름 해석
80HTTP웹 서비스
443HTTPS보안 웹 서비스

DNS (Domain Name System)

DNS는 사람이 읽기 쉬운 도메인 이름을 IP 주소로 변환해주는 전화번호부 역할을 합니다.

DNS 조회 과정

┌───────────┐     1. google.com?     ┌────────────┐
│  Client   │ ─────────────────────→ │ DNS Server │
│           │                        │            │
│           │ ←───────────────────── │            │
└───────────┘   2. 142.250.196.110   └────────────┘
      │
      │ 3. 실제 접속
      ▼
┌───────────────────┐
│ Google 서버        │
│ 142.250.196.110   │
└───────────────────┘

DNS를 사용하는 이유

  1. 기억 용이성: IP 주소보다 도메인 이름이 기억하기 쉬움
  2. 유연성: 서버 IP가 변경되어도 도메인 이름 유지 가능
  3. 부하 분산: 하나의 도메인에 여러 IP 매핑 가능

URI (Uniform Resource Identifier)

URI는 인터넷 상의 자원(Resource)을 식별하는 통일된 방식입니다.

URI, URL, URN의 관계

                    ┌──────────────────┐
                    │       URI        │
                    │  (식별자 전체)   │
                    └────────┬─────────┘
                             │
              ┌──────────────┴──────────────┐
              │                             │
        ┌─────┴─────┐                 ┌─────┴─────┐
        │    URL    │                 │    URN    │
        │  (위치)   │                 │  (이름)   │
        └───────────┘                 └───────────┘
  • URL (Uniform Resource Locator): 리소스의 위치를 지정
  • URN (Uniform Resource Name): 리소스에 이름 부여 (거의 사용 안됨)

URL 구조

  https://www.example.com:443/search?q=hello&hl=ko#section1
  └──┬──┘└───────┬───────┘└┬┘└──┬──┘└─────┬──────┘└───┬────┘
  scheme       host      port path      query      fragment
구성 요소설명예시
scheme프로토콜http, https, ftp
host호스트명 (도메인/IP)www.example.com
port접속 포트 (생략 가능)80, 443
path리소스 경로 (계층적)/search, /users/123
query쿼리 파라미터?key=value&key2=value2
fragmentHTML 내부 북마크#section1 (서버 미전송)

웹 브라우저 요청 흐름

사용자가 웹 브라우저에 URL을 입력하면 다음과 같은 과정이 발생합니다.

┌─────────────────────────────────────────────────────────────────────────────┐
│                        웹 브라우저 요청 흐름                                   │
└─────────────────────────────────────────────────────────────────────────────┘

1. DNS 조회
   ┌──────────┐  "www.google.com"  ┌────────────┐
   │ Browser  │ ─────────────────→ │ DNS Server │
   │          │ ←───────────────── │            │
   └──────────┘  "142.250.196.110" └────────────┘

2. HTTP 요청 메시지 생성
   ┌──────────────────────────────────────┐
   │ GET /search?q=hello HTTP/1.1        │
   │ Host: www.google.com                │
   │ User-Agent: Mozilla/5.0 ...         │
   └──────────────────────────────────────┘

3. TCP 3-way Handshake (연결 설정)
   Browser ←→ Server: SYN → SYN+ACK → ACK

4. TCP/IP 패킷 생성 및 전송
   ┌─────────────────────────────────────────────────┐
   │ IP: 192.168.0.1 → 142.250.196.110              │
   │ TCP: 52431 → 80                                │
   │ HTTP: GET /search?q=hello HTTP/1.1 ...        │
   └─────────────────────────────────────────────────┘

5. 서버 처리 및 HTTP 응답 생성
   ┌──────────────────────────────────────┐
   │ HTTP/1.1 200 OK                     │
   │ Content-Type: text/html;charset=UTF-8│
   │ Content-Length: 3423                │
   │                                     │
   │ <html>...</html>                    │
   └──────────────────────────────────────┘

6. 클라이언트 응답 처리 (렌더링)
   브라우저가 HTML을 파싱하여 웹 페이지 표시

핵심 용어 정리

용어설명
IP인터넷 프로토콜, 컴퓨터에 주소를 부여하고 패킷 단위로 데이터 전송
TCP신뢰성 있는 연결 지향 프로토콜, 데이터 전달 보증 및 순서 보장
UDP비연결, 비신뢰 프로토콜, 단순하고 빠름
PORT같은 IP 내에서 프로세스를 구분하는 논리적 접점
DNS도메인 이름을 IP 주소로 변환하는 시스템
URI자원을 식별하는 통일된 방식 (URL, URN 포함)
3-way HandshakeTCP 연결 설정 과정 (SYN → SYN+ACK → ACK)