본문 바로가기
개발일지/기타

데이터 통신 프로토콜 TCP, UDP

by 쫌눈 2021. 4. 21.
반응형

TCP란 데이터 통신을 위한 프로토콜의 일종, Transport Layer에서 사용하는 프로토콜로 하위 계층에 사용되는 IP와 엮어 TCP/IP라고도 표현한다.

TCP는 Point To Point Service로 양끝에 연결되었다는 정보만 알고있다. 물리적인 자원은 하위 계층인 Ip를 통해 할당되어진다. 또한 Connection Oriented Service 가상 회선방식을 제공하고 Flow Control, Congestion Control를 제공한다. 이를 통해 TCP는 높은 신뢰성을 보장한다.

UDP는 Connectionless Oriented Serive 데이터그램 방식을 제공, 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다. 또한 별도의 연결 설정이나 해제 과정이 존재하지 않다. 때문에 속도가 빠르나 신뢰성이 낮다. 또한 서버는 클라이언트와 1대 다로 연결 될 수 있다.

TCP 서버 특징

  1. 서버소켓은 연결만 담당한다.
  2. 서버와 클라이언트는 1대1로 연결된다.
  3. 스트림 전송으로 전송 데이터의 크기가 무제한이다.
  4. 패킷에 대한 응답을 해야하기 때문에(시간 지연, CPU 소모) 성능이 낮다.
  5. Streaming 서비스에 불리하다. (손실된 경우 재전송 요청을 하므로)

UDP 서버 특징

  1. 비연결형 서비스다.
  2. 비연결형 서비스이기 때문에, 연결을 설정하고 해제하는 과정이 존재하지 않는다.
  3. 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
  4. UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
  5. 신뢰성이 낮다.
  6. TCP보다 속도가 빠르다.
  7. 패킷에 순서를 부여하여 재조립을 하거나 흐름 제어 또는 혼잡 제어와 같은 기능을 처리하지 않는다.
  8. 실시간으로 데이터를 계속 주고받을 때 용이하다.

내 경험

나는 server는 form으로 제작되었고, client를 unity쪽에서 담당했다.

대충 그림으로 설명하자면,

window form으로 만든 서버 프로그램과 그 외의 사용자들간의 데이터 통신이다.

설명을 잘하는 타입이 아니라 부족하겠지만, 위 그림을 간단하게 설명하자면

각자의 클라이언트가 윈도우 폼과 연결을 하여 각자의 데이터를 주고받는다.

데이터들은 byte로 주고받으며, 프로토콜 규약에 따라 처리를 했다.

나는 VR시뮬레이션 연동이었기 때문에 VR헤드셋, 립모션(leap motion),...등의 위치, 회전, 크기값을 form을 통해 주고받아 client에 뿌려주는 방식이었다.

연결 관리 코드[추후 추가]

위 코드를 이용하여 나온 결과물은 아래와 같다.

VR 연동
VR연동
VR연동

이렇게 소켓통신으로 각 사용자의 위치, 회전 크기, 행동 등을 모두 공유하여 프로젝트를 무사히 끝낼 수 있었다.

 

할때 당시에는 야근도 밥먹듯이 하고, 주말에도 나가서 일해서 너무 힘들었지만 끝난 뒤 결과물을 보니 그렇게 신이나더라.

결과물로 야근, 주말출근 등의 스트레스가 싹 없어지는거 보니 난 천성 개발해야할 사람이었나보다.ㅎ.ㅎ

반응형

댓글