삼방향 핸드셰이크란?
TCP 기반의 통신은 서로간의 신뢰성있는 통신을 하기 위하여 3 Way-Handshake 라는 절차를 통해 서로간의 원할한 통신이 가능한지 선행 절차를 수행하게 된다.
(데이터를 송 수신 하기 이전에 세션을 확립하는 절차)
- 목적지 호스트가 UP 상태인지 확인한다.
- 서로간의 원할한 패킷 흐름 유지가 가능하다.
< TCP 3 way handshake >
ACK = 확인 응답
SYN = 일련 번호
1. Client -> Server [일련번호 전송]
서버와 연결을 위해 맨 처음 [SYN] 플래그가 설정된 패킷을 송신한다.
Sequence number = 0
2. Server -> Client [확인응답 + 일련번호]
클라이언트로 부터 [SYN] 플래그가 설정된 패킷을 수신한 서버는
그에 대한 확인 응답으로 [ACK]를 설정하여 보냄과 같이 [SYN]을 같이 설정하여
하나의 패킷으로 송신한다.
Sequence number = 0
Acknowledgment number = 1 (1번 패킷의 sequence + 1)
3. Client -> Server [확인응답]
서버로부터 [SYN] 플래그가 설정된 패킷을 수신한 클라이언트는
확인 응답으로 [ACK] 플래그를 설정한 패킷을 서버로 송신
Sequence number = 0
Acknowledgment number = 1 (2번 패킷의 Sequence number + 1)
확인 응답 번호는 이전 패킷의 Sequence Number 보다 하나가 큰 값으로 설정되어 전송된다.
위의 절차가 정상적으로 끝나면 서로간의 데이터를 주고 받을 수 있는 상태가 된다.
SYN_SENT : 클라이언트에서 SYN 패킷을 송신 했지만 서버로부터 ACK를 받지 못한 상태
(1번에 해당)
SYN_RCVD : 서버에서 클라이언트로 SYN/ACK 패킷을 송신 하였지만 ACK 패킷을 수신받지 못한 상태 (2번에 해당)
ESTABLISHED : 서버-클라이언트 간의 3 way-handshake 상태가 끝난상태. 이 상태부턴 데이터 교환이 가능해진다 (3번에 해당)
댓글 없음:
댓글 쓰기