본문 바로가기
GP/NETWORK HACKING AND SECURITY

UDP

by sjs_2215 2018. 12. 17.

UDP가 나오게 된 배경.

TCP 는 자신이 이런 복잡한 절차를 모두 마치고 패킷들이 모두 안정적으로 수신된 다음에야 비로소 프로그램에 패킷을 건네준다.

그 때문에 TCP 는 느리다. 패킷 유실이 없다면 마찬가지 아닐까 생각할 수도 있지만, TCP 는 네트워크 체증을 막기 위해서 한 번에 보낼 수 있는 패킷 개수가 정해져 있다고 했다. 그래서 처음에는 적은 숫자를 보내고 유실이 없으면 이 숫자를 늘려나간다. 그 때문에 TCP 는 유실이 없다고 하더라도 한 번에 보낼 수 있는 패킷 갯수 제한 때문에 느리다. (그리고 그것 말고도 바로 보내지 않고 Nagle 알고리즘이라는 버퍼링 기법 등 구현상의 이유 때문에도 느리다.)

그럼 이렇게 무거운 TCP 를 쓰고 싶지 않으면 어떻게 해야 되나? 앞에서 인터넷을 설계할 때 다양한 서비스들을 돌릴 수 있도록 설계되었다고 했다. 만일 내 서비스가 안정성 대신에 속도가 중요하다고 하면 어떻게 해야 될까? 가장 흔하게 드는 예가 인터넷 전화라고 불리는 VoIP 다. 인간의 언어는 대충 단어 몇 개 못 알아들어도 전체 문장을 이해하는 데 문제가 없는 경우가 많다. (이를 Context Sensitive Language 라는 표현을 쓴다.) 조금 화가 날 수는 있다.

오히려 상대가 한 말이 늦게 전달되면거나 단어 사이 간격이 들쭉날쭉하면 더 알아듣기 힘들다. 그러다가 딥빡이 오게 되고, 그러다가 애인과 싸우게 된다. 그때문에 VoIP 는 인류의 평화와 연인들의 행복을 위해 패킷 재전송은 필요 없이 가능한 한 빠르게 전달하는 것을 목표로 한다. 그럼 이런 경우는 어떻게 하나?

UDP 가 그런 역할을 한다.

사실 UDP 는 하는 일이 없는 더미라고 생각하면 된다. “물은 셀프입니다" 도 아닌데, “TCP 를 안 쓸 거면 그냥 더 낮은 수준의 IP 를 그대로 쓰세요.” 라고 하기에 좀 뭣하니까 TCP 랑 구색을 맞추기 위해서 껍데기로 UDP 가 만들어졌다. UDP 가 단순 껍데기 역할이기 때문에 그 특성은 IP 자체의 특성과 마찬가지다. 불안 정적인 best effort 에, 그냥 바로 쏘고 만다.

IP 패킷이 어떤 방식으로 경로를 선택하는지는 내 IGC 발표 슬라이드를 참고해주기 바란다. 어쨌거나, IP 는 최적의 경로를 따라 가는 것이 아니다. 그때문에 IP의 꼭두각시인 UDP 역시 최적의 경로로 가지는 않는다. 보통 게임을 만들 때 “속도 때문에 UDP 를 쓴다.” 라고 하는데 이는 UDP 가 최적의 경로를 따라 간다는 뜻이 아니라 TCP 에 비해서 하는 일도 없고, 주변 신경도 안쓰기 때문에 상대적으로 더 빠르다는 뜻이다. TCP 와 달리 안정성 확보를 위해서 해야되는 일도 없고, 네트워크 체증 생각도 안하고 마구잡이로 보낼 수 있다.

원문보기:
http://www.inven.co.kr/webzine/news/?news=165870#csidx8389ea6dc8cf73a823908481e451d44

Comments