WEB3層アーキテクチャでのサーバーの役割を見る前に、WEBを実現するプロトコルたちについて見ていきます。
この記事は「ネットワーク基礎 – WEBページが表示されるまで 」の「5.WEB3層とは」の前半部分の解説記事となります。
TCPについて
TCP/IPの通信では、IPアドレスによって宛先を指定し、TCPによって用途を指定します。
TCP/UDPのポート番号を用いて用途を判別します。よく使われるポート番号のことをwell-knownポートと呼びます。
インフラエンジニアとしては以下のwell-knownポートは最低限覚えておくと良いです。(※独断と偏見で抜粋しています。)
ポート番号 | TCP/UDP | プロトコル名 |
20 | TCP | FTP(データ転送) |
21 | TCP | FTP(コントロール) |
22 | TCP | ssh |
23 | TCP | telnet |
25 | TCP | SMTP |
53 | TCP/UDP | DNS |
80 | TCP | http |
110 | TCP | pop3 |
123 | TCP/UDP | ntp |
161 | UDP | snmp |
162 | UDP | snmptrap |
443 | TCP | https |
445 | TCP | SMB |
また1024-49151番は登録済みポート番号といって、well-knownポート(1-1023)とは違うのですが、よく使うプロトコルもありますので、合わせて覚えておきましょう。
ポート番号 | TCP/UDP | プロトコル |
1521 | TCP | Oracle database default listener |
3389 | TCP | RDP |
Wikipediaに一覧が載っていますので、わからなくなったらそちらで調べてみましょう。
TCPやUDPにおけるポート番号の一覧 – Wikipedia
TCP(Transmission Control Protocol)とUDP(User Datagram Protocol)の違いは、通信する端末同士でコネクションを張るかはらないかの違いです。
TCPは3 Way Handshakeという方法で通信相手とコネクションを確立し、チェックサムなどの計算により、高信頼な通信を実現します。
一方UDPはコネクションレス型で、通信相手の応答を待つことなく一方的にデータを送り続けるプロトコルです。通話や、ストリーミングなどの低レイテンシが求められるプロトコルで用いられます。
https通信を理解する上で抑えておくプロトコル
httpsでWEBページを表示する際は最低限、HTTP(TCP:80)とDNS(UDP:53)の仕組みを理解する必要があります。
それぞれ解説していきます。
HTTP(Hyper Text Transfer Protocol)
HTMLファイルという形式のファイルをやり取りすることで、ブラウザ上でWEB画面を表示するためのプロトコルです。
ブラウザで、URL欄に(http://)と入力すると、httpで通信するようになります。
HTTPではTCPの80番で通信を行います。http通信ではサーバーにWEBページを要求する際に、メソッドというものを選択して送ります。(通常WEBページに何のメソッドを使うかを仕込んでおくので、ユーザーが意識してメソッドを選ぶわけではない。)
GETメソッド
リクエストするURLのあとに?をつけ、パラメータを渡すことで、リクエストを送信します。
Google検索やYouTubeなどで検索した際にURLをよく見ると?のあとにパラメータを渡している事がわかります。
GETメソッドはURL上にクエリパラメータが表現されているので、例えば検索結果のURLをコピーすれば、そのまま友人に共有することもできます。
POSTメソッド
URLではなく、リクエストボディにパラメータを含める方法です。
URL上に送信するパラメータを表現しないので、お問い合わせフォームなどの情報をおくる際などに使われます。
ただし、POSTメソッドであってもhttp通信では通信が暗号化されていないので、盗聴することが可能ですので注意が必要です。
開発者ツールとステータスコード
http通信は、通信がうまく言ったかを表すステータスコードというものが存在します。
ブラウザでF12を押すと開発者ツールがひらけるので、そこのStatus Codeを見てみましょう。
200でSuccess、400番代はClient Error、500番代はServer Errorです。
DNS(Domain Name System)
DNSはTCP/UDPの53番で通信を行います。
URLのドメインの部分をIPアドレスに変換する役割を持っています。
例えば、本サイトのドメイン名をnslookupコマンドを使ってDNSサーバーに問い合わせた結果が以下です。
Non-authoritative answer:
Name: tokku-engineer.tech
Address: 183.181.86.79
これにより、IPによる通信が可能となります。
DNSの種類
一口にDNSサーバーといっても種類があります。
フルサービスリゾルバー
実際に名前解決を行うサーバーのことをフルサービスリゾルバーとか単にリゾルバーと呼びます。
例えばみなさんが自宅からWEBサービスにアクセスする際はだいたい契約しているプロバイダーのフルサービスリゾルバーに問い合わせて、リゾルバーが家のPCの代わりに名前解決を行ってくれます。
クライアントPCがどのDNSサーバーを使うかは設定しだいなので、Googleが公開しているDNSサーバーである「8.8.8.8」や「8.8.8.4」に設定している人もいるかも知れません。
権威サーバー
ドメイン名とIPアドレスの紐付けの情報を実際に保持しているサーバーです。コンテンツサーバーとも呼びます。
例えばドメイン名が「www.example.co.jp」の場合、jpの権威サーバーにcoのサーバーのIPアドレスが書いてあり、coの権威サーバーにexampleのIPアドレスが書いてあり、exampleの権威サーバーにwwwのIPアドレスが書いてあります。
このように何度も問い合わせて目的のIPアドレスを得ることを再起クエリと呼びます。
上の例のように、jpの権威サーバーがcoより上のドメインについて管理せず、coの権威サーバーに管理を任せてしまうことを「委任」と言います。
まとめ
TCPにおけるプロトコルと最低限WEBページが表示されるまでの流れを理解するために必須である、httpとdnsについて解説しました。
ここに書いているプロトコルはごく一部ですし、httpやdnsについても本来もっと奥が深い技術です。
ネットワークエンジニアではなく、サーバーサイドのインフラエンジニアを目指す場合でも、この辺の知識は必須ですので勉強してみてください。
DNSについてもっと勉強したい方は以下の本がオススメです。
WEBページが表示されるまでのネットワークの基礎知識についてはこちらの記事でまとめています。
コメント