はじめに
こんにちは。Tsukasaです!
最近自分でも何を勉強したらいいのか完全にわからなくなっていたので、AWS云々以前にしっかりとネットワークについて改めて勉強してみようと思い今回の記事を作成しました。
以前にもネットワークの基礎に関する記事を書いたのですが、今回は最近やっている「身の回りのものに例えた」シリーズでわかりやすく整理していこうと思います。
例え話で理解する
今回はインターネット通信をWebサイトという荷物を届ける配送業として考えてみようと思います。
IPとは
IP(Internet Protocol)の主な仕事は、「荷物を相手の住所まで届けること」です。
・IPアドレス(一意の住所)
「日本国 東京都新宿区〇〇…」のように、世界中で重複しない住所がすべての端末(PC、スマホ、サーバー)に割り当てられています。
・ルーティング(交差点での道案内)
データが届くまでに、ネット上にある無数のルーター(交差点の案内所)を経由します。ルーターは「この住所なら、あっちの道(回線)から行った方が早いよ」と、その場で最適なルートを次々に指示します。
しかしIPには弱点があります。IPは「届けること」だけに集中するため、途中でトラックが事故に遭って荷物が消えたり、到着する順番が前後したりしても気づきません。これを補うのが「TCP」です。
そもそもプロトコルって何だよ
初心者の方やITが苦手な方からすると、IT用語ってカタカナ多すぎて嫌になりますよね。
これがより難しく感じる一因な気がしています。
今回もIPがInternet Protocolの略であると紹介しましたが、プロトコルってそもそも何でしょうか?
プロトコルとは、コンピュータや通信機器がネットワーク上でデータを正確にやり取りするために定められた「共通のルール(通信規約)」や「手順」のことです。
上述で紹介したようにIPにはデータを届けるために手順がありましたよね。
このようなルールや手順のことをプロトコルと呼びます。
TCPとは
TCP(Transmission Control Protocol)の仕事は、「荷物を1つも漏らさずに、正しい順番で届ける安全管理」です。
インターネットでは、大きなデータ(写真や動画など)をそのまま送ることはできません。道路(回線)を占有してしまうからです。そのため、データを細かくバラバラにして送ります。この小さな荷物の塊を「パケット」と呼びます。
①発送前:荷物の「パッキング」と「ナンバリング」
例えば、1枚の画像を10個のパケットに細かく分解します。このとき、TCPはすべてのパケットに「これは1番目のカケラ」「これは2番目…」と通し番号(シーケンス番号)を書いた伝票を貼ります。
②輸送中:バラバラのルートを走る
10台のミニトラック(パケット)が一斉に出発します。IPのルート選択によって、1号車はAルート、2号車は混雑を避けてBルート…というように、全く違う道を通ることがあります。
③到着時:順番の並び替えと「受領確認」
当然、到着する順番は「3号車 ➜ 1号車 ➜ 5号車…」とバラバラになります。
並び替え: 届け先(ブラウザ)のTCPは、伝票の番号を見て、元の順番(1〜10)に正しく並び替えます。
再送要求: もし「4号車」が途中の渋滞やエラーで消えてしまった(パケットロス)場合、受け取り側は「4番が届いていません!」と送信元に連絡(ACK返答)します。すると、送信元は4号車だけをもう一度送り直します。
すべてのカケラが綺麗に揃った段階で、初めてあなたの画面に1枚の画像が表示されます。
これがTCPの役割です。
何故TCP/IPがセットなのか?
IPだけだと: 荷物は届くかもしれないが、順番はめちゃくちゃ、途中で何個か紛失して画像がバグる。
TCPだけだと: 荷物の管理は完璧だけど、そもそも相手の住所(IP)への行き方がわからない。
この2つを組み合わせることで、「世界中のどんなに不安定なネットワークの道(IP)を通っても、最終的には1ビットのズレもなく正確にデータを復元できる(TCP)」という超強力な通信の土台が完成します。
HTTP
HTTP(HyperText Transfer Protocol)は、ブラウザとサーバーがデータをやり取りするための「共通言語(プロトコル)」です。
この会話は、私たちが読める普通の「テキスト(文字列)」で行われています。基本は、ブラウザからの「リクエスト(要求)」と、サーバーからの「レスポンス(応答)」の1往復で完結します。
もっとシンプルに言うと、ブラウザ(Chromeなど)とサーバーの間で「このページを見せてください」「はい、これがページの内容です」と会話するためのルールです。
しかしHTTPには弱点もあります。それは、この会話はすべて「プレーンテキスト(普通の文字)」で行われます。暗号化されていないため、もし通信の途中のルーターなどで誰かがこのパケットを盗み見(盗聴)したら、ログインパスワードやクレジットカード番号、会話の内容がすべて丸見えになってしまうという点です。それを補うためにHTTPSが存在するのです。
HTTPS
HTTPの「丸見え」という弱点を克服したのが HTTPS(HTTP Secure) です。
HTTP通信の内容を、SSL/TLSという技術で暗号化して送る仕組みです。「S」はSecureのSです。
HTTPS化するメリットは下記の3つがあるかと思います
①盗聴の防止(暗号化)
もし途中で悪意のある人に通信データを盗まれても、データは xf89a#$jkl... のような意味不明な文字列に暗号化されているため、絶対に解読できません。
②改ざんの防止
データが途中で書き換えられていないかをチェックする仕組み(ハッシュ関数)が入っています。これにより、途中で勝手にウイルス入りのコードを仕込まれたり、サイトの内容を書き換えられたりするのを防ぎます。
③なりすましの防止(本物証明)
サーバーは、信頼できる第三者機関(認証局)が発行した「SSL証明書」というデジタル身分証明書を持っています。ブラウザはこれを確認することで、「今つないでいるのは、詐欺サイトではなく、間違いなく本物の銀行のサイトだ」と確信できます。
身近な例で例えてみた
HTTP(ハガキでの文通)
郵便屋さん(プロバイダやWi-Fiの管理人)や、途中でハガキを覗き見た人は、誰でも「何が書かれているか」を読めてしまいます。大切な個人情報を書くにはリスクが高すぎます。
HTTPS(鍵付きの頑丈なアタッシュケースでの文通)
まずあなたと相手の間で、2人しか開けられない「秘密の鍵」を共有します。その後、手紙(HTTP)をそのケースに入れて、鍵をかけて送ります。これなら、途中で誰がケースを盗み見ようとしても、中身を読むことはできません。
終わりに
いかがでしたでしょうか?
初心者からするとカタカナとアルファベットだらけの用語はそれだけで嫌になりますよね。
ですが、このように少しずつ紐解いていくと、何となくでもわかると思います。
全てを完璧にわかる必要はありませんが、少しだけでもわかることで理解が深まったり、解像度が上がると思うので、今後ともこのような形でアウトプットしていこうと思います。