2010-12-20 9 views
3

udp 소켓에서 일정한 간격으로 패킷을 보낼 때 보내는 첫 번째 패킷이 지연되는 것으로 나타났습니다. 예를 들어, 패킷을 100ms마다 전송할 경우 네트워크에서 평균 100ms와 평균 표준 편차가 4 인 패킷을 수신 할 때까지 지연이 발생합니다. 그러나 첫 번째와 두 번째 패킷에 대한 수신 시간 사이의 간격은 일반적으로 약 10 ~ 40ms입니다. 알다시피 통계적으로 유의미한 차이이므로 분명히 그 원인은 무엇입니까?udp 수신 지연의 원인은 무엇입니까?

저는 리눅스에서 C의 sendto 기능을 사용하고 있습니다. 누군가는 목적지 지연이 맥 주소로 변환 될 때까지 패킷이 보내지는 것을 막는 ARP 해상도 때문에 지연이 일어날 것이라고 제안했다. 보내는 프로그램을 다시 시작하면 첫 번째 패킷이 너무 오래 걸리고 지연 시간이 일정하지 않습니다. 10 ~ 40ms는 꽤 큰 범위입니다.

왜이 첫 번째 패킷이 너무 오래 걸리고 그 문제를 해결할 수 있는지 알아야합니다.

편집 : pcap을 사용한 추가 분석은 보내는 프로그램이 올바른 간격으로 패킷을 보내고 있음을 나타냅니다. 문제는 select()를 사용하여 읽을 수있는 소켓을 기다린 다음 recvfrom을 호출하고 패킷을 인쇄하는 수신기에서 발생해야합니다. 거기에 어떤 종류의 버퍼링이 있습니까?

+1

스니퍼를 사용하여 패킷 전송과 관련된 무언가가 컴퓨터와 관련이 있는지 확인할 수 있습니다. –

+0

이봐 요, 누구든지 왜 투표를하지 않았습니까? – Benubird

답변

0

해결 방법에 대해 질문했습니다. 가능한 한 가지 해결 방법은 패킷의 수신 시간이 중요한 경우 SO_TIMESTAMP 소켓 옵션을 설정하는 것입니다. 이렇게하면 각 패킷이 대상 커널에 의해 수신 된 시간을 얻을 수 있습니다. 그러면이 시간을 "현재 시간"이 아닌 후속 처리에서 사용할 수 있습니다.

또는 송신자가 보낸 패킷에 고해상도 타임 스탬프를 포함시켜 사용할 수 있습니다.

1

투기는 우리를 아무데도 데려 올 것이고 Wireshark을 발사하고 당신이 알 필요가있는 모든 것을 말할 것입니다.

+0

나는 정말로 제거 된 시스템을 실행 중이며, 애쉬와 프로그램을 제외하고는 아무 것도하지 않고 있으며, 나는 pcap을 실행하는 데 어려움을 겪고있다. Wireshark가 바로 있습니다. – Benubird

+0

wireshark가 꺼져 있으면 tcpdump는 어떻게됩니까? 이 방법이 효과가 없다면 이더넷 허브 (스위치가 아닌)에 손을 넣을 수 있다면 네트워크를 원격으로 스니핑 할 수 있어야합니다. – doron

+1

예 -이 작업이 마침내 가능해졌으며 패킷이 올바른 간격으로 전송되고있는 것으로 보입니다. 지연은 수신단에 있어야합니다. – Benubird

2

ARP 주소 해결에 필요한 시간 일 가능성이 큽니다. 이것은 MAC 주소를 IP 주소로 확인하는 프로토콜입니다.

이 문제를 해결하려면 arp 캐시의 정적 항목을 arp -s ip-address hw_address으로 사용해보십시오.

+0

아쉽게도 arp 명령을 사용할 수 없습니다. '-sh : arp : 찾을 수 없음 '. 그래도 좋은 제안. – Benubird

+0

패키지의 "net-tools"(ifconfig 등)와/sbin/arp에있는 부분. 거의 모든 배포판에있는 매우 기본적인 도구로, 무엇을 가지고 있습니까? – hirschhornsalz

+0

BusyBox v1.7.2 (2010-11-17 12:19:56 GMT) 내장 쉘 (재) – Benubird

0

단일 LAN에 있습니까? 그렇다면 ARP 및/또는 호스트 이름 확인까지 (아마도) 있습니다. 더 큰 네트워크를 거치는 것이라면 아무 것도 아닐 수 있습니다 (루트 룩업 및 캐시 인구와 관련된 probbaly이지만).

+0

예, 단일 LAN입니다. 두 대의 컴퓨터와 스위치를 통해 연결된 DHCP 서버. – Benubird

+0

패킷이 적절한 순서로 전송되고 있으며 arp 캐시가 2 초 이상 지속되어야하기 때문에 arp가 발생하지 않을 것입니다. – Benubird

+0

@benubird ARP 캐시 보존은 OS에 따라 다릅니다. wireshark 권장 사항에 대한 마지막 코멘트를 살펴보면 스위치 패브릭에서 지연을 유발하는 것으로 보입니다. – Vatine

0

내가 가장 좋은 해결책으로 생각하는 투표를하기에 충분한 "평판"이 없기 때문에 ARP 메시지를 언급 ​​한 사람이 가장 적절하다고 말할 것입니다. ARP 메시지는 LAN에만 적용되어야한다고 생각합니다. 그들은 wireshark에 "누가 192.168.0.24를 가지고 있습니까?"라고 표시됩니다. 예를 들어 ... 그 IP 주소를 가지고 있다고 주장하는 호스트로부터의 응답이있을 것입니다. UDP를 통해이 주소로 보내지는 초기 패킷은 IP 주소를 이더넷 MAC 주소로 변환하는 ARP 응답을 받아야합니다. 그래서 표면의 UDP는 결코 차단해서는 안되는 것처럼 보일 수 있습니다 ... 그러나 이것은 한 번만 사실입니다 ARP 주소가 확인됩니다. 확실하지는 않지만 LAN에없는 주소로 UDP를 보내면 기본 게이트웨이를 찾는 데 문제가없는 한 ARP가 필요하지 않습니다.

관련 문제