TCP/UDP에 대해서 비교
TCP/UDP가 뭔지 알아보고 서로 차이점을 알아보자.
TCP가 뭔데?
인터넷상에서 서로 데이터를 전달하기 위해서는 정해져 있는 공통 규약(protocol)
이 필요하다. 이 중에서 애플리케이션 간의 데이터 전달에 사용되는 프로토콜이 TCP이다. TCP(Transmission Control Protocol)
는 전송 제어 프로토콜로써 데이터를 전달하는데 신뢰성을 보장해주는 프로토콜이다.
이 TCP라는건 IETF(Internet Engineering Task Force)
라는 국제인터넷표준화기가
가 제정했다. 여기에서 제정하는 문서는 RFC(Request For Comments)
라고 불리는데 이게 규격이 되는거다.
Request For Comments라는 이름이 뭔가 코멘트를 주세요…라는거 같지만….이런걸 만들었는데 어때요?
같은 느낌으로 기술문서를 공개해서 의견을 모은 뒤에 보다 더 좋은 것으로 만들겠다는 생각으로 붙인 이름이라고 한다.
TCP는 신뢰할 수 없는 채널 위에서 신뢰성을 구축한 추상 계층이다. 이는 네트워크 통신 구현에 필요한 유실데이터 재전송, 전송 순서 확인, 혼잡 제어 및 회피 데이터 무결성 확인 같은 복잡한 기능을 투명하게 처리하여 애플리케이션을 한결 쉽게 만들어준다. 그래서 TCP는 신속한 데이터 전송보다는 정확한 데이터의 전송에 더 특화되어 있다. 이러한 점 때문에 브라우저의 웹 성능을 최적화하는데 어느정도 문제를 야기하기도 한다.
이런 신뢰할 수 없는 채널에서 데이터를 전송하기 위해서는 TCP연결이 필요하다. 신뢰성 있는 데이터 전송을 수행하기 위해 3-way handshake라는 기법을 사용하여 TCP 연결을 성립시킨다.
TCP의 다양한 제어 기능을 수행하기 위해서 TCP 헤더에는 다양한 정보가 필요하다. 그러다 보니 데이터를 전송할 때에 꼭 필요하지 않은 처리나 정보가 포함될 수도 있다. 이처럼 필요 없는 처리나 정보를 통틀어서 오버헤드(Overhead)
라고 부른다. TCP의 데이터 전송에는 많은 오버헤드가 발생할 가능성이 있다.
실제로 애플리케이션에 데이터 전달 할때 이런 다양한 제어 기능이 필요하지 않을때도 있다. 그래서 이용하는 것이 UDP(User Datagram Protocol)
이다.
UDP가 뭔데?
User Datagram Protocol
라고 불리는 UDP는 TCP처럼 애플리케이션에 데이터를 전달하기 위한 프로토콜이다. 하지만 UDP는 데이터를 전달할 때 말고는 기본적으로 아무것도 하지 않는다. TCP 처럼 연결을 성립시키지도 않고, 각종 제어와 같은 기능또한 없다. 그리고 도중에 데이터의 순서가 바뀐다 하더라고 UDP에서는 이를 디시 정렬하거나 하지 않는다.
데이터그램(Datagram)과 패킷(Packet)이란 단어는 혼용하는 경우가 많지만, 그 의미에는 차이가 있다. 패킷
이 일반적인 데이터 덩어리를 지칭한다면, 데이터그램
은 데이터를 전송하는 방식이 불안정하고 전송실패에도 노티피케이션(notification)도 없는 즉 신뢰할 수 없는 서비스를 통해 전달되는걸 지칭한다.
위에 설명만 보면 TCP에 비해서 UDP는 기능도 없고 이런 프로토콜을 어디에 쓰나? 라는 의문이 생길 수 있다. 실제로 UDP가 훌륭하게 활약할 수 있는 용도로는 3가지가 있다.
- 실시간 데이터를 전송할 때
- 여러 상대에게 같은 내용의 데이터를 전송할 때
- 데이터 전송시 신뢰성이 필요하지 않은 소량의 데이터를 전송할 때
이런 UDP의 첫 번째 용도는 VoIP(Voice over IP)
를 들 수 있다. IP 네트워크 상에서 음성을 IP 패킷으로 주고 받는 기술이며 IP 전화에 사용되는 기술이다.
VoIP 패킷은 지연이 발생하면 음성 품질이 나빠지기 때문에 지연에 민감하다. 이 처럼 실시간 데이터를 전송하는 용도에서 TCP와 같은 연결의 성립이나 확인 응답 시스템은 오버헤드일 뿐이다. 신뢰성이 낮더라도 어찌 됐든 빠르게 데이터를 전송하는 것이 우선되어야 한다.
두 번째 용도로는 기본적으로 TCP에서는 여러 상대에 같은 내용의 데이터를 전송하는 브로드 캐스트, 멀티 캐스트 통신이 불가능하다. 왜냐하면 TCP는 1:1로 연결
을 맺어야 하기 때문이다. 그러므로 브로드캐스트나 멀티캐스트 같은 1:n 통신을 하기 위해서는 UDP를 사용한다.
예를 들어 화상 회의 애플리케이션은 음성이나 영상을 실시간으로 일제히 전송하는 애플리케이션이므로 UDP를 이용하는 전형적인 애플리케이션이다.
그리고 WebRTC(Web Real-time Communication)가 새롭게 등장하고 부터는 UDP도 통용되는 브라우저 전송 수단이 되었다.
결론
TCP와 UDP에 대해서 알아봤다. 둘 중에 어느 쪽을 사용할지는 각 애플리케이션이 어떤 데이터를 전송하는가에 따라 갈린다. 비율로 따지자면 TCP를 이용하는 애플리케이션 쪽이 많다. 왜냐하면 처리하는 데이터 사이즈가 크고 신뢰성이 필요한 애플리케이션이 많기 때문이다.
TCP / UDP 를 표로 비교해보면 아래와 같다.
TCP | UDP | |
---|---|---|
통신방식 | 연결형 프로토콜 | 비연결형 프로토콜 |
신뢰성 | 높다 | 낮다 |
주요기능 | 연결의 성립, 유지, 종료 | |
재전송 제어 | ||
혼잡 제어 | ||
윈도우 제어 | ||
용도 | 신뢰성이 필요한 데이터를 전송 | 실시간 데이터 전송 |
브로드캐스트, 멀티캐스트 | ||
소량의 데이터 빈번히 전송 |