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 비교
| 특성 | TCP | UDP |
|---|---|---|
| 연결 방식 | 연결 지향 | 비연결 |
| 신뢰성 | 높음 (데이터 보증) | 낮음 (보증 없음) |
| 순서 보장 | 보장됨 | 보장 안됨 |
| 속도 | 상대적으로 느림 | 빠름 |
| 헤더 크기 | 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, 21 | FTP | 파일 전송 |
| 22 | SSH | 보안 쉘 |
| 23 | Telnet | 원격 접속 |
| 25 | SMTP | 이메일 전송 |
| 53 | DNS | 도메인 이름 해석 |
| 80 | HTTP | 웹 서비스 |
| 443 | HTTPS | 보안 웹 서비스 |
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를 사용하는 이유
- 기억 용이성: IP 주소보다 도메인 이름이 기억하기 쉬움
- 유연성: 서버 IP가 변경되어도 도메인 이름 유지 가능
- 부하 분산: 하나의 도메인에 여러 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 |
| fragment | HTML 내부 북마크 | #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 Handshake | TCP 연결 설정 과정 (SYN → SYN+ACK → ACK) |