TCP/IP 및 UDP와 함께 LabVIEW 사용하기
- 업데이트 날짜:2025-08-27
- 5분 (읽기 시간)
Internet Protocol(IP), User Datagram Protocol(UDP), Transmission Control Protocol(TCP)은 네트워크 통신을 위한 기본 도구입니다. TCP/IP란 이름은 인터넷 프로토콜에서 가장 잘 알려진 프로토콜인 Transmission Control Protocol과 Internet Protocol에서 유래합니다.
TCP/IP를 사용하여 단일 네트워크 또는 상호연결된 네트워크와 통신을 할 수 있습니다. 지형적으로 멀리 떨어져 있는 각각의 네트워크도 연결할 수 있습니다. TCP/IP는 한 네트워크에서 다른 네트워크, 또는 인터넷이 연결된 컴퓨터에서 다른 컴퓨터로 데이터를 보냅니다. 대부분의 컴퓨터에서 TCP/IP를 사용할 수 있기 때문에, 다양한 시스템 사이에 정보를 전송할 수 있습니다.
LabVIEW와 TCP/IP
모든 플랫폼에서 TCP/IP 프로토콜을 LabVIEW와 함께 사용할 수 있습니다. LabVIEW는 사용자가 클라이언트 또는 서버 VI를 생성하는데 사용할 수 있는 TCP와 UDP VI 및 함수를 포함합니다.
IP
IP는 컴퓨터 사이에 데이터를 이동하는 하위 레벨 서비스를 수행합니다. IP는 데이터를 데이터그램으로 불리는 구성요소로 묶습니다. 데이터그램에는 데이터 및 소스와 대상 주소를 나타내는 헤더가 포함되어 있습니다. IP는 데이터그램의 정확한 경로를 결정하여 네트워크 또는 인터넷을 통하여 데이터를 지정된 대상에 보냅니다.
IP는 전달을 보장하지 못합니다. 실제로 데이터그램이 전송에서 복사된 경우, IP는 한 번 이상 단일 데이터그램을 전달할 수도 있습니다. 프로그램은 IP를 거의 사용하지 않고 대신 TCP 또는 UDP를 사용합니다.
UDP
UDP는 컴퓨터의 프로세스 사이의 단순한 하위 레벨 통신을 제공합니다. 프로세스는 데이터그램을 대상 컴퓨터 또는 포트에 보내어 통신합니다. 포트는 사용자가 데이터를 보내는 위치입니다. IP는 컴퓨터와 컴퓨터 사이의 전달을 처리합니다. 데이터그램이 대상 컴퓨터에 도달한 후, UDP는 데이터그램을 대상 포트로 이동시킵니다. 대상 포트가 열려있지 않은 경우, UDP는 데이터그램을 삭제합니다. UDP에는 IP와 같은 전달 문제가 있습니다.
UDP는 신뢰도가 그다지 중요하지 않은 어플리케이션에서 많이 사용됩니다. 예를 들어, 정보 데이터를 빈번하게 전송하는 어플리케이션의 경우, 약간의 데이터 손실은 문제가 되지 않습니다.
LabVIEW에서 UDP 사용하기
UDP는 TCP와 같은 연결 기반 프로토콜이 아니므로, 데이터를 보내거나 받기 전에 대상과 연결할 필요는 없습니다. 대신 각 데이터그램을 보낼 때 데이터의 대상을 지정합니다. OS는 전송 에러를 보고하지 않습니다.
[UDP 열기] 함수를 사용하여 포트에 UDP 소켓을 엽니다. 동시에 열리는 UDP 포트의 수는 OS에 따라 다릅니다. [UDP 열기] 함수는 고유하게 UDP 소켓을 식별하는 네트워크 연결 참조 번호를 반환합니다. 이 연결 참조 번호를 사용하여 다음 VI 호출에서 이 소켓을 참조하십시오.
[UDP 쓰기] 함수를 사용하여 데이터를 대상에 보내고, [UDP 읽기] 함수를 사용하여 해당 데이터를 읽습니다. 각 쓰기 작업에는 대상 주소와 포트가 필요합니다. 각 읽기 작업에는 소스 주소와 포트가 포함됩니다. UDP는 사용자가 보내는 각 명령에 지정하는 데이터그램 바이트를 보존합니다.
UDP 데이터그램의 크기는 작동 환경에 따라 다르지만 최대 65535 바이트입니다. National Instruments는 1 KB 이하의 데이터그램을 전송할 때 UDP를 사용하여 기본 IP 패킷이 패킷 손실의 가능성을 크게 증가시키는 전송 중 분리 또는 결합의 가능성을 최소화시키도록 권장합니다.
포트에서 모든 통신을 마치면, [UDP 닫기] 함수를 사용하여 시스템 리소스를 해제합니다.
UDP 멀티캐스트
UDP 함수를 사용하여 단일 클라이언트(단일캐스트) 또는 브로드캐스트를 통하여 서브네트의 모든 컴퓨터와 통신할 수 있습니다. 여러 특정한 컴퓨터와 통신하려는 경우, UDP 함수를 설정하여 클라이언트의 리스트를 반복해야 합니다. 이렇게하면 중복된 네트워크 트래픽이 생성됩니다. LabVIEW가 데이터 복사본을 각 클라이언트에 보내어 데이터를 받는 클라이언트의 리스트를 유지하기 때문입니다.
멀티캐스팅을 사용하면 전송자가 클라이언트의 리스트를 유지하거나 각 클라이언트에 데이터의 여러 복사본을 보내지 않고도 네트워크의 단일 전송자와 여러 클라이언트 사이의 통신을 수행할 수 있습니다. 멀티캐스트 전송자로부터 데이터 브로드캐스트를 받으려면, 모든 클라이언트가 멀티캐스트 그룹에 참여해야 합니다. 전송자는 데이터를 보내기 위해 그룹에 참가할 필요가 없습니다. 전송자는 멀티캐스트 그룹을 정의하는 멀티캐스트 IP 주소를 지정합니다. 멀티캐스트 IP 주소는 224.0.0.0에서 239.255.255.255의 범위 내에 있습니다. 클라이언트가 멀티캐스트 그룹에 가입하고자 하는 경우, 클라이언트는 그룹의 멀티캐스트 IP 주소를 등록합니다. 멀티케스트 그룹에 등록한 후, 클라이언트는 멀티캐스트 IP 주소로 보내지는 데이터를 받게 됩니다.
LabVIEW에서 멀티캐스트를 하려면, [UDP 멀티캐스트 열기] VI를 사용하여 UDP 데이터를 읽거나, 쓰거나, 읽고 쓰기가 가능한 연결을 엽니다. 데이터 쓰기를 위해 time-to-live (TTL), 데이터 읽기를 위해 멀티캐스트 주소, 데이터 읽기 및 쓰기를 위해 멀티캐스트 포트 번호를 지정합니다. 기본 TTL은 1이며, 이는 LabVIEW가 데이터그램을 로컬 서브네트에만 보내는 것을 의미합니다. 라우터가 멀티캐스트 데이터그램을 받으면, 데이터그램 TTL이 감소됩니다. TTL이 1보다 큰 경우, 라우터는 데이터그램을 다른 라우터로 전달합니다. 다음 테이블은 time-to-live 파라미터에 값을 지정할 때 멀티캐스트 데이터그램에 어떤 동작이 발생하는지 설명합니다.
| 0 | 데이터그램은 호스트 컴퓨터에 남아있습니다. |
| 1 | 해당 IP 주소를 사용하는 같은 로컬 서브넷의 모든 클라이언트에 보내진 데이터그램. 허브/반복기와 브리지/스위치는 데이터그램을 전달합니다. TTL이 1인 경우, 라우터는 데이터그램을 전달하지 않습니다. |
| >1 | 데이터그램은 보내지고, 라우터가 TTL-1 레이어를 통해서 이를 전달합니다. |
UDP 멀티캐스팅을 사용하는 예제는 다음 VI를 참조하십시오:
- UDP Multicast – Receiver VI: labview\examples\Data Communication\Protocols\UDP\UDP Multicast\UDP Multicast.lvproj
- UDP Multicast – Sender VI: labview\examples\Data Communication\Protocols\UDP\UDP Multicast\UDP Multicast.lvproj
TCP
TCP는 네트워크를 통해 신뢰할 수 있는 전송을 하고 에러, 손실, 또는 중복 없이 데이터를 시퀀스로 전달합니다. TCP는 승인을 받을 때까지 데이터그램을 다시 전송합니다.
LabVIEW에서 TCP 사용하기
TCP는 사이트가 데이터를 전송하기 전에 반드시 연결되어야 하는 연결 기반 프로토콜입니다. 데이터 전송은 클라이언트와 서버 사이에서 일어납니다. TCP는 동시에 여러 개의 연결을 허용합니다.
들어오는 연결을 기다리거나 능동적으로 지정된 주소와의 연결을 찾아 연결을 초기화합니다. TCP를 연결할 때, 주소와 이 주소의 포트를 지정해야 합니다. 주소가 같아도 포트가 다르면 그 주소에 대해 다른 서비스로 인식합니다.
[TCP 연결 열기] 함수를 사용하여 능동적으로 특정한 주소 및 포트와의 연결을 만듭니다. 연결에 성공하면, 함수는 고유하게 해당 연결을 식별하는 네트워크 연결 참조 번호를 반환합니다. 이 연결 참조 번호를 사용하여 다음 VI 호출의 연결을 참조합니다.
다음 기술을 사용하여 들어오는 연결을 기다릴 수 있습니다:
- [TCP 리슨] VI를 사용하여 리스너를 생성하고 지정된 포트에서 TCP 네트워크 연결이 받아들여지기를 기다립니다. 연결이 성공하면, VI는 연결 참조 번호, 주소, 원격 TCP 클라이언트의 포트를 반환합니다.
- [TCP 리스너 생성] 함수를 사용하여 리스너를 생성하고, [TCP 리스너 기다림] 함수를 사용하여 새 연결을 듣고 받습니다. [TCP 리스너 기다림] 함수는 사용자가 함수에 연결한 것과 동일한 리스너 ID를 반환합니다. 새 연결에 대한 기다림을 마치면 [TCP 연결 닫기] 함수를 사용하여 리스너를 닫습니다. 리스너로부터 읽거나 리스너에 쓸 수 없습니다.
두번째 기술을 사용하는 것의 이점은 [TCP 연결 닫기] 함수를 사용하여 타임아웃을 사용하지 않고 연결을 기다릴 때 유용한 대기 동작을 취소할 수 있다는 것입니다. 그러나 다른 조건이 참이면 대기를 취소합니다. [TCP 리슨] VI는 언제든지 닫을 수 있습니다.
연결을 설정하면, [TCP 읽기] 함수와 [TCP 쓰기] 함수를 사용하여 원격 어플리케이션에서 데이터를 읽고 씁니다.
[TCP 연결 닫기] 함수를 사용하여 원격 어플리케이션과의 연결을 닫습니다. 읽지 않은 데이터가 남아있는 상태에서 연결을 닫는 경우, 데이터를 잃을 수 있습니다. 컴퓨터에 상위 레벨 프로토콜을 사용하여 연결을 언제 닫을지 결정합니다.
TCP와 UDP 선택하기
TCP는 사용자가 신뢰성 있는 데이터 전송을 원할 때 가장 적합한 프로토콜입니다. UDP는 연결 없이 사용할 수 있는 고성능 프로토콜이나, 신뢰성 있는 데이터 전송을 보장하지는 못합니다.
타임아웃과 에러
네트워크 어플리케이션을 설계할 때, 에러가 발생하면 어떤 일이 일어나는지 주의깊게 고려하십시오. 예를 들어, 서버가 충돌하는 경우, 각 클라이언트 VI가 그것을 어떻게 처리할지 결정합니다.
한 가지 솔루션은 각 클라이언트 VI가 타임아웃을 가지도록 하는 것입니다. 일정 시간 후에 결과가 나오지 않는 경우, 클라이언트는 계속 실행됩니다. 실행 중에 클라이언트는 연결을 재설정 시도하며 에러를 보고할 수 있습니다. 필요한 경우, 클라이언트 VI는 어플리케이션을 닫을 수 있습니다.
TCP와 UDP 예제
TCP와 UDP VI 및 함수를 사용하는 예제는 다음 VI를 참조하십시오:
- labview\examples\Data Communication\Protocols\TCP\Simple TCP\Simple TCP.lvproj
- labview\examples\Data Communication\Protocols\UDP\Simple UDP\Simple UDP.lvproj