マスタリングTCP/IPを読んだ

テストが終わったので,エンジニアの教養の1つであるTCP/IPを学ぼうと思い,「マスタリングTCP/IP 入門編」を読みました.

マスタリングTCP/IP 入門編 第5版

マスタリングTCP/IP 入門編 第5版

勉強ログとして,参考になった部分や感想を書いていきます.

どんな本か

言わずと知れたTCP/IPの日本語書籍の名著ですが,ゆるふわ非常に平易な文章で書かれています. わかりやすい例えと図のおかげで,初学者にも優しい構成となっています.日本語で書かれているのもありがたいですね.

ただ,TCP/IP自体がかなり幅広い概念なので,また,入門編ということもあって, 詳しく説明しているのは基本的な部分だけで,多くのプロトコルは紹介するだけとなっています. また,スループットを求める数式などもほとんど出てきません.

TCP/IP,インターネットの仕組みに興味を持った人が,初めの一冊として取り掛かるには最適です.

TCP/IP とは

TCP/IPとは,インターネットを支える通信技術の総称です. 決して,TCPやIPなどの単体のプロトコルを意味するわけではありません.

データリンクとは

ネットワークを構成する最小単位(OSI参照モデルデータリンク層を意味する場合もあります). 代表例はイーサネットネットワークで,これは端末とスイッチをケーブルで繋いだネットワークや, 端末を接続したスイッチ同士をケーブルで繋いだネットワークを指します.

ネットワーク層データリンク層の関係

ネットワーク層のデバイス(例えばルーター)は駅員さん, データリンクは,乗り換えなしで行ける駅同士の1区間に例えることができます.

駅員さんに,JR京橋駅から阪急北千里駅に行きたいと伝えると,どの切符を買って,どの電車に乗れば良いか教えてくれます. そして,教えてもらった通りに電車に乗れば,確実に目的地に到着することが保証されるわけですね.

しかし,乗り換えが複雑になってくると,全てを一度に駅員さんに教えてもらうとかえって混乱します. そこで,駅員さんははじめに乗るべき電車だけを教え,「あとは次の駅の駅員に聞いてください」と伝えます. これがルーターにおけるパケットの中継に相当します.

もう少し掘り下げて説明すると,JR環状線京橋駅という名前はIPアドレス,つまりネットワーク層のアドレスに, 駅に割り当てられた番号はMACアドレス,つまりデータリンク層のアドレスに相当します.

駅を識別するだけなら駅ナンバーだけでよいのですが,それは駅員や乗客には非直感的でわかりにくいので, JR環状線京橋駅などのように,構造を含めた呼び名を使います.

TCPのウィンドウ制御

本書を読んで最も感動した部分です.

TCPではデータが届いたらACKを返すのですが,1セグメントずつACKが返ってきたかどうかを判定していたら日が暮れてしまいます. そこでウィンドウ制御です.ウィンドウ制御とは,1セグメントずつACKを待つのではなく,もっと大きな単位でACKに対処する方法です.

面白いのはここからです.次に,ウィンドウ制御を採用した場合の再送制御について見てみます. 図を見ていただいた方がわかりやすいので引用します. f:id:txtbokwrm:20190220220242j:plain [マスタリングTCP/IP Ch6.4.6 P.238]

1 ~ 1000番目のデータを受け取った後,1001番目から2000番目のデータだけが届かなかったケースです. この場合,2001番目以降のデータは無事に届いていますが,1001番目から2000番目のデータは届いていないので 受信ホストはその部分のデータをリクエストし続けます.

ここで,受信ホストから3つの重複応答があった時に再送すると決めておきます.すると, ウィンドウ制御によってデータをやり取りする時間間隔が短くなっているため,タイムアウトによる再送制御よりも ずっと早くデータロスに気づくことができます.

さらに,2001番目から7000番目までのデータが無事に届いているので,1001 ~ 2000番目の再送要求が受け入れられた後に リクエストすべきデータは7001番目以降のデータとなり,受け取ったデータを一切無駄にしていないことがわかります.

このようにウィンドウ制御は,元々は非常にシンプルな発想であるにも関わらず,平常時にスループットが高いだけでなく データが失われた時の対応も高速であるという非常に素晴らしい性質を持っています.

電子メールとPOPとIMAP

何気なく使っていたメールですが,その裏では多くの技術が使われていることがわかりました.

基本的に,電源が入っていないホストとは通信できません.しかし,スマートフォンの電源を切っていても, その間に送られたメールはスマートフォンの電源を入れた後に受信されます.

この仕組みを実現するために,電源を切らないメールの受信サーバーを置き,端末がそのサーバーにメールをリクエストすることで 端末宛のメールを受信できるというプロトコルが考案されました(POP).

さらにIMAPというプロトコルによって,メールのデータそのものだけでなく,メールの管理もサーバー側で行います. これによって,メールの未読・既読情報やメールボックスの管理などを同期することができ,複数の端末でメールを読む環境で便利です.

セキュリティと暗号化

通信においては,これでもかというほど暗号化やセキュアなアプリケーションが使われています.例えば,

厳重すぎますね... これもネットワークのレイヤー化の恩恵の1つです.

IEEE802.1X

IEEE802.1Xは,認められた機器のみがネットワークにアクセスできるように認証できる仕組みです. これは簡単に言えば,スタバの無線LANを実現する仕組みです.

スタバの無線LANでインターネットを利用するためには2つの手順が必要です.

  1. スタバの無線LANに接続
  2. ブラウザを使ってログイン

この裏で何が行われているかというと,手順1によって接続確認用のVLANに繋がります. このVLANでは,認証サーバーなど限られたホストのみと通信可能です.

この状態で,手順2によって認証を行うことでインターネットを利用可能な状態になります.

おわりに

以上が,私がなるほどなあと思ったことや覚えておきたいなあと思った部分です. この本は本当に入門者向けなので,もしネットワークやインフラ関係の仕事をするようになったら, タネンバウムの「コンピュータネットワーク」やスティーブンスの「UNIXネットワークプログラミング」を読みたいですね.