ブラウザに「google.com」と打って Enter してから検索画面が出るまで、コンピュータの中では何が起きているか? これを順番に追うのが本記事のテーマ。インターネットの基本がほぼ全部見えます。
1. プロトコルスタック (4 層モデル)
| 層 | 役割 | 代表プロトコル |
|---|---|---|
| アプリケーション層 | アプリ間の通信内容 | HTTP / HTTPS / FTP / SMTP / DNS |
| トランスポート層 | 信頼性のあるデータ転送 | TCP / UDP |
| ネットワーク層 | 宛先までの経路選択 | IP (v4 / v6) / ICMP |
| データリンク層 | 隣接機器間の通信 | Ethernet / Wi-Fi |
2. google.com にアクセスする手順
- 1DNS 問合せ: 「google.com の IP は?」を DNS サーバに尋ねる → 142.250.46.78 を取得
- 2TCP 接続確立: 142.250.46.78:443 (HTTPS のポート) に 3 ウェイハンドシェイク
- 3TLS ハンドシェイク: 暗号化方式の合意・証明書の検証
- 4HTTP リクエスト送信: GET / HTTP/2 (パス・ヘッダ・Cookie 等)
- 5HTTP レスポンス受信: 200 OK + HTML 本文
- 6ブラウザがレンダリング: HTML を解釈して画面に表示
- 7追加リソース取得: 画像・CSS・JS を別途リクエスト (並列)
- 8JavaScript 実行: 動的な動作開始
3. IP アドレス
- IPv4: 32 ビット、約 43 億個 (もう枯渇)。例: 192.168.1.1
- IPv6: 128 ビット、ほぼ無限。例: 2001:db8::1
- プライベート IP: 10.x.x.x / 172.16-31.x.x / 192.168.x.x → 家庭・社内ネットワーク用
- グローバル IP: インターネット上で一意、ISP から割当て
- NAT: プライベート IP → グローバル IP の変換 (家のルータが行う)
4. TCP の信頼性
- 3 ウェイハンドシェイク: SYN → SYN-ACK → ACK で接続確立
- 順序保証: パケットに番号を付け、受信側で並べ直す
- 再送制御: 一定時間 ACK が来なければ再送
- フロー制御: 受信側のバッファ容量に応じて送信速度調整
- 輻輳制御: ネットワーク混雑時は送信速度を下げる
5. HTTP のメソッドとステータスコード
| 分類 | 代表 | 意味 |
|---|---|---|
| メソッド | GET / POST / PUT / DELETE | 取得 / 送信 / 更新 / 削除 |
| 2xx 成功 | 200 OK / 201 Created | 正常完了 |
| 3xx リダイレクト | 301 / 302 | 別 URL へ転送 |
| 4xx クライアントエラー | 404 / 401 / 403 | 見つからない / 未認証 / 権限なし |
| 5xx サーバエラー | 500 / 503 | サーバ側エラー / 一時的に利用不可 |
6. Python で HTTP リクエストを送る
requests ライブラリ
Python
import requests
# GET リクエストr = requests.get('https://api.github.com/users/octocat')print(r.status_code) # 200print(r.json()['name']) # 'The Octocat'
# POST リクエストr = requests.post('https://httpbin.org/post', json={'key': 'value'})print(r.json())
# ヘッダ付きr = requests.get('https://api.example.com/data', headers={'Authorization': 'Bearer TOKEN'})7. 次の話
EP.08 では データ構造 に進みます。配列・連結リスト・ハッシュ・ツリーの基本と、なぜ 「適切な構造の選択」 がプログラムを 1000 倍速くすることがあるか。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。