3-Way Handshake
3-Way Handshake는 클라이언트와 서버 간의 연결을 설정하기 위한 3단계 과정이다.
1. 클라이언트 → 서버: SYN 패킷 (연결 요청)
- 클라이언트는 연결을 요청하기 위해 SYN 플래그를 설정한 패킷을 서버로 보냄.
- 클라이언트는 이 패킷에 자신의 시퀀스 번호(Seq=x)를 포함시킴.
Client → Server: [SYN, Seq=x]
- Seq=x: 클라이언트가 설정한 시퀀스 넘버
- SYN=1: 연결을 요청하는 플래그 설정
2. 서버 → 클라이언트: SYN-ACK 패킷 (응답)
- 서버는 클라이언트의 SYN 요청을 받으면, SYN-ACK 패킷을 응답으로 보냄.
- 이때 서버는 자신의 시퀀스 번호(Seq=y)와 클라이언트의 Seq 번호 + 1을 포함한 Ack=x+1 값을 설정함.
Server → Client: [SYN, ACK, Seq=y, Ack=x+1]
- Seq=y: 서버의 시퀀스 넘버
- Ack=x+1: 클라이언트의 시퀀스 넘버 + 1
- SYN=1, ACK=1: 연결을 수락하며 응답
3. 클라이언트 → 서버: ACK 패킷 (연결 완료)
- 클라이언트는 서버의 SYN-ACK 응답을 확인하고, ACK 패킷을 서버에 보내 연결을 완료함.
- 클라이언트는 서버의 시퀀스 번호 + 1을 Ack 값으로 설정함.
Client → Server: [ACK, Seq=x+1, Ack=y+1]
- Seq=x+1: 클라이언트의 시퀀스 넘버 + 1
- Ack=y+1: 서버의 시퀀스 넘버 + 1
- SYN=0, ACK=1: 연결 설정을 위한 최종 확인
4-Way Handshake
4-Way Handshake는 클라이언트와 서버 간의 연결을 종료하는 과정이다.
1. 클라이언트 → 서버: FIN 패킷 (연결 종료 요청)
- 클라이언트는 더 이상 데이터를 보내지 않기 위해 FIN 플래그가 설정된 패킷을 서버에 보냄.
- 클라이언트는 이 패킷에 자신의 시퀀스 번호(Seq=x)를 포함시킴.
Client → Server: [FIN, Seq=x]
- FIN=1: 연결 종료 요청
- Seq=x: 클라이언트의 시퀀스 넘버
2. 서버 → 클라이언트: ACK 패킷 (확인 응답)
- 서버는 클라이언트의 FIN 패킷을 받으면, ACK 패킷을 보냄으로써 종료 요청을 확인함.
- 서버는 클라이언트의 Seq 번호 + 1을 포함한 Ack=x+1 값을 설정함.
Server → Client: [ACK, Ack=x+1]
- Ack=x+1: 클라이언트의 시퀀스 넘버 + 1
- FIN=0, ACK=1: 클라이언트의 종료 요청을 확인함.
3. 서버 → 클라이언트: FIN 패킷 (서버의 연결 종료 요청)
- 서버는 이제 자신도 더 이상 보낼 데이터가 없으면, 자신의 FIN 패킷을 클라이언트에게 보냄.
- 서버는 자신의 시퀀스 번호(Seq=y)를 포함시킴.
Server → Client: [FIN, Seq=y]
- FIN=1: 서버의 종료 요청
- Seq=y: 서버의 시퀀스 넘버
4. 클라이언트 → 서버: ACK 패킷 (최종 응답 및 종료)
- 클라이언트는 서버의 FIN 요청을 받으면, ACK 패킷을 보내서 연결 종료를 최종적으로 확인함.
- 클라이언트는 서버의 시퀀스 번호 + 1을 Ack 값으로 설정함.
Client → Server: [ACK, Ack=y+1]
- Ack=y+1: 서버의 시퀀스 넘버 + 1
'지식창고' 카테고리의 다른 글
HTTP 요청 메세지 분석 (0) | 2025.03.29 |
---|---|
인코딩의 종류 (0) | 2025.03.29 |