Serach

2013년 10월 11일 금요일

TCP와 UDP의 차이점

1. Connection Oriented Protocol vs. Connectionless Protocol

TCP는 3-way handshaking을 통하여 Session을 수립 후에 통신을 하는 Connection Oriented (연결지향형) Protocol 입니다. 그에 반해 UDP는 상대방이 받던 받지 못하던 무작정 데이터를 전송하는 Connectionless (비연결형) Protocol 입니다. 그럼, 언제 UDP를 사용할까요? 

예를 들어 DNS 같은 경우 예로 보세요. 누군가 DNS 서비스를 요청할 때마다 TCP처럼 Session을 맺고 통신을 한다면 속도도 느리고, 서버 리소스도 엄청나게 소모될 겁니다. 그런가 하면 NMS(Network Management Server)가 5분에 한번씩 장비 상태를 점검하기 위해 정보를 읽어오는데 수백, 수천대의 장비와 Session을 맺어야 한다면 이것도 마찬가지로 문제가 있겠죠? 그래서, SNMP(Simple Network Management Protocol)는 UDP를 사용하는 Protocol입니다.

2. Reliable vs. Best Effort

TCP는 데이터 전송에 문제가 발생했을 경우, 재전송 요청 등을 통해서 데이터가 정확하게 전송되는 것을 보장하는 Protocol인 반면, UDP는 에러가 생기든 말든... 보내는 놈이나 받는 놈이나 신경을 쓰지 않는 Protocol입니다. 이런, 이따위 Protocol을 어디에 쓸까요?

재전송을 하면 안되는 서비스들이 있습니다. 대표적인 예가 바로 Real-Time Protocol입니다. 전화를 하고 있다고 가정해 보세요. '여''보''세''요'라는 4개의 데이터를 전송했는데, '세'를 못 받았다고 다시 보내달라고 하면 '여보요세'가 될겁니다. 그냥 '여보X요'로 전달하는게 더 낫겠죠?

그런가 하면 Multicast 서비스가 UDP를 사용합니다. 1:N으로 통신하는 방식에서 한놈이 데이터를 받지 못했다고 재전송 요청을 한다고 생각해보세요. 제대로 받은 놈들도 해당 데이터를 다시 받아서 처리해야 한다는 문제가 발생할 수 있습니다. 그래서 UDP를 사용하는거죠!

그리고, UDP는 상대방이 잘 받았는지 못 받았는지 신경을 쓰지 않으니 Ack가 별도로 필요없겠죠? ^^

3. Sequence Number vs. Non-Sequencing

TCP는 데이터 유실 등을 확인하기 위하여 데이터마다 Sequence Number라는 번호를 붙여서 전송을 합니다. 하지만, UDP는 데이터 유실에 관심이 없기 때문에 Sequence Number가 없는 Non-Sequencing Protocol 입니다. 그럼, 데이터를 전송할 때 상이한 경로로 전송되서 나중에 보낸 데이터가 먼저 도착하게 되면 어떻게 되나요? 예를 들어 '여''보''세''요'를 전송했는데 '여''세''보''요' 순으로 도착을 한겁니다.

이렇게 데이터 전송 순서를 알아야 하는 서비스는 RTP(Real-time Protocol)과 같은 Sequence Number 기능을 가지고 있는 기술과 함께 쓰이거나 어플리케이션 수준에서 Sequencing을 수행합니다.
 
4. Half-duplex vs. Full-duplex

Layer 2에서의 duplex가 아니구요, 한개의 Port를 이용하여 [upload/download]가 가능한가에 대한 부분입니다. 원칙적으로 UDP는 Half-duplex이고 TCP는 Full-duplex 입니다. 하지만, UDP도 어플리케이션 개발 방식에 따라 Full-duplex 방식으로도 설계가 가능합니다. 그래서,TCP를 Full-dulpex 방식이라고 이야기하지만, UDP를 Half-duplex 또느 Full-duplex 방식이라고 정의하지는 않습니다.

5. Control vs. Don't care

TCP는 Error-Contol, Flow-Control 등 이것저것 제어를 많이 합니다.
하지만, UDP는 그런건 그냥 짜증스럽고 귀잖을 뿐입니다. 

댓글 없음:

댓글 쓰기