[CS] TCP, IP 완전 정복 – 네트워크 전송 원리와 차이점 총정리
1. TCP
🧱 TCP의 핵심 개념
📌 연결 지향(Connection-Oriented)
- 통신을 시작하기 전에 3-way handshake로 연결을 먼저 설정
- 데이터를 보낼 준비가 되었는지를 양측이 확인
📌 신뢰성 보장(Reliable)
- 패킷의 순서 보장
- 손실되거나 손상된 데이터는 재전송
- 중복 데이터는 제거
- 흐름 제어와 혼잡 제어로 네트워크 과부화 방지
📌 전이중(Full-Duplex)
- 양방향 동시에 데이터 송수신 가능
🔄 TCP 연결 설정 – 3-Way Handshake
TCP 연결을 설정하기 위해 세 단계가 필요하다:
- 클라이언트 -> 서버: SYN 전송
- 클라이언트가 연결 요청 (SYN 플래그)
- 시퀀스 번호 포함
- 서버 -> 클라이언트: SYN + ACK 응답
- 서버가 요청 수락
- 자체 시퀀스 번호 포함 (SYN)
- 클라이언트의 번호에 대한 응답 (ACK)
- 클라이언트 -> 서버: ACK 전송
- 최종 승인
- 연결 완료 후 데이터 전송 가능
이 과정을 통해 TCP는 통신 전 서로를 “알고” 시작하게 된다.
📬 데이터 전송 방식
✅ 시퀀스 번호와 ACK
- 각 바이트는 고유한 시퀀스 번호를 가짐
- 수신자는 데이터 수신 후 다음에 올 시퀀스 번호를 ACK 번호로 응답
- 예: 송신자가 1000번부터 1049번까지 보냈다면, 수신자는 ACK = 1050으로 응답
✅ 재전송 (Retransmission)
- ACK가 일정 시간 내 오지 않으면 재전송
- 타이머에 기반한 손실 감지
🌊 흐름 제어 (Flow Control) - 슬라이딩 윈도우 (Sliding Window)
- 수신 측은 한 번에 받을 수 있는 데이터 크기를 윈도우 크기로 알려줌
- 송신자는 이 범위 내에서만 데이터를 보냄
- 수신자가 과부하 상태이면 윈도우 크기를 줄여 송신 속도 조절
🌐 혼잡 제어 (Congestion Control)
네트워크 자체가 과부하 상태일 때를 감지하고 조절:
- Slow Start: 처음엔 천천히 시작하여 점점 전송량 증가
- Congestion Avoidance: 혼잡을 감지하면 전송 속도 줄임
- Fast Retransmit: ACK가 연속 중복되면 빠르게 재전송
- Fast Recovery: 재전송 이후 속도 회복
이 기능들은 전체 네트워크 안정성을 지키는 데 핵심이다.
🔚 연결 종료 - 4-Way Handshake
TCP 연결 해제는 데이터가 양방향 모두 완료된 뒤 다음 4단계로 진행:
- FIN (클라이언트 -> 서버): 연결 종료 요청
- ACK (서버 -> 클라이언트): 요청 수락
- FIN (서버 -> 클라이언트): 서버도 종료 요청
- ACK (클라이언트 -> 서버): 종료 승인 -> 연결 완전 종료
종료 후에도 일정 시간 동안 포트를 TIME_WAIT 상태로 유지하여 중복 패킷 처리
⚔️ TCP vs UDP 특징 비교
항목 | TCP (Transmission Control Protocol) | UDP (User Datagram Protocol) |
---|---|---|
연결 방식 | 연결 지향 (3-way handshake) | 비연결형 (connectionless) |
데이터 전송 보장 | 보장 (순서, 무결성, 재전송 등) | 보장하지 않음 |
속도 | 느림 (검증과 제어 때문) | 빠름 (제어 없음) |
패킷 순서 보장 | 보장함 | 보장하지 않음 |
재전송 메커니즘 | 있음 (ACK, timeout) | 없음 |
흐름 제어 / 혼잡 제어 | 있음 (슬라이딩 윈도우, 혼잡 제어 알고리즘 등) | 없음 |
헤더 크기 | 20 바이트 이상 | 8 바이트 |
전송 단위 | 세그먼트(segment) | 데이터그램(datagram) |
신뢰성 | 높음 | 낮음 |
용도 예시 | 웹 브라우징, 파일 전송, 이메일 등 | 스트리밍, 실시간 게임, VoIP, DNS 요청 등 |
3. TCP vs UDP 실제 사용 사례 비교
용도 | TCP 사용 이유 |
---|---|
웹사이트 접속 (HTTP/HTTPS) | 정확한 데이터 수신 필요, 페이지가 누락되면 문제 발생 |
이메일 (SMTP, IMAP) | 메일 누락 방지 필요, 순서 중요 |
파일 다운로드 (FTP) | 전체 데이터를 정확히 받아야 함 |
용도 | UDP 사용 이유 |
---|---|
실시간 게임 | 지연보다 실시간 반응 중요, 일부 패킷 손실 감수 가능 |
영상/음성 스트리밍 | 연속성 우선, 손실 시 품질 저하 감수 |
DNS 요청 | 빠른 질의/응답 필요, 재시도 전략으로 보완 가능 |
VoIP | 끊김 없는 통신 중요, 재전송 시 오히려 지연 유발 가능 |
3. IP
✅ 핵심 역할
- 주소 지정 (Addressing): 각 기기에 고유한 IP 주소를 부여하여 식별 가능하게 함
- 패킷 전달 (Routing): 데이터를 목적지까지 전달하도록 네트워크 간 경로를 설정
📦 IP의 기본 단위: 패킷(Packet)
- IP는 데이터를 작게 나눈 패킷 단위로 전달
- 패킷은 헤더(Header) + 데이터(Payload)로 구성됨
🧱 IP의 두 가지 주요 버전
🔹 IPv4 (Internet Protocol version 4)
- 32비트 주소체계, 4개 옥텟: 192.168.0.1
- 총 약 43억 개의 주소 지원
- 주소 고갈 문제 존재 → 사설 IP, NAT로 임시 대응
🔹 IPv6 (Internet Protocol version 6)
- 128비트 주소체계, 16진수 8개 블록: 2001:0db8:85a3::8a2e:0370:7334
- 사실상 무한대에 가까운 주소 지원
- 보안, 확장성, 효율성이 개선됨
🚚 라우팅(Routing)과 전달
IP는 최종 목적지까지 데이터를 보내기 위한 경로를 찾는다. 이 역할은 라우터가 수행한다.
- IP는 베스트 에포트 방식(Best-effort delivery) 사용 -> 전송 성공 여부를 보장하지 않음 (TCP가 이를 보완)
- TTL(Time to Live)은 패킷이 무한 루프에 빠지지 않도록 일정 홉(hop, 라우터 수)을 초과하면 폐기되도록 설정
🔧 공용 IP vs 사설 IP
항목 | 공용 IP (Public IP) | 사설 IP (Private IP) |
---|---|---|
정의 | 인터넷 상에서 고유하게 사용되는 IP | 내부 네트워크에서만 사용되는 IP |
사용 예 | 웹 서버, 클라우드 인스턴스, 외부 노출 서버 | 가정용 라우터, 사무실 내부 PC, 프린터 등 |
주소 예시 | 13.124.67.89 , 142.250.206.110 등 |
192.168.x.x , 10.x.x.x , 172.16.x.x ~ 172.31.x.x |
접근성 | 인터넷과 직접 통신 가능 | 외부 인터넷과 직접 통신 불가 (NAT 필요) |
NAT 필요 여부 | 필요 없음 | 필요함 (NAT 통해 공용 IP로 변환) |
중복 여부 | 전 세계에서 고유해야 함 | 네트워크 내에서 중복 가능 |
보안 측면 | 외부에 노출되므로 방화벽 등 보안 강화 필요 | 기본적으로 외부 접근 불가, 보안성 높음 |
사용 목적 | 외부 공개 서비스, 인터넷 자원 연결 | 내부 통신, 네트워크 자원 공유 |
주소 할당 | ISP나 클라우드 제공자가 할당 | 공유기나 DHCP 서버가 자동 할당 |
비용 | 일반적으로 유료 (특히 클라우드에서 과금 대상) | 무료, 무제한 사용 가능 |
4. TCP와 IP의 관계
구분 | TCP (Transmission Control Protocol) | IP (Internet Protocol) |
---|---|---|
역할 | 데이터를 어떻게 보낼 것인가 (신뢰성 있는 전송) | 데이터를 어디로 보낼 것인가 (주소 지정과 전달 경로 설정) |
계층 | 전송 계층 (Transport Layer) | 인터넷 계층 (Internet Layer) |
주요 기능 | - 연결 설정 (3-way handshake) - 순서 보장 - 재전송 - 흐름/혼잡 제어 |
- IP 주소 부여 - 라우팅 - 패킷 분할/조립 - TTL 관리 |
전송 단위 | 세그먼트 (Segment) | 패킷 (Packet) |
신뢰성 | 있음 (데이터 손실/오류 시 재전송) | 없음 (최대한 전송만 시도함) |
주소 관리 | 없음 (IP를 기반으로 동작함) | 있음 (IPv4, IPv6로 주소 지정) |
헤더 포함 정보 | 포트 번호, 시퀀스 번호, ACK 번호, 제어 플래그 등 | 출발지/목적지 IP, TTL, 프로토콜 정보 등 |
댓글남기기