ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [네트워크] 3-way handshake 와 4-way handshake
    네트워크 2024. 5. 10. 22:57

    이 글은 TCP의 접속과 해제 과정에 대해서 알아보는 글이다 


    기본적인 TCP 정보를 알고 싶으면 아래 글을 참고 하면 된다 
    https://hyeonni.tistory.com/44

     

    [네트워크] TCP 와 UDP

    전송 계층 (Transport Layer)프로토콜 : TCP, UDP양 끝단의 사용자들이 신뢰성 있는 데이터를 주고 받을 수 있도록 해준다 💡전송 계층 (Transport Layer) vs 네트워크 계층 (Network Layer)전송 계층 : Application

    hyeonni.tistory.com


    💡 3-Way Handshake

    3-Way Handshake는 한마디로 말하면 TCP의 접속 과정이다

    • 데이터를 전송하기 위해 TCP 통신을 이용하여 네트워크 설정 하는 과정이다
    • 양쪽에서 모두 데이터를 전송할 준비가 되었다는 것을 보장한다
    • 실제로 데이터 전달이 시작하기 전에 다른 쪽이 준비되었다는 것을 알 수 있도록 한다
    • 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해서 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다

     

    메커니즘

     

    TCP 통신은 PAR(Positive Acknowledgement with Re-transmission)을 통해 신뢰적인 통신을 제공

     

    PAR을 사용하면 ACK을 받을 때까지 데이터 유닛을 재전송한다

     

     

    작동 방식

    Client(송신자) 는 서버(수신자)와 연결 하기 위해 3-way handshake를 통하여 연결 요청을 하게 된다

    3-way handshake 작동 방식

    1. client는 서버와 커넥션을 연결하기 위해 SYN을 보냄
    2. 서버가 SYN을 받고 클라이언트에 받았다는 신호인 ACK와 SYN 패킷을 보낸다
    3. 클라이언트는 서버의 응답인 SYN + ACK를 받고 ACK를 보낸다

     

    💡SYN? ACK?

     

    SYN(Synchronization) : 연결 요청, 세션을 설정하는데 사용되고 초기에 시퀀스 번호를 보낸다

    ACK(Acknowledgement) :

    • 패킷 도착여부를 확인 하기 위해 사용되는것, TCP Header에 포함되어 있는 4Byte 크기의 정수 데이터
    • 수신한 패킷의 Sequence Number와 Data의 크기에 따라 ACK 번호가 결정된다 
    • 공식은 SEQ + (Data Size)인데 만약, Data Size가 0 이라면 같은 ACK을 반복하게 보내고 받는다 
    • 이를 방지하기 위해 Data size가 0 이라면 Sequence 번호에 1을 더한 값을 ACK으로 설정한 후 패킷을 전달하게 된다

    💡 4 - way Handshake

    3-way Handshake는 TCP 연결을 할때 사용한다고 하면 4-way Handshake는 세션을 종료하기 위해 수행하는 과정이다

     

    -> 다른 점은 3-way Handshake는 SYN 패킷을 보냈다면 4-way Handshake는 FIN 플래그를 전송한다

    • FIN(finish) : 세션을 종료시키는데 사용된다, 더 이상 보낸 데이터가 없음을 의미한다

     

    작동 방식

    4-way Handshake 작동 방식

    1. client가 연결을 종료하겠다는 FIN 플래그를 서버에게 전송한다 -> 이때 client는 FIN_WAIT 상태가 된다
    2. 서버는 클라이언트의 FIN 요청을 받고 확인했다고 ACK 를 클라이언트에게 보낸다 -> 이때 자신의 통신이 끝날때 까지 기다린다 (이 상태가 TIME_OUT) 그리고 나서 CLOSE_WAIT 상태가 된다
    3. 서버는 모든 통신이 끝났으면 연결이 종료되었다는 FIN 플래그를 클라이언트에게 전송한다 -> 이때 서버는 LAST_ACK 상태가 됨
    4. 클라이언트는 확인했다는 ACK를 보낸다 하지만, 서버로부터 받지 못한 데이터가 있을수 있으므로 TIME_WAIT을 통해 기다린다 (실질적인 종료과정 CLOSED에 들어감)
    • 이때 TIME_WAIT 상태는 의도치 않은 에러로 인해 연결이 데드락으로 빠지는 것을 방지
    • 클라이언트는 이렇게 데드락에 빠지는 것을 방지하기 위해 서버로부터 FIN을 수신하더라도 일정시간 동안 세션을 남겨놓고 남은 패킷을 기다린다 -> 이것을 TIME_WAIT라고 한다
    • 만약 에러로 인해 종료가 지연되거나 시간이 초과되면 CLOSED로 들어감
    • 서버는 ACK를 받은 이후 소켓을 닫음 -> 이게 CLOSED
    • TIME_WAIT 시간이 끝나면 클라이언트도 소켓을 닫음 -> 이것도 CLOSED

    '네트워크' 카테고리의 다른 글

    [네트워크] 쿠키(Cookie), 세션(Session), 토큰(Token)  (1) 2024.06.09
    [네트워크] TCP 와 UDP  (0) 2024.05.09
Designed by Tistory.