[네트워크] TCP 3-way handshake 와 TCP 4-way handshake

orca·2024년 10월 10일

CS

목록 보기
31/46

TCP 에서 신뢰성 있는 데이터 전송을 위해 연결 시에는 3-way handshake를 통해 클라이언트와 서버 간의 연결을 설정합니다. 연결 해제 시에는 4-way handshake를 통해 클라이언트와 서버가 연결을 안전하게 종료합니다.

TCP

  • 송신/수신 프로세스 사이에 신뢰성있는 전송
  • 순서에 맞는 전달
  • 흐름 제어 : 클라이언트가 너무 빠르게 데이터를 보내서 서버가 처리하지 못하는 상황을 방지
  • 혼잡 제어 : 네트워크가 과부하되지 않도록 클라이언트가 전송 속도를 조절
  • 연결 지향 : 신뢰성있는 전송을 위해 클라이언트/서버 프로세스 간 연결을 유지하며 동작함
  • 전송 간의 피드백 정보를 이용함

TCP 3-way handshake

  • TCP 연결을 설정할 때, 클라이언트와 서버가 세번의 신호 교환을 함
  • 두 당사자가 데이터 전송을 위해 준비되었음을 확인하고 시퀀스 번호를 동기화함
  • SYN → SYN-ACK → ACK
    1. SYN (클라이언트 → 서버)
      • 클라이언트는 시퀀스 번호를 m으로 설정
      • 클라이언트는 SYN 플래그를 시퀀스 번호로 설정함
      • 클라이언트가 SYN 패킷을 보냄
    2. SYN-ACK (서버 → 클라이언트)
      • 서버는 클라이언트의 SYN 패킷을 수신함
      • 서버는 시퀀스 번호를 n 으로 설정함
      • 서버는 SYN 플래그를 시퀀스 번호로 설정함
      • 서버는 ACK 플래그를 m+1 로 설정함
      • 서버가 SYN-ACK 패킷을 보냄
    3. ACK (클라이언트 → 서버)
      • 클라이언트는 서버의 SYN-ACK 패킷을 수신함
      • 클라이언트는 ACK 플래그를 n+1 로 설정함
      • 클라이언트는 ACK 패킷을 보냄

TCP 4-way handshake

  • TCP 연결을 해제할 때, 클라이언트와 서버가 네번의 신호 교환을 함
  • FIN → ACK → FIN → ACK
    1. FIN (클라이언트 → 서버)
      • 클라이언트는 FIN 플래그를 설정함
      • 클라이언트가 FIN 패킷을 보냄
      • 클라이언트는 FIN_WAIT_1 상태로 전환함
      • 서버는 클라이언트의 FIN 패킷을 받고, CLOSE_WAIT 상태로 전환함
    2. ACK (서버 → 클라이언트)
      • 서버는 ACK 패킷을 보냄
      • 클라이언트는 ACK 패킷을 받고,FIN_WAIT_2 상태로 전환함
    3. FIN (서버 → 클라이언트)
      • 서버가 종료 절차를 시작함
      • 서버가 FIN 패킷을 보냄
      • 서버는 LAST_ACK 상태로 전환함
    4. ACK (클라이언트 → 서버)
      • 클라이언트는 서버의 FIN 패킷을 받음
      • 클라이언트는 ACK 패킷을 서버에 보냄
      • 서버는 클라이언트의 ACK 패킷을 받고, 연결이 종료되어 CLOSED 상태가 됨
      • 클라이언트는 TIME_WAIT 상태로 전환하며, 일정 시간이 지나면 CLOSED 됨

0개의 댓글