Post

TCP vs UDP

TCP와 UDP에 대해서 알아보자.
우선 TCP와 UDP 모두 컴퓨터가 다른 컴퓨터와 통신하기 위한 규약(Protocol)이다.
이 규약이 존재하기 때문에 우리는 다른 컴퓨터와 통신할 수 있다.
추가적으로 TCP와 UDP는 밑의 OSI 7계층과 TCP/IP 4계층에서 네트워크 계층 또는 인터넷 계층에 해당한다.

Img-01

그렇다면 TCP와 UDP의 차이는 무엇일까?

다음은 TCP와 UDP의 차이를 한번에 요약한 글이다.

TCP(Transport Control Protocol)

  1. 연결을 위해 할당되는 논리적인 경로가 있다.
  2. 데이터 경계(Boundary)가 없다.
  3. 전송 순서가 보장된다.
  4. 분실이 일어나면 책임지고 다시 전송한다.(신뢰성이 좋다.)
  5. 데이터를 주고 받을 상황이 아니면 일부만 보낸다.(흐름/혼잡제어)
  6. 고려할 것이 많아서 속도가 UDP에 비해서 느리다.

UDP(User Datagram Protocol)

  1. 연결이라는 개념이 없다.
  2. 데이터 경계(Boundary)가 있다.
  3. 전송 순서가 보장되지 않는다.
  4. 분실에 대한 책임이 없다.(신뢰성이 나쁘다.)
  5. 일단 데이터를 보낸다.
  6. 단순해서 TCP에 비해 빠르다.

그럼 1번씩 비교해가면서 왜 이런 차이가 있는지 보자.

1번
TCP 같은 경우는 신뢰성 있는 데이터 전송을 위해 3-way handshake를 사용한다. 메세지 송신측과 수신측이 데이터를 주고 받기 전에 서로 연결이 준비됐다는걸 인식하는 과정이다.
그러나 UDP 같은 경우에는 이런 방법이 없고, 데이터를 즉시 전송해버린다. 그래서 위와 같은 차이가 존재한다.

2번
“Hello”와 “World”를 보낸다고 가정해보자. TCP 같은 경우에는 데이터 경계가 없음으로, 수신측에서 데이터를 받을 때, “HelloWo”, “rld” 이렇게 받을 수 있다.
그러나 UDP같은 경우에는 반드시 “Hello”와 “World”를 구별해서 받는다.

3번
다시 “Hello”와 “world”를 보낸다고 가정해보자. TCP 같은 경우에는 전송 순서가 보장되어서, 반드시 “Hello”를 받은 후에 “World”를 받는다.
그러나 UDP는 “World”를 먼저 받고, “Hello”를 받을 수도 있다.

4번
컴퓨터끼리 통신할 수 있게 해주는 라우터와 같은 중간 경유 장치들이 문제가 있거나, 여러 이유로 데이터가 분실될 수 있다. 이 경우 TCP는 분실이 일어난 데이터 패킷을 확인해서 책임지고 다시 전송한다.
그러나 UDP는 그런거 없다.

5번
데이터를 보낼때는, 결국 운영체제에 요청을 해서 프로그램이 들고 있는 버퍼에서 운영체제의 버퍼에 데이터를 옮긴다음, 운영체제에서 해당 데이터를 전송한다. 그러나 수신 측의 버퍼가 가득차서 데이터를 받지 못할 수도 있다. 이 경우 TCP는 송신하지 않고 있다가, 수신측에서 버퍼를 다 처리하면 데이터를 전송한다.
물론 UDP는 그런거 없고 그냥 보낸다.

6번
6번은 위의 5가지를 고려했을 때, 나오는 결론이다. TCP는 UDP에 비해 안정성이 크나 속도가 느리다. 반면 UDP는 TCP에 비해 안정성이 작으나 속도가 빠르다.

This post is licensed under CC BY 4.0 by the author.