ネットワーク入門の入門
本や記事を読んだ学習記録として綴っています。
厳密性がない部分がありますが、「だいたい合ってる!」くらいの温かい目で見てもらえると嬉しいです。
細かいツッコミは優しくお願いします…!😅
前提
クライアントとサーバーとは
- webサイトを見る、youtubeを見る、Amazonで商品を買う などサービスを提供する側を
サーバー
という。 - 逆に、サービスを利用する側を
クライアント
という。 - webサイトのデータやyoutubeの動画データ、amazonのアカウントのデータや商品データは
サーバー側
で保存されている。
プロトコルとは
-
コンピュータ同士がネットワークを通じて通信するために決められた共通のルールのこと。
よくある比喩
- 日本語や英語:プロトコル
- 会話・コミュニケーション:通信
- 話の内容:データ
-
通信を行うためには、必ず同じプロトコルを互いに使用しなければならない。
-
プロトコルさえ互いに同じであれば、異なるメーカーやCPU、OS同士でも通信ができる。
Webは HTTP、HTML、URI でできている
-
HTTP(HyperText Transfer Protocol)
- Webページのデータを送受信するためのルールのこと。
-
HTML(HyperText Markup Language)
- Webページの構造を記述するためのマークアップ言語のこと。
-
URI(Uniform Resource Identifier)
- Web上の特定のリソース(Webページ、画像、動画など)」を識別するための文字列(アドレス)のこと。
リクエストとレスポンスとは
- クライアントはサーバーに
リクエスト(要求)
を送り、サーバーはレスポンス(応答)
を返す。 - リクエスト:「Qiitaの○○という記事のHTMLデータをくれよ。」
- レスポンス:HTMLデータがレスポンスとして返ってくる。
データのやり取りを行っているのはアプリケーションではなく、OSのプロトコル・スタック
- アプリケーション(例:ブラウザ、メールソフト)は直接データを送受信しているわけではなく、OSのプロトコル・スタックに依頼している。
- アプリケーション側で送信するデータを準備する
- アプリケーション側の
Socketライブラリ(ソケットAPI)
を使用して通信の準備する - SocketライブラリがOSのプロトコル・スタックに「このデータを送信してください」と依頼する
- OSの
プロトコル・スタック
がデータに対して、あれこれしてLANドライバに送信依頼をする - LANドライバでは、あれこれした送信するデータを電気信号や光信号に変換する など
- LANアダプタを通じて、送信される
仲介役
- アプリケーションとOSのプロトコル・スタックの仲介役が
Socketライブラリ
- OSとハードウェアの間の仲介役が
ドライバ
ソケットって何ぞや
- ソケット:通信の窓口であり、データの出入り口のようなもの
- コネクション:通信経路のことで、ソケットをつなぐパイプのようなもの
- 以下の2つのソケットをコネクションでつなぐことで、データの送受信ができる
- クライアント側のプロトコル・スタックのTCPのソケット
- サーバー側 のプロトコル・スタックのTCPのソケット
- 一方のソケットが抹消されれば、もう片方のソケットも抹消される。つまり、この状態で通信動作は終了される
データをソケットに渡すと、OSのプロトコル・スタックがそれを適切に処理し、相手のソケットまで届けてくれます。
プロトコル・スタックへの解像度を少し上げる
結論
アプリケーションのSocketライブラリがプロトコル・スタックのTCPやUDPの処理を呼び出す。
TCPがコネクションを作成して、データのやり取りを行う。
- Socketライブラリのメソッド
- socket()
- connetct()
- write()
- close()
図2:Socketライブラリからプロトコル・スタックへの依頼
(これはあくまでイメージです。実際はもっと複雑ですので、あまり文句を言わないでくださいね!)
送信するデータとは?
結論
- Socketライブラリで
コネクションが確立
される - アプリケーションがSocketライブラリの
write()
でTCPに送信するデータを渡す - 大きいデータを送信する場合は、TCPがデータを分割する(パケット化)
- TCPで
ヘッダ(TCPヘッダ)
をデータに付加する - IPで
ヘッダ(IPヘッダ)
をデータに付加する - IPがドライバ・ソフトに送信依頼をする
- TCPによるデータの分割(パケット化)
- MTU:1つのデータを運ぶことのできるデジタルデータの
最大長(1500B)
のこと- MTU(1500B) = IPヘッダー(20B) + TCPヘッダー(20B) + 送信するデータ(最大1460B)
- MSS:IPヘッダーとTCPヘッダーを除いた1つのパケットで運べるTCPデータの最大長
- MSS = 送信するデータ(1460B)
- MTU:1つのデータを運ぶことのできるデジタルデータの
UDPってなんぞや。TCPとは違うんか?
結論
- TCPは、コネクションを作成してデータのやり取りをする
- UDPは、コネクションを作成せずにデータを送る
とりあえず。
-
確実にデータを相手に届けたいときは、TCP
- Webサイトやメール送信、ファイル転送など
-
データの欠損があったとしても、速さを重視するときは、UDP
- 動画・音声ストリーミング、オンラインゲームなど
- 今後、登場する
名前解決
ではUDPを使用している
出典
- 『ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識』
- 『マスタリングTCP/IP―入門編―(第6版)』