네트워크 기초 EP.09 — 연결을 맺고 끊기, 전화 예절로 배우는 TCP
여보세요로 시작하는 전화 예절처럼 TCP가 3-way로 연결을 맺고, 4-way로 예의 있게 끊고, 안 들리면 다시 보내는 과정을 따라가는 약 2분 강의와 정리.
TCP는 세 번 주고받아 연결을 맺고, 네 번 주고받아 끊습니다. 중간에 빠지면 다시 보냅니다. 이번 편은 이 과정을 우리가 매일 하는 전화 통화에 그대로 겹쳐 봅니다. 약 2분, 4개 챕터의 3D 강의예요.
소리를 켜고 보세요. 약 2분짜리 영상입니다.
강의 보기
📺 Peanut Radio AI 유튜브 채널에서 보기: 채널 · 네트워크 기초 재생목록 — 구독하면 새 강의를 먼저 받아 볼 수 있어요.
오늘의 질문
TCP는 데이터를 보내기 전에 꼭 연결부터 맺어요. 어떻게 맺고, 어떻게 끊을까요?
지난 편에서는 등기우편 같은 TCP와 엽서 같은 UDP를 비교했습니다. 이번에는 그 등기우편이 오가기 전과 후, 연결을 여는 순간과 닫는 순간을 들여다봅니다.
| 챕터 | 내용 |
|---|---|
| 1. 전화 예절: 여보세요? | 용건 전에 서로 들리는지부터 확인 |
| 2. 연결 맺기: 3-way 핸드셰이크 | SYN → SYN+ACK → ACK |
| 3. 예의 있게 끊기: 4-way 종료 | FIN → ACK → FIN → ACK |
| 4. 안 들리면 다시 말해요: 재전송 | 확인이 안 오면 그 부분만 다시 |
1. 전화 예절: 여보세요?
전화를 걸면 바로 용건부터 말하지 않죠. 먼저 서로 들리는지 확인합니다.
- “여보세요?”
- “네, 들려요.”
- “저도 잘 들려요, 말씀하세요.”
이렇게 세 번 주고받고 나서야 본격적으로 대화를 시작합니다. 어색해 보여도, 이 짧은 확인 덕분에 양쪽 모두 “상대가 내 말을 들을 준비가 됐다”는 걸 알게 됩니다.
2. 연결 맺기: 3-way 핸드셰이크
TCP도 똑같습니다. 1편에서 잠깐 봤던 3-way 핸드셰이크예요.
- 내 PC → 서버: SYN — “연결해도 될까요?”
- 서버 → 내 PC: SYN + ACK — “좋아요, 저도 준비됐어요.”
- 내 PC → 서버: ACK — “확인했어요.”
세 번째 ACK가 도착하면 연결이 열립니다. 이제부터 지난 편에서 본 번호 붙인 상자들이 오갈 수 있어요.
3. 예의 있게 끊기: 4-way 종료
전화를 끊을 때도 갑자기 뚝 끊으면 실례죠. 그래서 TCP는 끊을 때 네 번 주고받습니다.
- 내 PC: FIN — “이제 그만 보낼게요.”
- 서버: ACK — “알겠어요.”
- 서버도 남은 걸 다 보낸 뒤: FIN — “저도 끝났어요.”
- 내 PC: ACK — “안녕히.”
이걸 4-way 종료라고 합니다. 핵심은 2번과 3번 사이입니다. 내가 그만 보내겠다고 해도 서버는 아직 할 말이 남아 있을 수 있어요. 그래서 “알겠어요”와 “저도 끝났어요”를 따로 보냅니다. 양쪽 모두 할 말을 다 했는지 확인하고 끊는 거예요.
4. 안 들리면 다시 말해요: 재전송
통화 중에 말이 끊기면 “잘 안 들렸어요, 다시 말해 주세요” 하죠. TCP도 보낸 데이터에 대한 확인이 정해진 시간 안에 오지 않으면 그 부분을 다시 보냅니다. 이걸 재전송이라고 해요.
그래서 인터넷이 잠깐 불안해도 웹페이지는 끝까지 제대로 열립니다. 지난 편에서 “그냥 넘어간다”고 했던 UDP와 가장 크게 갈리는 지점이 바로 여기예요.
한 줄 정리
TCP는 3번 주고받아 연결하고, 4번 주고받아 끊어요. 안 들리면 다시 보내기.
퀴즈
- TCP가 연결을 맺을 때 주고받는 횟수는? (3번 / 4번)
- 보낸 데이터의 확인이 안 오면 TCP는? (다시 보낸다 / 그냥 넘어간다)
정답 보기
- 3번 — SYN → SYN+ACK → ACK, 3-way 핸드셰이크예요.
- 다시 보낸다 — 재전송! 그냥 넘어가는 건 UDP예요.
집에서 해보기: 지금 통화 중인 연결 보기
명령 창(Windows: 명령 프롬프트, Mac: 터미널)에 아래 명령을 입력해 보세요.
1
2
3
4
5
# Windows
netstat -an | findstr ESTABLISHED
# Mac
netstat -an | grep ESTABLISHED
ESTABLISHED는 지금 연결된 통화, TIME_WAIT은 막 끊은 통화예요. 브라우저 탭을 몇 개 닫고 다시 실행해 보면 목록이 바뀌는 게 보입니다.
실무에서 달라지는 점
- “연결 시간 초과”는 3-way 단계에서 막혔다는 신호다. SYN을 보냈는데 답이 없으면 방화벽이나 NSG가 중간에서 막고 있을 가능성이 큽니다. Windows에서는
Test-NetConnection 서버주소 -Port 443으로 TCP 연결이 맺어지는지부터 확인하면 범위가 확 줄어듭니다. - TIME_WAIT이 쌓이는 것 자체는 정상이다. 끊은 직후 잠시 남는 상태라서 연결을 자주 맺고 끊는 서버에서는 많이 보입니다. 숫자만 보고 장애로 판단하기보다 연결을 재사용하는지부터 봅니다.
- 재전송이 많으면 느려진다. TCP는 결국 도착시키지만, 다시 보내는 만큼 시간이 걸립니다. VPN이나 회선이 불안한 지점에서 “끊기진 않는데 느리다”는 증상이 나오는 이유입니다.
시리즈 다른 편
- 네트워크 기초 EP.08 — TCP와 UDP, 등기우편과 엽서의 차이
- 네트워크 기초 EP.10 — HTTP, 웹이 대화하는 법 (발행 예정)
- 시리즈 전체 목록: 네트워크 기초