3-way handshake(SYN, ACK)

chaeng_ni·2024년 2월 3일
0

CS-Network

목록 보기
4/6

3-way handshake

  • TCP/IP 프로토콜로 통신하기 전, 정확한 정보 전송을 위해 상대방 컴퓨터와 세션을 수립하는 과정
  • TCP 연결 초기화
  • 서로 통신을 위해 관문(port)를 확인하고 연결하기 위해 3번의 요청(SYN), 응답(ACK) 되는 것
    • 이 과정에서 시간이 많이 소요됨
  • TCP 과정 중(connection setup - data transfer - connection termination) connection setup에 해당

연결 과정

패킷 = 세그먼트 (TCP 에서)

  1. 클라이언트가 서버에 연결 요청을 위해 SYN 패킷 전송
  2. 서버에서 해당 포트는 LISTEN 상태로 SYN 패킷을 받고 SYN_RCV 상태로 변경
  3. 서버는 정상적으로 받았다는 ACK 패킷 + 상대방의 포트를 열어달라는 SYN 패킷을 같이 전송
  4. 클라이언트는 ACK + SYN 패킷을 받고 ESTABLISHED 상태 변경 후 서버에 ACK를 전송
  5. ACK를 받은 서버는 상태가 ESTABLISHED로 변경
  6. connection setup 완료

  • LISTEN : 서버의 데몬이 떠서 접속 요청을 기다리는 상태
  • ESTABLISHED : 3 way-handshaking 이 완료된 후 서로 연결된 상태
    그 이외의 상태
  • SYN-SENT : 로컬의 클라이언트 어플리케이션이 원격 호스트에 연결을 요청한 상태
  • SYN_RECEIVED : 서버가 원격 클라이언트로부터 접속 요구를 받아 클라이언트에게 응답을 하였지만 아직 클라이언트에게 확인 메시지는 받지 않은 상태
  • FIN-WAIT1, CLOSE-WAIT, FIN-WAIT2 : 서버에서 연결을 종료하기 위해 클라이언트에게 종결을 요청하고 회신을 받아 종료하는 과정의 상태
  • TIME-WAIT : 연결은 종료되었지만 분실되었을지 모를 느린 세그먼트를 위해 당분간 소켓을 열어두고 있는 상태
  • CLOSING : 흔하지 않지만 주로 확인 메시지가 전송도중 분실된 상태
  • CLOSED : 완전히 종료

4-way handshake

  • TCP 과정 중(connection setup - data transfer - connection termination) connection termination에 해당
  • TCP 연결을 종료

연결 종료 과정

패킷 = 세그먼트 (TCP 에서)

  1. 클라이언트가 Activate Close 를 하면 클라이언트에서 서버에 FIN 세그먼트 전송 (클 : FIN-WAIT 상태)
  2. 서버는 FIN 세그먼트를 받았다는 응답에 대한 ACK 패킷을 전송 (서 : CLOSE_WAIT 상태)
  3. 서버는 Passive Close 를 받으면 서버에서 클라이언트에 FIN 세그먼트 전송(클 : LAST-ACK 상태)
  4. 클라이언트는 FIN 세그먼트를 받았다는 응답에 대한 ACK 패킷을 전송 (클 : TIME-WAIT 상태)
  5. 서버가 ACK 를 받으면 연결 종료

출처

https://velog.io/@devharrypmw/TCPUDP-TCP와-UDP의-특징과-차이
https://bangu4.tistory.com/74

profile
코딩테스트 준비 블로그

0개의 댓글