本記事は「オープンソース技術の実践活用メディア(ThinkIT)」に寄稿した連載企画、新人エンジニアのためのインフラ入門の一部を転載しております。

本記事の全量は以下のリンクからお読み頂けます。

新人エンジニアのためのインフラ入門

はじめに

みなさん、こんにちは。第3回の今回は、インフラの中でもサーバと双璧をなす「ネットワーク」について解説します。システムが複雑さを増す中で、ネットワークにも新たな技術が生まれてきており、インフラエンジニアに期待される領域も年々増しています。ネットワークの世界は表面的には「つながる」「つながらない」の分かりやすいものですが、内部的には非常に深い世界が待っています。本記事では、よく使用されるネットワーク技術にフォーカスして解説していきます。

ネットワークとは

一般的には人やモノを網状につなげたものを「ネットワーク」と呼びます。システムの世界では、主にコンピュータを相互につなげたものが「ネットワーク」になりますが、その特徴から「コンピュータネットワーク」と呼ばれることもあります。インフラ技術には栄枯盛衰がありますが、現在のネットワークにおける主役は「TCP/IP」です。TCP/IPは「Transmission Control Protocol/Internet Protocol」の略で、TCPやIPといった後述するプロトコル(取り決め、手順)の集合体となります。

TCP/IPは元々インターネットを支える技術でしたが、インターネットの広がりとともにLAN環境でも使用されるようになり、最近ではTCP/IPを使用しないネットワークを見つける方が難しくなりました。コンピュータをTCP/IPでつなげたものがネットワークと言っても過言ではないでしょう。

LAN

LANは「Local Area Network」の略で、家庭や企業の拠点内に閉じたネットワークを指します。また、LANをお互いにつなげたものをWAN(Wide Area Network)と言います。最近では社員1人にパソコン1台が当たり前になってきていますが、オフィス内のそれぞれのパソコンやサーバを接続するためにLANを組んでいます。さらに、東京と大阪にオフィスがあれば、それぞれのオフィス内でLANを組み、NTTやKDDI等の回線を利用してオフィス間を接続することでWANを組んでいます。

IT業界 インフラエンジニア インフラ 入門 インフラ入門

TCP/IP

1. 階層構造による通信

TCP/IPはプロトコル(取り決め、手順)の集合体と説明しましたが、処理フローから見ると4階層の構造になっています。データを送信するコンピュータは、この階層構造に従って上から下へと処理を行い、データを受信するコンピュータは逆に下から上へと処理を行っていきます。

IT業界 インフラエンジニア インフラ 入門 インフラ入門

イメージしづらいと思いますので、具体的に各層でどのような処理が行われているのかを見ていきましょう。下図は処理をイメージ化したものですが、各層では受け取ったデータに付加情報(ヘッダ)を付けたり、削除したりすることでコンピュータ間の通信を実現しています。基本的に各層ではその層に必要な情報(図中の赤色箇所)だけを確認して処理を行い、次の層へとデータを渡していきます。

IT業界 インフラエンジニア インフラ 入門 インフラ入門

例として、カニ漁師さんが契約する旅館に郵便でカニを届ける場合に置き換えて説明してみます。まず、カニがデータに該当します。契約の段階で漁師さんと旅館の仕入担当者間でカニの種類や加工などを取り決め(アプリケーション層に該当)、種類や加工状態を記載した札(ヘッダ)をカニに巻き付けます。次に、カニを段ボール箱に入れ、旅館側の受取窓口である仕入担当者名や全部で何箱あるのかなどを札(ヘッダ)に記載します(トランスポート層に該当)。さらに、札(ヘッダ)に旅館の住所を記載して(インターネット層に該当)郵便局に持っていくと、バイクや車で契約先の旅館まで配達をしてくれます(ネットワークインタフェース層に該当)。

2. Web通信の例

まだイメージしづらいと思いますので、Web通信を例に具体的な処理内容を見てみましょう。

アプリケーション層

ブラウザでWebサイトを見る際は、HTTP(Hyper Text Transfer Protocol)というプロトコルに従って閲覧要求用のデータがブラウザによって生成されます。下図は実際の通信データを専用ソフトで見たものです。様々な情報が羅列されていますが、BFTという会社のホームページに関する閲覧要求であることが見て取れます。

IT業界 インフラエンジニア インフラ 入門 インフラ入門

