본문 바로가기

General

TCP vs UDP 와 네트워킹 101

인터넷은 클라우드라고 해서 구름처럼 퍼져있는 연결을 떠올리기 쉽다.

 

하지만 실은 인터넷은 실제론 컴퓨터와 컴퓨터의 연결일 뿐이다.

 

 

복잡하게 연결된 1:1의 연결의 반복.. 서로서로 이야기하는 연결들의 반복. 이것이 실제로 인터넷의 모습이다.

 

실제로 클라이언트와 서버라고 부르는 각각의 기계들은

 

데이터를 주고 받으면서 자신들의 역할을 하는데

 

이런 데이터들을 패킷이라고 부른다.

 

 

패킷은 다섯개의 기본적인 레이어가 있는데

 

 

1단 :  피지컬레이어, 물리 레이어.(Physical) => 케이블

2단: 링크레이어(Link) => wifi, 이더넷 커넥션

3단: 네트워크 레이어(Network) => IP

4단: 트랜스포트 레이어(Transport) => UDP/TCP

5단: 어플리케이션 레이어(Application) => HTTP, FTP, SSH, SMTP

 

개발자로서 기본적으로 3단~5단계를 다룬다고 보면 된다.

 

4단계 레이어인 트랜스포트 레이어는 2의 16승에 해당하는 포트를 가지고 있다.

 

어림잡아 65000포트정도 될 것이다.

 

만약 리액트 앱을 3000포트에서 구동했다면

 

트랜스포트 레이어에서 생성한 이 65000여개의 포트중의 하나를 사용한 것이다.

 

 

5000포트를 사용하는 Flask나 Rails 앱또한 이 65000여개의 포트중의 하나를 사용한 것이다.

 

트랜스포트 레이어는 대표적으로 UDP와 TCP가 있다.

 

UDP는 빠르고 가벼운 대신 Unreliable하다.

 

헤더가 8바이트밖에 안된다.

 

또한 Connectionless 기반이다.

 

먼저 연결을 하고 뭘 하는게 아니라, 그냥 기다리지 않고 바로 데이터를 보낸다.

 

데이터가 잘못된거 같든 말든 그냥 보낸다.

 

Packet Loss를 신경쓰지 않는다.

 

혼잡을 겪든 말든, 순서도 신경쓰지 않는다.

 

 

한마디로 빠른대신 개발자로서 다루기 굉장히 어려운 것이다.

 

그래서 게임이나 리얼타임이 매우 중요한 스카이프나 그런곳에서 사용된다.

 

 

 

 

 

TCP(Transmission Control Protocol)은 UDP의 반대다.

 

Connection-Based 이다.

 

먼저 연결부터 이루어지고나서 뭘 주거니 받거니 한다.

 

1. 리퀘스트

2. 리스폰스

3. 데이터 주고받기 시작

 

또한 Delivery Acknowledgement. 즉 승인정보를 배달한다.

 

또 Retransmission이 가능하다.

 

그리고 in-order packet을 지원한다.

 

 

제대로된 순서로 패킷이 구성되어 있지 않아도 UDP는 이걸 생긴대로 보내버리지만

 

TCP는 이걸 제대로 순서를 맞춰서 보낸다.

 

 

한마디로 TCP vs UDP에서

 

Reliable의 측면에서의 승자는 TCP

 

Fast의 측면에서 승자는 UDP(but, can be unreliable).

 

즉 UDP가 무조건 불안정한건 아니고, 매우 쉽게 unreliable해질수 있고 어렵다는 뜻인것 같다.

 

마치 타입스크립트를 사용하지 않는 자바스크립트 같은것이 UDP가 아닐까??

 

 

요즘에 공부중인 Socket.io는 TCP 전송레이어 위의 HTTP에서 작동한다.

 

이렇게 오늘은 매우 간략하게 네트워크 프로토콜에 대해서 알아보았다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'General' 카테고리의 다른 글

HTTP vs WebSockets  (0) 2020.05.02
웹소켓  (0) 2020.05.02