銀行員からのRailsエンジニア

銀行員からのRailsエンジニア

銀行員から転身したサービス作りが大好きなRailsエンジニアのブログです。個人で開発したサービスをいくつか運営しており、今も新しいサービスを開発しています。転職して日々感じていること、個人開発サービス運営のことなどを等身大で書いていきます。

【技術書まとめ16】マスタリングTCP/IP 入門編

毎週1冊技術書を読んでブログでアウトプットすることが目標で今回が第16弾です。

今回は マスタリングTCP/IP 入門編  を読みました。

インターネット接続のための標準プロトコルであるTCP/IPについて丁寧に解説した技術書です。

読んでいるうちにインターネットの通信の仕組みが分かってきて夢中になるくらい面白かったです。

この記事を読むだけでも概要は掴めると思うので、是非読んでみてください。

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

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

 

f:id:ysk_pro:20181126211020p:plain

第1章 ネットワーク基礎知識

  • OSI参照モデルとは、通信に必要な機能を7つの階層に分け、機能を分割することで、複雑なネットワークプロトコルを単純にしたモデルである。各階層は、下位層から特定のサービスを受け、上位層に特定のサービスを提供する。上位層と下位層の間でサービスのやり取りをするときの約束ごとを「インターフェース」と呼び、通信相手の同じ階層とやり取りするときの約束ごとを「プロトコルと呼ぶ
  • プロトコルの階層型は、ソフトフェアを開発するときのモジュール化に似ている。システムのある階層を変更しても、その影響がシステム全体に波及しないため、拡張性、柔軟性に富んだシステムを構築できる
  • OSI参照モデルの各層の役割
    • アプリケーション層:利用されるアプリケーションの中で通信に関係する部分を定める。ファイル転送や電子メールなどを実現するプロトコルがある
    • プレゼンテーション層:アプリケーションが扱う情報を通信に適したデータ形式にしたりするなど、データ形式に関する役割を持つ。機器固有のデータ表現形式などをネットワーク共通のデータ形式に変換したりする
    • セッション層:コネクション(データの通信路)の確立や切断、転送するデータの切れ目の設定など、データ転送に関する管理を行う
    • ネットワーク層:どの経路を使うかなどの経路選択をし、宛先までデータを届ける役割を持つ
    • データリンク層物理層で直接接続されたノード間での通信を可能にする。0と1の数字を意味のあるかたまりに分けて相手に伝える
    • 物理層ビットの列(0と1の数字の列)を電圧の高低や光の点滅に変換したり、逆に電圧の高低や光の点滅をビットの列に変換したりする
 

第2章 TCP/IP基礎知識

  • TCPはTransmission Control Protocol、IPはInternet Protocolの略称で、TCP/IPはインターネット環境の通信を実現するための最も有名なプロトコルである
  • 多くの場合、TCP/IPという言葉は、TCPとIPという2つのプロトコルだけでなく、IPを利用したり、IPで通信したりするときに必要となる多くのプロトコル群の総称として使われる
  • IPはネットワークをまたいでパケットを配送し、インターネット全体にパケットを送り届けるためのプロトコルである。IPによって、地球の裏側までパケットを届けることができる。それぞれのホストを識別するために、IPアドレスという識別子を使う
  • TCPは、コネクション型(通信相手と接続できたことを確認してからデータを送る)で信頼性のあるトランスポート層プロトコルである。両端のホスト間でデータの到達性を保証し、もし経路の途中でデータを運んでいるパケットがなくなったり、順番が入れ替わったりしても、TCPが正しく解決する。TCPのヘッダには、送信ホストと受信ホストのアプリケーションを識別するためのポート番号、そのパケットのデータが何バイト目のデータなのかを示すシーケンス番号、データが壊れていないことを保証するためのチェックサムなどが含まれる
  • ブラウザとサーバー間の通信で使われるプロトコルがHTTP(HyperText Transfer Protocol)で、送信に使われる主なデータフォーマットがHTML(HyperText Markup Language)である。WWW(World Wide Web)では、HTTPがOSI参照モデルのアプリケーション層のプロトコル、HTMLがプレゼンテーション層のプロトコルと言える
  • 各層のプロトコルのそれぞれのヘッダには少なくとも「宛先と送信元のアドレス」「上位層のプロトコルが何かを示す情報」が含まれている
 

