2013-01-13 2 views
3

TCP는 재전송 및 승인 메커니즘을 제공하는 신뢰할 수있는 프로토콜이지만 send()를 성공적으로 반환해도 데이터가 대상 끝점에 도달했음을 보장하지 못하고 데이터가 복사된다는 것을 의미합니다. 커널 버퍼에 저장한다.TCP는 100 % 신뢰할 만합니까?

데이터가 대상에 성공적으로 도달했는지 여부를 응용 프로그램이 알 수있는 메커니즘이 있습니까?

가능한 해결책 중 하나는 응용 프로그램 계층에 승인 메커니즘을 구축하는 것일 수 있습니다.

+6

실제로 플랫폼의 TCP 구현을 신뢰할 수없는 경우 응용 프로그램 계층에 확인 메커니즘을 구축하십시오. –

+2

그리고 승인 메커니즘이 100 % 신뢰할 수 있습니까? –

+7

100 % 신뢰할 수있는 프로토콜을 만드는 것은 불가능합니다. 신뢰성이 양방향 일 필요가있는 경우에만 [Two Generals Problem] (http://en.wikipedia.org/wiki/Two_Generals'_ 문제) – Barmar

답변

-2

물론 네트워크 포트를 통해 전달되고 수신되는 데이터를 알고 싶다면 wireshark 소프트웨어를 사용하여 송수신되는 데이터를 캡처하십시오. wireshark를 통해 패킷을 추적 할 수 있습니다.

+0

wireshark를 어떻게 원격으로 사용하여 _application_가 도움이되는지 알고 있습니다. 그 전송을 받았습니다! – Alnitak

+0

wireshark를 사용하는 방법을 참조하십시오. 컴퓨터에서 들어오는 패킷과 컴퓨터로 들어오는 패킷을 캡처 할 수 있습니다. –

+1

요점을 놓치고 있습니다. 물론 wireshark를 사용하여 트래픽 흐름에 대한 "제 3 자"분석을 수행 할 수 있습니다. 이를 위해 사용할 수없는 것은 특정 애플리케이션에게 자체 패킷이 수신되었는지 여부를 알려주는 것입니다. – Alnitak

1

독자적인 앱을 구축하고 수신자가 보낸 사람에게 성공 메시지를 회신하고 성공 메시지를받지 못한 경우 필요에 따라 다시 보낼 수 있습니다. 자바에서

, JMS는 좀 기존 라이브러리가 동일한 C.에

2

TCP 메시지 중 하나

  1. 그들로 수신 될 전송한다는 점에서 신뢰성이해야 할 생각이 일을 보내졌다 (동일한 주문, 동일한 내용); 내장 된 체크섬은 16 비트 또는 때문에 그것을 할 수있는, 실패 발생하지 않는 것으로 가정
  2. 는 OUT- 않을 것입니다, 메시지가 수신 TCP를 사용하여 모든

에서 수신 할 수 없습니다 순서가 없거나 중간 메시지가 누락되었습니다.

사례 1과 2를 구별하려면 승인 메커니즘을 구현해야합니다. CRC보다는 메시지 무결성을 보장하는 좋은 아이디어는 들어오는 메시지의 MD5 또는 다른 해시를 다시 보내는 것입니다.

+0

TCP는 CRC가 아닌 체크섬을 사용합니다. – Barmar

+0

@Barmar CRC _is_ 체크섬! – Alnitak

+0

CRC는 단순한 체크섬 이상의 것입니다. 체크섬이 감지하지 못하는 순서 재 지정을 방지하기 위해 비트 시프트를 사용합니다. – Barmar

관련 문제