毎週1冊技術書を読んでブログでアウトプットすることが目標で今回が第16弾です。
今回は マスタリングTCP/IP 入門編 を読みました。
インターネット接続のための標準プロトコルである「TCP/IP」について丁寧に解説した技術書です。
Webエンジニアになりたい、なりたての人が本来真っ先に勉強すべきはRailsでもフロントエンドでもなく、TCP/IPです。入門書くらいは手元に置いて理解できるまで読み進めておくべきですね。
— ひさじゅ@すたてく社長(PG) (@hisaju01) 2018年11月20日
読んでいるうちにインターネットの通信の仕組みが分かってきて、夢中になるくらい面白かったです。
この記事を読むだけでも概要は掴めると思うので、是非読んでみてください。
- 第1章 ネットワーク基礎知識
- 第2章 TCP/IP基礎知識
- 第3章 データリンク
- 第4章 IPプロトコル
- 第5章 IPに関連する技術
- 第6章 TCPとUDP
- 第7章 ルーティングプロトコル(経路制御プロトコル)
- 第8章 アプリケーションプロトコル
- 第9章 セキュリティ
- おわりに
第1章 ネットワーク基礎知識
-
プロトコルの階層型は、ソフトフェアを開発するときのモジュール化に似ている。システムのある階層を変更しても、その影響がシステム全体に波及しないため、拡張性、柔軟性に富んだシステムを構築できる
-
-
セッション層:コネクション(データの通信路)の確立や切断、転送するデータの切れ目の設定など、データ転送に関する管理を行う
-
-
-
トランスポート層:宛先のアプリケーションにデータを確実に届ける役割を持つ
-
-
-
ネットワーク層:どの経路を使うかなどの経路選択をし、宛先までデータを届ける役割を持つ
-
-
-
物理層:ビットの列(0と1の数字の列)を電圧の高低や光の点滅に変換したり、逆に電圧の高低や光の点滅をビットの列に変換したりする
-
第2章 TCP/IP基礎知識
-
ブラウザとサーバー間の通信で使われるプロトコルがHTTP(HyperText Transfer Protocol)で、送信に使われる主なデータフォーマットがHTML(HyperText Markup Language)である。WWW(World Wide Web)では、HTTPがOSI参照モデルのアプリケーション層のプロトコル、HTMLがプレゼンテーション層のプロトコルと言える
第3章 データリンク
-
MACアドレスは、データリンクに接続しているノードを識別するために利用される
第4章 IPプロトコル
-
IPには大きく3つの役割がある
-
-
-
IPパケットの分割処理と再構築処理:データリンクによって転送できるデータの大きさが決まっており、大きなIPパケットは小さなIPパケットに分割して、宛先のホストで再び1つにまとめられてIPの上位層に渡される
-
-
-
ネットワーク部:データリンクのセグメントごとに1つ値が割り当てられる。同じセグメントに接続されているホストには、全て同じネットワークアドレスを設定する
-
-
-
ホスト部:セグメント内で重ならない値を割り当てる
-
-
家庭や学校、企業内ではプライベートIPアドレスを設定し、インターネットと接続するルーターや、インターネットに公開しているサーバーにだけグローバルIPアドレスを設定するのが一般的である。プライベートIPアドレスが付いているホストがインターネットと通信したい場合には、NAT(プライベートIPアドレスとグローバルIPアドレスの変換をする技術)などを介して通信する
-
同じコンピュータ内部のプログラム間で通信したい場合に、ループバックアドレスが利用される。127.0.0.1というIPアドレスで、このIPアドレスと同じ意味でlocalhostというホスト名も利用される。このアドレスを利用した場合、パケットはネットワークには流れない
第5章 IPに関連する技術
-
ICMP(Internet Control Message Protocol)は、IPパケットが目的のホストまで届くかを確認する機能や、何らかの原因でIPパケットが廃棄された時にその原因を通知してくれる機能、不十分な設定をより良い設定に変更してくれる機能などがある。これらによって、ネットワークが正常かどうか、設定ミスや機器の異常がないかを知ることができる
第6章 TCPとUDP
-
トランスポート層は、データを渡すプログラムを指定する役割を持っており、この役割を実現するためにポート番号という識別子を使用する
-
TCP/IPのアプリケーションプロトコルの多くは、一般的にクライアント/サーバーモデルという形式で作られている。サーバープログラムは、UNIXではデーモン(ホスト・サーバー上で常時起動されていて特定の処理を行うプロセス)と呼ばれる。要求がどのサーバー(デーモン)へ向けられたものかは、受信したパケットの宛先ポート番号を調べれば分かる。例えば、TCPの接続要求パケットを受信した場合、ポート番号が22番ならsshdで、80番ならhttpdにコネクションを確立させる。そして、そのデーモンがそれ以降の通信の処理を受け持つ。トランスポートプロトコルのTCP、UDPは、受信したデータが誰宛かをこのポート番号から判断する
-
ポート番号とは、トランスポートプロトコルのアドレスのようなもので、同一のコンピュータ内で通信を行なっているプログラムを識別するときに利用される
-
ポート番号の決め方は、ウェルノウンポート番号という標準で決められている番号を使う方法と、動的に割り当てる方法がある。ウェルノウンポート番号の例として、80番はHTTPで利用される。また、HTTPの通信では必ずTCPが使われる
第7章 ルーティングプロトコル(経路制御プロトコル)
-
経路制御表の作成・更新には2種類ある
-
-
スタティックルーティング(静的経路制御):ルーターやホストに固定的に経路情報を設定する方法
-
第8章 アプリケーションプロトコル
-
-
SSH(Secure SHell):暗号化された遠隔ログインシステム
-
-
-
POP(Post Office Protocol):電子メールを受信するためのプロトコル
-
第9章 セキュリティ
-
共通鍵方式には、AES(Advanced Encryption Standard)、DES(Data Encryption Standard)、公開鍵暗号方式にはRSA、DH(Diffie-Hellman)、楕円曲線暗号などがある
-
VPN(virtual Private Network)は、インターネットを利用した仮想的な私的ネットワークである。パケットを送信するときに、暗号ヘッダや認証ヘッダを付け、パケットを受信するときにこれらのヘッダを解釈し、送信されたデータを復号して、通常のパケットに戻す。この処理により、暗号化されたデータは解読できなくなり、途中の経路でデータが改ざんされたときには判別できるようになる
おわりに
ここまで読んでいただきありがとうございます。
インターネットの通信の仕組み、とっても奥が深くて面白くないですか?
本書では、図や具体例、たとえ話を使ってより分かりやすく解説してくれているので、興味が湧いた方はぜひ読んでみてください。
来週は、アンダースタンディング コンピュテーション ―単純な機械から不可能なプログラムまで という、計算理論をRubyでわかりやすく解説している技術書を読む予定です。
これも面白そう...!
来週も頑張ります。