티스토리 뷰

프로그래밍/Network

TCP UDP 통신

국윤창 2017. 1. 17. 18:12

오큘러스에서 회전값을 받아와 UDP로 뿌려주면 로봇에 달려있는 PC가 시리얼포트로 로봇 목을 제어하는 모듈을 개발중이다.


UDP는 이번에 처음 사용해보는데 TCP에 비해 프로토콜이 굉장히 간단한 느낌이다.


UDP가 TCP에 비해 빠르다고 하는데 내가 만든 것은 가벼운 프로그램이라 체감은 못하겠고 TCP와 다른점은 다음과 같다.


1. UDP는 클라이언트 접속 개념이 없고 데이터 검증이 없다.


TCP는 서버가 클라이언트를 listen하면 클라이언트가 접속을 시도하고 접속이 됐다는 결과를 알려준다. 접속 종료시에도 마찬가지이다.


하지만 UDP는 특정 port로 열어둘테니 데이터를 던져봐라라는 느낌이다. 데이터가 어느 클라이언트에서 왔는지는 알아서 판단해야한다.


TCP 데이터 송수신은 데이터를 보내면 받았다는 것을 확인하는 작업이 존재하며 데이터가 손실 됐을 시 데이터를 재 요청한다. 따라서 손실이 없다.


UDP는 이런 작업이 없으며 손실 여부도 데이터를 받는 쪽이 확인해야한다.


TCP IP 헤더 그림[그림1 TCP 헤더] (출처: 위키피디아)


위의 그림1은 TCP 헤더를 나타낸다. 헤더만 거의 20바이트인데 이것을 통해 데이터 검증, 순서 등을 확인한다.


아래 자세히에 헤더의 각 필드 당 설명이 적혀있다.



[그림 2 TCP 프로토콜] (출처: http://www.industrialethernetu.com/courses/202_3.htm)



위의 그림 2는 TCP 프로토콜이 어떻게 동작하는지에 대한 그림이다. 연결 수립과 데이터 송수신, 그리고 연결 종료 시에 어떻게 통신하는 지를 보여준다.


중간에 Send Data 부분을 보면 수신자가 데이터 손실 시 ACK를 보내지 않는다. 그럼 송신자는 일정 시간(Timeout)후에 다시 데이터를 보내게 된다.



2. TCP는 바이트 스트림이고 UDP는 데이터 그램이다.


이것이 무슨 말이냐면,


TCP는 데이터 경계가 없어서 받는 쪽에서 바이트를 잘 모아 Packet으로 만드는 과정이 필요하고 데이터가 네트워크 트래픽에 따라 버퍼에 한번에 올수도, 나눠서 올수도 있다는 얘기이다.


UDP는 데이터 경계가 존재한다. 그래서 보내는 쪽에서 예를들어 10바이트를 보냈다 하면 받는 쪽에서도 받을 때 10바이트를 받는다.


TCP는 10바이트를 3번 연속으로 보내면 버퍼가 한번에 30바이트를 받을 수도 있지만, UDP는 무조건 10바이트씩 3번 받는다.


3. UDP는 1:1 외에 1:다 다:다 통신이 가능하다.


TCP는 1:1 통신만 가능한 반면 UDP는 브로드캐스트와 멀티캐스트 통신이 가능하다.


브로드캐스트와 멀티캐스트는 후에 자세히 알아보겠다.



'프로그래밍 > Network' 카테고리의 다른 글

Socket Introduction (2)  (0) 2017.05.22
Socket Introduction (1)  (0) 2017.04.05
Transport Layer (3)  (0) 2017.03.13
Transport Layer (2)  (0) 2017.02.24
Transport Layer (1)  (0) 2017.02.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함