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

윤용운·2022년 11월 13일
0

네트워크

목록 보기
6/8

3-way HandShake

연결하고자 하는 두 장치(클라이언트, 서버) 간의 논리적 접속을 성립하기 위해 사용하는 연결 확인 방식
3way

TCP Header

  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의 연결을 해제하는 과정.
4way

  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로 되어 있으면 그 다음 연결 때 오류가 나타납니다.

Reference

Microsoft - TCP/IP를 통한 3방향 핸드셰이크에 대한 설명

0개의 댓글