このクライアントからの要求に対して、サーバ側では下図のように応答しています。ApacheというWebサーバ用のミドルウェアを使用していること、実際のWebページの内容(HTML)を返していることが見て取れます。このように、アプリケーション層ではクライアント側のブラウザとサーバ側のミドルウェア(Apache)間でHTTP通信が成り立っています。

IT業界 インフラエンジニア インフラ 入門 インフラ入門

トランスポート層

Webサーバ側でApacheというミドルウェアが要求に応答していましたが、なぜApacheは自分が応答するべきだと分かったのでしょうか。これはポートという仕組みで実現しています。カニ漁師の例では旅館側の受取窓口と表現していましたが、コンピュータにもポートという窓口が65,536個用意されており、窓口ごとに対応するソフトウェアが決まっています。Web通信では通常80番ポートを使用することが多いため、クライアントはWebサーバの80番ポート宛にデータを送信し、Webサーバでは80番ポートにデータが届いたのでApacheが自分宛てのデータだと認識して処理したのです。

IT業界 インフラエンジニア インフラ 入門 インフラ入門

実は、Apacheが80番ポートを担当するかどうかはApacheの設定で決まります。したがってポートを1080番に設定変更すると、そのことを知らないクライアントは通信できなくなります。実際のシステムでもセキュリティ上の理由から80番ポートを避けて他のポート番号を使用したり、複数の環境を同時にサービスするために本番環境は80番ポート、開発環境は1080番ポートのように使い分けをしたりしています。余談ですが、ブラウザを使用して1080番ポートにアクセスしたい時には、URL欄にhttp://www.bfts.co.jp:1080/のように指定することでポートを指定して接続できるようになります。

インターネット層

住所に該当する層で、ここで活躍するのがIP(Internet Protocol)というプロトコルです。プロトコルなので取り決めがあるわけですが、重要な取り決めとしてIPアドレスという住所に該当するものがあります。下図では送信元のコンピュータが”192.168.100.7”、宛先のコンピュータが”210.129.213.248”というアドレスを使用していることが見て取れます。

IT業界 インフラエンジニア インフラ 入門 インフラ入門

ネットワークにつながる機器にはIPアドレスに関する経路情報(ルーティングテーブル)が保存されているため、宛先のIPアドレスを確認することで、次にどの機器へ転送するかが決まります。送信元と送信先のコンピュータ間に複数のネットワーク機器がある場合にも、その転送を繰り返しながら宛先のコンピュータまでデータが運ばれていきます。

ネットワークインタフェース層

住所が分かったら配達するためのバイクや車が必要となるように、宛先となるサーバが分かったらデータを運ぶための媒体が必要になります。有線ネットワークにおける技術の主流はイーサネットですが、ネットワークにつながる機器には全てMACアドレスと呼ばれる世界で一意のアドレスが付与されており、このアドレスで住所を識別しています。

MACアドレスは同一ネットワークにおけるダイレクト通信時に使用されます。インターネット層の転送先IPアドレスが決まるとIPアドレスに対応したMACアドレスを確認し、データを送信します。下図でも宛先のMACアドレスが表示されていますが、これはWebサーバのMACアドレスではなく、クライアントが次に転送する先のゲートウェイのMACアドレスです。

IT業界 インフラエンジニア インフラ 入門 インフラ入門

IPアドレスとMACアドレスの2つのアドレスが存在する理由は、TCP/IPとイーサネットの規格化が別々に進められたという歴史的な背景もあります。しかし、2層に分かれることで設計に柔軟性が生まれるなどメリットも多くあります。例えば、ネットワークカードが壊れても通信が途切れないようにネットワークカードを2枚使用して冗長化することがありますが、ネットワークカードそれぞれにMACアドレスが振られているため、2つのMACアドレスで1つのIPアドレスを共有する構成になります。この場合、クライアントは2枚のネットワークカード(ネットワークインタフェース層)を意識する必要はなく、1つのIPアドレスだけ意識すれば良いことになります。

<コラム>プロジェクトに関わるエトセトラ:要件定義
連載を通して、インフラエンジニアが関わる「プロジェクト」に注目し、さまざまな側面から解説していく本コラム。今回は、要件定義について解説します。

要件定義では、お客様にヒアリングしながらシステムの要件を明確にしていくのですが、システム要件には「機能要件」と「非機能要件」の2つが存在します。機能要件はシステムに搭載するべき機能のことで、大きな項目で言うと顧客管理機能やメンテナンス機能といったものです。業務機能に関する内容であることから、アプリケーション担当者がメインでまとめることが多くなります。

