IP / TCP / UDP / TLS
1. Internet Protocol (IP)
1.1 IP란?
- 네트워크 계층(Layer 3) 프로토콜
- 데이터를 패킷 단위로 전송
- 각 호스트를 IP 주소로 식별
1.2 IP Packet 구조
IP 패킷은 Header와 Data(Payload) 로 구성된다.
| 필드 |
크기 |
설명 |
| Version |
4 bit |
IP 버전 (IPv4 = 4) |
| IHL (Internet Header Length) |
4 bit |
헤더 길이 (단위: 32-bit words) |
| Total Length |
16 bit |
패킷 전체 길이 (헤더 + 데이터) |
| Identification |
16 bit |
단편화된 패킷 식별 |
| Flags |
3 bit |
단편화 제어 (DF, MF) |
| Fragment Offset |
13 bit |
단편화 위치 |
| TTL (Time To Live) |
8 bit |
라우터 홉 수 제한, 홉마다 1씩 감소 |
| Protocol |
8 bit |
상위 프로토콜 (TCP=6, UDP=17, ICMP=1) |
| Header Checksum |
16 bit |
헤더 오류 검출 |
| Source IP Address |
32 bit |
출발지 IP |
| Destination IP Address |
32 bit |
목적지 IP |
| Options |
가변 |
선택적 옵션 필드 |
1.3 IP의 특징
- 비연결형(Connectionless): 사전 연결 설정 없이 패킷 전송
- 비신뢰성(Unreliable): 패킷 전달 보장 없음 (손실·순서 뒤바뀜 가능)
- 최선형 전달(Best-Effort Delivery): 전달을 위해 최선을 다하지만 보장하지 않음
2. ICMP (Internet Control Message Protocol)
2.1 ICMP란?
- IP 위에서 동작하는 네트워크 진단·오류 보고 프로토콜
- IP 패킷의 Protocol 필드 = 1
2.2 주요 ICMP 메시지 타입
| 타입 |
이름 |
설명 |
| 0 |
Echo Reply |
Ping 응답 |
| 3 |
Destination Unreachable |
목적지 도달 불가 |
| 8 |
Echo Request |
Ping 요청 |
| 11 |
Time Exceeded |
TTL 만료 |
2.3 Ping
- Echo Request(Type 8)를 보내고 Echo Reply(Type 0)를 받아 연결 상태 확인
- RTT(Round Trip Time) 측정 가능
2.4 Traceroute
- TTL을 1부터 점진적으로 증가시키며 전송
- 각 라우터에서 TTL 만료 시 Time Exceeded(Type 11) 메시지 반환
- 이를 통해 경로상의 각 라우터(홉) 를 추적
3. ARP (Address Resolution Protocol)
3.1 ARP란?
- IP 주소 → MAC 주소 변환 프로토콜
- 같은 네트워크(LAN) 내에서 동작
3.2 ARP 동작 과정
- 호스트 A가 목적지 IP에 대한 MAC 주소를 모름
- ARP Request 를 브로드캐스트 (FF:FF:FF:FF:FF:FF)로 전송
- 해당 IP를 가진 호스트 B가 ARP Reply (유니캐스트)로 자신의 MAC 주소 응답
- 호스트 A가 ARP Cache(Table) 에 결과 저장
3.3 ARP Cache
- IP-MAC 매핑을 일정 시간 캐시
- 캐시 만료 후 다시 ARP Request 수행
4. IP Addressing
4.1 IPv4 주소
- 32비트, dotted decimal 표기 (예: 192.168.1.1)
- Network 부분 + Host 부분 으로 구성
4.2 서브넷 마스크 (Subnet Mask)
- 네트워크 부분과 호스트 부분을 구분
- 예: 255.255.255.0 → 상위 24비트가 네트워크
4.3 CIDR (Classless Inter-Domain Routing)
- 클래스 기반 주소 체계의 한계를 극복
- 슬래시 표기법: 192.168.1.0/24
- /24 = 상위 24비트가 네트워크 프리픽스
4.4 서브넷팅 (Subnetting)
- 하나의 네트워크를 더 작은 서브넷으로 분할
- 호스트 비트 일부를 서브넷 비트로 사용
- 예: /24 → /26 으로 분할하면 4개의 서브넷 생성 (각 62개 호스트)
4.5 특수 주소
| 주소 |
용도 |
| 127.0.0.1 |
Loopback (자기 자신) |
| 0.0.0.0 |
기본 경로 / 모든 인터페이스 |
| 255.255.255.255 |
브로드캐스트 |
| 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 |
사설 IP 대역 |
5. NAT (Network Address Translation)
5.1 NAT란?
- 사설 IP ↔ 공인 IP 변환
- 라우터/게이트웨이에서 수행
- IPv4 주소 부족 문제 완화
5.2 NAT 동작
- 내부 호스트(사설 IP)가 외부로 패킷 전송
- NAT 장비가 Source IP를 공인 IP로 변환 + 포트 매핑
- 외부 응답이 돌아오면 NAT 테이블을 참조하여 원래 사설 IP로 역변환
5.3 NAT의 종류
- Static NAT: 1:1 매핑 (사설 IP ↔ 공인 IP 고정)
- Dynamic NAT: 공인 IP 풀에서 동적 할당
- PAT (Port Address Translation): 하나의 공인 IP에 포트 번호로 다수 호스트 구분 (가장 일반적)
5.4 NAT의 한계
- End-to-End 연결 모델 훼손
- P2P 통신 어려움
- NAT 테이블 유지 오버헤드
6. UDP (User Datagram Protocol)
6.1 UDP란?
- 전송 계층(Layer 4) 프로토콜
- 비연결형(Connectionless), 비신뢰성(Unreliable)
- 오버헤드가 적고 빠름
| 필드 |
크기 |
설명 |
| Source Port |
16 bit |
출발지 포트 |
| Destination Port |
16 bit |
목적지 포트 |
| Length |
16 bit |
UDP 헤더 + 데이터 전체 길이 |
| Checksum |
16 bit |
오류 검출 (선택적) |
6.3 UDP의 특징
- 핸드셰이크 없음: 바로 데이터 전송
- 순서 보장 없음: 패킷 도착 순서 보장하지 않음
- 흐름 제어 / 혼잡 제어 없음
- 작은 헤더 (8 bytes): TCP(20 bytes)에 비해 오버헤드 적음
6.4 UDP Multiplexing / Demultiplexing
- 포트 번호를 사용하여 여러 애플리케이션의 데이터를 구분
- Multiplexing: 여러 소켓의 데이터를 하나의 UDP 세그먼트로 묶어 전송
- Demultiplexing: 수신 측에서 목적지 포트 번호를 보고 해당 소켓으로 전달
6.5 UDP 사용 사례
- DNS 질의
- 스트리밍 (영상·음성)
- 온라인 게임
- DHCP
- IoT / 실시간 애플리케이션
7. TCP (Transmission Control Protocol)
7.1 TCP란?
- 전송 계층(Layer 4) 프로토콜
- 연결 지향(Connection-Oriented)
- 신뢰성 있는 데이터 전송 보장
| 필드 |
크기 |
설명 |
| Source Port |
16 bit |
출발지 포트 |
| Destination Port |
16 bit |
목적지 포트 |
| Sequence Number |
32 bit |
바이트 스트림 내 순서 번호 |
| Acknowledgment Number |
32 bit |
다음에 받기를 기대하는 바이트 번호 |
| Data Offset (Header Length) |
4 bit |
TCP 헤더 길이 |
| Flags (Control Bits) |
각 1 bit |
SYN, ACK, FIN, RST, PSH, URG 등 |
| Window Size |
16 bit |
수신 윈도우 크기 (흐름 제어) |
| Checksum |
16 bit |
오류 검출 |
| Urgent Pointer |
16 bit |
긴급 데이터 위치 |
| Options |
가변 |
MSS, Window Scaling, Timestamps 등 |
7.3 TCP 3-Way Handshake (연결 수립)
Client Server
| |
|--- SYN (seq=x) -------->|
| |
|<-- SYN+ACK (seq=y, |
| ack=x+1) ------------|
| |
|--- ACK (ack=y+1) ------>|
| |
| [Connection Established]
- SYN: 클라이언트가 초기 시퀀스 번호(ISN)와 함께 연결 요청
- SYN+ACK: 서버가 클라이언트의 SYN 확인 + 자신의 ISN 전송
- ACK: 클라이언트가 서버의 SYN 확인 → 연결 완료
7.4 TCP 4-Way Handshake (연결 종료)
Client Server
| |
|--- FIN ----------------->|
| |
|<-- ACK -----------------|
| |
|<-- FIN -----------------|
| |
|--- ACK ----------------->|
| |
| [Connection Closed]
- FIN: 한쪽이 연결 종료 요청
- ACK: 상대방이 FIN 수신 확인
- FIN: 상대방도 연결 종료 요청
- ACK: FIN 수신 확인 → 연결 종료
7.5 TCP Segment
- TCP는 데이터를 세그먼트(Segment) 단위로 전송
- MSS (Maximum Segment Size): 하나의 세그먼트에 담을 수 있는 최대 데이터 크기
- MTU(Maximum Transmission Unit)에 의해 결정됨: MSS = MTU - IP Header - TCP Header
7.6 TCP 신뢰성 메커니즘
Sequence Number & Acknowledgment
- Sequence Number: 전송하는 데이터의 바이트 단위 순서 번호
- Acknowledgment Number: 수신 측이 다음으로 기대하는 바이트 번호
- 이를 통해 순서 보장 및 중복 탐지 가능
재전송 (Retransmission)
- Timeout 기반 재전송: RTO(Retransmission Timeout) 내에 ACK를 받지 못하면 재전송
- Fast Retransmit: 동일한 ACK를 3번 연속 수신(3 Duplicate ACKs)하면 타임아웃 전에 즉시 재전송
7.7 TCP 흐름 제어 (Flow Control)
- 수신 윈도우(Receive Window) 를 사용
- 수신 측이 처리할 수 있는 버퍼 크기를 Window Size 필드로 송신 측에 알림
- 송신 측은 수신 윈도우 크기를 초과하지 않도록 전송량 조절
- 슬라이딩 윈도우(Sliding Window) 방식으로 구현
7.8 TCP 혼잡 제어 (Congestion Control)
네트워크 혼잡을 감지하고 전송 속도를 조절하는 메커니즘.
혼잡 윈도우 (Congestion Window, cwnd)
- 송신 측이 유지하는 윈도우
- 실제 전송 가능량 = min(cwnd, rwnd)
주요 알고리즘
Slow Start
- cwnd를 1 MSS에서 시작
- ACK를 받을 때마다 cwnd를 지수적으로 증가 (1→2→4→8...)
- ssthresh(Slow Start Threshold) 에 도달하면 Congestion Avoidance로 전환
Congestion Avoidance
- cwnd를 선형적으로 증가 (RTT당 1 MSS씩)
- 패킷 손실 감지 시 조치 수행
패킷 손실 감지 시 동작
| 이벤트 |
동작 |
| Timeout |
ssthresh = cwnd/2, cwnd = 1 MSS (Slow Start 재시작) |
| 3 Duplicate ACKs |
ssthresh = cwnd/2, cwnd = ssthresh (Fast Recovery) |
Fast Recovery
- 3 Duplicate ACKs 수신 시 진입
- cwnd = ssthresh + 3 MSS
- 이후 선형 증가 (Congestion Avoidance)
- Timeout 발생 시 Slow Start로 복귀
8. TLS (Transport Layer Security)
8.1 TLS란?
- 전송 계층 위에서 동작하는 보안 프로토콜
- TCP 연결 위에 암호화, 무결성, 인증 제공
- HTTPS = HTTP + TLS
8.2 TLS가 제공하는 보안
| 보안 목표 |
설명 |
| 기밀성 (Confidentiality) |
데이터 암호화로 도청 방지 |
| 무결성 (Integrity) |
MAC(Message Authentication Code)으로 데이터 변조 탐지 |
| 인증 (Authentication) |
인증서(Certificate)를 통한 서버(선택적으로 클라이언트) 신원 확인 |
8.3 TLS Handshake (TLS 1.2)
Client Server
| |
|--- ClientHello --------------->|
| (지원 cipher suites, |
| 클라이언트 랜덤값) |
| |
|<-- ServerHello ----------------|
| (선택된 cipher suite, |
| 서버 랜덤값) |
|<-- Certificate ----------------|
| (서버 인증서) |
|<-- ServerHelloDone ------------|
| |
|--- ClientKeyExchange --------->|
| (Pre-Master Secret) |
|--- ChangeCipherSpec ---------->|
|--- Finished ------------------>|
| |
|<-- ChangeCipherSpec -----------|
|<-- Finished -------------------|
| |
| [Encrypted Communication] |
- ClientHello: 클라이언트가 지원하는 TLS 버전, cipher suite 목록, 랜덤값 전송
- ServerHello: 서버가 cipher suite 선택, 랜덤값 전송
- Certificate: 서버가 인증서(공개키 포함) 전송
- ServerHelloDone: 서버 핸드셰이크 메시지 완료 알림
- ClientKeyExchange: 클라이언트가 Pre-Master Secret 전송 (서버 공개키로 암호화)
- ChangeCipherSpec: 이후 메시지부터 암호화 적용 알림
- Finished: 핸드셰이크 완료 확인
8.4 키 생성 과정
- Client Random + Server Random + Pre-Master Secret → Master Secret 생성
- Master Secret → 세션 키(Session Keys) 파생
- 클라이언트 암호화 키
- 서버 암호화 키
- 클라이언트 MAC 키
- 서버 MAC 키
8.5 TLS 1.3 개선사항
- 핸드셰이크 1-RTT로 단축 (TLS 1.2는 2-RTT)
- 0-RTT 재연결 지원 (이전 세션 재사용)
- 취약한 cipher suite 제거 (RC4, 3DES, SHA-1 등)
- 핸드셰이크 메시지 대부분 암호화
- Diffie-Hellman 기반 키 교환만 지원 (RSA 키 교환 제거)
- 더 간결하고 안전한 cipher suite 구성
8.6 인증서 (Certificate)
- X.509 표준 형식
- 포함 내용: 도메인 이름, 공개키, 발급자(CA), 유효 기간, 디지털 서명
- CA (Certificate Authority): 인증서를 발급하고 신뢰를 보증하는 기관
- 인증서 체인 (Certificate Chain): Root CA → Intermediate CA → Server Certificate
8.7 TLS 사용 사례
- HTTPS (웹 브라우징)
- 이메일 (SMTPS, IMAPS)
- VPN
- API 통신
- 데이터베이스 연결 암호화
9. 프로토콜 비교 요약
TCP vs UDP
| 항목 |
TCP |
UDP |
| 연결 방식 |
연결 지향 (3-Way Handshake) |
비연결형 |
| 신뢰성 |
신뢰성 보장 (ACK, 재전송) |
비신뢰성 |
| 순서 보장 |
O |
X |
| 흐름 제어 |
O (Window) |
X |
| 혼잡 제어 |
O (Slow Start, AIMD 등) |
X |
| 헤더 크기 |
20~60 bytes |
8 bytes |
| 속도 |
상대적으로 느림 |
빠름 |
| 사용 예 |
HTTP, FTP, SMTP, SSH |
DNS, 스트리밍, 게임, DHCP |
OSI 계층별 프로토콜 위치
| 계층 |
프로토콜 |
| Application (L7) |
HTTP, FTP, SMTP, DNS |
| Transport (L4) |
TCP, UDP |
| Network (L3) |
IP, ICMP, ARP |
| Data Link (L2) |
Ethernet, Wi-Fi |
| Physical (L1) |
전기 신호, 광 신호 |
TLS는 Transport 계층과 Application 계층 사이에 위치하여 보안 기능을 제공한다.