転職前にやってみよう③ – ネットワーク編 –

スポンサーリンク

さあ、「転職前にやってみよう」シリーズの第3弾はネットワークです。

第3回はネットワークです

私がITエンジニアに転職して、一番理解に苦しんだのがこのネットワークについてです。この記事では本当に基礎的なネットワークの仕組みについて、私なりに解説していきたいと思います。

  • どういう仕組みでパソコン同士が通信をしているのか?
  • ip address とは?

よく人間の会話とコンピューター同士の通信を比較して説明しているページをよく目にします。私も最初の頃はそれでイメージを膨らませていましたので、ここでも書いてみたいと思います。

人間の会話とコンピューターの通信の比較

network

人間の言葉は声を出し空気を振動させて相手に言葉を伝えます。コンピューターではLANケーブルに電気信号を流して「0」「1」を相手コンピューターに伝えます。人間の住所は、コンピューターの ip address です。

人間同士の会話は同じ日本語のルールに則ってコミュニケーションが行われています。コンピューターも同じで「TCP/IP」というルールに則ってコミュニケーションが行われています。コンピューターは「0」「1」の並びだけで会話しています。

「0」「1」の並びに意味を持たせるのが「TCP/IP」というプロトコルの役割です。人間でいえば、「あいうえお」の並びに意味を持たせるのが日本語いうと分かりやすいでしょうか。

さて、ここからが本題です

ネットワークの基本は「TCP/IP」プロトコルです。そして、「TCP/IP」プロトコルを理解するためには「OSI参照モデル」を理解する必要があります。「OSI参照モデル」はコンピューター間の通信において基礎的な概念となります。

OSI参照モデル

OSI参照モデルは以下のように第1層から第7層まで7つの層があります。

第7層(レイヤ7) アプリケーション層
第6層(レイヤ6) プレゼンテーション層
第5層(レイヤ5) セッション層
第4層(レイヤ4) トランスポート層
第3層(レイヤ3) ネットワーク層
第2層(レイヤ2) データリンク層
第1層(レイヤ1) 物理層

各層それぞれの役割を簡単に解説していきます。

第1層(レイヤ1)物理層

物理層ではネットワークの物理的な接続や伝送方式を規定しています。ネットワークに一番関連する代表的な部品は NIC(Network Interface Card)とLANケーブルです。NIC は「0」「1」のデータを電気信号に変換してLANケーブル上に流したり、逆にLANケーブルを流れてきた電気信号を「0」「1」のデータに変換して受け取ります。

LANケーブルには Ethernet の規格(IEEE802.3)が採用されています。Ethernet の規格(IEEE802.3)はIEEE(米国電気電子学会)によって定められています。街の電機屋さんでLANケーブルの販売コーナーを覗いてみてください。ほとんどのLANケーブルの製品において、IEEE802.3XXに対応という記述がされています。

第2層(レイヤ2)データリンク層

データリンク層では1つのネットワーク回線上で直接接続されたノード同士の通信について規定しています。データリンク層の LAN でも Ethernet により同じネットワークセグメント内におけるノード間の通信を行っています。

各ノードの NIC にはMACアドレスが焼き付けられていて、その情報をもとに通信を行います。このMACアドレスも IEEE が管理しています。グローバルアドレスの場合、IEEE に料金を支払って、割り当てと登録を受ける必要があります。

第3層(レイヤ3)ネットワーク層

ネットワーク層では、ノード間でのエンドツーエンド( 起点から終点まで )の通信を規定します。現在では起点と終点を表す住所のようなものとして ip address が使われています。送信元のコンピュータからのデータをスイッチ、ルータ等の機器を経由して、宛先のコンピュータへ届けます。ルータは ip address に基づき、宛先のコンピュータまでの最適なパスを選択してデータを送信します。

第4層(レイヤ4)トランスポート層

