UDP란 무엇인가?
TCP는 3-way 핸드셰이크로 연결이 확립된 후에 데이터를 전송하고 그때 확인 응답을 합니다.
데이터 전송 도중에 오류가 발생하면 재전송하거나 포트 번호로 애플리케이션을 구분하여 데이터를 정확하게 전달하기 위한 기능도 있습니다.
UDP는 비연결형 통신이라서 데이터를 전송할 때 TCP처럼 시간이 걸리는 확인 작업을 일일이 하지 않습니다.
UDP는 TCP와는 달리 효율성을 중요하게 여기는 프로토콜이라 TCP와 같은 신뢰성과 정확성을 요구하게 되면 효율이 떨어집니다.
UDP의 장점은 데이터를 효율적으로 빠르게 보내는 것이라서 스트리밍 방식으로 전송하는 동영상 서비스와 같은 곳에 사용됩니다. 동영상을 TCP 데이터 통신으로 전송하면 수신을 확인하는 데 시간이 너무 오래 걸려서 동영상을 원활하게 볼 수 없습니다. 그래서 동영상 같은 건 대개 빠른 UDP를 사용합니다.
UDP 헤더란 무엇인가?
UDP 헤더가 붙은 데이터를 UDP 데이터그램이라고 합니다. UDP 헤더는 다음과 같은 순으로 정보가 나열되어 있습니다.
① 출발지 포트 번호(16비트)
② 목적지 포트 번호(16비트)
③ 길이(16비트)
④ 체크섬(16비트)
UDP는 신뢰성과 정확성이 필요하지 않기 때문에 위의 정보만으로도 충분합니다.
그리고 효율성과 빠른 속도가 중요해서 상대방을 확인하지 않고 연속해서 데이터를 보냅니다.
또한 UDP를 사용하면 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼 수 있습니다. 이것을 브로드캐스트(broadcast)라고 합니다.
TCP는 3-way 핸드셰이크와 같이 데이터를 전송할 때도 확인 응답을 하나씩 보내야 하기 때문에 브로드캐스트와 같이 불특정 다수에게 보내는 통신에는 적합하지 않습니다.
UDP에서의 브로드캐스트는 목적지에 관계없이 랜에서 일괄적으로 보내지만, TCP는 목적지를 지정하지 않으면 안 되기 때문에 일괄 통신을 할 수 없는 것입니다.
「추가정보 - 나무위키참조」
UDP
UDP(User Datagram Protocol)의 축약어로 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 규약(프로토콜)의 일종이다. UDP는 세계 통신 표준으로 개발된 OSI 모형에서 4번째 계층인 전송 계층(Transport Layer)에서 사용하는 규약이다.
네트워크로 통신을 하는 데 있어서 신뢰성을 얻기 위해 프로그램들은 TCP로 통신을 하고 있었다. TCP는 데이터 신뢰성을 보장하기 위한 방식이기 때문에 누락된 데이터를 모두 받기 위한 메커니즘이 정의되어 있다. 이것이 이메일이나 파일전송과 같은 분야에서는 필수불가결의 요소였으나 실시간 스트리밍 서비스에서는 걸림돌로 작용하고 있었다. 간단히 전체 영상에서 점 하나 못 받은 것 때문에 버퍼링 돌린다고 재생이 중지되기 일쑤였고, TCP는 혼잡제어를 위해 보내는 양도 조절하기 때문에 영상 데이터의 퀄리티가 안정적이지 못했다. 결국 이를 해결하기 위하여 제시된 것이 UDP이다.
간단하게 TCP의 모든 신뢰성 기능이 없다고 보면 된다. 상대와 접속했고, 전송속도를 48 kbps로 설정했으면 48 kbps로 데이터를 전송하기만 한다. 받는 쪽에서 데이터를 제대로 받고 있는지조차도 신경 안 쓴다. 그렇기 때문에 UDP로 자료를 제공할 경우 32 kbps, 48 kbps, 64 kbps와 같이 다양한 전송률 옵션을 선택하는 형태로 제공된다.
신뢰성이 보장되지 않기 때문에 UDP로 데이터를 보내면 손실되는 데이터가 발생할 수 있다. 하지만 동영상의 경우를 생각할 때 데이터가 왕창 소실됐다면 괴이한 화면이 나올 수도 있지만, 데이터 몇 개 소실되어봤자 전체 화면에서 일부 구역이 제대로 안 나오는 수준에 불과하다. 그렇기에 사람들이 크게 불평하지 않을 수준의 영상만 제공할 수 있다면 느린 TCP를 쓸 이유가 없는 셈이다. 그렇기에 실시간 스트리밍을 하는 곳에서 주로 사용한다.
UDP 헤더에는 목적지 주소, 데이터 순서, checksum과 실 데이터만 포함되고, 확인 응답 같은 것이 없기 때문에 TCP보다 용량이 가볍고 송신 속도가 빠르다. 하지만 확인 응답을 하지 못하기 때문에 신뢰도가 TCP보다 떨어지게 된다. 따라서 UDP는 비연결형이라 부르며 TCP는 연결형이라 구분한다.
UDP에는 스스로 속도제어를 하는 기능이 없다. 따라서 초기 TCP가 겪었던 문제를 고스란히 안고 있다. 한 회선에서 몇몇 사람들이 UDP로 사용하면, 결국 소수에 의해 대역폭이 점유당해 다른 사람들이 통신을 못하는 상황이 빚어질 수 있다. 그렇기 때문에 네트워크 관리자 측에서 UDP가 쓸 수 있는 대역폭을 강제로 제한해버리거나 아예 UDP로 일정량 이상의 데이터가 들어오면 자동으로 차단하게 만드는 등의 방법을 쓰고 있다. 네트워크 관리자 입장에서는 이래저래 필요악으로 취급하고 있다. 국내 ISP의 경우 UDP 통신을 별도로 제한을 걸고 있지는 않지만, 학교나 회사와 같은 곳에서는 UDP에 제한을 거는 경우가 많다.
스트리밍 분야나 VoIP, mVoIP에서 사용되고 있다. 실시간성 보장이 중요하기 때문에 TCP로 하면 매우 비효율적인 시스템이 된다.
온라인 게임의 서버-클라이언트 통신에도 대부분 UDP가 사용된다. 이 경우는 데이터가 빠짐없이 전송되는 것보다는 빠른 응답속도가 중요하기 때문에 사용된다. 온라인게임에서 유저가 스킬을 연타하는데 중간에 키보드 입력 한두 개가 빠졌다고 그 뒤의 입력이 전부 스톱 되면 유저는 답답함을 느낄 것이다. 때문에 게임 서버는 입력 데이터 전송은 UDP에 맡기고 대부분 손실되는 키 입력을 자체적으로 복구하거나 아예 무시해버리는 방법을 사용하는 경우가 많다. 데이터를 보낼 때 중복으로 두 개 정도 보내서 패킷 하나쯤 손실됐더라도 다음 패킷에서 복구하도록 하는 메커니즘도 사용된다. 키 입력 데이터는 중복 좀 있다고 어마 무지하게 커지지 않으니까. 다만 사용자 정보나 텍스트같이 무결성이 중요한 데이터는 TCP 전송을 사용한다. 이것이 가능한 이유는 데디케이트 서버라서 핵심 로직이 모두 서버에서 실행되기 때문이다.
사실 UDP도 얼마든지 신뢰성 있는 네트워크를 구축할 수 있다. TCP에서 하는 신뢰성 작업을 프로그래머가 직접 코딩해서 구현하면 된다. 보통 TCP로 쓰면 효율이 떨어져서 쓰기 싫은데, 신뢰성을 보장해 줘야 되는 상황일 경우 사용하는 방법이다. TCP에 쓰이는 흐름 제어 및 신뢰성 제어 알고리즘은 현대에 들어서는 성능 상으로 지나치게 비효율적이라는 평을 받고 있어 개발자들이 UDP 소켓에서 더 효율적인 알고리즘으로 TCP의 기능을 구현하려는 시도가 이어지고 있다. 실제 일부 P2P 시스템에서는 UDP를 사용하면서 동시에 신뢰성을 보장하는 별도의 통신방식을 개발하여 사용하기도 한다. 가장 유명한 것으로 일부 비트토렌트 클라이언트에서 사용하는 μTP가 있다. 차세대 통신 프로토콜인 QUIC와 HTTP/3 역시 UDP를 사용한다. TLS의 기능을 UDP에 구현한 보안 소켓인 DTLS (Datagram Transport Layer Security)가 등장하였다.
댓글