第3章 データリンク

  • 実際に機器の間で通信を行う場合には、データリンク層物理層が共に必要となる。コンピュータの情報は、全て2進数の0と1で表されるが、実際の通信媒体でやり取りされるのは電圧の変化や光の点滅、電波の強弱などである。これらと2進数の0と1とを変換する働きを担うのが物理層であり、データリンク層では、単なる0と1の列ではなく、フレームという意味のあるかたまりにまとめて、相手の機器に伝える
  • MACアドレスは、データリンクに接続しているノードを識別するために利用される
 

第4章 IPプロトコル

  • IPは(IPv4IPv6)は、OSI参照モデルの第3層のネットワーク層に相当する。ネットワーク層は、通信経路になっているデータリンクの違いを覆い隠し、異なる種類のデータリンクであったとしても、その間の連携を取りながらパケットを配送することによって、別のデータリンクに接続されているコンピュータ同士の通信を可能にする
  • ホストIPアドレスが付けられているが経路制御(パケットを中継すること)を行わない機器。ルーターIPアドレスが付けられていて経路制御を行う機器。ノード:ホストとルーターを合わせた呼び方
  • 旅行を例にすると、電車などの区間内の移動をするための切符がデータリンク層、旅の全行程が書かれている工程表がネットワーク層の役割にあたる。工程表だけで切符がなけれが乗り物に乗ることができず、切符だけでもどの順番で乗り物に乗ればいいかわからず最終目的地にたどり着くことができない
    • 終点ホストまでのパケット配送(ルーティング)IPパケットがルーターに到着すると宛先IPアドレスが調べられ、次に転送されるルーターが決まり、そのルーターに転送される。これを繰り返して、IPパケットは最終的な目的地まで届けられる
    • IPパケットの分割処理と再構築処理:データリンクによって転送できるデータの大きさが決まっており、大きなIPパケットは小さなIPパケットに分割して、宛先のホストで再び1つにまとめられてIPの上位層に渡される
  • IPはコネクションレスで、パケットを送信する前に通信相手との間にコネクションの確立を行わない。上位層に送信すべきデータが発生しIPに送信要求をしたら、すぐにIPパケットにデータを詰めて送信する。コネクションレス型にしている理由は、機能の簡略化と高速化のためコネクション型のサービスが必要となる場合は、上位層が提供すれば良く、信頼性を高めるのは上位層のTCPの役割である
  • IPアドレスはネットワーク部とホスト部から構成される
    • ネットワーク部データリンクのセグメントごとに1つ値が割り当てられる。同じセグメントに接続されているホストには、全て同じネットワークアドレスを設定する
    • ホスト部:セグメント内で重ならない値を割り当てる
  • IPパケットが途中のルーターで転送されるときには、宛先IPアドレスのネットワーク部が利用されるホスト部を見なくてもネットワーク部を見ればどのセグメント内のホストであるかを識別できる
  • IPアドレスのどこからどこまでがネットワーク部で、どこからどこまでがホスト部かについては、歴史的に2種類の区別がある。初期のIPでは、クラスによって分けられており、現在ではサブネットマスクによって分けられている
  • クラスによっての分類:クラスA、クラスB、クラスC、クラスDという4つのクラスに分類され、IPアドレスの先頭から4ビットまでのビット列の組み合わせによってネットワーク部とホスト部を決めていた
    • クラスA:IPアドレスの先頭1ビットが0で始まる場合。クラスAでは、IPアドレスの先頭から8ビットまでがネットワーク部、下位24ビットがホストアドレスとして割り当てられる
    • クラスB:IPアドレスの先頭2ビットが10で始まる場合。クラスBでは、IPアドレスの先頭から16ビットがネットワーク部となり、下位16ビットがホストアドレス
    • クラスC:IPアドレスの先頭3ビットが110で始まる場合。IPアドレスの先頭から24ビットまでがネットワーク部、下位8ビットがホストアドレス
    • クラスD:IPアドレスの先頭4ビットが1110で始まる場合。IPアドレスの先頭から32ビットまでがネットワーク部となる。クラスDにホストアドレスの部分はなく、IPマルチキャスト通信(特定のグループに所属する全てのホストにパケットを送信する)に使われる
  • クラスによってネットワーク部とホスト部を分けるのは無駄が多いので、無駄を小さくするサブネットマスクを使った仕組みが導入された
 