トランスポート層では、ノード間のデータ伝送における信頼性の提供とアプリケーション間でセッションを開始する上で必要なポート番号の割り当てについて規定しています。代表的なプロトコルには、TCP と UDP があります。ファイルのやり取りには TCP 動画配信やTV会議では UDP が主に使われています。最近では、Google の QUIC プロトコルという新しいものが発表されて話題を集めています。

第5層(レイヤ5)セッション層

セッション層では、アプリケーション間でのセッションの確立、維持、終了するまでの手順を規定しています。例えば、Web を参照するプロトコルである HTTP では、ページのテキストとは別に画像1つ1つに対してセッションを確立し、ページ全体をブラウザに取り込むようになっています。そのため、先にテキストが表示されてから、順次画像が表示されるといった動きになります。

第6層(レイヤ6)プレゼンテーション層

データの表現形式を規定し、テキスト、画像、ストリーミングといったデータ形式を区別します。また、データの暗号化、圧縮方式、文字コードといったデータの表現形式についても、このレイヤで規定しています。

Web を参照するプロトコルである HTTP では、このレイヤで文字コードを認識し、どのような国の言葉であっても、また日本語であればシフト JIS であっても EUC コードであっても、文字化けすることなく正しくブラウザに表示します。

第7層(レイヤ7)アプリケーション層

サーバのプログラムと、ユーザが利用するアプリケーションとの間の通信を提供します。例えば、Web を参照するプロトコルである HTTP は、サーバで稼動している Web サーバ プログラムと、Web ブラウザとの間の通信を制御します。

特に大事なポイント

OSI参照モデルはコンピューター間の通信を細分化し、分かりやすく表現しています。特に重要な階層が「レイヤ2」「レイヤ3」「レイヤ4」です。TCP/IP の TCP が「レイヤ4」、IP が「レイヤ3」、Ethernet が「レイヤ2(レイヤ1)」です。これらについては十分に理解をしておくと、とても役に立ちます。インターネットで検索すれば、たくさんの解説サイトが出てきますので、分からない場合には色々と調べてみてください。

参考にしたサイト

カプセル化

OSI参照モデルの各階層について理解が出来ましたら「カプセル化」という仕組みはすんなり理解できてしまうと思います。コンピュータ間で通信する場合、送信側ではレイヤ7→6→5→4→3→2→1の順番に処理を行っていきます。逆に、受信側のコンピュータでは受信した電気信号をレイヤ1→2→3→4→5→6→7の順で処理していきます。各階層で「ヘッダ」情報を付加しているのがポイントとなります。こちらは図を見た方が理解しやすいですね。

カプセル化 送信側

tworking15

カプセル化 受診側

tworking16

実践編 コンピューターの疎通確認「ping」

あれこれと理論を並べても実際に触ってみなければ本当の理解はできない、というのが私の考えです。そこで、簡単な実践を交えてOSI参照モデルについて説明したいと思います。

コンピューター同士が通信できるかどうか確認する時にによく使うコマンド「ping」というものがあります。「ping」は ICMP というプロトコルでレイヤ3です。現場でもよく使うコマンドですので、「ping」を使って解説していきたいと思います。

準備するもの

  • Windows 10 pro ※以降ホストPCと呼びます。
  • VirtualBox
  • CentOS7

VirtualBoxで仮想マシンを構築しCentOS7をインストールします。その際に、Host Only Adapterを仮想マシンに割り当ててください。VirtualBoxでHost Only Adapterを仮想マシンにセットする方法につきましては、前回の記事を参考にしてください。

仮想マシン(CentOS7)の ip address を確認

それでは早速、CentOS7を起動して ip address を確認してみましょう。

# ip a 1: lo: mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:f1:47:fe brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3 valid_lft 86288sec preferred_lft 86288sec inet6 fe80::a00:27ff:fef1:47fe/64 scope link valid_lft forever preferred_lft forever 3: enp0s8: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:ed:ca:5c brd ff:ff:ff:ff:ff:ff inet 192.168.56.2/24 brd 192.168.56.255 scope global enp0s8 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:feed:ca5c/64 scope link valid_lft forever preferred_lft forever

