ソケット 通信 と は。 II

ソケットの概要 (ネットワークインタフェース)

ソケット 通信 と は

ソケットとは ソケットとは、簡単にいえばコンピュータ間の概念的な電話機であり、郵便ポ ストです。 つまり、プログラムはソケットに喋りかけたり、手紙を投函すれば、 通信相手のコンピュータの受話器または郵便受け、つまりソケットにその喋っ た内容や手紙が届くことになります。 従って、プログラムは通信相手のソケッ トに自分のソケットを繋ぐことができれば、コンピュータ同士がどのようにデー タを送受信しているかなどは考える必要がないのです。 ソケットはその使い方にも特徴があります。 ソケットを介してデータを送受信 するときにはファイルの入出力と同じ要領で行うことができます。 つまり、送 信したいデータをソケットに書き込むと通信相手のコンピュータのソケットに 届きます。 また、受信はソケットからデータを読み出せばいいのです。 ファイ ルの入出力を行うプログラムを何度か書いた方は多いと思いますが、その方法 と違いはありません。 先ほど、ソケットはコンピュータ間の電話機であり、郵便ポストであると申し 上げましたが、電話機と郵便ポストが違うように、コネクション型通信である TCPと、データダイアグラム型通信であるUDPではソケットの使い方が大きく異 なります。 本書では、TCPを前提としたソケットの使い方を中心に説明してい きます。 UNIXでは、キーボード、画面などのデータを読んだり、書き込む対象は何でも ファイルとして扱ってしまおうという哲学があります。 そこで、コンピュータ 間通信もファイルへの読み書きとしてプログラミングができないかということ を目標にして開発されました。 ソケットは、ファイ ルオープンに相当する操作が通常のファイルより複雑ですが、より高度が通信 が可能であり、さらにオープン後はファイルへの読み書きと同じスタイルで通 信が可能になります。 特に、初期のインターネットでは接続されているコンピュー タの多くがUNIXオペレーティングシステムを利用していたため、インターネッ ト用のソフトウェアの殆どはソケットを利用して開発されました。 この結果、 他のオペレーティングシステムが、これらのインターネット用のソフトウェア を利用するには、そのオペレーティングシステムでもソケット機能を提供して PCいる必要が生じ、大型計算機(メインフレーム)から、WindowsやMacOSなどの 用のオペレーティングシステムまでもがソケット機能を提供しています。 (コラム終わり) ソケット間通信 電話には電話番号がついてます。 そして、電話をかけるときは、この電話番号 でどの電話機にかけるかを特定します。 インターネットには数多くのコンピュー タが接続されています。 インターネット上でコンピュータ同士が通信をすると きは、どのコンピュータ(またはグループ)と通信をしたいのかを特定しなけ ればいけません。 インターネット上の電話番号に相当するのは、IPアドレスと ポート番号と呼ばれるものです。 IPアドレス IPアドレスは各コンピュータに割り当てられた番号で、同じIPアドレスをもっ たコンピュータはインターネット上には一つしかありません。 このIPアドレス は32ビットの数字で133. 181などと書かれますが、通常は machine. some. where. jpのようにネットワーク名やマシン名をドット記号で区 切って表現します。 なお、IPアドレスは各コンピュータに割り当てられると申し上げましたが、厳 密にはEthernetなどの物理的ネットワークのためのインタフェースである、ネッ トワークインタフェースごとに一つのIPアドレスを持ちます。 このため、一つ のコンピュータが複数のネットワークインタフェースをもっている場合には同 じコンピュータでも複数のIPアドレスを持つことになります。 ポート番号 一つのコンピュータでも同時に複数の通信を行う場合があります。 例えば、 FTPでファイルを転送しながら、WWWブラウザでホームページをアクセスしたり、 メールを送受信することがあります。 このとき、どのプログラムのための通信 データなのかを区別して仕分ける必要があります。 その仕分けるための識別子 がポート番号と呼ばれる16ビットの整数番号です。 つまり、IPアドレスが machine. some. where. jpという代表電話番号だとすると、ポート番号は内線番号に 相当します。 コンピュータ間通信の内容によって事前に決められ ているポート番号 Well-known Port Number もあります。 表:TCP通信のポート番号例 番号 キーワード 内容 21 ftp ファイル転送 23 telnet 遠隔端末 25 smtp 電子メイル送信 79 finger ユーザ情報の取得 80 http WWWブラウザによるホームページアクセス 110 pop3 電子メイル受信 この他にも、すでに使われているポート番号があります。 また、用途が決まっ たポート番号が幾つか予約されています。 UNIX系のOSでは1023番以下の予約ポー ト番号であり、システム管理者 ルート にならないと使えません。 どのポート 番号を使うかは一概にはいえないのですが、一般的には5000番以上のポート番 号を使うのが安全です。 以下は Windows98の SERVICESファイルの一部です。 コラム:IPアドレスの付け方 IPアドレスの設定はオペレーティングシステムにより行います。 ただし、IPア ドレスをそのコンピュータが接続しているネットワークに依存し、他のコンピュー タと同じ番号をつけてはいけません。 また、インターネットワークプロバイダー を利用して、インターネットに接続している場合は、DHCPと呼ばれる機構を通 じて、接続時にプロバイダーによりIPアドレスがその都度割り当てられます。 このため、プロバイダーに接続するためにIPアドレスが変わってしまうことも あります。

