-
TCP 3-way HandShake & 4-way HandShakeCS이론/네트워크 2022. 12. 19. 20:05
TCP란?
TCP는 Transport Layer에서 사용되는 프로토콜이다.
TCP는 신뢰성이 높고 연결 지향성 서비스를 제공한다. 그러므로 정보 전달에 있어 안정적으로, 순서대로, 에러 없이 교환할 수 있도록 하는 것에 목적을 둔 프로토콜이다.
이러한 특징으로 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 handshake를 사용한다. 3-Way Handshake 는 TCP의 접속, 4-Way Handshake는 TCP의 접속 해제 과정이다.
3-Way Handshake 란?
3-Way Handshake는 데이터를 전송하기 전에 정확한 전송을 보장하기 위해 사전에 세션을 수립하는 과정이다.
양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달이 시작하기 전에 한쪽에서 다른 쪽이 준비되었다는 것을 알 수 있다.
플래그 정보
포트 상태 정보
3-Way Handshake 동작 과정
1. Client → Server (SYN)
- 서버에 접속을 요청하는 SYN 패킷을 전송한다.
- 송신자가 최초로 데이터를 전송할 때 Sequence Number를 임의의 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 새그먼트를 전송한다.
- Client는 SYN을 보낸 후 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다.
2. Server → Client (SYN/ACK)
- LISTEN 상태인 Server가 SYN을 받고, 클라이언트에게 요청을 수락(ACK)했으며 접속 요청 프로세스인 클라이언트도 포트를 열어달라(SYN)는 메시지를 전송한다.
- ACK Number필드를 Sequence Number + 1로 지정하고 SYN과 ACK 플래그 비트를 1로 설정한 새그먼트 전송
- SYN을 받은 서버는 SYN_RECEIVED 상태가 된다.
3. Client → Server (ACK)
- 클라이언트는 서버의 응답을 받았다는 의미로, ACK Number필드를 Sequence Number + 1로 지정하고 서버로 ACK 플래그가 설정된 새그먼트를 전송한다.
- ACK 요청을 보낸 클라이언트는 ESTABLISHED 상태가 된다.
- ACK를 받은 서버는 ESTABLISHED 상태가 된다.
4-Way Handshake 란?
3-Way Handshake가 세션을 수립하는 과정이었다면 4-Way Handshake는 세션을 종료하기 위해 수행되는 과정이며, 여기서 FIN 플래그를 사용한다.
포트 상태 정보
4-Way Handshake 동작 과정
1. Client → Server (FIN)
- close()가 호출되면 연결을 종료한다는 FIN 패킷을 보낸다.
- FIN 패킷에는 ACK로 포함되어있다.
- FIN 패킷을 보낸 후 FIN_WAIT_1 상태가 된다.
2. Server → Client (ACK)
- FIN 패킷을 받은 서버는 응답 패킷 ACK를 보낸다.
- 응답 패킷 ACK를 보낸 후 CLOSE_WAIT 상태가 된다.
- 아직 남은 데이터가 있다면 마저 전송을 마친 후에 close( )를 호출한다.
- 클라이언트는 ACK 패킷을 받은 후 FIN_WAIT_2 상태가 된다.
3. Server → Client (FIN)
- 데이터를 모두 보냈다면, 서버는 FIN 패킷을 클라이언트에게 보낸 후에, 승인 번호를 보내줄 때까지 기다리는 LAST_ACK 상태로 들어간다.
4. Client → Server (ACK)
- 클라이언트는 FIN 패킷을 받고, 확인했다는 ACK 응답을 보낸다.
- ACK 응답을 보낸 후 클라이언트는 TIME_WAIT 상태가 된다.
- TIME_WAIT 상태는 의도치 않은 에러로 인해 연결이 데드락으로 빠지는 것을 방지한다.
- 만약 에러로 인해 종료가 지연되다가 타임이 초과되면 CLOSED 상태로 들어간다.
- 서버는 ACK를 받은 이후 소켓을 닫는다 (Closed)
- TIME_WAIT 시간이 끝나면 클라이언트도 닫는다 (Closed) - 기본 240초
참고