shugo's kitchen

コンピュータサイエンスを美味しく調理していきたい

マスタリングTCP/IP 入門編 読書メモ 【第2章】

[tex: ]

今回からいよいよTCP/IPの話に入っていきます。

元書籍→マスタリングTCP/IP

前回の記事→

shugo256.hatenablog.com

TCP/IPの概要

  • 元々軍事の文脈でネットワークの一部が破壊されても迂回路によってデータを配送できる分散型パケットネットワークとして考案された
    • 中央集権的なネットワークでは通信回線の交換局が破壊されると死ぬ
  • UNIXの中に実装され、UNIXとともに発達、普及してきた
  • 標準化の精神として、ある程度プロトコルの実装されたプロトタイプがある状態で仕様を煮詰めたため、実用性が高いプロトコルとなったらしい
    • これが前章でやったOSIを尻目にどんどん普及していった要因らしい

インターネット

  • The Internet のプロトコルとしてのTCP/IP
  • 階層構造をなす(図2.5)
    • 小さなネットワーク同士の集合である組織ネットワークはNOC(Network Operation Center)によって接続され、ISP(Internet Service Provider)をなす
    • 運用者、運用方針などの異なるISPや地域ネットワーク同士を対等に接続するのがIX(Internet Exchange)であり、これによって世界中を結ぶ巨大なネットワークとなる

TCP/IPプロトコルの階層モデル

基本的には1章でやったOSI参照モデル に当てはめられるようだ(図2.8)

ハードウェア(物理層)
  • TCP/IPでは通信媒体や、通信する上での信頼性、セキュリティ、帯域、遅延時間などの制約を設けず、とにかくネットワークで接続された装置間で通信できることを前提に作られているらしい(??)
ネットワークインターフェース層(データリンク層)
インターネット層(ネットワーク層)
  • IPプロトコルを用いて最終目的のホストまでパケットを配送
    • IPアドレスを利用したパケット交換プロトコル
    • これによってデータリンクの特性を隠し(透過性)、どのようなデータリンクになっていても同様に通信できる
    • パケットが相手に届かなくても気にしないスタイル(そこの信頼性をどうするかは1つ上のトランスポート層の役目)
  • ICMP(Internet Control Message Protocol)
    • IPパケット転送中の異常をそう信玄に伝えるためのプロトコル
    • ネットワークの診断などにも利用
  • ARP(Address Resolution Protocol)
トランスポート層(トランスポート層)
  • アプリケーションプログラム間の通信を担う
    • ポート番号によるアプリケーションプログラムの識別
  • TCP
    • コネクション型(→前回)で、信頼性のあるプロトコルで、両端のデータの到達を保証
    • 途中でパケットが紛失したり順番が入れ替わったりしてもTCPがなんとかしてくれる
    • コネクションの確立/切断のコストが大きいので、転送したいデータが少ない時は無駄が多くなる
    • ネットワークの利用効率向上の工夫があるので、一定間隔で決められた寮のデータを転送する通信には向いてない
  • UDP
    • コネクションレス型で信頼性のないプロトコル
    • パケットが相手に届いたかや、そもそも相手がネットワークに接続されているのかを確認しない
      • 必要な場合はアプリケーションのプログラムで行う必要あり
    • パケット数の少ない通信や、ブロードキャスト、マルチキャストの通信に向いている
アプリケーション層(セッション層以上の各層)
  • セッション層以上の処理は全てアプリケーションプログラムで実現されるという考え
    • ただ、結局プログラム内でOSIモデルと同様の役割をもつ各モジュールに分けそう
  • TCP/IPのアプリケーションの多くはサービスを提供するサーバーと受けるクライアントからなるクライアント/サーバーモデルで作られる
  • WWW(World Wide Web)
    • Webブラウザと呼ばれるソフトウェアを用いてネットワークの中を移動できる
    • ブラウザ⇄サーバー間の通信に用いるプロトコルがHTTP(HyperText Transfer Protocol)、送信に使われるデータフォーマットがHTML(HyperText Markup Language)
  • 電子メール
    • STMP(Simple Mail Transfer Protocol)を用いて配送(OSIのアプリケーション層)
    • MIME(Multipurpose Internet Mail Extensions)によってテキストのみならず画像、音声も送れちゃう(OSIのプレゼンテーション層)
  • ファイル転送(FTP)
  • 遠隔ログイン(TELNETSSH(Secure Shell))
  • ネットワーク管理(SNMP)

通信の処理の流れ

パケットヘッダ
  • 各階層でデータに付加される情報をヘッダという
  • 階層から見れば、上位層から受け取る全ての情報(上位層のヘッダも含む)は単なるデータとして認識
  • 各層におけるヘッダには少なくとも、「宛先と送信元の情報」および「上位層のプロトコルが何かを示す情報」が含まれる(図2.19)
パケットの送信処理

電子メールの場合(図2.18)

①アプリケーションの処理
  • キーボードの入力をUTF-8などの規則に基づいて符号化
  • メールソフトによっては複数のメールをまとめて送信するなどの機能がある場合も
    • OSIでいうセッション層のような機能
  • TCPにコネクションの確立を指示し、確立され次第メールを送信する
TCPモジュールの処理
  • アプリケーションからもらったデータにTCPヘッダを付加
    • 送受信ポート番号
    • パケットの順番を示すシーケンス番号
    • データが壊れていないことを保証するチェックサム
  • ここでデータを相手に確実に届けることが保証される
③IPモジュールの処理
  • TCPからもらったデータ(TCPヘッダ込み)にIPヘッダを付加
    • 宛先、送信元のIPアドレスなど
    • ヘッダの最後にTCPなのかUDPなのかの情報も加える(この場合TCP)
  • IPパケットが完成したら、経路制御表(ルーティングテーブル)を参照し、次のルーターやホストを決定
  • 次の通信先のMACアドレスを調べ、IPパケットとともにイーサネットドライバへ渡す
④ネットワークインタフェース(イーサネットドライバ)の処理
パケットの受信処理

送信処理とは逆順にパケットが流れていく

⑤ネットワークインタフェースイーサネットドライバ)の処理
⑥IPモジュールの処理
  • ヘッダから読み取られる宛先のIPアドレスが自分のホストのものであればそのまま受信
  • 上位層のプロトコル(TCP/UDP)を調べる
  • ルーターの場合は宛先は自分宛てではないことが多く、この場合は経路制御表から次の行き先を調べて転送処理
TCPモジュールの処理
  • TCPの場合は

    • チェックサムによる壊れてないかの確認
    • シーケンス番号による順番の確認
    • ポート番号による通信しているアプリケーションの確認 が行われる
  • データが正しく届いた場合は送信元に確認応答を送る

    • 送信側はこの確認応答を受け取るまで繰り返しデータを送り続ける
⑧アプリケーションの処理
  • 受信したデータを解析し、ハードディスクなどにメッセージを格納しつつディスプレイに内容を表示する
  • 処理が正常に終了した場合はそれを送信元のアプリケーションに伝え、ダメな場合は異常終了のメッセージを送る


前期実験で訳も分からずいじったソケットプログラミングの理解が若干進んだような気がする

次回→(coming soon)

最初の記事→

shugo256.hatenablog.com