青くした箇所が ip address を表しています。「127.0.0.1/8」はループバックアドレスといってサーバー自身を表しています。「10.0.2.15/24」はNAT用の ip address です。「192.168.56.2/24」これがCentOS7の Host Only Adapter の ip address です。

黄色くした箇所がMACアドレスとなり、「link/ether」とは Eithernet で繋がっているということを表しています。Host Only Adapter が NIC(Network Interface Card)です。つまり、レイヤ1、レイヤ2、レイヤ3の階層については以上のコマンドの結果から正しく設定がされていると言えます。

上記のように結果が得られない場合には、以下のトラブルシューティングを参考にしてください。

ホストPCの ip address を確認

「cmd」を起動し「ipconfig /all」と入力してください。以下のような結果が得られます。

イーサネット アダプター VirtualBox Host-Only Network: 説明. . . . . . . . . . . . . . . . .: VirtualBox Host-Only Ethernet Adapter 物理アドレス. . . . . . . . . . . . .: 0A-00-27-00-00-08 接続固有の DNS サフィックス . . . . .: リンクローカル IPv6 アドレス. . . . .: fe80::b9cb:b0d5:4f4f:4648%33 IPv4 アドレス . . . . . . . . . . . .: 192.168.56.1 サブネット マスク . . . . . . . . . .: 255.255.255.0 デフォルト ゲートウェイ . . . . . . .:

物理アドレス「0A-00-27-00-00-08」がMACアドレスです。IPv4 アドレス「192.168.56.1」がホストPCの ip address になります。コマンド結果に表示されたということは、どちらも正しく機能していると言えます。ホストPC側は Host Only Adapter さえ設定されていれば、上記のような結果が得られると思います。

ホストPCとCentOS7の構成図

virtualbox-linux-network-04

実践 「ping」を通す

では実際にCentOS側からホストPCに向けて「ping」を通してみます。

[root@centos7 ~]# ping 192.168.56.1 PING 192.168.56.1 (192.168.56.1) 56(84) bytes of data. 64 bytes from 192.168.56.1: icmp_seq=1 ttl=128 time=0.373 ms 64 bytes from 192.168.56.1: icmp_seq=2 ttl=128 time=0.833 ms 64 bytes from 192.168.56.1: icmp_seq=3 ttl=128 time=0.684 ms 64 bytes from 192.168.56.1: icmp_seq=4 ttl=128 time=0.828 ms

このように表示されれば成功です。続いて、ホストPCからCentOSに向けて「ping」を通してみます。

上記のように結果が得られない場合には、以下のトラブルシューティングを参考にしてください。

C:\Users\administrator>ping 192.168.56.2 192.168.56.2 に ping を送信しています 32 バイトのデータ: 192.168.56.2 からの応答: バイト数 =32 時間 <1ms TTL=64 192.168.56.2 からの応答: バイト数 =32 時間 <1ms TTL=64 192.168.56.2 からの応答: バイト数 =32 時間 <1ms TTL=64 192.168.56.2 からの応答: バイト数 =32 時間 <1ms TTL=64 192.168.56.2 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 0ms、最大 = 0ms、平均 = 0ms

以上のように表示されれば成功です。

トラブルシューティング

OSI参照モデルの考え方はトラブルシューティングの時にとても役に立ちます。ip address の設定が上手くいかないとき、ping が通らないとき、OSI参照モデルの下層レイヤから原因を探っていくと答えが見えてきます。

レイヤ1 物理層のトラブルシューティング

まずは、一番下層のレイヤ1から正しく設定がされているか確認していきます。物理層で確認するのは本当に物理的な要素です。NICが取り付けられているか、ケーブルが断線していないか、といったことです。今回の場合、VirtualBox の Host Only Adapter が CentOS7 の仮想マシンにセットされているかどうかを確認しましょう。VirtualBox のマネージャーでCentOS7のマシンの「設定」>「ネットワーク」>「アダプター2(または1)」>「高度」をしてみてください。

