핵심 인사이트 (3줄 요약)
- 본질: TCP는 전송 계층에서 핵심 동작과 제약을 이해하게 해 주는 개념이다.
- 가치: TCP를 이해하면 신뢰성과 지연 사이의 균형을 더 정확히 볼 수 있다.
- 판단 포인트: 설계 시에는 개념 자체보다 적용 조건, 운영 복잡도, 인접 기술과의 경계를 함께 판단해야 한다.
Ⅰ. 개요 및 필요성
-
개념: 전송 계층(Transport Layer)에서 종단 간(End-to-End) 신뢰성 있는 바이트 스트림(Byte Stream) 전송을 보장하는, 인터넷 프로토콜 슈트(TCP/IP)의 핵심 프로토콜 (RFC 793).
-
필요성: 내가 미국 구글 서버에 1GB짜리 영화를 다운받으려 한다. 인터넷망(IP)은 불안정해서 중간에 패킷 3개가 짤려 먹히고, 5번 패킷이 1번 패킷보다 먼저 도착하는 개판이 벌어진다. 만약 이걸 보정해 주지 않으면 내 노트북에 받아진 1GB짜리 영화 파일은 깨져서 재생조차 안 된다. **"야! 데이터 하나 보낼 때마다 번호표 딱딱 붙여! 그리고 못 받은 번호 있으면 구글한테 다시 보내라고(재전송) 화내! 그리고 순서 섞여 오면 1, 2, 3, 4번 순서대로 다시 맞춰서 합체해!!"**라는 완벽한 뒷수습(신뢰성) 시스템이 절대적으로 필요했다.
-
💡 비유:
- UDP (우편엽서): 엽서 100장을 써서 우체통에 냅다 넣습니다. 친구가 몇 장을 잃어버렸는지, 어떤 엽서가 먼저 도착했는지 나는 알 바 없습니다. 빠르지만 무책임합니다.
- TCP (우체국 등기 소포): 100쪽짜리 책을 한 장 한 장 뜯어서 번호표를 붙여 보냅니다. 친구는 1쪽을 받으면 "나 1쪽 받았어! 2쪽 줘!"라고 문자를 보냅니다. 만약 "7쪽 받았어!"가 와야 하는데 안 오면, 내가 7쪽을 잽싸게 복사해서 다시 보냅니다. 조금 느리고 번거롭지만, 친구의 책이 100% 완벽하게 조립됨을 보장합니다.
[소켓 주소 = IP 주소 + 포트 번호]
│
▼
[TCP]
│
└──▶ [UDP]
- 📢 섹션 요약 비유: ** TCP는 택배가 파손될까 봐 뽁뽁이를 10겹으로 감싸고, 배송 기사에게 반드시 **"수취인 친필 서명(ACK)을 받아오라"**고 시키는 편집증 걸린 배달 시스템입니다. 비용(헤더 오버헤드)과 시간(지연)은 들지만, 중요한 서류(웹, 메일, 파일)를 보낼 때 이보다 완벽할 순 없습니다.
Ⅱ. 아키텍처 및 핵심 원리
TCP는 종단 간 신뢰성과 흐름·혼잡 제어를 다루는 축라는 관점에서 이해해야 한다. 소켓 주소 = IP 주소 + 포트 번호와 UDP 사이의 연결점으로 놓고 보면 개념의 역할이 더 분명해진다.
[소켓 주소 = IP 주소 + 포트 번호]
│
▼
[TCP]
│
└──▶ [UDP]
- 📢 섹션 요약 비유: TCP의 내부 원리는 기계의 톱니바퀴처럼 맞물려 돌아간다. 한 부분이 어긋나면 전체 효과가 떨어진다.
Ⅲ. 비교 및 연결
TCP를 볼 때는 앞뒤 개념과의 경계를 함께 봐야 전체 흐름이 선명해진다. 소켓 주소 = IP 주소 + 포트 번호가 기반 조건을 만든다면, TCP는 그 위에서 핵심 메커니즘을 구현하고, UDP는 이를 더 확장된 적용 단계로 연결한다. 따라서 단일 정의보다 신뢰성과 지연에 어떤 차이를 만드는지 비교하는 것이 중요하다.
| 관점 | 선행 개념 | 현재 개념 | 확장 개념 |
|---|---|---|---|
| 초점 | 소켓 주소 = IP 주소 + 포트 번호의 기반 정리 | TCP의 핵심 동작 | UDP의 확장 적용 |
| 자원 관점 | 기본 조건 확보 | 신뢰성 최적화 | 규모와 범위 확대 |
| 판단 포인트 | 도입 가능성 확인 | 현재 메커니즘의 적합성 판단 | 운영·확장 전략 연결 |
- 📢 섹션 요약 비유: TCP는 비슷한 기술들 사이의 차선을 구분하는 분기점과 같다. 어디서 갈라지는지 알아야 헷갈리지 않는다.
Ⅳ. 실무 적용 및 기술사 판단
- 연결 지향형 (Connection-Oriented): 통신 전에 반드시 3-Way Handshake로 세션을 연다.
- 신뢰성 보장 (Reliability): Sequence Number(번호표)와 Acknowledgment(수신 확인, ACK) 번호를 교환하여 중간에 유실된 데이터를 귀신같이 잡아내어 재전송(Retransmission)한다.
- 흐름 제어 (Flow Control): 내 컴퓨터 램(RAM)이 100MB 찼는데 구글이 1GB를 쏴버리면 터진다. 내 컴퓨터가 구글에게 "야, 나 지금 10MB밖에 못 받으니까 천천히 좀 보내!(Window Size 조절)"라며 멱살을 잡고 속도를 낮춘다.
- 혼잡 제어 (Congestion Control): 너와 나 사이의 문제가 아니라 인터넷(KT) 망 자체가 막혀서 데이터가 증발할 때, TCP 스스로 "앗! 톨게이트 막힌다!" 눈치채고 자발적으로 송신 속도를 확 줄여버리는 선진 시민 의식(Slow Start, Congestion Avoidance)을 발휘한다.
2. 무거운 TCP 헤더 (최소 20바이트 ~ 60바이트)
저 4가지 깐깐한 짓을 다 하려다 보니 TCP 헤더 안에는 온갖 기능의 스위치와 도장들이 빼곡하게 박혀 있다.
- 출발지/목적지 포트 (16비트씩): 다중화를 위한 포트 번호.
- Sequence Number (32비트): 내가 보내는 데이터의 첫 번째 바이트 순서 번호. "이거 1,000번 조각이야!"
- Acknowledgment Number (32비트): 상대방에게 "나 1,000번까지 잘 받았어. 이제 1,001번 보낼 차례야!"라고 요구하는 징표.
- Header Length (4비트): 헤더가 워낙 가변적(옵션이 붙음)이라, 헤더가 어디까지인지 알려주는 구분선.
- Window Size (16비트): 내 컴퓨터가 한 번에 소화할 수 있는 남은 램(버퍼) 공간. 흐름 제어의 핵심.
- Checksum (16비트): 가다가 데이터 찌그러졌는지 검사하는 도장.
3. TCP의 핵심 제어 플래그 (6 Control Flags)
TCP 헤더 안에는 6개의 전등(비트)이 스위치처럼 달려 있어, 불이 켜지냐 꺼지냐에 따라 패킷의 성격이 180도 달라진다.
- SYN (Synchronize): 통신을 시작하자며 악수를 청할 때 켜는 불. (접속 요청)
- ACK (Acknowledgment): 네 말 잘 들었다고 끄덕일 때 켜는 불. (수신 확인)
- FIN (Finish): 우리 그만 헤어지자며 정중하게 이별을 통보할 때 켜는 불. (연결 정상 종료)
- RST (Reset): 대판 싸우고 "야 닥쳐! 다 끊어!!"라며 강제로 선을 쥐어뜯어 버릴 때 켜는 불. (강제 연결 리셋, 비정상 종료)
- PSH (Push): 버퍼에 데이터 쌓일 때까지 기다리지 말고 지금 있는 거 당장 화면에 쏴주라는 급행 불.
- URG (Urgent): 이거 폭탄 해체 암호니까 순서 무시하고 제일 먼저 처리해!! 라는 응급 불.
┌─────────────────────────────────────────────────────────────┐
│ TCP 바이트 스트림(Byte Stream)의 쪼개기 마법 │
├─────────────────────────────────────────────────────────────┤
│ │
│ [ 구글 서버 ] ── 10MB짜리 압축 파일 전송 준비! │
│ │
│ TCP 왈: "야! MTU가 1500이니까, 1460 바이트(MSS)씩 톱으로 썰어!" │
│ │
│ 1번 조각: [ TCP 헤더 (Seq: 1) ] [ 데이터 1460 바이트 ] ──▶ 슝! │
│ 2번 조각: [ TCP 헤더 (Seq: 1461) ] [ 데이터 1460 바이트 ] ──▶ 슝!│
│ 3번 조각: [ TCP 헤더 (Seq: 2921) ] [ 데이터 1460 바이트 ] ──▶ 슝!│
│ │
│ * 내 PC의 조립: "오, 1번 다음에 1461번 왔고... 2921번 오면, │
│ 이 번호표(Seq) 순서대로 본드로 다시 붙이면 │
│ 10MB짜리 원본 100% 복구 완료네!" │
└─────────────────────────────────────────────────────────────┘
실무 체크리스트
- 요구사항과 병목 지점을 먼저 수치화한다.
- 운영 복잡도와 도입 효과를 함께 검증한다.
- 인접 기술과의 연계를 배포 전에 점검한다.
- 📢 섹션 요약 비유: ** TCP의 제어 플래그들은 야구 경기의 **"포수 사인"**과 같습니다. 투수(송신자)가 함부로 공을 던지지 못하게, 포수(수신자)가 손가락으로 SYN(시작), ACK(잘 받음), FIN(그만 던져) 사인을 끊임없이 주고받으며 완벽한 호흡으로 경기를 이끌어갑니다.
Ⅴ. 기대효과 및 결론
TCP는 전송 계층을 이해할 때 핵심 축을 잡아 주는 개념이다. 올바르게 적용하면 신뢰성 개선과 구조적 단순화에 기여하지만, 조건을 잘못 잡으면 오히려 복잡도와 운영 부담이 커질 수 있다. 앞으로는 UDP, 적응형 저지연 전송, 자동화 운영과의 결합을 통해 더 정교하게 발전할 가능성이 크다. 따라서 이 개념은 정의 자체보다 “언제 쓰고 언제 다른 방법으로 넘길 것인가”의 관점으로 기억하는 것이 좋다. 향후에는 적응형 저지연 전송 같은 자동화 흐름과 결합되어 더 정교한 형태로 확장될 가능성이 크다.
- 📢 섹션 요약 비유: TCP는 큰 흐름 속에서 기억해야 오래 남는다. 지금의 장점과 다음 확장 방향을 같이 보면 전체 그림이 선명해진다.
📌 관련 개념 맵
| 개념 | 연결 포인트 |
|---|---|
| 소켓 주소 = IP 주소 + 포트 번호 | 현재 개념이 등장하기 전에 갖춰야 할 배경이나 인접 선행 개념이다. |
| 세그먼트 (Segment) | 전송 계층이 다루는 기본 단위다. |
| 흐름 제어 (Flow Control) | 수신자 처리 속도를 넘지 않게 조절한다. |
| UDP | 현재 개념이 확장되거나 적용 단계로 이어질 때 자주 함께 언급된다. |
📈 관련 키워드 및 발전 흐름도
[선행 개념: 소켓 주소 = IP 주소 + 포트 번호]
│
▼
[현재 개념: TCP]
│
├──▶ [확장 A: UDP]
└──▶ [확장 B: 적응형 저지연 전송]
TCP는 소켓 주소 = IP 주소 + 포트 번호에서 출발해 현재 메커니즘을 정교화하고, 이후 UDP와 적응형 저지연 전송 같은 확장 흐름으로 이어진다고 보면 기억이 오래간다.
👶 어린이를 위한 3줄 비유 설명
- 물건을 보낼 때 받는 사람이 너무 빨리 받으면 놓칠 수 있어요.
- 이 개념은 천천히 보낼지, 다시 보낼지, 길이 막히면 멈출지를 정해줘요.
- 그래서 멀리 보내도 덜 잃어버리고 더 안정적으로 도착해요.