본문 바로가기
General

TCP와 UDP 개념과 특징 및 차이점

by Awesome-SH 2021. 10. 18.

 

TCP & UDP

TCP와 UDP는 OSI 표준모델과 TCP/IP 모델의 "전송계층" 에서 사용되는 프로토콜이다

"전송계층"은 송신자와 수신자를 연결하는 통신 서비스를 제공하며 IP에 의해 전달되는 패킷의 오류를 검사하고 재전송 요구 제어등을 담당하는 계층이다. (= 데이터의 전달을 담당하는 영역)

 

    TCP와 UDP는

        1. 포트번호'를 이용하여 주소는 지정

        2. 데이터 오류검사를 위한 체크섬이 존재

 

    이 두가지 공통점을 가지고 있지만

    정확성(TCP)을 추구할지 신속성(UDP)을 추구할지를 구분하여 나뉜다.

 

TCP

    - 데이터를 중요하게 생각하여 확실히 주고받고 싶을 때는 TCP (Transmission Control Protocol) 사용

    - TCP는 통신할 컴퓨터끼리 '보냈습니다', '도착했습니다' 라고 서로 확인 메시지를 보내면서 데이터를 주고 받음 (신뢰성 ↑)

    - 웹이나 메일, 파일공유 등과 같이 데이터를 누락시키고 싶지 않은 서비스는 TCP를 사용하고 있다.

 

UDP

    데이터의 신뢰성은 제쳐두고 '빨리' 보내고 싶을 때는 UDP (User Datagram Protocol) 사용

    UDP는 데이터를 보내면 그것으로 끝이므로 신뢰성은 없지만 확인 응답과 같은 절차를 생략할 수 있음 (신속성 ↑)

    VoIP(Voice over IP), 시간동기, 이름 해결 등과 같이 무엇보다 속도를 필요로 하는 서비스는 UDP를 사용하고 있다.

 

포트번호로 서비스를 식별

        TCP와 UDP는 '포트번호'라는 숫자를 이용하여 컴퓨터 안에 어떤 서비스에게 데이터를 전달하면 좋을지 식별한다.

        포트번호는 '0~65535'(16비트 분)까지의 숫자로 되어 있고, 범위에 따라 용도가 정해져 있다

 

        '0~1023'은 잘 알려진 포트(Well Known Port)라고 하며 웹서버, 메일서버 등과 같이 일반적인 서버 소프트웨어가

        클라이언트의 서비스 요청을 대기할 때 사용한다.

 

        '1024~49151'은 등록된 포트(Registered Port)라고 하며 제조업체의 독자적인 서버 소프트웨어가

        클라이언트의 서비스 요청을 대기할 때 사용한다.

 

        '49152~65535'는 동적 포트(Dynamic Port)라고 하며 서버가 클라이언트를 식별하기 위해 사용한다.



