ネットワーク基礎学習⑤ IPアドレス その2 「IP アドレスクラス」
前回は、「IPアドレス」とは何かを学び、「ネットワークアドレス」と「ホストアドレス」について解説しました。
今回は、IPアドレスクラスについて書いていきます。
IPアドレスクラスとは?
「IPアドレスクラス」とは、IPアドレスの値によって、IPアドレスを幾つかのカテゴリに分類したものである。
分類されることでなにが違うのかと言うと、例えばクラスごとでそれぞれのIPアドレスの「ネットワーク部の範囲」や「ホストアドレス部の範囲」が異なります。
以下の図を見ながら説明します。↓
代表的なクラス
クラスA
クラスAは、ネットワーク部が8ビット、ホスト部が24ビットのIPアドレスです。
上の図の通り、ネットワーク部の先頭が0で始まります。使用できるネットワークは126個で、ネットワークに約1600万台のホストを接続することができます。
これはおそらく一般の方が使うことはないでしょう。このクラスは、大きな組織やISP(インターネットサービスプロバイダ)の利用を想定しています。
ネットワーク基礎学習④ IPアドレス その1「概要 」「ネットワークアドレス」「ホストアドレス」
今回はIPアドレスについて説明します。
記事を何回かに分けて書きます。
1. IPアドレスとは
みなさんがお住まいのお家にはもちろん「住所」があると思います。
上のイメージのように、、、
ネットワークの世界にも、あるネットワークとそのネットワーク内で接続されている機器などの位置を「 IPアドレス」と呼ばれるもので表現します。
よって 「IPアドレス(Internet Protocol Address)」とは、インターネット上での住所のような役割を担っており、パソコンやスマートフォンなどネットワーク上の機器を識別するために割り当てられているのです。
2. IPアドレスの表記形式(IPv4)
ドット・デシマル・ノーテーション
IPアドレスは「32ビット」からなる一つの値です。
表記形式ですが、、、↓
こちらです。(完)
↓
↓
↓
↓
↓
↓
嘘です。見やすくしていきます↓
32ビットある2進数を、8ビットずつ4組に分けて、、、
10進数に変換します。
この表記方法を「ドット・デシマル・ノーテーション」と呼ぶそうです。
ネットワークアドレス・ホストアドレス
先ほどの表記法は
「グループ(LAN全体)を表す番号」と、
「LANに接続されたノード(ホスト)を表す番号」
の2つからなります。
前者を「ネットワークアドレス」とよび、
後者を「ホストアドレス」といいます。
住所でざっくり例えると「◯◯市にある(グループ)、△△マンション(ノード)」のような表現です。
先ほどの図に戻ります。↓
この図を最小のネットワーク(LAN全体)ごとに分割すると、、、
赤文字のようになります。(紫◯とオレンジ◯)
ということは、この図の中で「それぞれ分割したネットワークを示したアドレス」を表しているのはどれでしょう?(ヒント: 赤文字の上)
「192.168.0.0」と「172.16.0.0」ですね。
これらが「ネットワークアドレス」です。
それに続いて「ホストアドレス」ですが、先ほどの分割したネットワークごとのホストを表します。
またネットワークに分割した図に戻ります。↓
では、ネットワークアドレス「192.168.0.0」の中にある「ホストアドレス」はどれでしょう?(ヒント: 192.168.0.1 ~ 192.168.0.254)
正解は、、、、
こちらの4箇所。
ここではあまり気にしなくていいですが、デフォルトゲートウェイのルーターのIPアドレス(192.168.0.254)も当てはまることに注意。
ホストアドレスの範囲
上記のヒントでも書きましたが、ホストアドレスの範囲は、、、
今回の記事の例ですと、
「ネットワークアドレス」が「192.168.0.0」の場合、、、
紫◯内の「ホストアドレス」の範囲は、「192.168.0.1 ~ 192.168.0.254」で254個あります。
ネットワークアドレスの「192.168.0.0」は使えないの?と思うかもしれませんが、、、使えません。。。
なぜなら上記の解説の通り、、、192.168.0.0はネットワークアドレスだからです。
それを表現する値が必要なので、ホストアドレスとして扱うと重複しますし。
あと2進数に詳しい方は、気づいていると思いますが「192.168.0.255」も使われておりません。
これは「ブロードキャスト」通信のために使われるため、ホストアドレスとしては使えません。
ネットワーク内の全ホストに通信を行うためと覚えてください。
今回は以上。
次回は、「IPアドレスクラス」について解説していきます。
ネットワーク基礎学習③ ARP
ARPとは
なぜ ARPが必要か。
そもそもデータ通信を行うためには、以下の4つのアドレスが必要です。
ネットワーク内のIPアドレスは可変(住所で言うと引越可)なもので、 MACアドレスは不変(住所で言うとそこに住む人)であるため、データ送信先の場所と、その場所にいるものがデータを受け取って欲しい機器であることが保証されている必要があります。
よって、「IPアドレス」は最終的なデータの送り先を「MACアドレス」はどの機器に伝送するかを識別するために必要だということです。
ARPリクエスト・ARPリプライ・アドレス解決
宛先のMACアドレスを知るためには、まず「ブロードキャスト通信」でネットワーク内の全てのホストに「ARPリクエスト」を投げます。例えるなら、館内放送で「どこどこにお住まいの○○さんいますかー?」と全体に聞かれてる感じですね。
あまり詳しく説明しませんが、ARPリクエストのフレームの中身はこんな感じ↓
次に「ARPリプライ」ですが、、、、
もしネットワーク内に、 IPアドレスに対応したホストがあれば、そのホストは自分のMACアドレスを格納した「ARPリプライ」を「ユニキャスト」で返します。
ホストCのように無関係の場合は、ARPリクエストをそのまま破棄します。
フレームの中身は、こんな感じ↓↓
ブロードキャスト、ユニキャストの説明は以下の記事で解説してます。↓
上記のようにARPの一連の動作によってMACアドレスを認識することを「アドレス解決」といいます。
ちなみに、先ほど紹介した動作は、同じセグメント内での動作になります。
※インターネットを個々のネットワークに分割していった時の、一つ一つの「部分=ネットワーク」のことをセグメントと呼びます。
別セグメントのMACアドレスを知る
先に説明すると、ARPはセグメントごとに発生します。
例えば、ルーター(デフォルトゲートウェイ)を経由して、別のネットワーク(セグメント)にあるホストの MACアドレスを知りたい場合は以下のような動作になります。
セグメントAにない場合は、ルーター(デフォルトゲートウェイ)がルーター自身のMACアドレスをARPリプライで返します。
これによってホストAは、セグメントBにあるホストに送信したい場合は、ルーターにデータを送信すればよくなります。(通常はセグメント内に目的のホストがなければ、デフォルトゲートウェイにデータがいくようにルーティングされています。)
その後そのルーターが、「セグメントB」にARPリクエストを流し、宛先APアドレスから宛先のMACアドレスを調べます。
宛先のホストが見つかれば、セグメントAの時と同様に、ARPリプライをルーターに返します。
これによってルーターから目的のホストへデータを送信することができるようになりました。
このようにデータを送信する際に、経由するセグメントが増えれば増えるほど、セグメントごとにARPをすることになります。
ネットワーク基礎学習② MACアドレス
MACアドレスとは
コンピューターの「NIC」やネットワーク機器(ハブ、リピータ、ルータなど)の各ポートに対し、それぞれの製造時に重複なしに付与された番号 (アドレス)。「物理アドレス」「ハードウェアアドレス」とも呼ばれる。
フレームの送信元や宛先を識別するためにデータリンク層(レイヤ2)で利用されます。
フレームでMACアドレスを使うことにより、データ転送時に「この機器は、この機器に接続したいんだな」と理解することができます。
表記法
MACアドレスは、「48ビット」(6バイト)からなり、「16進数(1〜F)12桁」で「-」「:」「.」のいずれかで区切って表記される。
「-」「:」の場合は、2桁区切りで、
「○○-○○-○○-○○-○○-○○」「○○:○○:○○:○○:○○:○○」
「.」の場合は、4桁区切りです。
「○○○○.○○○○.○○○○」
ネットワーク基礎学習① 「パケット」「フレーム」
1. PDU
PDU(プロトコルデータユニット)とは、データ通信において、あるプロトコル(通信規約)が扱うひとまとまりのデータの送受信単位のこと。
「パケット」「フレーム」など、具体的な呼び名はプロトコルによって異なる。
2. フレーム
フレームとは、「データリンク層を流れるパケット」である。
現状、データリンク層と言えば「イーサネット」が主流なので、「イーサネットでやりとりされるデータの最小単位」となる。
フレームフォーマット(DIX仕様)
イーサネットで扱われるフレームは、TCP/IPで使用されているという理由から「DIX仕様が一般的」となっている。
l2ヘッダ + ペイロード + トレーラからなる。
フィールド
フレームを構成する一つ一つの要素を「フィールド」という。
l2ヘッダ
「宛先MACアドレス」「送信元MACアドレス」とそれぞれフィールドがあり、送信先&送信元のノードを識別するための番号」を割り当てられている。
MACアドレスに関しては以下の記事で解説↓↓
ryo10leo.hatenablog.com
「タイプ」とは、上位層のプロトコルがなんであるかを識別するための番号
プリアンブル
フレームの開始をノードに認識させるための特殊な信号。受信時に廃棄されるため、厳密にはフレームに含まない。
Chrome + ELB(ALB)の通信が遅すぎたので改善しました。
僕が作成したポートフォリオサイトについてなんですが、、、
最近までページ表示までの時間が遅すぎて困っていました。
「画像を圧縮」しても、「CSS」や「Javascript」を改修してもダメ。。。
一体どういうことなのでしょうか???(怒)
以下のツールを使ってサイトの「ページ表示速度」を測ってみます。
【これは便利】あなたのWebサイト表示のどこが遅いかを一発で調べるブックマークレット | 初代編集長ブログ―安田英久 | Web担当者Forum
ですよね...笑
原因は、「Webサーバーの接続受付(SSL)」らしい。
それを知って、ふと「HTTPS通信」を行うために「AWS(ELB,ALB)」を利用していたことを思い出しました。
おそらくAWSの「ロードバランサー」を改善することで、速度が改善されるだろうと考えました。
ということで、解決策を調べてみるとこんな記事が↓↓↓
参考にさせていただくと、ロードバランサーを設置する際に、利用している2つのサブネットに「インターネットゲートウェイ」(以下 IGW)を設定すれば解決できるとのこと。
実際にAWSダッシュボードから対象のサブネットを確認すると、、、
2つのサブネット中、1つだけIGWが設定されておりませんでした。
サブネット1↓
サブネット2↓
今回はサブネット2の方に、IGWを含めたルートテーブルを関連づけします。
関連付けの方法は今回割愛させていただきます。
設定後、再度Webサイトを表示して、読み込み速度を測ります。↓
読み込み速度は改善されたようです!
すごく褒められました!ありがとうございます!
EC2で構築したPostgreSQLデータベースを定期的にバックアップ。ローカルにもバックアップファイルをコピーする
今回やること
実際にEC2内で作成した構築環境↓
タイトルの通り定期的にバックアップファイルを作成して、ローカルにも同じ物をコピーしていきます。
今回やることを図で理解する
図のようなバックアップ作業を定期的に自動で行われるようにします。
自動バックアップの設定
1. EC2側の設定
EC2にログインして作業します。
バックアップファイルの保存用ディレクトリ作成
$ sudo mkdir -p /var/backup/ $ sudo chmod 777 /var/backup/
バックアップ用のディレクトリが作成されました。
バックアップ用シェルスクリプトの作成
PostgreSQLのDBをバックアップする「シェルスクリプト」を作成します。
#シェルスクリプトを保存するディレクトリの作成 $ sudo mkdir -p /var/backup_sh #実行する命令などを各種設定 $ sudo vi /var/backup_sh/pg_backup.sh #!/bin/bash # バックアップファイルを残しておく日数 PERIOD='+10' # 日付 DATE=`date '+%Y%m%d-%H%M%S'` # バックアップ先ディレクトリ SAVEPATH='/var/backup/' # 先頭文字 PREFIX='任意の文字' 例 'sample_app_backup' # 拡張子 EXT='.custom' # データーベース名 DBNAME='任意のDB名' 例 'sample_db' # バックアップ実行 pg_dump -Fc $DBNAME -f $SAVEPATH$PREFIX$DATE$EXT # 保存期間が過ぎたファイルの削除 find $SAVEPATH -type f -daystart -mtime $PERIOD -exec rm {} \;
シェルスクリプトのテスト
#権限付与 $ sudo chmod 755 /var/backup_sh/pg_backup.sh #シェルスクリプト実行 $ /var/backup_sh/pg_backup.sh
バックアップファイルが作成されているか確認。
$ ls /var/backup/ postgres-20200206-173203.custom
シェルスクリプトにより、バックアップが作成されました。
cronで定期的にバックアップをおこなう
「cron」コマンドを使うことで、指定した日時に任意の処理を実行できます。
cronを登録するには「crontab -e」コマンドを使います。「-u」オプションで実行するユーザーを指定します。
sudo crontab -e -u ユーザー名
一分おきにバックアップファイルが作成されているか、実行テストをしておきます。↓
*/1 * * * * /var/backup_sh/pg_backup.sh > /dev/null 2>&1
実行確認ができたら、「毎日4時11分にバックアップファイルが作成」されるように設定。↓
$ sudo crontab -e -u ユーザー名 11 4 * * * /var/backup_sh/pg_backup.sh > /dev/null 2>&1
2.ローカル側の設定
scpコマンドの説明
「scp」コマンドを使ってEC2のバックアップファイルをコピーします。
$ scp コピー元 コピー先
~/.ssh/configにSSH接続の設定をしている場合↓
~/.ssh/config Host sample_key_rsa Hostname xx.xxx.xx.xx Port 22 User hoge IdentityFile ~/.ssh/sample_key_rsa
この場合のscpコマンドの使い方は以下の通り↓
$ scp sample_key_rsa:~/test.txt ~/desktop
上記のコマンドの例でいうと、「EC2のtext.txtファイルをローカルのデスクトップへコピー」しています。
バックアップをローカルに定期的にコピーする設定
バックアップが取得できるかテスト
local #バックアップを保存するディレクトリ作成 $mkdir -p ~/myapp_backup/myapp_db #EC2のバックアップファイルのコピー $ scp sample_key_rsa:/var/backup/postgres-20200206-173203.custom ~/myapp_backup/myapp_db #確認 $ls ~/myapp_backup/myapp_db
ローカルでバックアップファイルを取得するシェルスクリプトの作成。
$ mkdir -p ~/myapp_backup/myapp_backup_sh/ $sudo vi ~/myapp_backup/myapp_backup_sh/backup.sh #!/bin/bash # バックアップファイルを残しておく日数 PERIOD='+10' # バックアップ先ディレクトリ SAVEPATH='/Users/user_name/myapp_backup/myapp_db/' # 保存期間が過ぎたローカルファイルの削除 find $SAVEPATH -type f -mtime $PERIOD -exec rm {} \; #最新のバックファイルの位置を取得 #EC2のバックアップファイル作成日時から、2時間以内のファイルを取得します。 LATESTFILE=`ssh sample_key_rsa find /var/backup/ -type f -mmin -120` #EC2の最新のバックアップファイルをローカルにコピー scp sample_key_rsa:$LATESTFILE $SAVEPATH
作成したら、実行権限をつけます。
$ sudo chomod 755 ~/myapp_backup/myapp_backup_sh/backup.sh
定期実行する設定
$ sudo crontab -e -u ユーザー名
EC2でバックアップファイルが作成された1時間後に、ローカルへコピーするようにします↓
11 5 * * * Users/user_name/myapp_backup/myapp_backup_sh/backup.sh > /dev/null 2>&1
これで設定が完了しました!