複数NIC環境でのBC送受信

このQ&Aのポイント
  • 複数のNICがある環境でのUDPブロードキャスト送受信についての疑問です。
  • パソコンAからのブロードキャスト送信では複数のNICに同じパケットが届くが、パソコンBからの送信では優先NICからのみ届く
  • 1つのIPアドレスからの複数のNICによる送信処理の実装は必要であり、他のIPアドレスからの送信は考慮しなくてよいかどうかについて知りたい
回答を見る
  • ベストアンサー

winsockにて複数NIC環境でのBC送受信

複数のNICが刺さっている環境で、UDPを利用したブロードキャスト送信(受信)についての疑問です。 パソコンAとBがあり パソコンAには1つのNIC(192.168.1.1) パソコンBには2つのNIC(192.168.2.2 と 192.168.3.3) ※それぞれサブネットマスクは 255.255.255.0 が同じネットワーク内に存在し、それぞれ INADDR_ANY を指定して bind されていたとします。 パソコンAから INADDR_BROADCAST を指定して snedto した場合、パソコンBの 192.168.2.2 と 192.168.3.3 の両方に同じパケットが届くのは正常な処理だと思うのですが、パソコンBから同じように snedto をすると、パソコンA には 192.168.2.2(メトリック値が低い方のアドレス) からのパケットしか届きません。 複数のNICがある場合に INADDR_BROADCAST を指定してパケットを送信すると、それぞれのNICから同じパケットが送信されるものと認識していたので、192.168.1.1 には 192.168.2.2 と 192.168.3.3 の両方から同じパケットが届くものかと思っていたのですが、優先NICからのみ届くというのが正常な動作なのでしょうか? もしそうであるのならば、1つのIPアドレスから同じパケットが複数届く場合の処理(自分のパソコンが複数NICの場合の処理)は必要になりますが、違うIPアドレスから同じパケットが届くケース(相手のパソコンが複数NICかどうか)は考えなくても良いということでしょうか? ご存知の方がいらっしゃいましたらご教示いただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

どのような目的でこのようなおかしなネットワーク構成が 必要になっているのかよくわからないので、以下、的確な 回答になってないかもしれません。 > 192.168.1.1 には 192.168.2.2 と 192.168.3.3 の両方から > 同じパケットが届くものかと思っていたのですが、 > 優先NICからのみ届くというのが正常な動作なのでしょうか? 検証したことはないですが、ありうる動作と考えてよいと思います。 メトリックの低いアドレスだけブロードキャストしたのかもしれないし、 もしかすると、両方のNICから同時ブロードキャストしているので、 どちらかのパケットが衝突により破棄されたのかもしれません。 基本的には両方のNICにブロードキャストしたかったら、 255.255.255.255宛ではなく192.168.1.255宛と192.168.2.255宛の 両方にそれぞれディレクテッドブロードキャストをします。 ただ、それでパケットが届いている保証はない(LAN内で衝突破棄される 可能性がある)ので、通常は相手の反応を見てリトライします。 > 違うIPアドレスから同じパケットが届くケース > (相手のパソコンが複数NICかどうか)は考えなくても > 良いということでしょうか? 違うIPアドレスから同じパケットが届くかどうかは、 複数NICかどうかだけでなく、ネットワークの構成や 送信元の処理方法によって、いろいろありうると思います。 どのような目的でこのような確認をしているのかわかりませんが、 違うIPアドレスから同じパケットが届くケースはないという前提で システムやプログラムを設計するのはやめた方がよいと思います。

tunamelt
質問者

お礼

ご返答頂きありがとうございます。 補足で書かせて頂いた通り、簡単なメッセンジャーソフトを作成しています。 ログインしたことをブロードキャストで相手に知らせ、通知を受けた相手は送信元のIPアドレスで相手先を特定するように設計していたのですが、相手が複数のNICを搭載していた場合にどうなるのだろうと思いテストをしてみました。 当初は 192.168.1.0/24 でテストをしており、当然複数のIPアドレスから通知が来てしまうものだと覚悟していたので、IPアドレスで管理するのは最適ではないと感じ始めていたのですが、実際にやってみると優先NICからしかパケットが届かず疑問に思ってしまいました。 同じアドレス帯であるのが原因かと思い、質問内容のような特殊な環境でテストを行ってみたのですが、それでも結果が変わらずに困惑してしまい質問をさせて頂きました。 > 違うIPアドレスから同じパケットが届くケースはないという前提で > システムやプログラムを設計するのはやめた方がよいと思います。 ご指摘頂いた通り、今回の動作が正常であるかどうかに関わらず、違うIPアドレスから同じパケットが届くケースはありうることだと思いました。 色々なケースを考慮し、IPアドレスでユーザを管理するのではなく、ユニークIDなどを持たせて個々を判断するように構築し直そうと思います。 お忙しい中ご返答頂きありがとうございました。

tunamelt
質問者

補足