TCP

    TCP(Transmission Control Protocol)는 연결 지향적 프로토콜이다.

    '연결지향적' 프로토콜이란? 클라이언트와 서버가 연결된 상태에서 데이터를 주고 받는 프로토콜을 의미

    클라이언트가 연결요청(SYN 데이터 전송)을 하고, ↓

    서버가 연결을 수락하면 통신 선로가 고정되고, ↓

    모든 데이터는 고정된 통신선로를 통해 순차적으로 전달된다.

    = TCP는 데이터를 정확하고 안정적으로 전달할 수 있다

    TCP는 호스트간 신뢰성 있는 데이터 전달과 흐름제어를 한다.

    TCP 프로토콜은 신뢰성 있는 데이터의 전송을 위해 '확인작업' 을 거치는데 TCP는 패킷을 성공적으로 전송하면

    ACK 라는 신호를 날리고 ACK 신호가 제 시간에 도착하지 않으면 Timeout이 발생하여 패킷 손실이 발생한 패킷을 다시 전송해준다.

    TCP는 이렇게 데이터를 송신할때마다 확인 응답을 주고받는 절차가 있으므로 통신의 '신뢰성'이 올라간다

    Client와 Server 또는 P2P Socket 통신등 네트워크를 사용한 통신을 할때 사용한다.

 

    [단점]

        - 데이터로 보내기 전에 반드시 "연결" 이 형성되어야 함

        - 1 : 1 통신만 가능함

        - 고정된 통신 선로가 최단선이 아닐경우, 상대적으로 UDP보다 데이터 전송속도 ↓

 

    [특징]

        - 연결형 서비스로 연결이 성공해야 통신 가능

        - 데이터의 경계를 구분하지 않음

        - 데이터의 전송 순서를 보장해줌 (각 바이트마다 번호 부여)

        - 신뢰성 있는 데이터를 전송 (Sequence Number, Ack Number를 통한 신뢰성 보장)

        - 데이터 흐름 제어 및 혼잡 제어

        - 연결의 설정(3-way handshaking)과 해제(4-way handshaking)

        - 전이중(Full-Duplex), 점대점(Point to Point) 서비스

        - UDP 보다 전송속도가 느림

 

    [3 Way Handshake 방식]

        TCP 통신을 위한 네트워크 연결은 3 way handshake 방식으로 연결됨

        3 way handshake 방식은 서로의 통신을 위해 포트(Port)를 확인하고 연결하기 위해

        3번의 요청/응답 후 연결되는 것을 말함

        (=> 이 과정에서 많은 시간이 소요되어 UDP 방식보다 속도가 느려지는 주요 원인으로 지목됨)

 

        연결과정

            1. 클라이언트에서 서버에 연결 요청하기위해 SYN 데이터를 보냄

            2. 서버에서 해당포트는 LISTEN 상태에서 SYN 데이터를 받고 SYN_RCV 로 상태가 변경됨

            3. 요청을 정상적으로 받았다는 대답(ACK)과 클라이언트도 포트를 열어달라는 SYN 을 같이 보냄

            4. 클라이언트에서는 SYN + ACK 를 받고 ESTABLISHED 로 상태를 변경하고 서버에 ACK 를 전송

            5. ACK 받은 서버는 상태가 ESTABLISHED 로 변경됨

 

        TCP state (netstat 명령어를 통해 확인가능)

            LISTEN : 서버의 데몬이 떠서 접속 요청을 기다리는 상태

            SYN-SENT : 로컬의 클라이언트 어플리케이션이 원격 호스트에 연결을 요청한 상태

            SYN_RECEIVED : 서버가 원격 클라이언트로부터 접속 요구를 받아 클라이언트에게 응답을 하였지만

                            아직 클라이언트에게 확인 메시지는 받지 않은 상태

            ESTABLISHED : 3 way-handshaking 이 완료된 후 서로 연결된 상태

            FIN-WAIT1, CLOSE-WAIT, FIN-WAIT2 : 서버에서 연결을 종료하기 위해 클라이언트에게 종결을 요청하고 회신을 받아 종료하는 과정의 상태

            TIME-WAIT : 연결은 종료되었지만 분실되었을지 모를 느린 세그먼트를 위해 당분간 소켓을 열어두고 있는 상태

            CLOSING : 흔하지 않지만 주로 확인 메시지가 전송도중 분실된 상태

            CLOSED : 완전히 종료

 

UDP

    UDP(User Datagram Protocol)는 전송계층의 '비연결 지향'적 프로토콜이다.

    비연결 지향적? 데이터를 주고 받을 때 연결 절차를 거치지 않고 발신자가 일방적으로 데이터를 발신하는 방식을 의미한다.

    연결 과정이 없이 때문에 TCP 보다 빠른 전송을 할 수 있지만 데이터 전달의 신뢰성은 떨어진다.

    UDP는 발신자가 데이터 패킷을 순차적으로 보내더라도 이 패킷들은 서로 다른 통신 선로를 통해 전달 될 수 있다.

    먼저 보낸 패킷이 느린 선로를 통해 전송될 경우 나중에 보낸 패킷보다 늦게 도착할 수도 있으며 최악의 경우 잘못된 선로로 전송되어

    데이터가 유실될 수도 있다. 이럴 경우에는 TCP와 다르게 UDP는 중간에 패킷이 유실이나 변조가 되어도 재전송 하지 않는다.

 

    [단점]

        - 데이터의 신뢰성 ↓

        - 의미있는 서버를 구축하기 위해서는 일일이 패킷을 관리해줘야 함

   

    [특징]

        - 비연결형 서비스로 연결 없이 통신이 가능하며 데이터그램 방식을 제공

        - 데이터 경계를 구분 (데이터그램 서비스)

        - 정보를 주고 받을때 정보를 보내거나 받는다는 신호절차를 거치지 않음

        - 신뢰성 없는 데이터를 전송함 (데이터의 재전송과 데이터 순서유지를 위한 작업 X)

        - 패킷관리 필요

        - 패킷 오버헤드가 적어 네트워크 부하가 감소되는 장점

        - 상대적으로 TCP 보다 전송속도가 빠름



 


 

그럼에도 신뢰성이 있는 TCP보다 UDP를 사용하는 서비스들이 많아지고있을까에 대해

생각해볼 수 있는 포스팅을 링크한다.

 

https://hwanine.github.io/network/UDP/

 

네트워크 - 왜 신뢰성있는 TCP를 두고 UDP를 사용하는걸까요?

데이터 통신상의 신뢰성있는 TCP 대신 UDP를 사용하는 이유와 그 사용 분야를 소개합니다.

hwanine.github.io

 

 

 

 

Ref.

https://coding-factory.tistory.com/614





댓글