- Published on
【読書メモ】ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識
- Authors

- Name
- Ippei Shimizu
- @ippei_111
ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識
第1章
URL
- http:, ftp:, file:, mailto: などで始まるもの。
- ブラウザはWebサーバーにアクセスするためのクライアントとして使用されることが多いが、ファイルのダウンロード・アップロード、メールの送受信など、さまざまな用途で使用される。そのため、どの機能を使うかを判断する材料としてURLが用意されている。
- 共通点
- URLの先頭のhttpなどの部分でアクセスする方法を指定する。
ブラウザ
- ブラウザは最初にWebサーバーに送るリクエストを作成するために、URLを解析する。URLを解析すれば、どこにアクセスすべきかが明確になる。
https://example.com/path/to/page?name=alice#section1
- https : プロトコル(データにアクセスする方法)
- // : //の後に続く部分はサーバー名などが多い
- example.com : サーバー名(ホスト名)
- /path/to/page : パス(サーバー内の場所)
HTTP
- HTTPプロトコルは、クライアントとサーバーがやり取りをするメッセージや内容のルールを定めている。
- クライアント→リクエスト・メッセージ→Webサーバー→レスポンス・メッセージ→クライアント
- リクエスト・メッセージ
- 何を : URI(Uniform Resource Identifier)、ファイルの場所など
- どのように : メソッド(GET, POST, PUT, DELETEなど)
- GET : URIで指定したデータを取得する
- POST : クライアントからサーバーにデータを送信する
- PUT : URIで指定したサーバー上のファイルを更新する
- DELETE : URIで指定したサーバー上のファイルを削除する
- リクエスト・メッセージ
- リクエスト・メッセージがWebサーバーに届いたら、URIとメソッドを調べて「何を」「どのように」処理するかを判断する。そして、レスポンス・メッセージをクライアントに返す。
HTTPのリクエスト・メッセージ
- リクエストライン : メソッド、URI、HTTPのバージョン。この1行でリクエスト内容が大まかにわかる。
- メッセージヘッダー : 日付、クライアント側が対応できるコンテンツの種類、クッキー情報など、リクエストに関する追加情報。
- メッセージボディ : POSTメソッドでWebサーバーに送信するときにデータが入る。
HTTPのレスポンス・メッセージ
- ステータスライン : HTTPのバージョン、ステータスコード、ステータスメッセージ。この1行でレスポンス内容が大まかにわかる。
- ステータスコード : 1xx(処理の経過状況などを通知)、2xx(正常に処理が完了)、3xx(何かの別のアクションが必要)、4xx(クライアント側のエラー)、5xx(サーバー側のエラー)
- メッセージヘッダー : 日付、サーバー情報、コンテンツの種類、クッキー情報など、レスポンスに関する追加情報。
- メッセージボディ : Webサーバーからクライアントに送信されるデータ(HTML、画像、JSONなど)。
IPアドレス
- ブラウザはURLを解析したり、HTTPメッセージを作成することはできるが、ネットワークにメッセージを送信することはできないので、OSに依頼する。 その際に、URL内にあるドメイン名からIPアドレスを調べて、IPアドレスでメッセージ送信先を指定する必要がある。
- ネットワーク番号 : 組織や地域ごとに割り当てられる番号。ネットワーク内のコンピュータを識別するために使用される。
- ホスト番号 : 番地に相当する番号。
TCP/IP
TCP/IP(Transmission Control Protocol/Internet Protocol)は、インターネットやネットワーク通信の基盤となるプロトコルの総称。
- IP : データを「どこに届けるか」を担当。IPアドレスを使って宛先を特定し、パケットをルーティングする
- TCP : データを「確実に届ける」を担当。パケットの順序制御、再送制御、エラー検出を行う
DNS
サーバー名とIPアドレスを対応づける仕組み。
どうやってブラウザはDNSサーバーに問い合わせているのか。
「DNSサーバーに問い合わせメッセージを送る→返される応答メッセージを受け取る→IPアドレスを取得する」 = DNSサーバーに対して、ブラウザはクライアントとして動作していることが言える。
このDNSクライアントに相当するものが「DNSリゾルバ」と呼ばれる。
- リゾルバを使用してDNSサーバーに問い合わせを行う。
- ブラウザなどのアプリケーションに、リゾルバのプログラム名とWebサーバーの名前を書くと、リゾルバがDNSサーバーに問い合わせを行い、その応答メッセージ内にIPアドレスが含まれているため、リゾルバはIPアドレスを取得できる。
リゾルバの内部処理
- プログラムがリゾルバを呼び出すタイミングで、一時的にアプリケーションの動作が止まる
- Socketライブラリのリゾルバが呼び出されて、アプリケーションから依頼された作業を行う
- リゾルバは、DNSサーバーに問い合わせるためのメッセージを作成する
- DNSサーバーへ問い合わせメッセージを送信する。送信動作はリゾルバが実行するのではなく、OSに組み込まれたプロトコル・スタックを呼び出して実行する
- LANアダプラを通じて、問い合わせメッセージがDNSサーバーに届く
- DNSサーバーは問い合わせメッセージを解析して、応答メッセージを作成する
ドメインを見つけるまで
ドメイン階層の上から順に問合せを行う。
- ルートDNSサーバーに問い合わせる
- .comなどのドメインのIPアドレスを教えてもらう
- 近くの.comのDNSサーバーに問い合わせる
- example.comのDNSサーバーのIPアドレスを教えてもらう
- example.comのDNSサーバーに問い合わせる
- これを繰り返す
データ送受信動作
OSのプロトコル・スタックがアクセス先のWebサーバーにメッセージを送信する
OS内部のプロトコル・スタックの動作
- ソケットを作成
- Socketというプログラムを呼び出す→ディスクリプタが返される
- ディスクリプタはソケットを識別するための番号
- サーバー側のソケットにパイプを繋ぐ
- connectというプログラムを呼び出すことで依頼動作を実行する
- ディスクリプタ、サーバーIP、ポート番号という3つの値を渡す
- ポート番号は、ソケットが提供するサービスを識別するための番号
- データを送受信する
- アプリは送信データをメモリに用意しておく
- ディスクリプタと送信データを指定して、writeというプログラムを呼び出す
- OSのプロトコル・スタックがデータを受け取り、送信処理を実行する
- 受信データをメモリー領域に格納しておく
- パイプを外してソケットを抹消する
- Webサーバー側で呼び出して切断する
第1章まとめ
ブラウザにURLが入力されると、ブラウザがURLを解析し、HTTPリクエスト・メッセージを作成する。そして、OSのプロトコル・スタックに依頼して、ネットワークを通じてWebサーバーにメッセージを送信する。
- ブラウザはURLを解析して、HTTPリクエスト・メッセージを作成する
- ブラウザはOSのリゾルバを呼び出して、DNSサーバーに問い合わせてIPアドレスを取得する
- ブラウザはOSのプロトコル・スタックを呼び出して、HTTPリクエスト・メッセージをWebサーバーに送信する
- WebサーバーはHTTPリクエスト・メッセージを解析して処理を行い、HTTPレスポンス・メッセージを作成して返す
- ブラウザはOSのプロトコル・スタックを呼び出して、HTTPレスポンス・メッセージを受信する
第2章
ソケットを作成
プロトコル・スタック
◼︎ 構造
- ネットワーク・アプリケーションがデータの送受信の依頼作業を行う。アプリケーションの下にはSocketライブラリがあり、その中にリゾルバが含まれている。
- Socketライブラリの下に、OSがあり、その中にプロトコル・スタックが含まれている。プロトコル・スタックには、データの送受信を担当するTCPと、UDPという2つのプロトコルが含まれている。
- TCP : ブラウザやメールクライアントなど、確実にデータを届ける必要があるアプリケーションで使用される。
- UDP : DNSサーバーへの問合せなど、多少データが欠損しても問題ないアプリケーションで使用される。
- TCP,UDPの下にはIPプロトコルがあり、IPプロトコルはパケット送受信をコントロールする。パケットを通信相手まで届ける役割を担う。
- ICMP : パケットを運ぶ時に発生するエラーを通知したり、メッセージを通知したりするためのプロトコル
- ARP : IPアドレスに対応するイーサネットのMACアドレスを調べるためのプロトコル
- IPプロトコルの下には、LANドライバがあり、LANアダプタを制御する。
- プロトコル・スタックは、制御情報を記録することができる。制御情報はメモリ常に格納されて、IPアドレスやポート番号などの情報が保存される。
◼︎ 接続
- ソケット作成直後は、ブラウザ側はURLを元にサーバーのIPアドレスやポート番号はわかっているが、サーバー側はまだ何も情報をしらない状態。そのため、プロトコル・スタックにIPアドレスやポート番号を知らせる仕組みが必要である。
ようは、接続するとは、クライアント側の接続情報(IPアドレス、ポート番号など)をサーバー側に知らせることを指す。 - 制御情報はヘッダーとソケットのメモリ領域に格納される2つの方法がある。