web-dev-qa-db-ja.com

WebサーバーとWebブラウザが同時にポート80を使用しているようです

私の場合、OS Xでは、

  1. Firefoxを起動します。
  2. GoogleChromeを起動します。
  3. Ruby on Rails server on port 80(using RVM)

    rvmsudo Rails -p 80
    
  4. Lsofを使用して、ポート80で実行されているものを確認します

    Sudo lsof -i:80
    

次に、出力に「Ruby」、「firefox」、「Google」が表示されます。

ポートでリッスンできるプロセスは1つだけだといつも聞いています。これらすべてが同時にポート80を使用するにはどうすればよいですか? FirefoxとChromeがポートを使用する方法は、Railsがポートを使用する方法とどのように異なりますか?

1
David Winiecki

Sudo lsof -iSudo lsof -iTCPについて学び、試してみて、 "Webブラウザーはタブごとに異なる送信ポートを使用しますか?" を読んだ後、私は次の出力を読んでいるだけだと思います。 lsofが正しくありません。

次に例を示します。

$ Sudo lsof -iTCP:80
COMMAND  PID  USER      FD  TYPE     DEVICE  SIZE/OFF  NODE NAME
...
firefox xxxx  user  xxxxxx  IPv4  xxxxxxxxx    xxxxxx   TCP 192.168.0.100:12345->stackoverflow.com:http (ESTABLISHED)

この例とSudo lsof -iからの他の出力を見ると、Firefoxがリモートサーバーのtoポート80に接続しているため、Firefoxからのこの行が出力に表示されることはかなり明らかだと思いますfromローカルポート12345。Firefoxがリモートサーバーに接続していませんfromローカルポート80。

ローカルサーバーがポート80でリッスンしているときに、Firefoxのようなクライアントがポート80から接続できるかどうかはわかりませんが、少なくともここで起こっていることは、その考えに異議を唱えるものではないようです。 Firefoxがやっています。

Sudo lsof -i:80 -s TCP:^LISTENは、ローカルクライアントがローカルポート80を使用して何かに接続しない限り、リモートコンピューターのポート80への接続を示します。どのローカルポートが使用されているかをリストするだけのオプションがないように見えるのは奇妙です。

1
David Winiecki

通常、すべてのブラウザ(クライアント側)はWebサーバー(サーバー側)のポート80に接続します。したがって、サーバー側では、ポート80のみがリスニング状態になります。ブラウザは、Webサーバーのポート80への任意のTCP接続を使用します。

0
vembutech