프로그래밍공부(Programming Study)/네트워크(Network)

📌 네트워크 기본 개념: TCP/UDP, 핸드셰이크, 소켓 상태, 라우팅, 서브넷

Chann._.y 2025. 2. 23. 20:35
728x90

1. TCP와 UDP 개요

TCP와 UDP는 전송 계층(Transport Layer, L4)에서 사용되는 대표적인 프로토콜이다.

프로토콜 특징 장점 단점
TCP (Transmission Control Protocol) 연결 지향(Connection-oriented), 신뢰성 보장 신뢰성 높은 데이터 전송, 패킷 순서 보장 속도가 느림, 오버헤드 발생
UDP (User Datagram Protocol) 비연결 지향(Connectionless), 신뢰성 없음 빠른 전송 속도, 실시간 데이터 전송에 적합 패킷 손실 가능성 있음, 흐름제어 없음

💡 TCP는 신뢰성이 필요한 통신 (예: 웹 브라우징, 이메일)에 사용되고,
💡 UDP는 속도가 중요한 서비스 (예: 스트리밍, 온라인 게임, VoIP)에 적합하다.


2. TCP 3-Way Handshake (3단계 핸드셰이크)

TCP는 신뢰성 있는 연결을 위해 3-Way Handshake 과정을 거친다.

📌 3단계 핸드셰이크 과정

1️⃣ SYN (Synchronize) 전송 → 클라이언트가 서버에게 연결 요청
2️⃣ SYN-ACK (Synchronize + Acknowledgment) 응답 → 서버가 요청 수락
3️⃣ ACK (Acknowledgment) 전송 → 클라이언트가 최종 확인 후 연결 확립

🔽 패킷 흐름

클라이언트  →  [SYN]  →  서버  
클라이언트  ←  [SYN-ACK]  ←  서버  
클라이언트  →  [ACK]  →  서버  

연결이 완료되면 데이터 전송 시작!

✅ 3-Way Handshake의 특징

양쪽이 서로 통신 가능 상태인지 확인
패킷 전달 경로를 확립하고 신뢰성을 보장


3. TCP 4-Way Handshake (4단계 핸드셰이크)

TCP 연결을 종료할 때는 4-Way Handshake를 사용한다.

📌 4단계 핸드셰이크 과정

1️⃣ FIN 전송 → 클라이언트가 연결 종료 요청
2️⃣ ACK 응답 → 서버가 확인
3️⃣ FIN 전송 → 서버도 연결 종료 요청
4️⃣ ACK 응답 → 클라이언트가 확인 후 종료

🔽 패킷 흐름

클라이언트  →  [FIN]  →  서버  
클라이언트  ←  [ACK]  ←  서버  
클라이언트  ←  [FIN]  ←  서버  
클라이언트  →  [ACK]  →  서버  

연결이 완전히 종료됨!

✅ 4-Way Handshake의 특징

데이터 손실을 방지하고 정상적인 종료를 보장
TCP의 신뢰성을 유지하면서 연결을 끊음


4. 리눅스의 소켓 상태

리눅스에서 netstat -an 또는 ss -an 명령어를 사용하면 소켓 상태를 확인할 수 있다.

📌 TCP 소켓 상태

상태 설명
LISTEN 서버가 클라이언트의 연결을 기다리는 상태
SYN_SENT 클라이언트가 SYN 패킷을 보내고 응답을 기다리는 상태
SYN_RECEIVED 서버가 SYN을 받고 SYN-ACK를 보낸 상태
ESTABLISHED 양쪽 연결이 완료된 상태
FIN_WAIT_1 클라이언트가 FIN을 보내고 종료 대기
FIN_WAIT_2 서버가 ACK를 보냈지만 FIN을 아직 안 보낸 상태
CLOSE_WAIT 서버가 FIN을 받고 응답을 기다리는 상태
LAST_ACK 서버가 마지막 ACK를 보내고 종료 준비 상태
TIME_WAIT 모든 패킷이 정리될 때까지 기다리는 상태

5. 3계층 레벨의 라우팅

네트워크 계층(L3)에서 라우팅(Routing)은 패킷을 최적의 경로로 전달하는 과정이다.

📌 주요 라우팅 기법

정적 라우팅 (Static Routing) → 수동으로 경로 설정
동적 라우팅 (Dynamic Routing) → 라우터가 자동으로 경로 업데이트

📌 주요 라우팅 프로토콜

  • RIP (Routing Information Protocol): 홉(hop) 수 기반, 소규모 네트워크에서 사용
  • OSPF (Open Shortest Path First): 최단 경로 알고리즘 사용, 대규모 네트워크에서 효율적
  • BGP (Border Gateway Protocol): 인터넷의 핵심 프로토콜

🔎 라우팅 테이블 확인 명령어 (리눅스)

ip route show

6. IP 서브넷과 서브넷 마스크

📌 IP 주소 체계

IPv4 주소는 네트워크 주소 + 호스트 주소로 구성된다.
예) 192.168.1.10/24 → 네트워크 주소 192.168.1.0, 호스트 10

📌 서브넷 마스크

서브넷 마스크는 네트워크와 호스트를 구분하는 역할을 한다.
| CIDR 표기 | 서브넷 마스크 | 최대 호스트 수 |
|-----------|--------------|---------------|
| /8 | 255.0.0.0 | 16,777,214 |
| /16 | 255.255.0.0 | 65,534 |
| /24 | 255.255.255.0 | 254 |

📌 서브넷 계산 예제 (Python)

```python
import ipaddress

서브넷 정보 출력

network = ipaddress.ip_network("192.168.1.0/24", strict=False)
print(f"네트워크 주소: {network.network_address}")
print(f"브로드캐스트 주소: {network.broadcast_address}")
print(f"사용 가능한 호스트 수: {network.num_addresses - 2}") # 네트워크, 브로드캐스트 제외
``

728x90