해결된 질문
작성
·
656
·
수정됨
2
강의 너무 잘 듣고 있습니다! UDP가 멀티미디어 전송 시 TCP에 비해 이점이 많은 것으로 이해하였습니다. 그러면 UDP로 통신 시, 보내는 데이터그램의 sequence가 보장되지 않을 텐데 그렇다면 이 싱크에 대한 보정은 누가 하며, 어떤 원리로 싱크를 맞춰서 순서대로 진행되게 되나요?
제가 개발에 입문한지 얼마 안 되어 설명이 부족할 수 있어 예시로 조금 더 여쭈어보려고 합니다.
멀티미디어 파일을 1 2 3 4 5의 데이터그램으로 쪼개고 전송했고, 순서 보장이 되지 않고 유실이 있어 2 4 1 5 형태로 도착했을 경우에 1 2 4 5 형태로 도착했을 시 3번 순서의 데이터는 어떻게 되는지와 이 순서로의 변환은 어떤 구조로 이루어지는지가 궁금합니다. (만약 동영상을 이렇게 전송하였다면, 영상이 중간중간 끊길 수도 있을 것 같아서요.)
답변 1
5
TCP 프로토콜은 자체적으로 순서제어 개념을 포함하고 있으며 이를 운영체제 코드가 구현하고 있습니다. 잘 활용 할 수 있는 대신 응용 프로그램 개발자가 이를 변경해 내 상황에 알맞게 고칠 수는 없습니다.
그러나 UDP는 그렇지 않습니다. 대신 내가 순서 개념을 넣어 이를 보정하고 싶다면 User mode 응용 프로그램 수준에서 프로토콜을 직접 디자인하고 코드로 만들어 적용 할 수 있습니다. 즉, 지금 질문하신 것처럼 순서제어나 손실보정 기능을 직접 개발하면 됩니다. 그리고 순서제어 및 손실보정 기능은 TCP의 그것과 크게 다르지 않습니다. 그럼에도 UDP로 이런 기능을 만드는 경우는 데이터 성격에 따라 차별을 두기 위해서 입니다. 어떤 정보는 반드시 받아서 반영하고 어떤 것은 좀 유실되도 그냥 넘어가는 것이지요. 대표적으로 게임에서 그런 경우가 많습니다. 캐릭터 이동 정보는 일정 수준 동기화만 맞추고 몇몇 정보가 유실되더라도 그냥 보정하지 않는 것이지요. 그러나 공격이나 방어 아이템 사용 등 이슈가 될 정보는 반드시 동기화하고 맞춰서 반영해야 할 것입니다.
참고로 대부분의 멀티미디어 데이터는 순서 보장 및 손실 데이터 보정을 하지 않습니다. 화면이 조금 깨지거나 아예 잠시 멈췄다 다시 나오더라도 실시간의 흐름을 그대로 따라가는 것이 보통합니다. 그래서 UDP가 여러 모로 유리합니다. TCP는 유실된 데이터를 굳이 다시 받아오기 때문에 화면이 멈춘채로 유지되다가 재전송이 완료되면 그 시점부터 다시 영상을 재생할 수 있습니다. 대신 그로 말미암아 3초 정도 지연이 있었다면 남들보다 생방송을 계속 3초 늦게 보게 됩니다. 그 후로 지연이 더 생긴다면 더 늦게 생방송을 보게 될 것입니다.
참고하시기 바랍니다.