一方、非機能要件は機能要件以外でシステムに備えるべき要件であり、具体的には下記のような内容です。

可用性: システムの運用時間や稼働率についての要件
性能・拡張性: システムの性能やアクセス・データ量の増加に対する拡張性の要件
運用・保守性: システムの運用・保守のサービスレベルに対する要件
移行性: 移行期間や移行時に許容できる停止時間などの要件
セキュリティ: システムのセキュリティ強度に対する要件
非機能要件はインフラの観点が大きな割合を占める項目が多いことから、インフラ担当がメインで動くことも多くなります。ただし、性能といった項目ではアプリケーションの観点が大きな割合を占め、また他の項目もインフラだけで閉じる内容ではないため、実際にはアプリケーション担当とインフラ担当が協力しながら実施していきます。

ユーザ企業のシステム部門は業務機能のプロであり、インフラについてはSIerに一任しているケースが多く見られます。したがって、ユーザとの非機能要件についての議論がうまく進まないことも往々にしてあります。非機能要件の内容により必要となるインフラは全く異なるため、要件定義ではインフラエンジニアとしての知識・経験と提案力が試されると言えるでしょう。

(第4回へ続く)

ネットワーク機器

ここからは、システムでよく使用されるネットワーク機器を紹介していきます。特に最近ではアプリケーション層まで処理するネットワーク機器が増えてきており、インフラエンジニア(ネットワークエンジニア)も幅広い知識が求められます。

1. スイッチ

コンピュータやネットワーク機器を接続してLANを組む際に使用します。最近のシステムではL2スイッチとL3スイッチがよく使用されます。L2スイッチはネットワークインタフェース層までの処理を、L3スイッチはインターネット層までの処理を担当します。

IT業界 インフラエンジニア インフラ 入門 インフラ入門

なお、L3スイッチではVLAN(Virtual LAN)という機能により複数のネットワークに分割できる、ハードウェアレベルでIPルーティングが可能といった点がメリットです。

2. ルータ

LAN同士を組み合わせてWANを組む際に使用し、インターネット層までの処理を担当します。ルータはソフトウェアでルーティング処理を行うため、ハードウェアでルーティングを行うL3スイッチと比較すると処理速度がデメリットですが、様々なプロトコルに対応している点がメリットです。したがって、WANの接続に複雑なプロトコルが必要となる場合に使用されるケースが多くなります。

IT業界 インフラエンジニア インフラ 入門 インフラ入門

3. ファイアウォール

インターネットとの境界やLANとLANの境界、LANとWANの境界に配置されることが多い機器です。ファイアウォールはトランスポート層まで処理を行うことができ、IPアドレスやポート番号の情報を基に通信を許可したり、遮断したりといったフィルタリングを行います。

IT業界 インフラエンジニア インフラ 入門 インフラ入門

最近では、Webアプリケーションを狙った攻撃から守るため、Webアプリケーションに特化してファイアウォールを提供するWAF(Web Application Firewall)と呼ばれる製品も目にする機会が増えてきています。これらの製品は、アプリケーション層やデータ内容まで検査することでWebアプリケーションを攻撃から守ります。

4. ロードバランサ

WebサーバやAPサーバの前段に配置して、負荷状況により送信先のサーバを変えたり、パケットの内容に従って送信先のサーバを変えたりする機能を持つネットワーク機器です。アプリケーション層まで処理ができ、HTTPヘッダの内容に応じて送信先のサーバを変えるといった柔軟な動作も可能です。

おわりに

今回は、「ネットワーク」について解説しました。今回紹介した内容はあくまでもネットワークの一部です。ネットワークの分野でインフラエンジニアとして活躍するためには、もう少し詳細な知識を身に着ける必要があります。TCP/IPに関しては良書が数多く出版されているので、ぜひ何冊か読んでみることをお勧めします。

次回は、「仮想化とクラウド」をテーマに解説します。昨今、新たなインフラ技術として注目を浴びている仮想化とクラウドは、ここ数年で一気に利用されるケースが増えました。物理とは異なる概念が多く出てきますので、次回も楽しみにしていてください!

新人エンジニアのためのインフラ入門【第4回】 システム構築の主流「仮想化」と「クラウド」を知ろう