[Network] UDP 그리고 TCP

Kim Ju Young·2022년 2월 4일
0

네트워크

목록 보기
1/2
post-thumbnail

시작하기 전에

TCP/UDP 차이가 얼마나 중요한지 다들 알 것이다. 두 개는 확실히 정리하고자 이 글을 쓴다.

사진엔 StringBuilder랑 String도 있지만 진행하다보니 String이랑 StringBuilder 차이 는 다른 글로 분리하기로 했다.

UDP(User Datagram Protocol)

인터넷 표준으로 UDP는 RFC768 문서에 기록되어 있다. RFC 자체에 호기심이 간다면 위키백과를 참고하길 바란다. RFC 설명서.

UDP는 비연결형 프로토콜로 데이터를 전달해주지만 데이터를 보낼 때 데이터의 전달 및 중복 방지가 보장되지 않는다.

엥? 데이터를 보내주는데 데이터 전달이 보장되지 않는다고? 말이 되는 소리야?

말이 된다. UDP는 그런 녀석이다. 사진을 보아라.

입으로 들어가기도 하고, 사방으로 튀는 물방울들을 데이터라고 생각하면 된다. 입과 병을 연결하지 않았기 때문에 사방으로 튀는 수많은 물방울이 보이는가? 데이터 전달이 제대로 되지 않은 것이다. 이것을 기억하며 배우면 이해가 편하다.

UDP 헤더는 단순하기 그지 없다. 시작 포트와 목적지 포트, 길이와 체크썸이 있다. 목적지포트를 향해 패킷을 출발 시키는 것이다. 다만, 문제는 패킷은 가는 길을 전혀 모른다는 것에 있다.

패킷을 잘 모른다면 패킷은 네트워크 상에서 데이터를 보내주는 택배상자 같은 녀석이라고 생각해라.

아래 사진은 TCP와 UDP의 특징과 차이 - 망나니 개발자님을 참고했다.

송신자는 1,2,3번 패킷을 보내주려고 한다. 하지만, 비연결이기 때문에 가는 길을 모른 채로 여러 갈래로 보내는 것이다. 그렇게 되면 1,3번 패킷같이 잘 가는 패킷이 있는 한편, 2번 패킷처럼 길을 제대로 못 찾아가는 패킷도 생길 수 있다. 위 그림처럼 입 주변으로 튀는 물방울들이 생기는 것이다.

이렇기 때문에 UDP는 신뢰성이 중요한 대부분의 서비스에서 쓰이지 않고, 스트리밍같은 연속성이 중요한 서비스에서 쓰이게 된다.

TCP(Transmission Control Protocol)

드디어 불편하지 않게 입을 대고 마신다!

TCP는 RFC793 문서에 아주 잘 정리되어 있다. UDP는 겨우 3페이지 남짓인데 TCP는 수십페이지 있다. 시간이 난다면 한번 보시길. TCP가 발전해 온 역사가 적혀있다.

TCP는 연결형 프로토콜로 데이터 전달시 3-way handshaking과정을 통해 연결을 설정하고 흐름제어 및 혼잡제어가 가능하다.

TCP의 특징이라면 데이터 전달 신뢰성이 높은 것이다. 물론, TCP보다 훨씬 복잡한 프로토콜들도 있고 신뢰성 좋은 녀석들도 있다. 하지만. 그 방식들은 너무 복잡하고 비용이 큰 나머지 시장의 선택을 받지 못했고 TCP가 신뢰성을 챙기면서도 경제적으로 좋기에 선택 받았다.

3-way handshaking도 중요하다. 다만, 내용이 복잡하기도하고 간단하게 정리하고 넘어갈테니 자세하게는 TCP 3 Way-Handshake & 4 Way-Handshake - sungchan41님글을 참고해주길 바란다.

3-way handshaking은 클라이언트와 서버가 SYN과 ACK패킷을 때에 맞게 세 번 주고받으며 연결을 설정하는 과정이라고 생각하면 된다.

연결이 설정되면 이제 신뢰성이 보장되었으니, 데이터 전달이 원활해진다. 이제 데이터 전달이 잘 되는걸 알기 때문에 다음 같은 기법들을 적용시킬 수 있는 것이다.

  1. 흐름 제어(Flow Control) : 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법
  2. 혼잡 제어(Congestion Control) : 송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법

흐름 제어는 송신측에서 너무 많은 데이터를 보내게 되면 수신측에서 데이터 용량 상 못 받을 수 있기 때문에 해주는 것이다.

혼잡 제어는 네트워크 상에서 한 라우터에 데이터가 몰릴 경우 수신 측에서 원활하게 데이터를 못받을 수 있다. 하지만, 또 데이터를 보내게 되면 혼잡을 가중 시킬 수 있기 때문에 데이터 송신을 제어해준다고 생각하면 된다.

TCP는 현재 대세이며 많은 서비스에서 사용되고 있다.

마치며

UDP / TCP 의 가장 큰 차이점은 비연결과 연결의 차이라고 볼 수 있겠다. 현재는 네트워크 장비 개선으로 UDP도 좋은 신뢰성을 가지고 있다고 하니 실제로 보기보다는 이론적 차이만 정확히 꿰고 있으면 되겠다.

참고

RFC768 문서
RFC793 문서
TCP와 UDP의 특징과 차이 - 망나니 개발자님
TCP 3 Way-Handshake & 4 Way-Handshake - sungchan41님

profile
호호선생

0개의 댓글