2011-02-01 4 views
6

나는 일반적으로 사용자 정의 명령/응답/상태 프로토콜을 위해 내장 장치 사이의 고정 배선 직렬 포트 연결을 사용합니다. 이 애플리케이션에서는 마이크로 칩 TCP/IP 스택과 Wi-Fi 모듈 (OS 없음)을 사용하여이 없으므로 짧은 (< = 100 바이트) 명령 및 응답을 교환 할 예정입니다. 스택이 마이크로 칩 이더넷 개발 키트에서 실행 중이며 내 데스크톱에서 핑할 수 있습니다 (아직 Wi-Fi 모듈을 사용하지 않음). ping (마이크로 칩이 스택의 C 소스를 제공함)을 해킹하고 필요한 메시지를 추가한다고 가정합니다. 그러나 올바른/가장 단순한/가장 좋은 방법을 찾고 있습니다.TCP/IP를 사용하여 간단한 메시지를 보내는 가장 간단한 방법

+0

호기심에서 벗어난 하드웨어/키트는 무엇입니까? 임씨도 비슷한 일을하는 데 관심이 있습니다. –

답변

6

정확함/가장 단순함/가장 좋은 것은 반드시 같은 것은 아닙니다. 하지만 내가 너라면, 나는 TCP 대신에 UDP를 사용할 것을 고려할 것이다.

UDP는 데이터 그램 프로토콜입니다. TCP는 스트림 지향적이며 훨씬 많은 오버 헤드 (오버 헤드와 함께 발생하는 이점)가 있습니다. 그러나 UDP는 현재 가지고있는 현재의 직렬 포트 바이트 지향 (패킷 지향) 접근 방식과 더 밀접하게 일치합니다.

UART에서받은 데이터 스트림을/buffers/checksums/delimits/params로 수신하는 몇 가지 상위 프로토콜이 있습니다. UDP를 사용한다면, 가볍고 가벼운 UDP 구현으로 잘 모방 할 수 있습니다. UDP를 사용하면 바이트 (패킷) &이 다른 쪽 끝까지 뻗어 있습니다 (직렬과 비슷합니다).

TCP는 내장 된 재전송, 승인, 순서대로 전달, 타이머, 백 오프 알고리즘 등이 포함 된보다 무거운 연결 기반 프로토콜입니다. TCP를 사용하여 작업 한 대부분의 임베디드 시스템에서 (여러 가지 스택), UDP는 가벼우 며 &은 코드 크기가 & 인 TCP보다 월등히 뛰어납니다.

또한 TCP가 인터넷 백본으로 사용된다는 점도 잊지 마십시오. 일부 패킷은 최종 대상으로가는 도중에 12 개 이상의 홉 (라우터/게이트웨이)을 통과합니다. 패킷이 떨어지는 장소가 많기 때문에 TCP는 많은 정보를 투명하게 처리합니다. 나는 당신의 시스템/상황에서 우리가 LAN (모두 같은 선상에 있음)에 대해 말하고 있으며 전송은 꽤 안정적 일 것이라고 추측 할 수 있습니다 ... 따라서 TCP 오버 헤드는 실제로 필요하지 않습니다.

TCP의 이점이 오버 헤드를 정당화 할 때가 있지만, 작성한 것으로부터 기본 UDP 데이터 그램 설정을 고려해야한다고 생각합니다. 그냥 구글 "간단한 udp 예제"그리고 당신은 기본 구조를 볼 수 있습니다. 예를 들어, 단지 43 행 (서버)과 30 행 (클라이언트)을 사용하는 here is a simple UDP client/server example입니다.

+0

다소 잘못된 대답입니다. UDP의 패킷 손실 위험과 주문 불량은 TCP가 훨씬 더 밀접하게 모방하는 직렬 회선의 정상적인 조건과 크게 다릅니다. TCP의 주된 문제는 상태 연결 (정확하게 연결을 다시 얻는 것)과 질의/응답 통신에서 200ms의 지연을 삽입 할 수있는 클라이언트 PC 끝에서의 nagle ack 지연을 어렵게하는 것입니다.당신이 그것을 견딜 수 없다면 UDP 위에 자신 만의 신뢰성 계층을 구현하는 것이 문제가 될 수 있습니다. 가능한 경우 TCP는 직렬 포트를보다 직접적으로 대체합니다. –

+0

합리적인 부하의 스위치드 네트워크에서 @Chris가 정상적으로 작동합니다. 간단한 ACK 패킷은 잭이 필요로하는 케이스의 99 %를 차지합니다. 전세계에 설치된 대규모의 제품 기반. 또한 라디오 링크를 더 잘 견뎌냅니다. –

+0

기본 프로토콜이 명시 적으로 보장하지 않는다는 가정하에 설계를 잘못해서는 안됩니다. UDP를 사용하려는 경우, 누락되거나 잘못 주문 된 패킷을 복구 할 수 있어야합니다 (테스트 네트워크에서 발생할 수있는 가능성과 상관없이). –

2

TCP/IP 스택을 사용하면 일부 데이터 메시지를 보내려면 send() 함수를 제공해야합니다.

일부 소형 장치는 훨씬 단순하기 때문에 간단한 UDP/IP 구현으로 만 제공됩니다. 순서 제어와 TCP의 신뢰성이 필요하지 않으면 UDP를 사용하여 짧은 메시지를 보낼 수 있습니다. ICMP 메시지를 해킹하는 것이 훨씬 좋습니다.

그러나 TCP 스트림 프로토콜의 편안함과 신뢰성이 필요하다면 IUDP를 기반으로 다시 작성하지 마십시오. 보통 당신은 더 효율적이고 적은 노력으로 더 잘 할 수 없습니다.

관련 문제