次の

知ったかぶりをしていたソケット通信の基礎を改めて学んでみる

ソケット 通信 と は

コネクトに成功すると一連の通信を行ってからコネクションを切断(クローズ)します。 公開ソフトウェア「碁 Ver 5. 0」もこの方法で通信を行っています。 この方法は実装が簡単で通信の信頼性も高く安定しています。 ただ、この方法はコネクトのオーバーヘッドを考慮しなければならないような場合に問題があると言われています。 またインターネット(WAN)を経由して通信する場合、パソコンが接続されているLANとWANの間にルーターがあるとルーターのポートマッピング(静的IPマスカレード)の設定が必要です。 両方のパソコンがルーターを使用している場合は、両方のルーターでポートマッピングの設定が必要になります。 最初に一方からコネクトし、通信の必要がなくなるまでコネクションを維持します(持続的接続:Persistent Connection)。 コネクションを維持している間はそれぞれのパソコンが自由にメッセージを送信します。 この方法はコネクトのオーバーヘッドがないことと、ルーターがある場合でも一方のルーターのみポートマッピングの設定をすればよいことがメリットです。 もしどちらかのパソコンがルーターを使用せず、直接WANに接続しているのなら、ルーターを使用している側からコネクトすればポートマッピングの設定を全く行わずに済みます。 1.コネクションが切れたときは再コネクトを試みる。 2.コネクト側はコネクト直後に開始メッセージを送信する。 リッスン側は開始メッセージの受信でソケットディスクリプタを生成。 3.データの受信漏れを検出するため応答を設ける。 改良版のフローは次のようになります。 1.通信スレッドの概略フローです。 2.一方のパソコンをコネクト側、もう一方のパソコンを リッスン側とします。 3.送信データは上位のプログラムで作成します。 4.「送信メッセージ作成」は送信データにヘッダの付加等を 行います。 5.「受信メッセージ処理」はヘッダの除去、受信したことを 上位のプログラムに通知する等を行います。 6.受信したときは送信側に応答を返します。 7.送信側は応答を受信できないときは再送します。 このフローの実現には次の処理の実装が必要です。 1.適切なコネクション断の検出。 2.タイマ管理(コネクト、リッスン、recv 、応答受信待ち)。 3.再送回数管理。 4.応答受信とメッセージ受信が接近している場合、1回の recv で両方が取得されるので適切に処理。

次の

第 2 章 ソケットインタフェース (ネットワークインタフェース)

ソケット 通信 と は