第5章 IPに関連する技術

  • DNS(Domain Name System)は、アルファベットのホスト名とIPアドレスを自動で変換するシステムである。DNSでは、通信したいユーザーがホスト名を入力すると、自動的にホスト名やIPアドレスが登録されているデータベースサーバーが検索され、そこからIPアドレスの情報を得るようになっている。これにより、ホスト名やIPアドレスの登録や変更をした場合でもその組織内だけで処理すればよく、他の機関に報告や申請をする必要はない
  • ICMP(Internet Control Message Protocol)は、IPパケットが目的のホストまで届くかを確認する機能や、何らかの原因でIPパケットが廃棄された時にその原因を通知してくれる機能、不十分な設定をより良い設定に変更してくれる機能などがある。これらによって、ネットワークが正常かどうか、設定ミスや機器の異常がないかを知ることができる
 

第6章 TCPUDP

  • TCP/IPには、TCP(Transmission Control Protocol)とUDP(User Datagram Protocol)という2つの代表的なトランスポートプロトコルがある。TCPは信頼性のある通信を実現し、UDPは同時通信や、細かい制御をアプリケーションに任せた方がよい通信に使われる。つまり、必要となる通信の特性により、使用するトランスポートプロトコルを選択することになる
  • IPヘッダのプロトコルフィールドに定義されている、どのトランスポートプロトコルにデータを渡すかの番号で、IPが運んでいるデータがTCPなのかUDPなのかが識別される。同様に、トランスポート層であるTCPUDPにも、自分が運んでいるデータを次にどのアプリケーションに渡せばよいかを識別するための番号が定義されている
  • トランスポート層は、データを渡すプログラムを指定する役割を持っており、この役割を実現するためにポート番号という識別子を使用する
  • TCP/IPのアプリケーションプロトコルの多くは、一般的にクライアント/サーバーモデルという形式で作られている。サーバープログラムは、UNIXではデーモン(ホスト・サーバー上で常時起動されていて特定の処理を行うプロセス)と呼ばれる。要求がどのサーバー(デーモン)へ向けられたものかは、受信したパケットの宛先ポート番号を調べれば分かる。例えば、TCPの接続要求パケットを受信した場合、ポート番号が22番ならsshdで、80番ならhttpdにコネクションを確立させる。そして、そのデーモンがそれ以降の通信の処理を受け持つ。トランスポートプロトコルTCPUDPは、受信したデータが誰宛かをこのポート番号から判断する
  • ポート番号とは、トランスポートプロトコルのアドレスのようなもので、同一のコンピュータ内で通信を行なっているプログラムを識別するときに利用される
  • ポート番号の決め方は、ウェルノウンポート番号という標準で決められている番号を使う方法と、動的に割り当てる方法がある。ウェルノウンポート番号の例として、80番はHTTPで利用される。また、HTTPの通信では必ずTCPが使われる
  • TCPは、ネットワークの途中でパケットが喪失した場合に再送制御、コネクション制御などデータを送信するときの制御機能が充実しており、この機能によってIPというコネクションレス型のネットワークの上で、信頼性の高い通信を実現することができる
  • アプリケーションが細かい制御をした方が良い場合にはUDPを使うべきで、データの通信量が比較的多く、信頼性を必要としているができるだけ考えたくない場合には、TCPを使うべきである。TCPUDPには、それぞれ長所短所があるので、アプリケーションを作成するときにはシステムの設計者がきちんと考えてプロトコルを選定する必要がある
 