簡単なメッセンジャーソフトのようなものを作成していて、複数のNICが搭載されているPCでどのような挙動になるのかをテストしています。 色々な環境(例えば、192.168.1.0/24 と 192.168.2.0/24 が混在していたり、DHCPサーバがなくIPアドレスに統一性がない場合など)でも動作するようにしたいためリミテッド ブロードキャストを利用しています。 ディレクティッド ブロードキャストを行えばルーティングテーブルから自動でNICが選択されると認識はしているのですが、リミテッド ブロードキャストの場合は複数のNICから同じパケットが送信されると思っていたので、今回のような結果を疑問に思い質問させて頂きました。

関連するQ&A

  • socketでの複数NICの扱い

    socketを使ってUDPのプログラムの勉強をしているのですが、マシンに複数のネットワークカードが搭載されていて複数のIPアドレスを持っている場合、sendto()でどのNICから送信するかを指定できないものなんでしょうか よろしくお願いいたします。

  • winsockで複数のLANカードを使用するには

    winsock初心者です。 TCPまたはUDPにて1枚のLANカードで通信するプログラムはよくあるのですが 複数のLANカードで通信する場合の参考プログラムがありません。 具体的には, UDPクライアントを作成する場合,指定したLANカード(IPアドレス)に生成したsocketとリンクして通信させたいのです。 bind()のsockname.sin_addr.s_addrにてINADDR_ANYではなくカードに設定したIPアドレスを設定すればよいのでしょうか? 同じ疑問がTCPクライアント作成でもあります。 この場合bind()ではなく,connect()で送信したいカードに接続されるサーバー側のIPアドレスを指定するということでしょうか? また2枚のカードを使用する場合,同じネットワークアドレス(192.168.0.XXX)は使用しない方が良いのでしょうか?(UDPブロードキャストだと両カードで送信してしまう?) 色々調べてますがこれだという回答がみつかりません 誰かご存知でしたら御教示願います。

  • NIC 2枚差しの設定

    拠点A(192.168.1.x)の社内ネットワークからは、拠点B(192.168.2.x)に存在するファイルサーバー とWindowsファイル共有ができます。 一方、拠点Aには社内ネットワークと隔絶したADSLモデムに接続したPCが存在します。 この拠点Aに存在するPCにNICを増設し、NWセグメントの異なる拠点Bのファイルサーバーにアクセス することは可能でしょうか。 増設したNICにrouteを追加して複数GW設定にしても、拠点Bにアクセスしようとすると、ADSL側の NICが使われてしまうような気がします。 IPアドレス毎に使用するNICを指定する、というようなことはできないのでしょうか。

  • NICを2枚さしたときのパケットの流れ

    こんにちわ。 1つのPCに2枚のNICを挿して、AとBのネットワークにつなげています。 デフォルトゲートウェイはAのネットワークのみを指定しています。 で、Bのネットワーク向けのFTPなどをしてもちゃんとBの先のサーバに通信できているのですが、 このときのパケットは、どういう動きというか流れをしているのでしょうか。 Aのルータが受け取って、これはBのルータ向けだよとPCに戻して、 PCがB用のNICを見つけて、Bのルータに向けてパケットを出すのでしょうか? あまりに初心者ですいません。。 よろしくおねがいします。

  • 1台のNICに複数IP設定は速いか?

    今までWindowsServerとNAS(Linax)の2台で別々のIPを設定して運用していました。 WindowsServerには各システムを載せ、NASには共有するファイルを保存していました。 今回、高速なWindowsServerマシンと100GbpsのLAN(デュアルポートでチーミング設定)を導入することになり、10GbpsのNASを廃止し、WindowsServerマシンに統合しようと考えています。 そこで、1台のネットワークカード(NIC)に複数のIPを設定すれば、各システム等の従来のIPアドレスを変えなくても済み、スムーズに移行できると思っています。 なお、WindowsServerはintel Xeon Silver、NICは100Gbps(QSFP28)デュアルポートです。 WindowsServerのIPをA、従来NASに入っていたファイルの保存場所のIPをBとします。 上記の方法で統合すると、AとBの間の通信スピードは、WindowsServer(A内)で処理されたのと同じスピードを期待できるでしょうか? それとも、WindowsServerマシン(A)から出て、一度ハブ等に入り、再度WindowsServerマシン内のファイル(B)に入る程度のスピードしか期待できないでしょうか? それとも、勉強中であまり詳しくありませんが、WindowsServer(A内)でIP変換処理する、スピードが期待できる他の方法などありますでしょうか? 最悪、BはServer内で変換出来さえすれば、外部からの(元々NASに入っていた)フォルダやファイルする時のアクセスはAに変えても良いのですが、システムのコードに設定してある(元々NASに入っていた)ファイルにアクセスする時のIPはBのままで行きたいと思います。 教えていただけると嬉しいです。 よろしくお願いいたします。

  • NICを2枚挿したときのデフォルトNIC

    サーバに限ったことじゃないかもしれませんが・・・ サーバ(CentOS)にNICを2枚挿し、どちらも同じセグメントに繋いだ時、サーバからインターネットや、ルータやPC1に送信する場合はどちらのNICが優先的に使われるのでしょうか? NICを複数挿しした場合は必ずどのNICか1つをデフォルトNICとするような設定をしないとこのままでは通信できませんか? 調べていたらDEFROUTE=yesというのがあり、複数NICの場合は必ずそれをデフォルトNICに指定しないとダメなのかな?と思いまして。基本的なことですみません。 └ルーター(192.168.1.1)  ├PC1(192.168.1.2)  ├サーバ(eth0:192.168.1.100/eth1:192.168.1.200)   /etc/sysconfig/network-scripts/ifcfg-eth0 IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 DNS2=8.8.4.4 /etc/sysconfig/network-scripts/ifcfg-eth1 IPADDR=192.168.1.200 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 DNS2=8.8.4.4

  • 1つのNICに複数のIPアドレスを割り当て

    わけあって、1つのNICに2つの固定IPアドレスを割り振ったノートPCがあるのですが、 このノートをたまにDHCP環境に持って行って作業することがあります。 いちいち設定を変えるのが面倒なので、さらにDHCPの設定を追加したいのですが どうやればいいのかわかりません。(^^;;; 要は、固定IP+固定IP+DHCPってのを、1つのNICに割り当てたいのです。 昔、誰かがNICの下にTCP/IPプロトコルを複数ぶら下げてバインドしてたような気がした のですが、いざやってみると1つのTCP/IPプロトコルしかぶら下げられません。(T_T) どなたか知っている方がいたら教えてください。m(__)m 「netshでバッチ組めば、とか、切り替えソフト使えば」ってのはなしで。 これが面倒・忘れる・時間がかかるので…(^^ゞ

  • C言語のsocket関数で、複数NIC実装PCはどうなるのでしょうか?

    UNIX-C言語で、TCP/IP通信を勉強していて、疑問にぶつかったのですが、 複数のNIC(もしくはIPアドレス)を実装しているPCは、 自分のIPアドレス(gethostby***関数などで)を取得したばあい、 どのように見えるのでしょう? また、そのPCがC/S構成におけるserver側だった場合、 bind()関数に設定するIPアドレスはデータ通信したい側のNICの IPアドレス一つでいいのでしょうか。 NIC2枚挿しのPCが身近にないので、実験できません(^^;) どなたかご教授いただけませんでしょうか m(_ _)m

  • ループバック・インターフェースでのNICの負荷について

    limittakeです。よろしくお願いします。 IP aliasingで設定した自分自身のIPアドレス宛にパケットを送信した場合、 NICに負荷はかかるのでしょうか? と言うことをお聞きしたいです。 Linuxの「CentOS 5.3」を使用しておりまして、 eth0を ========== DEVICE=eth0 BOOTPROTO=static HWADDR=xx:xx:xx:xx:xx:xx(実際にはMACアドレスを記入しています) ONBOOT=yes IPADDR=192.168.1.2 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 ========== IP aliasingでeth0:1を ========== DEVICE=eth0:1 BOOTPROTO=static ONBOOT=yes IPADDR=192.168.1.3 NETMASK=255.255.255.0 ========== と設定した状態で、LANケーブルを接続せずに ---------- $ ping 192.168.1.3 ---------- とpingを打っても返答が返ってきます。 これは http://dictionary.rbbtoday.com/Details/term926.html のページで解説されている 「ループバック・インターフェース」の(3)によるものかと思うのですが、 この場合、NICには負荷がかかるのでしょうか? 実際にはマシンの外部(LANのネットワーク上)にパケットを送出しないようですので、 NICに負荷がかかるという言い方は適切ではないかもしれませんが、 上記のようなパケットのやりとりで、NICは何らかの処理を行うのでしょうか? 文章が下手で質問の内容がわかりにくいかと思います。 申し訳ございません。 どなたかご存じの方いらっしゃいましたら、ご教授ください。 よろしくお願いします。

  • nic2枚の環境でのルーティング

    いつも参考にさせていただいております。 早速ですが、ある支店のサーバーに2枚のNICがささっております。 OSはWindowsServer2008R2です。 NIC1:192.168.1.100 NIC2:192.168.1.200 サブネットマスクは両NICとも255.255.255.0です。 NIC2はVPN用にルータのみに繋がっております。 コマンドプロンプトより ipconfig /all で確認しますと IPルーティングが「いいえ」となり二枚のNIC間でルーティングはしないことに なっています。 実際にVPNでNIC2からサーバーに接続し、エクスプローラより \\192.168.1.50 などとしてNIC1側のPCを見ようとすると、見えません。 しかし支店にいわせるとVPNで接続してNIC1側のコンピュータが見えている ということです。 2枚のNICのIPアドレスのホスト部が同じなので、この場合はひょっとすると 見えるのかな、とも思いますが、この点、可能なのかどうかご教示いただけ ますと助かります。 ネットワークに関してそれほど詳しくないのですが、2008R2で特にルーティングの 設定もしておりませんし、サーバーのみがVPNで見えているつもりだったので ちょっと戸惑っております。また、私がVPNで接続したときは見えなくて、 支店の者が支店外から接続して見えているというのもよくわかりません。 現在、ちょっと事情があって実際に作業をして確認ができないのですが、 アドバイスなどいただけますと非常に助かります。

専門家に質問してみよう