3-way hand shake, 4-way hand shake

민선규·2023년 2월 16일
0

네트워크

목록 보기
5/16
post-thumbnail

SVN, ACK

  • SYN(synchronize sequence numbers) - 연결 확인을 보내는 무작위의 숫자 값
  • ACK(acknowledgements) - Client 혹은 Server로부터 받은 SYN에 1을 더해 SYN을 잘 받았다는 ACK

3-way hand shake

연결하고자 하는 두 장치 간의 논리적 접속을 성립하기 위해 사용하는 연결 확인 방식으로, 3번의 확인 과정을 거친다고 해서 3-way handshake라고 부른다.

3-way hand shake 흐름

  1. 먼저 Open 한 클라이언트가 SYN를 보내고 SYN_SENT 상태로 대기한다.
  2. 서버는 SYN-RECEIVED 상태로 바꾸고 SYN과 응답 ACK를 보낸다.
  3. SYN과 응답 ACK를 받은 클라이언트는 ESTABLISHED 상태로 변경하고 서버에게 응답 ACK)를 보낸다.
  4. 응답 ACK를 받은 서버는 ESTABLISHED 상태로 변경한다.

3-way hand shake 상태 설명

  • CLOSED : 연결 수립을 시작하기 전의 기본 상태 (연결 없음)
  • LISTEN : 포트가 열린 상태로 연결 요청 대기 중
  • SYN-SENT : SYN을 요청한 상태
  • SYN-RECEIVED :SYN 요청을 받고 상대방의 응답을 기다리는 중
  • ESTABLISHED :연결 수립이 완료된 상태, 서로 데이터를 교환할 수 있다.

4-way hand shake

3-way handshake와 반대로 가상 회선 연결을 해제할 때 주고 받는 확인작업이다. 이 역시 4번의 확인과정을 거친다고 하여 4-way hand shake라고 부른다.

4-way hand shake 흐름

  1. 먼저 close를 실행한 클라이언트가 FIN을 보내고 FIN-WAIT-1 상태로 대기한다.
  2. 서버는 CLOSE-WAIT으로 바꾸고 응답 ACK를 전달한다. 동시에 해당 포트에 연결되어 있는 애플리케이션에게 close를 요청한다.
  3. ACK를 받은 클라이언트는 상태를 FIN-WAIT-2로 변경한다.
  4. close 요청을 받은 서버 애플리케이션은 종료 프로세스를 진행하고 FIN을 클라이언트로 보내 LAST_ACK 상태로 바꾼다.
  5. FIN을 받은 클라이언트는 ACK를 서버에 다시 전송하고 TIME-WAIT으로 상태를 바꾼다.
  6. TIME-WAIT에서 일정 시간이 지나면 CLOSE 된다. ACK를 받은 서버도 포트를 CLOSED로 닫는다.

※ TIME-WAIT : 먼저 연결을 끊는 쪽에서 생성되는 소켓으로, 혹시 모를 전송 실패에 대비하기 위해 존재하는 소켓이며,
TIME-WAIT이 없다면, 패킷의 손실이 발생하거나 통신자 간 연결 해제가 제대로 되지 않을 수 있다.

4-way hand shake 상태 설명

  • ESTABLISHED : 연결 수립이 완료된 상태, 서로 데이터를 교환할 수 있다.
  • FIN-WAIT-1 : 자신이 보낸 FIN에 대한 ACK를 기다리거나 상대방의 FIN을 기다린다.
  • FIN-WAIT-2 : 자신이 보낸 FIN에 대한 ACK를 받았고, 상대방의 FIN을 기다린다.
  • CLOSE-WAIT : 상대방의 FIN(종료 요청)을 받은 상태. 상대방 FIN에 대한 ACK를 보내고 어플리케이션에 종료를 알린다.
  • LAST-ACK : COLSE-WAIT 상태를 처리 후 자신의 FIN 요청을 보낸 후 FIN에 대한 ACK를 기다리는 상태.
  • TIME-WAIT :모든 FIN에 대한 ACK를 받고 연결 종료가 완료된 상태. 새 연결과 겹치지 않도록 일정 시간 기다린 후 CLOSED로 전이 한다.
  • CLOSED : 연결 수립을 시작하기 전의 기본 상태 (연결 없음)

참고 문서 및 링크

0개의 댓글