第7章 ルーティングプロトコル(経路制御プロトコル

  • インターネットは、ネットワークとネットワークがルーターで接続されて作られている。パケットを正しく宛先ホストへ届けるためには、ルーターが正しい方向へパケットを転送しなければならない。この正しい方向へパケットを転送するための処理を経路制御またはルーティングと呼ぶ
  • ルーター経路制御表(ルーティングテーブル)を参照してパケットを転送する。受け取ったパケットの宛先IPアドレスと経路制御表を比較して、次に送信すべきルーターを決定する
  • 経路制御表の作成・更新には2種類ある
    • スタティックルーティング(静的経路制御):ルーターやホストに固定的に経路情報を設定する方法
    • ダイナミックルーティング(動的経路制御):ルーティングプロトコルを動作させ、自動的に経路情報を設定する方法。隣り合うルーター間で自分が知っているネットワークの接続情報を教え合うことによって行われる
 

第8章 アプリケーションプロトコル

  • ネットワークを利用するアプリケーションには、Webブラウザ、電子メールなどがあり、それぞれのアプリケーション特有の通信処理が必要である。このアプリケーション特有の通信処理を行うのがアプリケーションプロトコルである。TCPやIPなどの下位層のプロトコルは、アプリケーションの種類によらず使えるように設計された汎用性の高いプロトコルである。これに対してアプリケーションプロトコルは、実用的なアプリケーションを実現するための、アプリケーション間で通信する際の取り決めである
    • SSH(Secure SHell):暗号化された遠隔ログインシステム
    • FTP(File Transfer Protocol):異なるコンピュータ間でファイルを転送するときに使われるプロトコル
    • SMTP(Simple Mail Transfer Protocol):電子メールサービスを提供するためのプロトコルである。電子メールの配送先の管理はDNSによって行われている
    • POP(Post Office Protocol):電子メールを受信するためのプロトコル
    • IMAP(Internet Message Access Protocol):POPと同様に、電子メールなどのメッセージを受信するためのプロトコル。POPは電子メールの管理をクライアント側で行うが、IMAPはサーバー側で管理を行う。IMAPであれば、サーバー上の電子メールをダウンロードしなくても読むことができる
 

第9章 セキュリティ

  • ファイアウォールの考え方は、危険にさらすのを特定のホストやルーターに限定する、というものである。全てのホストに不正侵入の対策を施すのには大きな手間がかかるため、ファイアウォールによってアクセス権限をかけて、インターネットから直接アクセスできるホストを数台に限定する。さらに安全なホストと危険にさらされるホストを区別して、危険なホストにのみ集中してセキュリティ対策をする
  • ファイアウォールは基本的にポリシーと合致した通信は通過させる。IDS(侵入検知)システムは、内部に侵入して不正アクセスを行う通信を見つけて通知する
  • VPN(virtual Private Network)は、インターネットを利用した仮想的な私的ネットワークである。パケットを送信するときに、暗号ヘッダや認証ヘッダを付け、パケットを受信するときにこれらのヘッダを解釈し、送信されたデータを復号して、通常のパケットに戻す。この処理により、暗号化されたデータは解読できなくなり、途中の経路でデータが改ざんされたときには判別できるようになる
  • Webでは、TLS/SSLという仕組みを使ってHTTP通信の暗号化が行われる。暗号化された通信はHTTPSと呼ぶ。HTTPSでは共通鍵暗号方式で暗号化処理が行われる。この共通鍵を送信するときには公開鍵暗号方式が利用される
 

おわりに

ここまで読んでいただきありがとうございます。
インターネットの通信の仕組み、とっても奥が深くて面白くないですか?
本書では、図や具体例、たとえ話を使ってより分かりやすく解説してくれているので、興味が湧いた方はぜひ読んでみてください。
マスタリングTCP/IP 入門編 第5版

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

 

来週は、アンダースタンディング コンピュテーション ―単純な機械から不可能なプログラムまで という、計算理論をRubyでわかりやすく解説している技術書を読む予定です。

これも面白そう...!

来週も頑張ります。