2014-10-13 7 views
0

(일부 하드웨어의) 3 소켓에 원격으로 연결하는 iOS 애플리케이션이 있습니다. 각 소켓에는 우선 순위가 있습니다. 하나의 채널은 iPad App & 하드웨어 간 전송, Tx/Rx 이미지 용 전송, Tx/Rx 비디오 용 메시지 전송에만 사용됩니다. 나는 모든 세 소켓을 구현했다. GCDAsyncSocket API & MSGSocket/ImageSocket (OR) MSGSocket/VideoSocket을 사용하는 동안 문제가 없지만 VideoSocket/ImageSocket/MSGSocket을 동시에 사용하면 약간의 문제가 발생한다. 데이터 패킷이 손실되었습니다. {실제로는 파일 덩어리가 누락됩니다 .-(} & API에서 버그가 발견되었습니다 : Unable to complete Read Stream 문제의 원인 일 수 있다고 생각했기 때문에 스레드로 전환되었습니다. &이 같은 NSThreads를 사용하여/CFSocket API를 구현했다. 나도 같은 dropbox-ed의 구현을 여기 NSThreads/CFSocket의 API &이다 사용 ImageSocket/VideoSocket 코드 만 구현을 변경iOS/iPad 애플리케이션의 TCP 통신에서 패킷 손실 디버그

. 나는에 관한 이해 단지 수 없어요 어디 iOS App 또는 서버 쪽에서 문제가 발생합니다. TCP 통신에서 패킷 손실이 없어야합니다.

이 문제를 디버그 할 수있는 방법이 있습니까? 또한 코드 &을 통해 갈 것을 요청합니다. 어떤 것이 잘못되면 알려주세요. (너무 많이 요청할 수 있지만 코드 구현에 대한 확신이 필요합니다.) 올바른지 알려주세요. 이 문제를 해결할 수있는 도움을 주시면 감사하겠습니다.

편집 1 :은 @JoeMcMahon 코멘트 후, 나는이 Technical Q&A & 언급은 TCP Dump - trace.pcap file을 얻었다. Wireshark &으로이 tcp 덤프를 열었습니다. 하드웨어 포트 & 사이에서 전송 된 바이트를 표시합니다. 패킷의 차이를 수신 & 패킷을 캡처 누군가가 지적 할 수
0 패킷이 커널
하락 필터에 의해받은
36,469 패킷을 캡처
12,463 패킷 : 또한 터미널에서 나는이 메시지를 본 TCP 덤프 캡처를 중지 할 때 필터로?
참고 - 연결된 TCP 덤프는 실패한 시나리오가 아닙니다.
EDIT 1.1here

+0

나는 당신이 실제 트래픽이 무엇인지 알 수 있도록 Wiresharked했다고 가정하고있다. 만약 당신이 그것이 계몽 적이 지 않다면. –

+0

귀하의 문제는 패킷 손실이 아닙니다. 모든 패킷을 전혀 알지 못하는 TCP 스트림 소켓으로 작업하고 있습니다. 운영 체제가이를 처리합니다. – Anton

답변

0

TCP 통신이 신뢰성이 보장되지 필터에 의해 수신 된 패킷을 캡처 & 패킷 사이의 차이에 대한 해답을 찾아 냈다. 기본적인 ack-syn 패러다임이 깨질 수 있습니다. 그래서 재전송 메커니즘 등이 있습니다. Wireshark는 패킷 캡처 세션에서 이러한 문제를보고합니다.

wireshark/tcpdump를 사용하는 경우 일반적으로 트래픽을 전선을 통해 전달하므로 (ping, ntp 등) 필터를 제공하려는 경우 기본 필터를 사용하여 캡처를 필터링하여 당신에게 관련된 패킷. 필터링 된 패킷은 캡처되지 않으므로 숫자 차이가 발생합니다.

파일 덩어리가 누락 된 경우 TCP 수준에서 문제가 발생하는 것 같습니다. 가능성이 가장 높은 수준의 잘못되었을 가능성이 높습니다. 고정 된 크기의 파일을 채널을 통해 반복적으로 실행하여 손실을 확실하게 재현 할 수 있습니다.

+1

TCP 통신 IS는 [https://www.ietf.org/rfc/rfc793.txt](https://www.ietf.org/rfc/rfc793.txt)의 RFC793 사양에 따라 신뢰할 수 있음이 보장됩니다. 3. IP는 신뢰할 수없는 것입니다. – ejsuncy