質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

4回答

2012閲覧

ポート番号 とは?rubyでサーバーを作るときに出てきた

kazuyakazuya

総合スコア193

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2019/07/14 23:52

簡単なサーバープログラムを作っています。

ruby

1 2require 'socket' 3 4port = if ARGV[0]then ARGV[0] else 'localhost' end 5 6gate = TCPServer.open(port) 7 8sock = gate.accept 9gate.close 10 11while msg = (msg) 12 sock.write(msg) 13end 14 15sock.close 16

ここでポート番号というものが出てきました。
ソケットを利用するにはIPとポートが必要。。。

一応なんとなく知っていたくらいなので
よく調べてみると

1 同じポート番号を使ってはいけない 2 http は80 3 そのプロトコルのトランスポート(TCPかUDP)がことなるなら番号がかぶってもよい。

ここで質問ですが
同じポートは使ってはいけないとありますが
ブラウザで新しいページを開くたびに
HTTPリクエストが使われているのだから
80番はかぶってしまうのではないでしょうか?

このサイト以外に聞ける環境がないので
回答お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

80で待ち受ける事が出来るプロセスをひとつしか選べないだけで、待ち受けている80番へは色んなやつらがツッコミに行けます。
賃貸住宅と一緒です。先に部屋(ポート)取ったもんが勝ちです。後からの人は同じ部屋への入居(同一ポートの利用)できません。
ただしその部屋への訪問(アクセス)人数は部屋主が決められます。
80番の部屋はWEBサーバーくんのものになってますが、WEBサーバーくんがひとりしか訪問させないと決めない限りは何人でも同時に訪問できます。

投稿2019/07/15 02:26

hentaiman

総合スコア6421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuyakazuya

2019/07/15 02:35

最後にお願いします 待ち受けている80番に 突っ込みに行くのは80番でなくても いいということですか?
hentaiman

2019/07/15 02:46

それはクライアント側のポートという事ですか?それは何番でも良いです。 tcpdumpで見れば実際使ってるポート分かりますが、空いてる可能性の高いポート使います。 空いてる可能性の高いという書き方だけだと意味わかんないとおもうので一応以下を見てください。 https://ja.wikipedia.org/wiki/TCPやUDPにおけるポート番号の一覧 tcpdumpはlinuxのコマンドですがwindowsで同じ事が出来るツールとしてwiresharkというツールが以前は有名でしたが今はどうかな。自分は数回しか使った事無いですが https://qiita.com/toshihirock/items/49753320e4582f650987
guest

0

ベストアンサー

http は80
ブラウザで新しいページを開くたびに
HTTPリクエストが使われているのだから
80番はかぶってしまうのではないでしょうか?

この質問の意味は、「1回目のリクエストが80番なら、次のリクエスト(新しいページ用)は、81番のポートを
使用するようにしないと、80番がかぶってしまうのでよろしくないのではないか。」
という意味でしょうか。

HTTPリクエストは、1回のリクエストでセッションが完了します。
そのため、最初のリクエストも次のリクエストも、その次のリクエストも全て、80番で対応可能です。

投稿2019/07/15 02:24

yokotatsu

総合スコア92

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuyakazuya

2019/07/15 02:27

そういうことなんですね ありがとうございます!
maisumakun

2019/07/15 03:04

回答がおかしいのでマイナスします。 ・サーバサイドは同じポートで同時に複数の接続を処理できます。 ・HTTP/2では、1リクエストで接続を切らずに、セッションを張ったままで通信を続けます(HTTP/1.1以前でも、「持続的接続」といってある程度はセッションの使い回しが行われます)。
hentaiman

2019/07/15 20:09

> そういうことなんですね そういうことじゃないです ブラウザ付属のデバッグツールでも使ってnetworkのタブ開いて通信状態見てみてください
guest

0

「同じポートを番号使ってはいけない」とは、
あなたのプログラムが実行されるマシン上で、
仮にあなたのプログラムが100番を使ったとすると、
他にも100番を使っているプログラムがあるのなら、どちらも100番を使っているので、よろしくない。
という意味です。
100番を使えるプログラムは、あなたのプログラムが実行されるマシン上では、1つだけです。

投稿2019/07/15 01:48

yokotatsu

総合スコア92

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

ブラウザで新しいページを開くたびに

HTTPリクエストが使われているのだから
80番はかぶってしまうのではないでしょうか?

いえ、待機しているのはHTTPサーバー1つなので問題ありません。「同じポート番号を使ってはいけない」というのは、「同じポートで1つのサーバしか待機できない」ということで、1つのサーバが複数の接続を張ることは可能です。

投稿2019/07/15 00:18

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuyakazuya

2019/07/15 01:07

回答ありがとうございます 1 同じポートで1つのサーバしか待機できない というのは サーバーは一つのポートにしか対応できないということですか? 2 いえ、待機しているのはHTTPサーバー1つなので問題ありません これはクライアント視点の話ですか?
maisumakun

2019/07/15 02:27

> サーバーは一つのポートにしか対応できないということですか? いえ、1つのサーバが複数のポートを使用することは可能です。HTTPの80番とHTTPSの443番を1つのWebサーバが待ち受ける、という構成はごく一般的です。 > これはクライアント視点の話ですか? いえ、サーバサイドの話です。クライアント側にもポート番号はありますが、通常は「エフェメラルポート」といって、空いている番号を適宜割り振ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問