ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TCP / 3,4-Way Hand Shake / 흐름제어 / 혼잡제어 / UDP
    CS/네트워크 2024. 8. 14. 08:59

     

    참고도서: 그림으로 쉽게 이해하는 웹/HTTP/네트워크,임지영(2023), 위키북스


    TCP(Transmission Control Protocol)

    🩵신뢰성 있는 데이터 통신을 위한 프로토콜

     

    패킷으로 데이터를 전달하다보면 유실, 오류 등의 문제가 생겨 신뢰할 수 있는 데이터를 전달받을 수 없음. TCP는 이를 해결함.

     

    1. 어떤 패킷이 사라졌는지 파악하기 위해 패킷마다 번호를 붙임
    2. 데이터를 주고받을 때 확인 절차를 추가해 데이터가 정확히 목적지에 도착했는지 클라이언트가 서버에게 확인

     

    어떻게 이런 의사소통이 가능할까? -헤더!

     

     

    헤더(Header)

    모든 프로토콜은 데이터의 앞에 헤더(header)라는 정보를 추가해 전송한다. 헤더 안에는 해당 데이터에 대한 정보가 담겨있다.

     

    TCP의 헤더

    TCP의 헤더 플래그

    • 플래그(Flag): 패킷의 상태를 알리는 목적의 헤더 정보

    플래그의 종류

     

    ACK(Acknowledgement) : 앞서 받은 데이터를 잘 처리했다는 의미

    SYN(Synchronize) : 연결을 요청하는 플래그

    FIN(Finish) : 통신이 마무리되어 연결의 해제를 요청하는 플래그

     

     

    3-way handshake(연결수립)

    TCP는 신뢰성 있는 통신이 주요한 목적인 프로토콜로 데이터를 주고받기 전에 미리 클라이언트와 서버가 서로 통신할 준비가 됐는지 확인해 연결 오류로 인한 데이터 유실을 방지한다. 이렇게 클라이언트와 서버가 서로 연결된 상태를 유지하며 데이터를 전달해서 TCP를 연결형 프로토콜이라고 부른다.

     

    어떻게 연결하고 해지할까? 3방향 핸드셰이크!

    SYN_RECEIVED : 연결 요청을 받은 상태 / ESTABLISHED : 연결됨

     

     

    4-way handshake(연결해제)

     

    ▶TCP의 연결 종료 방식

     

    • CLOSE_WAIT : 연결 종료 요청을 받은 서버는 먼저 확인했다는 ACK 메시지를 보내고 미처 보내지 못한 패밋을 마저 보내며 자신의 통신이 끝날 때까지 기다린다.
    • LAST-ACK : 서버가 자신 또한 연결을 종료할 준비가 되었다면 클라이언트에게 FIN 플래그를 전송하고 자신은 마지막 ACK 플래그를 기다리는 상태가 된다.
    • TIME-WAIT: 클라이언트는 미처 받지 못한 패킷이 들어오는 등 혹시 모를 상황을 대비해서 잠시 기다린다.

     

     

     

     

    흐름제어(Flow control)

    TCP가 정상적으로 데이터를 받지 못하는 원인 중에 하나는 전송자와 수신자 간에 데이터 속도 차이가 발생했을 때다. 이를 해결하는 방법은 보내는 쪽이 받는 쪽의 속도에 맞추는 것이다(전송자의 통신 속도 제어).

     

     

    💡요청마다 일일이 확인 응답을 받아야 하고, 답장이 없으면 다음 데이터를 전송할 수 없으므로 시간이 오래 걸리고 효율이 떨어져 오늘날엔 거의 사용하지 않는다.

     

     

     

     

    슬라이딩 윈도(Sliding window)

    정지-대기 방식과 달리 매번 확인 응답을 받지 않고도 적절한 속도로 데이터를 전달하는 방법은? 딱 수신자가 받을 수 있는 만큼만 보내면 된다! 수신자의 윈도 크기를 파악해 상황에 맞게 전달하기!

     

    - 윈도크기: 수신자가 한 번에 처리할 수 있는 데이터의 크기이며 헤더의 구성 요소. 처음 전송자와 수신자가 연결하는 3방향 핸드셰이크 과정에서 이 윈도 크기가 정해진다.

     

     

     

     

     

     

    혼잡 제어(Congestion control)

    🩵한 네트워크에 데이터가 집중되면 해당 네트워크를 사용하는 데이터의 처리 속도는 떨어진다. 그러나 전송자와 수신자는 이런 상황을 몰라 수신자는 데이터를 다시 보내달라고 요청하고 전송자는 데이터가 유실됐다고 판단하고 재전송하게 된다. 그럼 네트워크에는 더 많은 데이터가 몰려 상황이 악화된다. 이처럼 네트워크 내 패킷의 수가 과도하게 증가하는 현상을 혼잡이라고 하며 혼잡제어는 이를 제어하는 기능이다. 

    🩵흐름제어는 미리 윈도 크기를 파악하지만 네트워크는 그때그때 바뀌기에 혼잡도를 단번에 파악하기 어렵다. 따라서 혼잡제어방식은 처음에는 데이터를 천천히 보내다가 수신자가 잘 받는 것을 확인하면 점차 속도를 높이는 방식으로 제어한다. 그러다 수신자가 갑자기 한참 전에 전달한 데이터까지만 받았다고 얘기하면 그 때 네트워크가 혼잡하다는 사실을 인지하고 속도를 줄인다.

     

     

     

     

    UDP(User Datagram Protocol)

    TCP는 꼼꼼하게 데이터 처리를 확인하다보니 전송속도가 느리다. 이를 해결하기 위해 탄생한게 UDP다.

     

    UDP는 TCP에 비해,

    • 신뢰성을 보장하지 않고
    • 속도가 빠르며
    • 패킷을 순서대로 전달하지 않는다
    • 전송속도를 제어하는 기능이 없다
    • 비연결형이다(3way handshake처럼 전송자와 수신자 간에 연결이 잘 이루어졌는지 확인하는 절차도 없다)\
    • 스트리밍과 같은 실시간 방송에서 사용하기 좋다

    댓글

Designed by Tistory.