netstatについて質問です
ご無沙汰でございます。ナイペータでございます。
今回は、タイトルにもあるように「Netstat」について質問です。
「ネットワークはなぜつながるのか」でいうと、P62の図2.2です。
この図にある、netstat実行例においては、Windowsのクライアント、であると思われます。今回の場合だと、Local Addressは、クライアントのネットワークインターフェイスですしreign Addressは、通信しているサーバのネットワークインターフェイスであり、それらのIPアドレスを使ってサービスを享受していると理解しています。
そこで、もし、サーバー側でnetstatを実行した場合について疑問があります。
現在Linuxを使用し始めたのですが、上記のようにサーバー側としてnetstatを実行したら、Local Addressの列に、現在つけている二つのネットワークインターフェイスのアドレスが現れて、それらのポートは、53(名前解決)となっていました。あと、ポート138、137も同じように現れていました。この場合としては、ネットワークインターフェイスをデバイスとして認識させれば、自動的にLocal Addressの列に上記のように勝手にポートが設定されるのでしょうか?疑問に思っています。
以上
ナイペータ
日時:
04/05/11 22:55
コメント
netstat -pでソケットを作ったプロセスを表示できます
ナイペータさん,こんにちわ。
netstatコマンドはsocket()を呼び出して作ったソケットの状態を表示するコマンドです。
ということは,何らかのアプリケーションが
socket()を呼び出してソケットを作ったからそこに表示されるわけで,
インタフェースを認識させるだけでは,そこには表示されません。
Linuxだったらnetstatに-pというオプションをつけると,
Windowsだったら-oというオプションをつけると,
そのソケットを作ったアプリケーションが表示されます。
それで誰がソケットを作ったのか調べてみるとよいでしょう。
また,ps -eコマンドで動いているプロセスを表示してみれば,
そこにソケットを作ったプロセスが表示されるはずです。
回答ありがとうございます。
早速のご回答ありがとうございます。ナイペータでございます。
netstat -lp と ps -e を実行してみました。
すると、おおよその予想にもあったようにnamedユーザでした。
ただ、腑に落ちないのは、namedによるバインドをインストールした
だけであり、それがnetstatに反映されてくる部分が、「なぜ?」といった
感じです。
つまりは、現在あるネットワークインタフェースに対してバインドをインストールしたらnetstatにアドレスとポートが反映されてくるのですか?
そうだとしても、イメージが全くできません。
namedによってソケットが読み込まれているのであろうことは、推測できますがそれ以上は、ハッキリ言って謎に満ちています。
お忙しい中申し訳ありませんが、よろしくお願いいたします。
以上
ナイペータ
通信動作を行うプログラムがソケットを作ります
設定にもよるんですが,
namedは起動したときに有効なインタフェースを自分で検出し,
検出したインタフェースを使って通信動作するためにsocket()を呼び出して
ソケットを作るんです。
そこで作ったソケットがnetstatコマンドで見えるということです。
namedに限らず,nmbd,smbd,httpdといったプログラムも皆同じです。
要するに,通信動作を行うプログラムを動かすと,そのプログラムがソケットを作り,
できたソケットがnetstatで見える,
っていうことですね。
こんな説明でわかるかしら?
namedが勝手におこなっていたんですね
ナイペータでございます。回答ありがとうございます。
戸根様の言うように考えると、イメージできつつあります。
要は、named, nmbd,smbd,httpd といったスタンドアロンで動作するような
サービスには、今回のようにソケットを作ってしまうものだと理解してよろしいでしょうか?
度々、質問に答えていただきありがとうございます。
日々、ネットワークの奥行きを感じるとともに無限大の可能性を感じています。もっと分かるように、『ネットワークはなぜつながるのか』(日経BP社) を熟読したいと思います。
以上
ナイペータ
プログラミングの勉強をお勧めします
>要は、named, nmbd,smbd,httpd といったスタンドアロンで動作するような
>サービスには、今回のようにソケットを作ってしまうものだと理解してよろしいでしょうか?
ソケットを作ってしまうもの,というより,
ソケットを作るようにプログラムを作ってあるということなんですが。
前回のソケットの質問でも感じたのですが,
この辺はプログラミングの世界の話なので,
そちらの勉強をお勧めします。
そうすれば,もっと具体的で明確なイメージを持てると思いますよ。