TCP 3-way handshake
TCP 연결을 설정할 때 클라이언트와 서버가 서로의 상태를 확인하고 신뢰성 있는 데이터 전송 경로를 확보하는 과정임 (연결 설정 과정)
동작 과정
- 클라이언트 -> 서버 (SYN)
- 클라이언트가 서버로 SYN(Synchronize) 패킷을 전송하여 연결을 요청
- 이때 초기 시퀀스 번호(ISN)를 생성하여 전송
- 서버 -> 클라이언트 (SYN+ACK)
- 서버가 클라이언트의 요청을 수락하고 SYN+ACK 패킷을 전송
- 서버도 자신의 초기 시퀀스 번호(ISN)를 생성
- 클라이언트 -> 서버 (ACK)
- 클라리언트가 서버로 ACK(Acknowledgment) 패킷을 전송하여 연결이 완료되었음을 확인
Client Server
| -------- SYN --------> | Step 1: 연결 요청
| <----- SYN + ACK ------ | Step 2: 요청 수락 및 응답
| -------- ACK --------> | Step 3: 연결 확립 완료
역할
- 양쪽의 연결 가능 여부 확인
- 초기 시퀀스 번호 교환
- 데이터 전송 전 연결 경로 설정
발생할 수 있는 문제
- SYN Flooding Attack: 악의적인 클라이언트가 다량의 SYN 패킷을 전송해 서버의 리소스를 고갈시키는 공격
- 방어 방법: SYN Cookies 나 방화벽 설정으로 대처
TCP 4-way handshake
TCP 연결을 정상적으로 종료하기 위한 과정. 양쪽 모두 연결을 종료할 준비가 되었을 때 각자의 연결을 독립적으로 닫음
동작 과정
- 클라이언트 -> 서버 (FIN)
- 클라이언트가 FIN(Final) 패킷을 보내 연결을 종료하겠다고 요청
- 서버 -> 클라이언트 (ACK)
- 서버가 클라이언트의 FIN 패킷을 수신하고 ACK 패킷을 보내 종료 요청을 확인
- 서버 -> 클라이언트 (FIN)
- 서버도 자신의 작업을 마무리하고 FIN 패킷을 전송하여 연결을 닫겠다고 요청
- 클라이언트 -> 서버 (ACK)
- 클라이언트가 서버의 FIN 패킷을 수신하고 ACK 패킷을 보내 연결 종료를 확인
Client Server
| -------- FIN --------> | Step 1: 연결 종료 요청
| <-------- ACK -------- | Step 2: 요청 수락
| <-------- FIN -------- | Step 3: 서버 종료 요청
| -------- ACK --------> | Step 4: 종료 확인
왜 4단계 일까?
- 연결 종료 시 데이터 송수신이 완전히 끝났는지 확인하기 위해 각 방향의 연결을 독립적으로 종료
- TCP는 양방향 통신이기 때문에 클라이언트와 서버 모두 종료 절차를 따로 진행
3-way handshake | 4-way handshake | |
목적 | 연결 설정 | 연결 종료 |
단계 수 | 3단계 | 4단계 |
패킷 종류 | SYN, SYN + ACK, ACK | FIN, ACK, FIN, ACK |
데이터 전송 여부 | 데이터 전송 전 | 데이터 전송 후 |
728x90
반응형
'네트워크' 카테고리의 다른 글
HTTP 1/2/3 (0) | 2025.01.22 |
---|---|
HTTP 헤더 (0) | 2025.01.22 |
HTTP & HTTPS (0) | 2025.01.21 |
브라우저 (0) | 2021.01.24 |
HTTP 란? (0) | 2021.01.18 |