MACaddress

画面のように出てくれば問題ありません。もし、出てこなければ、別のアダプターを選び「ネットアダプターの有効化」を行い、Host Only Adapter を設定してください。

レイヤ2 データリンク層のトラブルシューティング

NICは付いている。でも、CentOS の ip address が表示されない。そういった場合は、CentOSがNICを認識していない可能性があります。再起動を行ってコマンド「ip a」を打ってみてください。

MACアドレスは表示されるが、ip address が表示されないという場合、NICが有効化されていません。おそらく、NICの ONBOOT=NO となっていると思いますので、ONBOOT=YES に変更します。

#cd /etc/sysconfig/network-scripts/ #ls ifcfg-enp0s8 ifdown-eth ifdown-routes ifup-aliases ifup-plip ifup-tunnel ifcfg-lo ifdown-ippp ifdown-sit ifup-bnep ifup-plusb ifup-wireless ifdown ifdown-ipv6 ifdown-tunnel ifup-eth ifup-post init.ipv6-global ifdown-Team ifdown-isdn ifup ifup-ippp ifup-ppp network-functions ifdown-TeamPort ifdown-post ifup-Team ifup-ipv6 ifup-routes network-functions-ipv6 ifdown-bnep ifdown-ppp ifup-TeamPort ifup-isdn ifup-sit #vi ifcfg-enp0s8 ※ファイル名は若干異なっている場合があります。「ifcfg-」までは同じです。 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no NAME=enp0s8 UUID=47ab8747-a311-4e3b-bda8-d32a348560d1 DEVICE=enp0s8 ONBOOT=no ※ここを「yes」に変更する、変更したら上書き保存してください。 IPADDR=169.254.158.86 PREFIX=16 #systemctl restart network ※ネットワークの設定を再読み込みします。 #ip a 3: enp0s8: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:3f:3a:22 brd ff:ff:ff:ff:ff:ff inet 169.254.158.86/16 brd 169.254.255.255 scope link noprefixroute enp0s8 valid_lft forever preferred_lft forever inet6 fe80::6e7e:e629:a786:9f4d/64 scope link noprefixroute valid_lft forever preferred_lft forever

続いて、ホストPC側のNICを確認します。スタートメニューの「設定」>「ネットワークと共有センター」>「アダプター設定の変更」で VirtualBox Host-Only NetWork が有効であることを確認してください。これが有効であれば、Host Only Adapter は機能しているはずです。

adapter-config

レイヤ3 ネットワーク層のトラブルシューティング

ホストPCとCentOS7の ip address が通信可能な組み合わせになっているか確認してください。「ip address」「サブネット」などでインターネット検索すると、解説されたページが見つかると思います。

ip address が正しく設定されているのに通信できない場合、ホストPC側のファイアーウォールが悪さをしている可能性があります。ウイルスソフトが入っている場合、一旦ウイルスソフトを無効にしてみてください。

コンピューター間の通信は多くのルールの上に成り立っている

OSI参照モデルだけでも7階層もあり、各レイヤに様々なプロトコルがあり、それぞれが通信のルールを規定しています。コンピューター間の通信は数多のルールの上に成り立っているのです。ですから万能ではありません。設定を一つ間違えるだけでも通信ができなくなってしまいます。

通信ができなく困ったとき、慣れないうちは、下層のレイヤから原因を探してみてください。長く保守を行っているとケーブルが断線していたなんてケースにも遭遇することもあります。

ネットワークは大変奥が深いです。私はまだ基本中の基本しか知りません。ITエンジニアの中でもネットワークエンジニアはネットワークのスペシャリストです。興味のある方は目指してみてはどうでしょうか。

スポンサーリンク