네트워크가 UDP 패킷을 삭제하는지 감지하는 방법?


8

사무실에서 제대로 실행되지만 고객 위치에서 비참하게 실패하는 비디오 스트리밍 응용 프로그램이 있습니다. 증상은 몇 초마다 2 초 동안 UDP 패킷 수신을 중단 한 다음 아무런 문제가없는 것처럼 스트림이 다시 시작된다는 것입니다.

나는 고객 위치에서 http://www.pingtest.net/ 을 실행했고 훌륭하게 돌아 왔습니다. 손실 된 패킷이없고 대기 시간이 짧습니다. 두 위치 사이에서 발견 한 유일한 차이점 ping google.ca은 해당 위치에서 시간이 초과되었지만 내 위치에서 작동 한다는 것입니다.

사용중인 네트워크가 들어오는 UDP 패킷을 차단하는지 어떻게 테스트합니까? 패킷을 삭제하는 사람을 분리 할 수있는 방법이 있습니까?


방화벽 문제인 것 같습니다. 소프트웨어 또는 하드웨어 방화벽이 있습니까?
Pitto

고객에게 어떤 네트워크 구성이 설정되어 있는지 물어볼 수 없습니까?
Ramhound

@Ramhound, 이상적으로는 아닙니다. 제품을 시연하고 싶을 때마다 잠재 고객의 라우터 설정을 조사하고 싶지 않습니다. :)
Gili

2
여러분, 부정적인 투표에 대해 설명해주십시오. 그렇지 않으면 응답 할 수 없습니다.
길리

답변:


4

로 UDP 연결을 시도 할 수 있습니다 netcat.

소비자 네트워크 외부의 시스템 A 에서 다음을 실행하십시오.

nc -u -l -p 1234            # if using netcat-traditional
nc -u -l 1234               # if using netcat-openbsd (as pointed out by @JamesHaigh)

참고 -u있는에 지시가 UDP를 사용하는 netcat을. (또한 매개 변수 netcat가 필요한지 여부에 따라 다른 버전이 -p있습니다. 데비안에 포함 된 두 가지 가장 일반적인 (?) 버전의 변형이 제공됩니다.)

소비자 위치 : nc -u [addr of machine A] 1234.

텍스트를 보내거나 파이프를 사용하여 두 위치 사이에 파일을 보내고 나중에 차이를보십시오.


귀하의 원격 명령이 실패합니다. 맨 페이지 -l에 "" It is an error to use this option in conjunction with the -p, -s, or -z options.라고 표시되어 있으므로 명령을 수정하여 작동하도록 테스트했습니다. 또한 호스트 이름도 사용할 수 있고 어떤 의미에서는 '주소'이므로 'ip'를 'addr'로 변경했습니다.
James Haigh

@JamesHaigh : addrvs. 에 동의합니다 ip. 그러나 이제 귀하의 명령으로 오류가 발생 listen needs -p arg합니다 (답변에 주어진 명령도 테스트했습니다 ;)). 거기에 다양한 nc가 있습니다 .nc 버전 및 / 또는 배포판과 같은 세부 정보를 제공하면 답변에 메모를 추가 할 것입니다.
mpy

아 맞다, 서로 호환되지 않는 것은 부끄러운 일이다! :-( 좋아 내 원격 시스템은 기본. 데비안 없도록 nc명령이 심볼릭 링크 /bin/nc -> /etc/alternatives/nc -> /bin/nc.openbsd데비안 패키지에서 제공하는 netcat-openbsd내 로컬 우분투 머신도 있습니다. nc.openbsd기본적으로. 어느 쪽도 받아 들일 것입니다 -l -p. 또한 설치 ncat로부터 두 시스템에 nmap우분투 / 데비안 패키지.에 이전 데비안 기계는 ncat거부 -l -p하지만, ncat우분투에 두 가지를 받아들이는 성가 시게이 없기 때문에 데비안 버전이 고대해야하지만. --sctp옵션 : -. /
제임스 헤이그

Ps 배포판과 nc변형 은 무엇입니까 ? ' netcat-traditional'패키지도 있음을 알았지 만 시도하지 않았습니다.
James Haigh

@JamesHaigh : netcat-traditional데비안과 함께 제공되는 v1.10-38을 사용 합니다. 힌트 주셔서 감사합니다. 이제 두 변형을 모두 답변에 포함 시켰습니다.
mpy 2016 년

13

서버 측에서 UPD 서버를

iperf -s -u

클라이언트 측에서 UDP 연결을 확인하십시오.

iperf -u -c <IP Address of Server>

1
이것이 실제 답변입니다. 다른쪽에 서버 액세스 권한이 있어야합니다. 그러나 직접 패킷 손실 피드백을 제공합니다. 또한 TCP 대역폭을 테스트 할 수도 있습니다.
DragonFax

0

netcatmpy의 답변에 있는 명령은 진단 목적으로 유용하지만 기본 답변에 대한 다른 접근 방식으로 해당 답변을 보완하고 있습니다.

응용 프로그램을 SCTP 또는 TCP 로 대체하는 것이 좋습니다. SCTP 및 TCP와 달리 UDP는 혼잡 제어 기능이 없으므로 다운 링크의 우선 순위를 지정하기가 어렵 기 때문에 혼잡 할 때 다운 링크 공유보다 많은 양을 사용하는 사용자로부터 들어오는 UDP 패킷을 거부하는 방법을 찾고 있었기 때문에 실제로이 질문을 찾았습니다. 교통.

SCTP와 TCP는 혼잡 제어 기능을 제공하고 QoS로 훌륭하게 작동하지만, SCTP는 실시간 스트리밍 응용 프로그램 용으로 설계된 TCP보다 추가적인 이점을 제공하므로 TCP UDP 를 모두 대체 할 수 있습니다 . 실제로 SCTP는 가장 일반적인 두 가지 전송 프로토콜 중 최고입니다.

UDP에만 의존하는 것이 아니라 폴백을하는 것은 나쁜 생각이 아닙니다. TCP로만 돌아가더라도 적어도 제대로 작동하지 않는다고 말할 수 있습니다.


0

서버 측 사용

iperf -u -p <port> -s

클라이언트 측 사용

iperf -u -p <port> -c <domain or ip>

방화벽에서 포트가 허용되는지 확인하십시오. 이것은 테스트 후 이와 같은 보고서를 제공합니다.

[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams

[  1]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec   3.722 ms    1/  893 (0.11%)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.