0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Web技術を理解する(通信プロトコル、IPとポート番号、ステートフルとステートレス)

Posted at

はじめに

書籍『プロになるためのWeb技術入門』――なぜ,あなたはWebシステムを開発できないのか を読みました。
本

下記のIT用語についての学びを書いていきます。

IT用語

  • 通信プロトコル
  • ポート番号
  • リクエスト
  • レスポンス
  • ステートフル
  • ステートレス
  • クッキー

※正確性に欠ける可能性がございますが、ご了承ください。間違いなどがありましたらご指摘くださると幸いです。

目次

  1. 通信プロトコル
  2. IPアドレスとポート番号
  3. リクエストとレスポンス
  4. ステートフルとステートレス

通信プロトコル

通信プロトコルとは、コンピュータがネットワークを利用して通信するための取り決めのこと。

なぜ必要なのか?

なぜ通信プロトコルが必要なのか?
それは、メーカーやOS、CPUが違うコンピューター同士でも同じプロトコルを使用すれば互いに通信することができるからです。
逆に同じプロトコルを使用しなければ通信することはできません。

代表的なプロトコル

インターネットで代表的なプロトコルはIP, TCP, HTTPなどや、
ファイル転送のためのFTP、メール転送のためのSMTP などもがあります。
もっと身近な例で言うとIPhoneユーザーならお馴染みのAirDropも通信プロトコルです。

IPアドレスとポート番号

IPアドレスとは

IPアドレスはパソコン、スマートフォンなどでインターネット通信を行う場合に利用されるピリオドで区切られた4組の数字で、インターネット上の住所のことです。
例: 192.168.0.1
インターネットに接続されたコンピュータはすべてIPアドレスを持っていて、そのコンピュータを識別することができます。

ポート番号とは

同一のコンピュータ内で通信を行っているプログラムを識別するときに利用されます。
例: 192.168.0.1:80 (ポート番号は80)
ポート番号は0番~65535番まであります。

IPアドレスを建物の住所に例えるなら、ポート番号は部屋の番号という感じです。

TCP/IP

TCP/IPとは

TCP/IPはインターネット上の標準であり、デファクトスタンダードとして世界中で最も広く使われている通信プロトコルです。
インターネットを構築する上で必要なIPICMP, TCP, UDP, TELNET, FTPHTTPなどプロトコルのセットになっています。

このプロトコルのおかげでハードウェアやOSの違いを意識することなくネットワークに接続されたコンピュータとIPアドレスを利用することで通信することが可能になっています。

プログラムの識別

コンピュータの上では複数のプログラムが動作させることができます。
Webブラウザや電子メール、SSHクライアントなどさまざまなアプリケーションプログラムを同時に利用できます。
その複数のプログラムを識別し、正しくデータを渡すように処理するためにポート番号が必要なのです。

ポート番号の決め方

ポート番号を決定するには下記の2種類の方法があります。

  • 標準で決められている番号
  • ダイナミックな割り当て方法

標準で決められている番号

アプリケーションごとにどのポート番号を使うか固定的に決める方法。
HTTP, TELNET, FTPなど広く使われているアプリケーションプロトコルでは、使用するポート番号が決められています。
これをウェルノウンポート番号と呼びます。
このウェルノウンポート番号は0~1023までの番号が割り当てられています。

ウェルノウンポート番号
ウェルノウンポート番号

ウェルノウンポート番号以外にも正式に登録されているポート番号があります。
これは1024~49151までの番号となっています。

標準で決められている番号

OSがアプリケーションごとに同じ値にならないように制御しながらポート番号を割り当てる方法。
49152~65535までの整数が利用される。

リクエストとレスポンス

インターネットの通信ではクライアントが出したリクエストをサーバーで処理してレスポンスを返します。
このようなプロトコルのことをリクエスト/レスポンス型プロトコルと呼びます。

クライアントで行われること

