cs

3-way handshake, 4-way handshake

ssoonn 2024. 7. 1. 00:11

3-Way Handshake 는 TCP의 접속,4-Way Handshake는 TCP의 접속 해제 과정이다.

 

3-way handshake

클라이언트, 서버 간의 논리적 접속을 성립하기 위해 사용하는 연결 확인 방식

  1. 클라이언트가 서버에 연결 요청 (SYN 단계)
    • SYN Flag = 1
    • Sequenct Number에 시퀀스 번호 a(ISN : 임의의 랜덤 숫자) 함께 전송
  2. 서버가 연결 허락 (SYN+ACK 단계)
    • SYN Flag = 1, ACK Flag = 1
    • Acknowledgment Number(a + 1), Sequenct Number(다른 ISN b) 전송
  3. 클라이언트와 서버 연결 설정 (ACK 단계)
    - ACK Flag = 1
    - Acknowledgment Number(b + 1) 전송
    - max segment size 중 더 작은 값이 데이터 전송 시 사용된다.

ISN : TCP 기반 데이터 통신에서 각각의 새 연결에 할당된 고유한 32비트 시퀀스 번호.

TCP 연결을 통해 전송되는 다른 데이터
바이트와 충돌하지 않는 시퀀스 번호를 할당하는 데 도움이 된다.

 

4-way handshake

데이터의 송수신이 완료되고 TCP의 연결을 해제하는 과정

  1. 클라이언트가 서버에 연결을 종료하겠다는 FIN 플래그가 설정된 패킷 전송(FIN_WAIT_1)
  2. 서버는 ACK로 응답. 이후 자신의 통신이 끝날때까지 기다린다(CLOSE_WAIT). 추가로 전송할 패킷이 남아있다면 이어서 전송한다.
  3. 클라이언트는 서버의 ACK를 받게 되면 (FIN_WAIT_2) 상태로 변경된다.
  4. 서버에서 최종적으로 패킷이 전송되면 FIN을 클라이언트에 보내고(LAST_ACK), 클라이언트는 FIN을 받으면 ACK를 보낸 후 (TIME_WAIT) 상태로 변경되며 일정시간동안 대기한다.
  5. 일정시간동안 대기한 뒤, 클라이언트도 CLOSED 상태로 전환되며 통신이 최종적으로 종료된다. 

TIME_WAIT

지연 패킷이 발생했을 때 데이터 무결성을 해결하기 위함. 두 배의 최대 세그먼트 수명(MSL) 시간을 기다리며. 기본적으로 MSL은 2분이다. 또한 연결을 올바르게 닫힌상태로 만들기 위해 존재한다. 예를 들어 CLOSED가 아닌 LAST_ACK로 되어 있으면 그 다음 연결 때 오류가 나타납니다.

 

 

ref.

https://velog.io/@yuyun0124/TCP%EC%9D%98-%EC%97%B0%EA%B2%B0%EC%84%B1%EB%A6%BD%EA%B3%BC%EC%A0%95-3-%EC%9B%A8%EC%9D%B4-%ED%95%B8%EB%93%9C%EC%89%90%EC%9D%B4%ED%81%AC-4-%EC%9B%A8%EC%9D%B4-%ED%95%B8%EB%93%9C-%EC%89%90%EC%9D%B4%ED%81%AC

 

TCP의 연결성립과정 : 3-웨이 핸드쉐이크 / 4-웨이 핸드 쉐이크

네트워크 스터디 3주차

velog.io

 

https://velog.io/@averycode/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-TCPUDP%EC%99%80-3-Way-Handshake4-Way-Handshake

 

[네트워크] TCP/UDP와 3 -Way Handshake & 4 -Way Handshake

TCP / UDP / 3-Way Handshake / 4-Way Handshake

velog.io