ソケット通信について教えてください。 ソケット通信を使ったプログラムを作らなくてはいけなくなったのですが、どのようなものなのか全く分からず、ネットで調べたところ、 「ソケット」というのはIPアドレスとPort番号を一組にしたものに結び付けられた仮想メモリ空間 というのを見て、何となくセッションと似たようなものか・・・。 と思いました。 ですが、やっぱり理解出来ないので、教えてください。 現在、ショッピングサイトのようなものを作っているのですが、自サーバーより決済会社にソケット通信にてデータを送るように作らなくてはなりません。 結果が決済会社より自サーバーにソケット通信で返ってきます。 ここで、自サーバーのソケットに帰ってきたデータを見に行くと思うのですが、 例えば複数のユーザーが同時にアクセスしていた場合、同時に複数のデータが自サーバーに帰ってくると思います。 その際に、例えば、返ってきたデータが「OK」だとしたら、それがどのユーザーに対する「OK」なのかはどのように判断するのでしょうか? ソケット通信はファイルのやり取りみたいなもの、との解説も見たのですが、返ってくるデータにはファイル名のような番号がついたりするのでしょうか? 色々調べてみて、サンプル等で受け取った文字列を表示するものは多々見かけたのですが、ソケットの中でどんな形でデータが保存されているのか理解出来ず・・・。 初歩的な質問で、見当違いなことを聞いていたらすみませんが、ご教授をお願いします。 また、理解のしかたが違ったら、教えてください。 よろしくお願いします。 ウェブサーバだってメールサーバだってソケットで作った道の上に形の決まったデータを流して解析している。 例えば、ウェブサーバは標準で80番ポートを使っているし、メール受信で使われているPOP3だと110番ポート、メール送信などに使われているSMTPだと25番ポートという具合に。 その中にOKだとか状態を示す情報も含まれているでしょうし、何らかの形でユーザに結びつけれる情報も入っていると思います。 例えば、全部送ったよは状態1・続きがあるよは状態2・準備できてないからやり直してねは状態3とか決まっていて状態は返信パケットの10バイト目に入っているよとか、20バイト目から27バイト目がユーザ識別子だよとか。 決済処理なら利用者コードが入ってくる様な気もしますが。 どちらにしても、必要十分な情報を入れ込める形式に決まっているはずなので、受信したデータの中に入っているデータを解析すれば必要な情報が得られると思いますよ。 それ 受け取った文字列 が返信データの仕様として提示されるはずですから、この部分をこう扱う 例えば10バイト目から17バイト目までをASCII文字で書かれた利用者番号と扱う という感じで処理すればできるかと思いますよ。 決済会社が返信メッセージの形式を規定して提示してくれる くれている と思いますので確認して使えば良いです。 ソケット通信といった場合、セッションとかよりはもう少し下のレイヤーの、データのやり取りの基本的な部分を指すと思います。 言ってみれば「電話」のシステムのようなもので、指定した相手先に音声を届けるが如く「データ」を届けるものです。 電話線の中の電流波形をユーザーが知ったことじゃないの同様、「ソケットの中でどんな形でデータが保存されているのか」はユーザーの知ったことではありませんし、電話で何を話そうと電話会社が関知しないのと同様、そこにどういうデータを流すかということはソケットは関知しません。 ソケットのお仕事は「データを届けること」なので、相手先の管理やデータ内容についての全てはソケットを使う側の仕事になります。 「ファイル名のような番号」をつけたければつけてもいいですし、文字列をばらばらと送りたければそうしてもいい。 送信側と受信側の取り決めさえ出来ていれば通信は成り立ちますが、それは「ソケット通信」の知るところではありません。 決済会社とのやり取りならば、ホスト名 あるいはそれに結びついたIPアドレス と接続ポート番号が電話番号のようなもの、それで「ソケット通信」の回線は通ります。 その上でユーザー認証などを含めてどういうデータをやり取りをするかは全て先方との打ち合わせによって決めなければいけません。 複数の電話回線を設置すれば複数の着信を同時に受けられるのと同様。 着信は各電話機に一つずつですから。 TCPとかUDPとか言い出すともうちょっといろいろありますけれど、まずはそんなところでしょう。

次の