TCP ? UDP ?

Yoon Sunkue·2021년 10월 21일
1

노트

목록 보기
4/9

UDP/TCP HEADER LENGTH = 8B / 20+B

UDP는 단순히 TCP보다 빠른 속도가 필요하고 신뢰성 보장이 필요 없을 때 사용하는 것이 아니다.

TCP의 신뢰성 보장에 대해 먼저 짚고가자. TCP의 신뢰성 보장은 크게 3가지로 볼 수 있다.

  • 전송 보장
  • 순서 보장
  • 혼잡 제어

전송 실패시 재전송하며, 보낸 순서대로만 수신한다.
우리가 원하는 보장은 어떤 것들인지 체크하자.

  • 전송 보장 여부 ( R / U )
  • 순서 보장 여부 ( U / R / S / F )
  • RU
  • RR
  • RS
  • RF
  • UU
  • UR
  • US
  • UF
  • etc

크게 8개의 보장 프로토콜을 생각 할 수 있다.

게임에서는 TCP의 시퀀셜한 순서보장보다 가장 최신의 데이터가 보장되어야 하는 경우가 많다. 이는 순서 보장여부의 R 로 표기했다. S 는 시퀀셜 F는 프래그먼트이다. 대량의 데이터 전송시, 나누어 전송 하는 경우를 F로 표기했다. U는 보장하지 않음을 의미한다.

TCP는 RS에 속한다.
UDP는 UU 이다.

둘 모두 오류체크는 하므로 그 부분과 기타 공통 보장 부분은 무시했다.

게임에서는 RS RR UR US 등이 쓰인다. 게임마다 천차만별이긴 하것지만,,

UDP는 이 8개의 보장 프로토콜을 직접 모두 구현 할 수 있다. 커스텀 보장이 필요할 때 UDP를 사용하면 된다.

TCP와 UDP의 혼용에 관한 몇개의 링크이다. 답이 없는 문제이니 직접 파악하자.

https://gafferongames.com/post/udp_vs_tcp/
https://web.archive.org/web/20160103125117/https://www.isoc.org/inet97/proceedings/F3/F3_1.HTM
https://www.youtube.com/watch?v=qotJiFii0hU
https://stackoverflow.com/questions/11361208/using-iocp-with-udp

내 생각은 이렇다. tcp에 의한 udp RTT 증가 및 지터링으로 인한 패킷유실과 미스오더링은, 큐잉 지연을 유발하기 때문이라고 판단한다. 라우터는 tcp의 패킷을 udp보다 중시한다, tcp는 어차피 재전송될거니까 혼잡해지면 udp를 폐기해버린다. tcp가 udp를 방해한다는 것은 사실이다. 그렇다면 udp와 tcp를 함께 사용하지 말아야 하는가? 에 대해서는 단언하기 힘들다. 내가 tcp 안써도 다른 사람들은 쓴다, 상황 바이 상황 케바케다.

UDP의 장점은 커스텀 가능하다는 것이다. 빠르다고는 해봤자 그게 UDP선택의 이유가 될 수는 없다. 요즘 같은 모바일 시대에는 핸드오버가 알아서 된다는 것도 장점이다.
성능상의 차이점은 대역폭의 차이가 크다.

UDP의 단점은 역시 유지보수의 빡셈과 커스텀 난이도이다. 12년도 북미에서의 실험이 95% 의 RS 보장, 2% 이내의 패킷 유실, 3%이내의 미스오더링를 확인했단다.

UDP에서 가장 구현하기 까다로운 것은 혼잡 제어 기능이다. 대량의 인원이 대량의 패킷을 주고받는 MMORPG에서는 TCP의 혼잡제어 기능을 따르는게 좋을 수 있다.

0개의 댓글