Reliable UDP(RUDP)란 무엇인가?
간략한 TCP/ UDP 소개
TCP는 통신을 할 때 클라이언트에서 connect를 열어 서버와 소통하게 됩니다.
하지만 UDP의 경우에는 connect를 열지 않고 일방적으로 server에서 client에 데이터를 보내주고 데이터를 정확하게 받았는지 확인하지 않습니다.
이러한 차이점 때문에 데이터의 신뢰성은 UDP < TCP이지만, 속도는 UDP > TCP입니다.
따라서 TCP를 신뢰성있는 프로토콜이라고 부르고, UDP는 비신뢰성 프로토콜이라 알 고 있었습니다.
다음은 TCP와 UDP의 헤더 구조인데 TCP에 비해 UDP는 매우 간단한 구조를 갖습니다.
TCP 헤더 구조
UDP 헤더 구조
Reliable UDP(RUDP)란?
UDP 또한 RUDP라는 방법으로 신뢰성을 보장하기도 합니다.
TCP에서 신뢰성을 보장하는 이유는 데이터 순서 보장, 도착 보장, 무결성 보장 3가지입니다.
RUDP는 UDP 통신이지만 이 3가지에 대한 처리를 해줍니다.
순서 보장 : 데이터 순서 보장을 위해 패킷에 번호를 붙임
도착 보장 : 해당 번호의 패킷이 도착할 때까지 재전송
무결성 보장 : checksum을 통해 데이터 손실을 검증
이렇게 되면 TCP를 쓰는것과 무엇이 다를까요?
TCP의 특성을 그대로 구현하는 것이 아니라 UDP의 특성을 살리면서 TCP처럼 신뢰할 수 있는 데이터를 만드는 것이 목표입니다.
TCP는 서버와 클라이언트의 관계가 성립되어 한쪽이 서버로서 대기하고 있어야 합니다.
하지만 UDP는 그럴 필요가 없이 통신이 바로 가능합니다.
TCP의 장점을 선택적으로 결정할 수 있게 됩니다.
예를 들어 도착은 보장하지 않지만 순서는 보장해야 한다면 패킷에 번호를 붙이고 패킷을 모아놓음으로써 순서를 보장해 줄 수 있습니다.
예를 들어 순서는 보장하지 않지만 모든 패킷이 도착을 보장해야 한다면 아직 받지 못한 데이터그램 리스트를 검색하면서 재전송을 요청합니다.
위에서 봤던 UDP Header 그림에는 Sequence Number가 없기 때문에 직접 넘버링을 해주면 될 것 같습니다.
출처
https://stage-diary.tistory.com/315