- ベストアンサー
通信する際なぜポートをが必要なのか
ポートについて以下の認識で正しいか教えてください。 ・基本的にTCP、UDPの通信は通信相手のIP+ポートで接続しにいく。 ・ルータ等でポートを塞いでいた場合は、上記の通信はすべてはじかれる。 ・すべてのポートがふさがっているPC同士は直接通信することが出来ない。 また質問なのですが、クライアント側は通信するときにどこかポートは空けなくてもいいのでしょうか。 つまり、通信しにいけるが、通信を受け付けることが出来ないということでしょうか。 ポートを空けなくていい場合、サーバ側はどうやってクライアントのあるプログラムにあて先を指定してデータを送るのでしょうか。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>ルータで塞いでるのは、一番初めの通信(3 hand shakeで言う接続要求SYN) >で閉じているポート宛てだった場合にブロックするということですよね。 はい,そうです。 >クライアントがwebページに接続要求した通信対しての応答メッセージ >(クライアント側で任意のポートが開かれそこに来る通信)に関しては >ブロックされないという認識で正しいでしょうか。 はい,正しいです。 >いわゆる代表的なFWなどでも、ブロックするのははじめの通信のみで、 >応答に対する通信は通す。ということでしょうか。 はい,そうです。 >応答メッセージはどうやってみなしているのでしょうか。 TCPはコネクション型の通信ですから「クライアント側の要求でセションが確立しており,それが続いている」という事実があれば十分だと思いますけれど。 電話を例にして説明するならば。 質問者の家では,外部からかかってくる電話番号非通知の着信を拒否しているとします。しかし,質問者自身の意志で,家から外部の番号非通知電話に発信するのは認めているとします。 さて,質問者はさきほど家から外部の番号非通知電話に発信して,現在通話中です。 では,受話器から聞こえてくる相手からの話し声が「はじめの通信」なのか「応答メッセージ」なのかをどうやって判断しているのでしょう。決められた一定時間が経ったなら,相手からの話し声が「はじめの通信」に切り替わるのでしょうか。 違いますよね。 電話が切られない限り「応答メッセージ」が何時間でも続くはずです。 ということで,TCPのセションが続くかぎりずっと「応答メッセージ」です。セションが切れたら「はじめの通信」です。
その他の回答 (5)
- hrsmmhr
- ベストアンサー率36% (173/477)
追加の質問についてですが BBルータなどはデフォルトで外部からの通信を遮断します。それはアドレスの変換を行うためで もともと禁止しているというよりは対応するアドレスが決められず、変換できないからです (でも不正アクセス等の所為で禁止していることがむしろ主目的の機能になってきてますが) 内部からの通信はパケットに送信元/あて先とTCP/UDPと送信元/あて先ポート番号を入れて送るので これに対応付けて変換します その変換データは一定以上の不通信時間で消去されますので、その間はそのポートの通信を外部からも受け入れます。応答メッセージは最初の要求メッセージで付け替えられる中継するルータが変換したルータ のアドレスとこれまたルータが適宜選んだポートに送り返すことで、ルータが内側の通信開始先に変換し て送ることになります この機能はPC等のFWとはちょっと役目が違います ルータでは外部からそのアドレス(/ポート)変換を消去しないデータとして設定することで ポートを開けることができます。 こうすることで該ポートの外部からの通信を遮断しないことになります
- jjon-com
- ベストアンサー率61% (1599/2592)
>・基本的にTCP、UDPの通信は通信相手のIP+ポートで接続しにいく。 はい,そうです。「IPアドレス,TCP/UDPの別,ポート番号」の3つで構成される通信インタフェースはソケット(socket)と呼ばれ,TCP/IP (UDP/IP)ではこのソケットという概念を用いて送信元・受信先を指定します。ANo.1で正しく説明されています。 -------- >・ルータ等でポートを塞いでいた場合は、上記の通信はすべてはじかれる。 まあ正しいとも言えますし,分かっていないとも言えます。その理由はANo.2で指摘されているとおり,質問者が inbound と outbound を区別していないので。 ブロードバンドルータの設定で「ポートを開く/ポートを塞ぐ」というのは多くの場合, 家庭内LAN ← 外部インターネット というinboundの流れの通信に対して制限をおこなうことを指すのが一般的です。 その意味で「ポートを塞げば通信はすべてはじかれる」(=外部から家庭内に勝手に入ってこれない)と言うのは正しいです。 でも,ブロードバンドルータでポートを塞ぐ設定がされていたとしても, 家庭内LAN → 外部インターネット というoutboundの流れの通信に対しては一応すべて認めるというのが基本ですから, その意味で「ポートを塞いでも家庭内から外部へ出ていく通信ははじかれない」と言えるわけです。 ただ,ANo.3で指摘されているとおり,最近のPCには高機能なパーソナルファイアウォールソフトがインストールされていますから,outbound通信にセキュリティ制限がかけられていたとしても珍しいことではありません。 -------- >・すべてのポートがふさがっているPC同士は直接通信することが出来ない。 TCP・UDPの通信ができない,という意味なら正解。 例えば pingコマンドは,TCPでもUDPでもなく,ICMPというプロトコルを使います。TCP・UDPのすべてのポートがふさがっていても,ICMPエコー要求・エコー応答の着信を許可しているのなら,PC同士は直接ping通信できるので。重箱の隅をつつくようで申し訳ないのですが,念のため。 -------- >クライアント側は通信するときにどこかポートは空けなくてもいいのでしょうか。 開けています。 サーバは,24時間365日,世界中の誰がいつ訪れてくるか分からない状態で接続を待たねばなりません。ですから,受信先となるサーバマシンのIPアドレスは固定,受信先となるサーバプログラムのTCPポート番号も固定です。 クライアントは,使いたいときだけPCを起動して,使いたいときだけプログラムを起動します。ですから,送信元となるクライアントPCのIPアドレスはそのとき限りのDHCPリースでかまわないし,送信元となるクライアントプログラムのTCPポート番号はプログラム起動時に未使用ポート番号からそのとき限りの適当な番号を使い捨てればよいわけです。 質問者ご自身のPCにおいて,Webアクセスなどをおこないながら同時に,コマンドプロンプト画面で netstat -n コマンドを実行してみてください。 左側に送信元(クライアントPC)のIPアドレスとTCPポート番号 右側に受信先( Webサーバなど)のIPアドレスとTCPポート番号 がペアになっており,1行が1セッションを構成しているのが分かるでしょう。
- helonpa
- ベストアンサー率38% (108/278)
ある程度、理解されているようなので、一応、○にしました。笑 > ポートについて以下の認識で正しいか教えてください。 > ・基本的にTCP、UDPの通信は通信相手のIP+ポートで接続しにいく。 ○ > ・ルータ等でポートを塞いでいた場合は、上記の通信はすべてはじかれる。 ○ > ・すべてのポートがふさがっているPC同士は直接通信することが出来ない。 ○ > また質問なのですが、クライアント側は通信するときにどこかポートは空けなくてもいいのでしょうか。 > つまり、通信しにいけるが、通信を受け付けることが出来ないということでしょうか。 クライアント側もポートを開ける必要があります。 以下、基本的な仕組みを簡単に。 1台のコンピューターに1つのIPがあり、それを宛先として通信します。 しかし同時に複数の通信プログラムを動かす場合に区別がつかないので、 ポートで区別することで、約65000種類の通信を同時に行えます。 通信は元(クライアント)と先(サーバー)があり、先ではポートを指定して 通信の待ち受けをしています。 この状態で、そのポートは開いているといい、それ以外のポートは対応する プログラムも無く、閉じています。 通信の元が通信を開始する時にも自分のポートを指定して通信を開始しています。 上記が基本ですが、これらのOSの基本的動作に加え、通信の許可を詳細に管理する ファイアーウォールという機能があり、OS上で動作する場合や、通信経路の間に 設置される事もあります。 ファイアーウォールでは、IPの元と先、ポートなどによって詳細にルールを設定 する事ができ、許可される設定に合致した場合は通信ができる事になります。 先ほどのOS上でのポートの開閉に加え、ファイアーウォールでの通信の可否も 合わせて、トータルで通信ができる状態のとき、一般的に「ポートが空いている」 などと言ったりします。 参考サイト http://ascii.jp/elem/000/000/434/434183/ http://ascii.jp/elem/000/000/432/432820/
- ymmasayan
- ベストアンサー率30% (2593/8599)
3つの認識のうち2番が間違っています。 IPアドレスはPCやサーバーのコネクタにつけられ、ポート番号は PCやサーバーの内部のプログラム(処理)につけられた番号です。 > ・ルータ等でポートを塞いでいた場合は、上記の通信はすべてはじかれる。 ポートを塞いでいるというのは外からの侵入を防いでいるだけで 自分が送るメッセージとそれに対する応答メッセージは阻止されません。 ポートの開放が必要なのはオンライン対戦ゲームのように外部から入力が有る場合です。 > クライアント側は通信するときにどこかポートは空けなくてもいいのでしょうか。 > ポートを空けなくていい場合、サーバ側はどうやってクライアントのあるプログラムに > あて先を指定してデータを送るのでしょうか。 サーバーの場合、行先と送り元の(IPアドレスとポート番号)を入換えるだけです。 ルーターが入っている場合、NAPTという機能で送り元のIPアドレスとポート番号を 変換して送り出していますが、返信があったとき元に戻しますので きちんと送信したPCに正しいポート番号をつけて送り届けられます。 なおこれは自分が送信したメッセージに対する応答メッセージですから ルーターはブロックしません。
お礼
ありがとうございます。 イメージがつかめてきました。 大変参考になりました。
- hrsmmhr
- ベストアンサー率36% (173/477)
1.IP+TCP/UDP+portで通信しに行きます 2.TCP/UDP+portで塞いでいると、該ポート経由の通信ははじかれます 3.IP経由の通信はできません クライアントは通信を開始するときにポート番号を取得してパケットに含めて送信しますのでサーバは そこに返します。
お礼
ありがとうございます。 TCP/UDPとポートを関連付けるのですね。
お礼
ありがとうございます。参考サイトまでつけてくださり大変参考になりました。 以上、皆様からの回答を読みまして新たに疑問確認があります。 よければお教え願います。 >ポートを塞いでいるというのは外からの侵入を防いでいるだけで >自分が送るメッセージとそれに対する応答メッセージは阻止されません。 >ポートの開放が必要なのはオンライン対戦ゲームのように外部から入力が有る場合です。 つまりルータで塞いでるのは、一番初めの通信(3 hand shakeで言う接続要求SYN)で閉じているポート宛てだった場合にブロックするということですよね。 http://www.cman.jp/network/term/port.html 上記ページで言うところの、クライアントがwebページに接続要求した通信対しての応答メッセージ(クライアント側で任意のポートが開かれそこに来る通信)に関してはブロックされないという認識で正しいでしょうか。 つまり、いわゆる代表的なFWなどでも、ブロックするのははじめの通信のみで、応答に対する通信は通す。ということでしょうか。 また、応答メッセージはどうやってみなしているのでしょうか。 応答メッセージがアクセス元のIPおよびポートを指定しており、かつアクセス先のIPおよびポートから送られたものであればある一定時間は許可するという動作なのでしょうか。 長々となってしまいましたが、可能であればお教え願いたいです。