네트워크 - 3-Way HandShake & 4-Way Handshake

델리만쥬 디퓨저·2024년 9월 8일

네트워크

목록 보기
2/9
  • TCP는 신뢰성을 확보할 때 3-way handshake라는 작업을 진행함

3-Way Handshake


1. SYN 단계 : 클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보냄. ISN은 새로운 TCP 연의 첫 번째 패킷에 할당된 임의의 시퀀스 번호를 말하며 이는 장치마다 다를 수 있음
2. SYN + ACK 단계 : 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라언트의 ISN + 1을 보냄
3. ACK 단계 : 클라이언트는 서버의 ISN + 1한 값인 승인번호를 담아 ACK를 서버에 보냄

  • 이렇게 3-way handshake 과정 이후 신뢰성이 구축되고 데이터 전송을 시작함
  • TCP는 이 과정이 있기 때문에 신뢰성이 있는 계층이라고 하며 UDP는 이 과정이 없기 때문에 신뢰성이 없는 계층이라고 함

용어

SYN : SYNchronization의 약자, 연결 요청 플래그
ACK : ACKnowledgement의 약자, 응답 플래그
ISN : Initial Sequence Numbers의 약어, 초기 네트워크 연결을 할 때 할당된 32비트 고유 시퀀스 번호


  • TCP가 연결을 해제할 때는 4-way handshake 과정이 발생

4-Way Handshake


1. 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보냄. 이후 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다림
2. 서버는 클라이언트로 ACK라는 승인 세그먼트를 보냄. 이후 CLOSE_WAIT 상태에 들어감. 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어감
3. 서버는 ACK를 보내고 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 보냄
4. 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 됨. 이후 클라이언트는 어느 정도의 시간을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해제됨

TIME_WAIT : 그냥 연결을 닫으면 되지 왜 일정 시간 뒤에 닫는가?

  • 지연 패킷이 발생할 경우를 대비하기 위함
    - 패킷이 뒤늦게 도달하고 이를 처리하지 못한다면 데이터 무결성 문제가 발생
    - 예를 들어 전체 데이터가 100일 때 일부 데이터인 50만 들어오는 현상이 발생할 수 있음
  • 패킷 재전송에 대한 안정성 보장
    - 마지막 ACK가 도착하지 않은 경우, 연결이 완전히 닫히지 않았다고 생각한 상대방이 FIN 패킷을 재전송할 수 있음. 이때 TIME_WAIT 상태에 있으면 재전송된 FIN에 대해 다시 ACK를 보낼 수 있어 안전한 연결 종료를 보장

용어

TIME_WAIT : 소켓이 바로 소멸되지 않고 일정 시간 유지되는 상태. 지연 패킷 등의 문제점을 해결하는데 쓰임. CentOS6, 우분투에는 60초로 설정되어 있으며 윈도우는 4분으로 설정되어 있음. 즉, OS마다 조금씩 다를 수 있음.
데이터 무결성(data integrity) : 데이터의 정확성과 일관성을 유지하고 보증하는 것

profile
< 너만의 듀얼을 해!!! )

0개의 댓글