TCP 3-way-handshake와 4-way-handshake를 소켓과 연결지어, 커넥션이 수립되었다는 개념에 대해 설명해 주실 수 있나요?
물론입니다! TCP 3-way-handshake와 4-way-handshake는 각각 TCP 연결의 수립과 종료 과정입니다. 그리고 이것은 소켓 프로그래밍에서 커넥션이 수립되었다는 개념과 직결됩니다.
---
🔌 TCP 소켓 연결이란?
TCP 소켓은 신뢰성 있는 연결 지향형 통신을 제공합니다. 커넥션 수립이란, 클라이언트와 서버가 TCP를 통해 통신 가능한 상태가 되었음을 의미합니다. 이 과정이 3-way-handshake를 통해 이루어지고, 종료는 4-way-handshake로 합니다.
---
✅ TCP 3-Way Handshake (연결 수립)
참여 주체
클라이언트 (Client): 연결을 요청
서버 (Server): 연결을 수락
단계별 흐름
1. SYN – 클라이언트가 연결 요청 (Sequence Number x)
2. SYN-ACK – 서버가 요청 수락 + 자신도 연결 요청 (ACK: x+1, Sequence Number y)
3. ACK – 클라이언트가 서버의 응답에 대해 확인 응답 (ACK: y+1)
Client Server
| SYN (x) |
|-------------------->|
| |
| SYN-ACK (y, ack=x+1)|
|<--------------------|
| |
| ACK (ack=y+1) |
|-------------------->|
🔗 이 순간부터 커넥션이 수립됨
이 시점 이후 read/write 같은 통신 가능. 소켓 관점에서 connect()와 accept()가 성공했다는 뜻입니다.
---
❌ TCP 4-Way Handshake (연결 종료)
단계별 흐름
1. FIN – 클라이언트가 연결 종료 요청 (나는 이제 보낼 데이터 없음)
2. ACK – 서버가 받았다고 응답
3. FIN – 서버도 종료 요청 (나도 더 이상 보낼 것 없음)
4. ACK – 클라이언트가 확인 응답
Client Server
| FIN |
|-------------------->|
| |
| ACK |
|<--------------------|
| |
| FIN |
|<--------------------|
| |
| ACK |
|-------------------->|
📴 이후 소켓은 TIME_WAIT 상태 등을 거쳐 완전히 종료됩니다.
---
🧠 소켓 API와 연결된 개념 요약
TCP 단계 소켓 API 함수 설명
3-way handshake 시작 client.connect() 클라이언트가 서버에 연결 요청
server.accept() 서버가 클라이언트 요청 수락
연결 수립 완료 connect()/accept() 성공 리턴 이 시점부터 데이터 송수신 가능
데이터 통신 send()/recv() 연결된 TCP 소켓으로 데이터 주고받음
4-way handshake 시작 close() 한쪽이 연결 종료 요청
연결 종료 close() 완료 후 모든 데이터 송수신 종료, 리소스 반환
---
🧵 요약
커넥션 수립이란: TCP 3-way-handshake를 통해 양쪽이 통신 가능하다는 것을 확인하고, 연결된 상태가 된 것
소켓에서는: connect()와 accept()가 완료되면 커넥션 수립이 완료된 것
이후: 송수신이 가능하며, 종료 시 4-way-handshake로 연결이 깔끔히 해제됨
---
필요하다면 실제 코드 예시(C/Java/Python)도 같이 보여드릴 수 있어요.
'Spring & Backend' 카테고리의 다른 글
| 자동 스레드 생성 시스템에서 API 요청이 많아 Rate Limit에 걸릴 위험 회피 방안 (6) | 2025.07.26 |
|---|---|
| 항해플러스 백엔드 Lite 1기 솔직 후기[2025년7월27일 기준] (19) | 2025.07.26 |
| 멀티 쓰레딩에 대해서 설명해 주세요 (10) | 2025.07.25 |
| 함수형 프로그래밍에 대해 설명해주세요 (2) | 2025.07.25 |
| RDB에서 페이징 쿼리의 필요성을 설명해 주세요 (2) | 2025.07.24 |
