PythonでWebプログラミングの基礎(その3)TCP/IPの基礎

前回の続きです。今回はWebプログラミングというテーマでは必須になるTCP/IPについて書きます。TCP/IPとはインターネットで標準的に利用されている通信プロトコル(通信規約)です。TCP(Transmission Control Protocol)とIP(Internet Protocol)で構成されますが、TCP/IPはこの通信プロトコル全体の総称でもあります。

これについてとても全て解説出来ませんので、Webプログラミングで必要になると思われる部分について書きます。

通信プロトコルの階層構造について
TCP/IPの大きな特徴として、他の類似の通信プロトコル(osi参照モデルとよく比較されます)と同様に「階層構造」になっていることです。それではこの通信プロトコルが階層構造になっている意味、利点等をまずは私たちが使う電話での会話で考えてみます。この例えはよく利用される方法だと思います。

電話での通話の階層構造としては例えば以下のようになるでしょうか。

まず下位は上位に対して機能を提供しており、下位から順番に成立して最終的な本人同士の会話が成立します。

この階層構造という意味では下位にあたる電話回線網は(普通の社会では)誰が誰と何を話そうが関係はなくただインフラとしていろいろな実現方法で提供されています。また上位にあたる通話の人々は(基本的には)相手がどのような電話機でどこからどの回線を経由しているかなど関係なく会話が出来ればそれでいいということです。

TCP/IPの階層構造
TCP/IPでの階層構造は以下です。

TCP/IPでの階層構造でも電話の場合同様に下位は上位に機能を提供する構成で下位から順番に成立します。そして、最上位(アプリケーション層)でブラウザでの情報のやりとり、メールの送受信、ファイル転送などが可能になります。

その最上位のアプリケーション層からすれば相手側がLANケーブル接続かWifi接続かなど関係なくアプリケーション層まで成立していればやりたいことが出来るということです。図の一番右のコンピュータ上の処理の各階層ですが、このように実現方法、実装方法は様々で、OSもいろいろありますが、プロトコルに従っていれば上位まで成立するということです。

但しですが、電話での会話は多少あいまいでも成立する場合もありますが、コンピュータのネットワークではあいまいでは成立しないので各層が明確に仕様化されて運用されています。図のTCP/IPプロトコルの各階層のプロトコルです。

HTTP(HyperText Transfer Protocol)について
ここで本題というべきWebアプリで利用されているHTTPについてです。

HTTPとは、WebサーバとWebクライアントの間でデータの送受信を行うために用いられるプロトコルです。Webページを構成するHTMLファイル、スタイルシート、スクリプト、画像などのファイルをやり取りするためのプロトコルです。

前回まではこのWebサーバでWebページを構成するHTMLファイルを表示させたり、動的に生成させたりしましたが、そこではHTTPが利用されていたということです。

HTTPの今現在の代表的な階層構造は以下です。代表的なというのは当然必要に応じて暗号化等もあるので、その場合は別の階層構造になるということです。いずれにしても下位から成立していき、この例の場合ではHTTPはTCP接続が成立している状態でデータのやり取りをします。

HTTP – 実際のコンテンツのやり取り(GETメソッド、POSTメソッド)
TCP – WebクライアントとWebサーバの接続、ポート番号(HTTPの既定は80番)
IP4 – IPアドレス
Ethernet – MACアドレス

WebプログラミングではHTTPが第一のテーマです。Pythonを利用するとTCP以下の階層はあまり意識しないでPythonのライブラリが処理してくれるというメリットがあります。そのためここではHTTPについてのみ書きます。

リクエストとレスポンス
クライアント側がサーバにリクエストを送り、サーバがクライアントにレスポンスを返すのが典型的なHTTPのやりとりです。通信を始められるのはクライアント側のみです。リクエストというのは何をしてほしいかでその結果としてのレスポンスを返します。基本的には非常に単純なシーケンスです。

メソッド
メソッドはサーバにどのような動作を要求するかを表現します。代表的なものはGETとPOSTです。GETは指定したコンテンツの送信を要求します。POSTはクライアントからのデータの送信を要求します。

ステータスコード
レスポンスの種類を番号とメッセージで表現したものです。3桁の数字と短い英文で規定されています。例として要求が成功した場合の「200 OK」、コンテンツが存在しない場合の「404 Not Found」があります。

Webプログラミングでもこれらの要素を意識してプログラミングを行います。

今回はここまでにして次回はもう少しHTTPのプロトコルについて書きます。次回に進む