0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Network Systems Foundations】アプリケーション層の学習整理

Last updated at Posted at 2025-11-09

はじめに

本記事は、Coursera の Network Systems Foundations モジュール「Link Layer」で学んだ内容を整理した学習記録です。

1. DNS(Domain Name System)

DNS の役割

  • IP アドレスは人間にとって覚えにくい
    例: 142.250.69.206youtube.com
  • また大規模サービスは 1 つの IP ではなく複数サーバを持つ

DNS は「ホスト名 → IP アドレス」を解決する分散データベース

DNS は階層構造(例:cs.princeton.edu


edu (トップレベルドメイン)
└── princeton (ドメイン)
└── cs (サブドメイン)

DNS 問い合わせの流れ(キャッシュなし)

[ブラウザ]

[ローカル DNS(PC / ルーター / ISP)]

[Root DNS]

[TLD DNS (.edu など)]

[権威 DNS (princeton.edu)]

IP アドレス返却

Resource Record(RR)


(name, value, type, TTL)

Type Name Value 用途
A ホスト名 IP アドレス 最終回答
NS ドメイン 権威 DNS 名 「次はここに聞いて」

途中の応答は NS、最終応答が A

Root DNS

  • 13 系列存在(A〜M)

AnyCast とは?

  • 複数のサーバーが同じ IP アドレスを共有し、BGP により最も近いものへルーティングされる仕組み

  • DNS Root・CDN・Google Public DNS などで採用

  • 地理的に近い・ネットワーク的に近い経路が自動で選ばれる


2. ソケットプログラミング(Transport 層との橋渡し)

ソケットとは?

  • アプリケーションと OS ネットワーク機能の境界インターフェース
  • fetch() / axios() / curl などが内部で利用

サーバーのフロー


socket() ソケット作成
bind() ポート番号を OS に登録
listen() 接続待ち
accept() 接続受付(ここでブロック)
send/recv データ通信
close() ソケット終了

クライアントのフロー


socket()
connect() → ここで 3-way handshake
send/recv
close()

なぜ client も server も socket() する?

  • 各プロセスは通信の“入り口”としてソケットが必要
  • 接続されると OS 内部で 新しい接続専用ソケット が生成される
    accept() が返すのは “通信専用の別ソケット”

ポート番号はいつ決まる?

  • bind() 時点
  • まだ通信は開始されていない(connect 以前)
  • 開発環境では 3000 / 5000 / 8080 など衝突しない番号を使う

3. HTTP(アプリケーション層の代表プロトコル)

特徴

  • リクエスト → レスポンス 形式
  • サーバーは原則 ステートレス

HTTP メッセージ形式

例:リクエスト


GET / HTTP/1.1
Host: example.com

例:レスポンス


HTTP/1.1 200 OK
Content-Type: text/html

<html>...</html>

HTTP バージョン比較

Version 特徴
HTTP/1.0 リクエストごとに TCP 接続
HTTP/1.1 Persistent Connection(接続再利用)
HTTP/2 多重化(大量の並列リクエスト高速化)
HTTP/3 TCP ではなく QUIC を使用

4. gRPC

gRPC とは?

  • 高速な RPC(Remote Procedure Call)フレームワーク
  • IDL(Interface Definition Language)として Protocol Buffers
  • HTTP/2 上で動作し高速・軽量・型安全

通信構造

Client → Stub → (HTTP/2 + Protobuf) → Stub → Server

.proto ファイルの例

service Echo {
  rpc echo(Message) returns (Message);
}

message Message {
  string message = 1;
}

JSON vs Protobuf

特性 JSON Protobuf
形式 文字列 バイナリ
サイズ 大きい 小さい
パース 遅い 速い
人間可読性 あり なし(ただし効率的)

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?