全てを数値で識別
ここまでの説明で、一つの疑問が脳裏に浮かぶと思います。それは「どうやって、0と1で端末やプロトコルを識別するの?」という疑問です。筆者も初めてTCP/IPを学んだときそう考えました。その答えは、「全てを数値で表現する」という方法です。端末もプロトコルも……全てを数値で判別します。CPUは0と1しか解釈できませんし、回線上にデジタル信号を流すことを考慮するとそれが一番効率の良い方法なのです。しかし、少しインターネットを知っている人は「いやそんなはずはない。マイクロソフトのサイトとかアドレスがあるぞ」と思うことでしょう。その答えは DNS(Domain Name System)というプロトコルにあります。簡潔に説明すると、DNSというプロトコルが人間が識別できる名前を数値へ変換し下位層に渡しています。
このように、TCP/IPを理解するポイントは「全てを数値で表現している」ことです。これを念頭に置けばTCP/IPの理解が進みます。
基本はパケット通信
TCP/IPでは一つのデータをそのまま回線に流すのではなく、パケットと呼ばれる単位に分割して送信します。そして受信した側はそのパケットを組み立ててデータを解釈します。
効率よくデータを送付する
なぜこんな面倒な手順をするのかというと、一つの伝送路を複数の端末で効率よく共有する必要があるからです。一つの端末が大きなデータを送る時、他の端末がデータを送れずに待ち続ける状態では利用者のストレスがたまりますし、無駄な空き時間が生じて効率がよいといえません。この発想はマルチタスクと同じです。興味がある方はマルチタスクについて調べると良いと思います。
データの紛失に備える
そのほかにも、回線はデータが紛失する恐れがあるという理由があります。PCとは違い、長い距離がある回線上ではデータが紛失することがよくあります。ですから、一つのデータを丸ごと流してしまうと、全てデータを失う結果となり非常に不便です。そこで、パケットに分割して、損失したパケットだけ再送信する方式を採っているのです。
パケットが届く順序
今まで良い点ばかり書きましたが一つ難点があります。それは「パケットは順序どおりに届くとは限らない」という点です。ネットワーク回線は複雑に張り巡らされていますので、個々のパケットは違うルートで届けられることになり、データの順番どおりにパケット届くとは限らないのです。そこで、データを受信した側はパケットを順番どおりに組み立ててデータを再現します。この点はネットワークを理解する上で非常に重要な考えなのでこの機会にぜひ覚えておきましょう。
まとめ
いかがだったでしょうか? 今回は導入編なので、プログラマの方にとって重要なTCP/IPの基礎中の基礎に焦点を絞って書きました。今後は、今回少し触れた各階層のポイントについてコードを交えて説明していきます。この連載を通じて、難しいTCP/IPを習得する手助けになれば幸いです。
参考資料
書籍
- 『詳解TCP/IP Vol.1 プロトコル』 W.Richard Stevens 著、橘康雄・井上尚司 訳、ピアソンエデュケーション、2000年12月
- 『マスタリングTCP/IP 入門編 第4版』 竹下隆史・村山公保・荒井透・苅田幸雄 著、オーム社、2007年2月
ホームページ
- @IT 『Master of IP Network』
