ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [컴퓨터통신] TCP, UDP, 3-way 4-way handshaking
    ComputerScience/통신 2020. 6. 12. 21:26

    TCP/UDP

    TCP : Transmission Control Protocol ,전송 제어 프로토콜

    전송계층에 있음. IP와 엮여서 TCP/IP라고 보통 부름

    reliability 보장, Flow Ctrl, Congestion Ctrl. 

    3-way handshaking을 통해 연결, 4-way handshaking을 통해 해제

    stateful : 세션 상태정보를 기록해두고 그에 따라 응답이 달라지게 한다.

     

    UDP : 비연결지향, 최소한의 Checksum을 통해 오류제어 기능(컨트롤은 아님)

    실시간 멀티미디어 정보를 처리하기 위해 사용, reliability 보장안함

    속도는 빠르다. datagram 방식을 이용한다. 

    DNS(도메인 네임 서비스), TFTP, IPTV, VoIP, IP터널, 게임 등이 이용

     

    1. 3-way-handshaking

     Client와 Server의 연결 설정

     

    Client ---SYN (synchronize sequence numbers)---> Server

            <------SYN + ACK(acknowledgements)------------- 

            -----------------------------ACK--------------------------------->

            

    STEP1.

    client는 server에 접속을 요청하는 syn 패킷을 보낸다.

    이때, client는 syn을 보내고 syn/ack를 기다리는 SYN_SENT 상태로 변함

     

    STEP2.

    이때 서버는 Listen 상태로 포트 서비스가 가능한 상태(반대는 Closed)

    , Server는 syn 요청을 받고 client에게 요청을 수락한다는

    ACK와 SYN flag 패킷을 발생하고 server가 다시 ACK로 응답하기를 기다린다.

    이때 server는 SYN_RECEIVED가 된다.

     

    STEP3.

    Client는 Server에게 ACK를 보내고 이후로부터 연결이 이루어짐. Server의 상태는 

    ESTABLISHED 상태가 된다.

     

     

     

    2. 4-way-handshaking

     Client와 Server의 연결 해제

     

    Client ----------------------FIN----------------------> Server

            <--------------------ACK------------------------ 

            <--------------------FIN-------------------------

            ----------------------ACK---------------------->

     

    STEP1.

     클라이언트가 연결을 종료했다는 FIN 플래그를 전송

     

    STEP2.

     서버는 클라이언트의 FIN요청을 받고 확인했다는 ACK를 보낸다

     그리고 서버는 데이터를 모두 보낼 때까지 TIME_OUT이 된다.

     

    STEP3.

     데이터를 모두 보내고 통신이 끝났으면 연결이 종료됐다고 알리는 FIN 플래그를 보냄

     

    STEP4.

     클라이언트는 FIN메세지를 받았다는 ACK를 보낸다.

     

    STEP5.

     클라이언트의 ACK 메세지를 받은 서버는 소켓 연결을 CLOSED한다.

    (클라이언트는 아직 서버로부터 받지 못한 데이터가 있을 것을 대비하여 일정시간 동안 세션을

     남겨두고 잉여 패킷을 기다리는 과정을 거친다(TIME_WAIT))

    댓글

Designed by Tistory.