質問集
インターネットについて、いくつかの質問をあげて、しっかり自分で言語化できるかどうかを確認しました。
Web通信の基本
ブラウザがURLを押してから、実際に画面を表示するまでのデータの流れやリクエストの仕組みは?
URL入力orリンククリック
ユーザーがURLを入力、またはリンクをクリックすると、ブラウザはそのURLからHTTPSのプロトコルとドメイン名を読み取る。
DNS名前解決をする
ブラウザはドメイン名(example.com)をコンピューターが識別できる、IPアドレスに変換するためのDNS名前解決を行う。
HTTPS接続の場合、SSL/TLSハンドシェイクをする
HTTPS接続の場合、安全な通信のために、SSL/TLSハンドシェイクが行われる。
- TLS/SSLはどういう仕組みで安全な通信を確保している?:TLS/SSLは、暗号化・認証・改ざん検知の3つの仕組みを使って、共通鍵の生成や通信相手の認証を目的とし、安全な通信を実現するためのプロトコル。
- SSL/TLSハンドシェイクを行う流れ
- Client Hello(クライアントからサーバへ):クライアントが「TLS通信を始めたい」とサーバに伝え、対応可能な暗号方式などを送る。
- Server Hello(サーバからクライアントへ):サーバが使う暗号方式を決め、主にSSL証明書(公開鍵)を返す。
- 証明書の検証(クライアント側):サーバの証明書(公開鍵)が正当か確認する
- 共通鍵の材料を送る:クライアントがサーバの公開鍵で暗号化した「鍵の元」を送信する。
- セッション鍵を生成する(双方):クライアントとサーバが共通鍵を生成する。
- Finishedメッセージ(暗号通信の開始):鍵を使って「通信開始の合図」を暗号化して送る。
IPルーティングとNAT変換
ユーザーがプライベートIPアドレスを持つ場合は、NATによってルータがプライベートIPアドレスからグローバルIPアドレスに変換し、インターネットに接続する。IPルーティングにより、パケットはインターネットを経由して目的のサーバーへ届く。
- IPルーティングって?具体的に:IPルーティングは、データを目的地のIPアドレスに向けて転送するために、最適な経路を選ぶ仕組みのこと。
TCP接続(3ウェイハンドシェイク)
TCPを使っている場合、クライアントとサーバー間で3ウェイハンドシェイクを行い、接続が確立される。
HTTP(S)リクエスト送信:ポート番号(HTTP(80)とHTTPS(443))
TCP接続が完了すると、ブラウザはサーバーにHTTPまたはHTTPSリクエストを送る。
サーバーでリクエストを受け取る+レスポンスを返す
サーバーはリクエストを受け取り、処理を行って、HTTPレスポンス(HTML,CSS,JS)をクライアントを返す。
ブラウザでHTML解析・レンダリングする
ブラウザはHTMLを受け取って、HTMLレンダリングを行って、画面描画する。
リソースの追加取得
HTML内で、画像やCSS、JSファイルのリソースがあった場合、ブラウザはそのリソースも取得して、ページが完成する。
TCPとUDPの違いは?
- TCP:接続前に「3ウェイハンドシェイク」が必要。確実なデータ転送を求められる場合に使用する。
- UDP:接続しないで、即送信する。データが欠けていた場合でも気にせず転送する。少しの遅延や欠損よりも「速度」いかに早くデータを届けるかを重視する。
HTTPメソッドの種類と、それぞれの用途は?(GET,POST,PUT,PATCH,DELETE)
- GET(データの取得):サーバからデータを持ってくる(URLのパラメータをつける)
- POST(データの送信):サーバにデータを送って、処理をしてもらう(リクエストボディにデータを含む)
- PUT(リソースの全体更新したい時)、PATCH(リソースの部分更新)で一部更新したい時に使う。
- DELETE:リソースを指定して、サーバに削除してもらう
通信プロトコルとトランスポート層
3ウェイハンドシェイクとは?どのように行われる?
3ウェイハンドシェイクは、TCPで通信を開始する際に使われる、信頼性のある接続を確立するための手順のこと。
- SYN:クライアントがサーバに接続したいと要求を出す。
- SYN-ACK:サーバがその接続要求を受け入れ、クライアントに応答を返す。
- ACK:クライアントがそのサーバからの応答を受け入れると、双方向の通信が可能なTCPセッションが成立する。
DHCPってなに?
PCやスマホがネットワーク接続した時に、IPアドレス・デフォルトゲートウェイ・DNSサーバの設定を自動で割り当ててくれるプロトコルである。これにより、手動でネットワーク設定をしなくても、簡単にインターネットに接続できる。
ARPって何?
ネットワーク内で、IPアドレスから対応するMACアドレスを調べるプロトコル。
IPアドレスからMACアドレスの変換を行う。第2層(データリンク層)と第3層(ネットワーク層)の橋渡しを行う。ローカルネットワーク(LAN)内での通信。
VPNとは何?
インターネットを通じて端末とサーバー間に、安全な仮想ネットワークを構築する技術のこと。通信は暗号化されており、改ざんや盗聴のリスクを下げることができる。例えば、外出先から社内ネットワークに安全に接続したい時に使われるプロトコル。
DNSキャッシュとは何?
以前アクセスしたドメイン名のIPアドレス情報を一時的に保存しておく仕組み。DNS名前解決の結果(ドメイン名→IPアドレス)を一時的に保存しておくことで、次回アクセス時にDNSサーバへ問い合わせずに高速に接続を行うことができる。
ICMPプロトコルとは何?
インターネット上で通信が正常に行われているかを確認するための約束事のこと。
pingを使って、ターゲットのホストが生きているかを確認する。
ネットワーク上のホストが応答しない場合に、それをエラーとして、ICMPエラーメッセージで報告する。
パケットスニファーとは何?
ネットワーク上の通信パケットを傍受して中身を解析するツールのこと、通信の可視化やセキュリティ監視で使われるが、不正に使用すれば盗聴のリスクもあるため、扱いに注意。
- 代表的なツール:Wireshark
同一オリジンポリシーとCORSとは?
- 同一オリジンポリシーは、Webブラウザが読み込んだページと異なるオリジンサーバーに対して、JavaScriptからのアクセスを原則禁止する仕組みのこと。これにより、悪意のあるサイトがユーザーのセッション情報を勝手に取得するのを防ぐ。
- オリジンの定義
- スキーム(http/https)
- ドメイン(example.com)
- ポート番号(:80/:443)の3つの全てが一致している必要がある。
- CORSとは?
サーバーが特定のオリジンからアクセスを許可することで、同一オリジンポリシーの制限を回避する仕組みのこと。同一オリジンポリシーの制限を回避する際に利用する機能のこと。異なるオリジンからのアクセスを許可できる。 - なぜCORSが必要?
Webブラウザには「同一オリジンポリシー」というセキュリティ制約がある。これは、異なるオリジンからのJavaScriptによるアクセスを原則禁止にすることで、- 他人のログイン情報を勝手に取得したり
- 悪意あるスクリプトが勝手にAPIを叩いたりするといったクロスサイト攻撃を防ぐ。
しかし、現在のWebアプリでは
- フロントエンドがlocalhost:3000
- バックエンドがlocalhost:8080
のように異なるオリジン構成になっていて、同一オリジンポリシーでは、情報のやり取りを行うことができなくなる。そこで、CORSは安全に例外を許可している仕組みで、このオリジンからのアクセスは許可すると明示することで、同一オリジンポリシーの制限を緩和している。
ネットワーク構成
ファイアウォールの役割と動作の仕組みは?
- 役割:
ファイアウォールは、不正アクセスや攻撃からネットワークを保護するためのセキュリティ機器である。外部からのアクセスや、内部からの通信を監視し、「許可」「拒否」のルールに基づいて通信の通過を制御する。 - 仕組み:
- パケットフィルタリング型:通信の宛先IPアドレス・ポート番号・プロトコルを見て、許可・拒否を判断する。
- アプリケーション層の検査(WAF):HTTPの高レベルの内容まで分析して判断する。例として、SQLインジェクションのような攻撃を検出して、防止するなど。
ルータとスイッチの違いは?
- ルータ:ネットワークとネットワークを接続する。OSI3層ネットワーク層で、異なるネットワーク同士をつなぐ。
- スイッチ:同じネットワーク内の機器を接続する。OSI2層データリンク層で、LAN内のPCなどをMACアドレスベースで接続し、通信を効率化する。
セキュリティ関連
CDNはなぜ使われる
CDNは、世界中にあるキャッシュサーバに、オリジナルのコンテンツ(画像・HTML・動画など)をあらかじめコピーして保存を行う。ユーザーがアクセスすると、最も近いCDNサーバからコンテンツを取得する。オリジンサーバ(Web)にアクセスする必要がなくなるため、その分通信が高速化する。
HTTP/2やHTTP/3の違いは?
- HTTP/2はTCP上で動作し、1つのコネクションで複数リスエストを送る機能によって、HTTP/1.1の「リクエストが直列になる」問題を解決しました。直列は一つのリクエスト、レスポンスが終わらない限り、次のリクエストが送れないという問題。HTTPでリクエストとレスポンスがストリームとして分離される。つまり、リクエストとレスポンスがそれぞれ独立したチャンネルとしてやり取りされるため、並列処理が可能。
- HTTP/3は、TCPではなく、UDPを使うようになった。TCPのコネクション確立や再送信による遅延を避けることができるので、さらに高速な通信が可能になる。