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?

ネットワークの仕組み~前提編

Posted at

ネットワーク入門の入門

本や記事を読んだ学習記録として綴っています。
厳密性がない部分がありますが、「だいたい合ってる!」くらいの温かい目で見てもらえると嬉しいです。
細かいツッコミは優しくお願いします…!😅

前提

クライアントとサーバーとは

  • 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のプロトコル・スタックに依頼している。

図1
図1:データ送信の階層構造

  1. アプリケーション側で送信するデータを準備する
  2. アプリケーション側のSocketライブラリ(ソケットAPI)を使用して通信の準備する
  3. SocketライブラリがOSのプロトコル・スタックに「このデータを送信してください」と依頼する
  4. OSのプロトコル・スタックがデータに対して、あれこれしてLANドライバに送信依頼をする
  5. LANドライバでは、あれこれした送信するデータを電気信号や光信号に変換する など
  6. LANアダプタを通じて、送信される

仲介役

  • アプリケーションとOSのプロトコル・スタックの仲介役がSocketライブラリ
  • OSとハードウェアの間の仲介役がドライバ

ソケットって何ぞや

  • ソケット:通信の窓口であり、データの出入り口のようなもの
  • コネクション:通信経路のことで、ソケットをつなぐパイプのようなもの
  • 以下の2つのソケットをコネクションでつなぐことで、データの送受信ができる
    • クライアント側のプロトコル・スタックのTCPのソケット
    • サーバー側  のプロトコル・スタックのTCPのソケット
  • 一方のソケットが抹消されれば、もう片方のソケットも抹消される。つまり、この状態で通信動作は終了される

image.png

データをソケットに渡すと、OSのプロトコル・スタックがそれを適切に処理し、相手のソケットまで届けてくれます。


プロトコル・スタックへの解像度を少し上げる

結論
アプリケーションのSocketライブラリがプロトコル・スタックのTCPやUDPの処理を呼び出す。

TCPがコネクションを作成して、データのやり取りを行う。

  • Socketライブラリのメソッド
    • socket()
    • connetct()
    • write()
    • close()

image.png

図2:Socketライブラリからプロトコル・スタックへの依頼
(これはあくまでイメージです。実際はもっと複雑ですので、あまり文句を言わないでくださいね!)


送信するデータとは?

結論

  1. Socketライブラリでコネクションが確立される
  2. アプリケーションがSocketライブラリのwrite()でTCPに送信するデータを渡す
  3. 大きいデータを送信する場合は、TCPがデータを分割する(パケット化)
  4. TCPでヘッダ(TCPヘッダ)をデータに付加する
  5. IPでヘッダ(IPヘッダ)をデータに付加する
  6. IPがドライバ・ソフトに送信依頼をする
  • TCPによるデータの分割(パケット化)
    • MTU:1つのデータを運ぶことのできるデジタルデータの最大長(1500B)のこと
      • MTU(1500B) = IPヘッダー(20B) + TCPヘッダー(20B) + 送信するデータ(最大1460B)
    • MSS:IPヘッダーとTCPヘッダーを除いた1つのパケットで運べるTCPデータの最大長
      • MSS = 送信するデータ(1460B)

UDPってなんぞや。TCPとは違うんか?

結論

  • TCPは、コネクションを作成してデータのやり取りをする
  • UDPは、コネクションを作成せずにデータを送る

とりあえず。

  • 確実にデータを相手に届けたいときは、TCP

    • Webサイトやメール送信、ファイル転送など
  • データの欠損があったとしても、速さを重視するときは、UDP

    • 動画・音声ストリーミング、オンラインゲームなど
  • 今後、登場する名前解決ではUDPを使用している

出典

  • 『ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識』
  • 『マスタリングTCP/IP―入門編―(第6版)』
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?