[네트워크] TCP와 UDP
네트워크 통신을 알아보게 된다면 가장 눈에 띄는 것이 TCP와 UDP다.
보통 TCP하면 UDP보다 빠르다, UDP는 안정성이 부족하다 정도...
한 번 자세히 알아보자.
TCP란?
TCP는 위키백과에서 이렇게 정의한다.
전송 제어 프로토콜(Transmission Control Protocol, TCP, 문화어: 전송조종규약)은 인터넷 프로토콜 스위트(IP)의 핵심 프로토콜 중 하나로, IP와 함께 TCP/IP라는 명칭으로도 널리 불린다. TCP는 근거리 통신망이나 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다. TCP는 전송 계층에 위치한다. 네트워크의 정보 전달을 통제하는 프로토콜이자 인터넷을 이루는 핵심 프로토콜의 하나로서 국제 인터넷 표준화 기구(IETF)의 RFC 793에 기술되어 있다.
전송 제어 프로토콜로 TCP라고 부르고, OSI 7계층 중 전송 계층에 속한다고 한다.
다른 자료에서 보자면, TCP는 "인터넷에서 데이터를 메시지의 형태로 쓰이는 IP 프로토콜"이라고 한다.
다른 곳에서 알아본 바로는, TCP는 연결성, 신뢰성 보장, 흐름제어, 혼잡제어의 특징을 가지고 있다고 한다.
이러한 TCP의 장점이 뭘까, 먼저 장점을 떠나서, 어떻게 작동되는지 확인 해보자.
첫번째로, 클라이언트는 서버에 연결 요청을 하게 된다. 요청을 하게 된다.
두번째로, 서버는 연결 요청에 대한 답과, 통신 준비를 완료했다는 응답을 보내게 된다.
세번째로, 클라이언트가 서버로부터 받은 정보를 토대로 응답 메세지를 보내게 된다.
이를 3-Way HandShaking이라고 한다.
이런식으로, 발신지와 수신지 사이의 가상의 길을 만들어 신뢰성을 확보하고, 통신을 시작하게 된다고 한다.
이 외에도 연결을 끊을 때 사용하는 4-Way HandShaking이라는 것도 있다고 한다.
이렇게 연결의 신뢰성을 보장하고, 흐름제어를 한다면 느려질 수밖에 없다. 결국 이렇게 가상 회선을 만드는 것은 CPU의 몫일 테니.
아마도 TCP보다는 UDP가 더 빠르다는 말이, 이렇게 신뢰성을 보장하려고 하기 때문이지 않을까.
이러한 TCP의 특징을 나열해보자면,
- 서버와 클라이언트는 일 대 일 매칭을 한다.
- 신뢰성이 보장 됨.
- 연결 지향적 -> 하지만 연결을 하고 끊기 위한 과정이 필요
- 흐름 제어, 혼잡 제어
- 비 실시간적 사용에 적합.
이 정도라고 생각하는데, 비 실시간적 사용에 적합하다는 것은, 데이터 전송이 빠르다는 보장을 해주지 않아서 그런지 모르겠다.
UDP란?
UDP의 정의는,
사용자 데이터그램 프로토콜(User Datagram Protocol, UDP)은 인터넷 프로토콜 스위트의 주요 프로토콜 가운데 하나이다. 1980년에 데이빗 리드가 설계하였고, 현재 IETF의 RFC 768로 표준으로 정의되어 있으며, TCP와 함께 데이터그램으로 알려진 단문 메시지를 교환하기 위해서 사용된다. UDP는 유니버설 데이터그램 프로토콜(Universal Datagram Protocol)이라고 일컫기도 한다.
UDP의 전송 방식은 너무 단순해서 서비스의 신뢰성이 낮고, 데이터그램 도착 순서가 바뀌거나, 중복되거나, 심지어는 통보 없이 누락시키기도 한다. UDP는 일반적으로 오류의 검사와 수정이 필요 없는 애플리케이션에서 수행할 것으로 가정한다.
여기서 중요한 건, 전송 방식이 너무 단순해 신뢰성을 보장할 수 없다는 것과, 오류의 검사와 수정이 필요 없는 곳에서 쓰일 것을 가정한다는 것이다.
딱 봐도, TCP에서 중요시 하는 신뢰성 보장과는 딴판이다...
그렇다면 어떻게 작동되는지를 확인해보자.
그림이 좀 웃기긴 한데, TCP의 경우 데이터를 잘 받았는지에 대한 확답을 받고, 진행하는 방식이라면, UDP는 일단 눈을 가리고 공을 던지는 것과 같다. 받는 입장에서 공을 받지 못하더라도, 던지는 입장에서는 확인할 방법이 없다는 것이다.
가령 "안녕하세요"를 보낸다고 치면
받는 사람 입장에서 "안녕세요"라고 올 수도 있는 것이다.
이럴 경우 차라리 처음부터 다시 받는 게 이로울 것이다.
이로 인해 얻을 수 있는 장점이라면, 일단 빠르다는 것과 그리고 TCP에서 말했던 일 대 일 통신과는 달리, 일 대 다 통신이 가능하다는 점?
물론 통신 중간에 발생한 손실과 장애는 보장 못한다.
특징을 나열해 보면...
- 비연결형 프로토콜, 데이터그램 서비스이다.
- 정보를 주고 받을 때, 확인을 할 수 없다.
- 순서가 보장되지 않는다.
- 일 대 다 연결이 가능하다.
이것보다 더 많은 특징도 있지만 이렇게 간추려도 될 것 같다.
까먹고 아직 한 가지 쓰지 않은 것이 있는데, UDP는 데이터를 독립적인 패킷(즉, 데이터 그램)으로 나누어 전송한다.
이렇게 보니 새롭기도 한데, 특징을 한 데 모아서 간추려 보면 이렇게 되지 않을까 싶다.
스트리밍 서비스는 아마 UDP 방식을 이용할 것이라고 볼 수 있다.