TCP는 재전송 및 승인 메커니즘을 제공하는 신뢰할 수있는 프로토콜이지만 send()를 성공적으로 반환해도 데이터가 대상 끝점에 도달했음을 보장하지 못하고 데이터가 복사된다는 것을 의미합니다. 커널 버퍼에 저장한다.TCP는 100 % 신뢰할 만합니까?
데이터가 대상에 성공적으로 도달했는지 여부를 응용 프로그램이 알 수있는 메커니즘이 있습니까?
가능한 해결책 중 하나는 응용 프로그램 계층에 승인 메커니즘을 구축하는 것일 수 있습니다.
TCP는 재전송 및 승인 메커니즘을 제공하는 신뢰할 수있는 프로토콜이지만 send()를 성공적으로 반환해도 데이터가 대상 끝점에 도달했음을 보장하지 못하고 데이터가 복사된다는 것을 의미합니다. 커널 버퍼에 저장한다.TCP는 100 % 신뢰할 만합니까?
데이터가 대상에 성공적으로 도달했는지 여부를 응용 프로그램이 알 수있는 메커니즘이 있습니까?
가능한 해결책 중 하나는 응용 프로그램 계층에 승인 메커니즘을 구축하는 것일 수 있습니다.
물론 네트워크 포트를 통해 전달되고 수신되는 데이터를 알고 싶다면 wireshark 소프트웨어를 사용하여 송수신되는 데이터를 캡처하십시오. wireshark를 통해 패킷을 추적 할 수 있습니다.
독자적인 앱을 구축하고 수신자가 보낸 사람에게 성공 메시지를 회신하고 성공 메시지를받지 못한 경우 필요에 따라 다시 보낼 수 있습니다. 자바에서
, JMS는 좀 기존 라이브러리가 동일한 C.에
TCP 메시지 중 하나
에서 수신 할 수 없습니다 순서가 없거나 중간 메시지가 누락되었습니다.
사례 1과 2를 구별하려면 승인 메커니즘을 구현해야합니다. CRC보다는 메시지 무결성을 보장하는 좋은 아이디어는 들어오는 메시지의 MD5 또는 다른 해시를 다시 보내는 것입니다.
실제로 플랫폼의 TCP 구현을 신뢰할 수없는 경우 응용 프로그램 계층에 확인 메커니즘을 구축하십시오. –
그리고 승인 메커니즘이 100 % 신뢰할 수 있습니까? –
100 % 신뢰할 수있는 프로토콜을 만드는 것은 불가능합니다. 신뢰성이 양방향 일 필요가있는 경우에만 [Two Generals Problem] (http://en.wikipedia.org/wiki/Two_Generals'_ 문제) – Barmar