2011-01-22 14 views
0

多くのご質問、申し訳ありません!Windows XPでのカスタムIP/UDP/RTPヘッダ+一般的なネットワークに関する質問

私はボイスチャット(VoIP)アプリケーションを行っていますが、私はIP & UDPヘッダーのカスタム実装と、小さな付加情報、主にseq番号を考えていました。 RTPはいのように聞こえますが、私は主にseq番号やタイムスタンプに興味があり、複雑な複雑さやデータを使用する可能性のない悪夢のような自分のRTPサウンド全体を実装しようとしています。

対象のOSはWindows XP以上です。私はウィンドウ内のRawソケットのトピックについてhttp://msdn.microsoft.com/en-us/library/ms740548%28v=vs.85%29.aspxを読んでいます。今は確認が必要です。 一般的なネットワーキングに関する質問もあります。

以下の質問があります。

1)MSDNによれば、ネットワークリストにないソースでカスタムIPパケットを送信することはできません。私はセキュリティPoVからそれを理解しますが、これを回避する方法はありますか?私の考えは、例えば、2人のクライアントがUDP以外の保護されたサーバーにUDP通信を開いてから、クライアントがパケットのように見えるようにソースヘッダーをスプーフィングするようにしました。 NATを経由してレイテンシを向上させるためのデータ中継用のサーバ。 私はwinpcapについて聞いたことがありますが、私は各クライアントがサードパーティのアプリケーションをインストールする必要はありません。 DoS攻撃の数を考慮すると、OSがソースヘッダーが正当であるかどうかを確認するために使用するネットワークテーブルをなりすますような方法があるはずです。これはアンチウィルスシステムを起動させますか? あらかじめ定義されたヘッダーを使用するのではなく、実際にIPヘッダー以上でおもちゃを扱うのは本当に面白いと思います。

2)私はJRTPLIBのような無料のRTPライブラリで問題を抱えていました(これはおそらく、私にとってうまくいきませんでした)。私自身の解釈をUDPのontopで書くことを考えています。 RTPのようなアプリケーションレベルのプロトコルは、後で実際のデータを使ってUDPペイロード内に直接ヘッダを構築するだけですか?私はカプセル化プロセスを考慮してこれを疑うが、確かにしたい。 もしそうなら、アプリケーションレベルのプロトコルを実装するためにRAWソケットを作成する必要はなく、普通のUDPソケットだけで、あなたのペイロードの解釈は上記の通りですか?

3)RTPはヘッダーを増やすので、UDPに比べてパフォーマンスが向上しません。タイムスタンプとシーケンス番号に基づいてパケットが正しく並べ替えられるようにするだけです。 基本的なシーケンス処理を自分で追加するのではなく、基本的なVoIPプロジェクトのニーズにRTP実装を使用すると便利ですか?私はビデオ会議のためにおそらくあなたは本当に順不同に再生するフレームを望んでいないが、オーディオ会話では、あなたはそれに気づくでしょうか?

4)#1の解決策が適用されず、クライアント間のデータ中継としてサーバーを使用する必要がある場合、マルチキャストはサーバーの負荷を軽減するのに適したソリューションですか?ルーティングハードウェアでマルチキャストが十分にサポートされていますか?

5)質問1)に関連しています。なぜルータ/ファイアウォールはUDP穴あけのようなことを許可しますか?たとえば、2つのクライアントが最初にサーバに接続し、次にサーバはクライアントポート/ IPを他のクライアントに与えます。そのため、クライアントはそれらのポートで互いに話をすることができます。 ファイアウォールは、そのポートで接続を確立する際に使用されたIP以外のIPからデータを受信できるのはなぜですか?簡単にフィルタリングする必要がある大きなセキュリティホールのように聞こえますか?私はソースIPのなりすましがそれを騙そうとしていることを理解していますが、これは何ですか?

6)NATの背後にあるクライアント(NATの背後にあるクライアント、NAT以外のクライアント)は、クライアントが単にサーバにパケットを送信するだけで、セッションはファイアウォール?クライアントがサーバーからも受信できることを意味します。 wikiの記事に基づいて、http://en.wikipedia.org/wiki/UDP_hole_punching

7)SIPはRTPに依存していますか?何らかの理由で私はこの印象を受けましたが、それをバックアップするためのデータは見つけられません。将来的に私のVoIPクライアントにソフトフォン機能を追加し、私が良い基礎を持っていることを確かめたいと思うかもしれません(本当に必要ならばRTP、そうでなければ自分のUDP解釈)

ありがとうございます!

+2

私は上記#1に関するコメントを追加します:しないでください。適切に動作するために何かより高いレベルを得るために、より低いネットワーキングレベルで何かを修正する必要があると感じるときはいつでも、誤解があることを確かめることができます。 rawソケットを使用したり、IPヘッダーを書き換えたり、ソースIPを偽装したりすることは望ましくありません。私は約束します。 –

+1

これは、あなたの質問への良い答えを得るために、これをもっと分かりやすい塊で分割したいと思うでしょう。 –

+0

はい、どうもありがとうございます。 – KaiserJohaan

答えて

1

1、rawソケットは

3はい、

2このアプリケーションのために不必要と思われる、RTPはもちろん、それはオーバーヘッドを追加し、UDPの上で実行されます。多くの点で、RTP(RTCPを無視する)はすでにほとんどごくわずかですが、半二重の適切な方法を実装すれば、数バイトを節約でき、多くのRTPテストツールを使用することはできません。

7では、SIPはRTPとは完全に独立しています。 SIPはセッションの開始に使用されます。 SDPはSIPで一般的に転送されるプロトコルで、SDPで、RTPビデオ/音声のネゴシエーションを制御します。

+0

番号1に追加するには、アプリケーションレベルのヘッダーにアプリケーションレベルの「送信元アドレス」または「接続識別子」を追加するだけで、気にする必要はありませんIPレベルの送信元アドレスはもう何ですか。 – caf

+0

パケットがどこから来たのかを特定するのではなく、ソースがサーバーであると偽っていました。とにかくトピックを分割して、とにかく感謝 – KaiserJohaan

関連する問題