ネットワークがUDPパケットをドロップしているかどうかを検出するにはどうすればよいですか?


8

私のオフィスでは問題なく動作するビデオストリーミングアプリケーションを使用していますが、顧客の場所でひどく失敗します。症状は、数秒ごとに、UDPパケットの受信を2秒間停止し、その後ストリームは何も問題がないかのように再開することです。

私は顧客の場所でhttp://www.pingtest.net/を実行しましたが、それは素晴らしい結果に戻りました。ドロップされたパケットはなく、待ち時間は短い。2つの場所で私が気付いた唯一の違いはping google.ca、その場所でタイムアウトになるが、私の場所では機能することです。

現在のネットワークが着信UDPパケットをブロックしているかどうかをテストするにはどうすればよいですか?パケットをドロップしている人を特定する方法はありますか?


ファイアウォールの問題のように思えます。ソフトウェアまたはハードウェアのファイアウォールはありますか?
Pitto 2013

ネットワーク設定が何に設定されているかを顧客に尋ねることはできませんか?
ラムハウンド2013

@Ramhound、理想的にはそうではない。製品のデモを行うたびに、潜在的な顧客のルーター設定を掘り下げる必要はありません:)
Gili

2
皆さん、あなたの反対票を説明してください。さもなければ、私は返答できません。
ギリ2013

回答:


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)

-uUDPを使用するようにnetcatに指示するに注意してください。(またnetcat-pパラメータが必要かどうかにかかわらず、バージョンが異なることに注意してください。最も一般的な(?)2つのバリアントがあり、どちらもDebianに含まれています。)

消費者の場所:nc -u [addr of machine A] 1234

テキストを送信してみてください。または、パイプを使用して両方の場所の間でファイルを送信し、後でdiffを実行してください。


リモートコマンドが失敗します。マンページには-lIt is an error to use this option in conjunction with the -p, -s, or -z options.」が記載されているので、コマンドを修正して、動作確認済みのコマンドに修正しました。また、ホスト名も使用でき、ある意味「アドレス」なので、「ip」を「addr」に変更しました。
James Haigh 2013年

@JamesHaigh:addrip点であなたに同意します。しかし、今あなたのコマンドで、私はエラーを受け取ります:(listen needs -p arg私も答えで与えられた私のコマンドをテストしました;))。さまざまなncがあります。ncのバージョンやディストリビューションなどの詳細を教えていただければ、回答にメモを追加します。
mpy 2013年

ああ、相互に互換性がないのは残念です!:-(承知しました。私のリモートマシンはDebianです。デフォルトのncコマンドは/bin/nc -> /etc/alternatives/nc -> /bin/nc.openbsd、Debianパッケージによって提供されるsymlink ですnetcat-openbsd。私のローカルUbuntuマシンもnc.openbsdデフォルトで持っています。どちらも受け入れません。Ubuntu/ Debianパッケージから両方のマシンに-l -pインストールしncatましたnmap。古いDebianマシンはncat拒否-l -pしますがncat、Ubuntuは両方の方法を受け入れます。Debianバージョンは、迷惑なことに--sctpオプションがないため、古いものでなければなりません。:-/
James Haigh

Psあなたのディストリビューションとncバリアントは何ですか?「netcat-traditional」パッケージもあることに気づきましたが、まだ試していません。
James Haigh 2013年

@JamesHaigh:確かにnetcat-traditional、debianに同梱されている(v 1.10-38)を使用しています。あなたのヒントをありがとう、私は今答えに両方の変形を含めました。
mpy 2013年

13

サーバー側で、UPDサーバーを

iperf -s -u

クライアント側で、UDP接続を確認します

iperf -u -c <IP Address of Server>

1
これが本当の答えです。反対側でサーバーにアクセスする必要があります。しかし、それはあなたに直接パケットロスフィードバックを与えます。また、TCP帯域幅のテストにも使用できます。
DragonFax 2017

0

netcatMPYの答えのコマンドは、診断目的のために有用であるが、私はあなたの根本的な問題への別のアプローチでその答えを補完しています。

アプリケーションをSCTPまたはTCPにフォールバックする価値があるかもしれません。SCTPやTCPとは異なり、UDPには輻輳制御がなく、ダウンリンクの優先順位付けが非常に難しいため、ダウンリンクの共有を超えて使用するユーザーからの着信UDPパケットを拒否する方法を探していたため、この質問を実際に見つけましたトラフィック。

SCTPとTCPはどちらも輻輳制御を備えており、QoSとうまく連携しますが、SCTPにはリアルタイムのストリーミングアプリケーション用に設計されているというTCPよりも優れた利点があり、TCP UDPの両方の代わりになります。実際、SCTPは2つの最も一般的なトランスポートプロトコルの両方の中で最高です。

UDPのみに依存するのではなく、フォールバックを使用することは悪い考えではありません。TCPのみにフォールバックしたとしても、少なくともそれが機能していると言えるでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.