クライアントは1つのリクエストを送信しレスポンスを受信する際に次のステップを行います

  1. リクエストメッセージの構築
  2. リクエストメッセージの送信
  3. レスポンスが返るまで待機
  4. レスポンスメッセージの受信
  5. レスポンスメッセージの解析
  6. クライアントの目的を達成するために必要な処理

サーバで行われること

クライアントからリクエスを受けたサーバは次のステップを行います。

  1. リクエスト待機
  2. リクエストメッセージの受信
  3. リクエストメッセージの解析
  4. 適切なアプリケーションプログラムへの処理の委譲
  5. アプリケーションプログラムから結果を取得
  6. レスポンスメッセージの構築
  7. レスポンスメッセージの送信

HTTPメッセージ

リクエストメッセージとレスポンスメッセージをまとめてHTTPメッセージと呼びます。
リクエストメッセージの構造

GET /test HTTP/1.1
Host: example.jp

1行目はリクエストラインと呼び、メソッド(GET), リクエストURI(/test), プロトコルバージョン(HTTP/1.1)からなります。
2行目以降はヘッダと呼ばれるメタデータが続きます。

レスポンスメッセージの構造

HTTP/1.1 200 OK
Content-Type: application/xhtml+xml; charset=utf-8

<html xmlns="http://www.w3.org/1999/xhtml">
...
</html>

1行目はステータスラインと呼び、プロトコルバージョン(HTTP/1.1), ステータスコード(200), テキストフレーズ(OK)からなります。
2行目以降はヘッダです。
空行を挟んでHTMLデータが含まれています。これをボディと呼びます。

ステートフルとステートレス

ステートフルとは

サーバがクラインアントのアプリケーション状態を保存する制約
例: FTP

ステートレスとは

サーバがクライアントのアプリケーション状態を保存しない制約のこと
例: HTTP

例えば店員に例えた場合、ステートフルな店員は、来客の顔をよく覚えて、常連客が「いつものやつをお願い」というだけで、阿吽の呼吸で該当の商品を差し出してくれるでしょう。対してステートレスな店員の場合は、常連も初顔も関係なしに接客し、常連客から「いつもの」と言われても、「ちゃんと商品名を言ってくれませんか?」と、正式な注文を要請します。いわゆるお役所仕事的な対応をするのがステートレスな店員です。

HTTP通信は基本ステートレスな通信ですが、場合によってはステートフルにしないと困る時があります。
例えば以下のようにDBには保存しないが、ページを超えて保持しておきたい値が存在する場合です。

  • ネット通販のカートの中身
  • ログインしているユーザ情報

そこで利用するのがクッキーという技術です。

クッキー

クッキーとは

Webサーバーがクライアント側に情報を格納し、ログイン情報やネットショッピングの買い物かごの情報などをWebブラウザに記憶させるために利用します。

クッキーを使ったログイン時の処理

  1. 初めてアクセスするユーザがコンピュータにリクエストを出します。
  2. コンピュータ側がアクセスしたユーザを初めてであると認識します。
  3. 初めてのユーザには user_id というキーで、 そのユーザのid を代入します。
  4. 次に user_id = 1 というセッション情報を シークレットキー という鍵で暗号化してクッキーを生成します。
  5. レスポンスと一緒に セッション情報が暗号化されたクッキー が送られ、ブラウザ側で保持されます。
  6. 2回目以降アクセスする時は、リクエストと一緒に user_id の情報が乗ったクッキーと、コンピュータ側で保持したい値がコンピュータへ送られます。
  7. 送られたクッキーを復号化して セッション情報 が存在していれば、ユーザを特定することができます。

最後に

この記事を書くにあたって下記の本も参考になりました。

ただやっぱり触れたことのない技術の話などは難しいです。
なので、今後もまた読み返しをしたり、
いろんな技術を勉強していく中で、副次的にWebへの理解が深くなっていければと思ってます。

参照

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?