ディスクのパーティション
ディスクのパーティション
fdisk コマンドで分割されたパーティションの情報を調べたり、パーティションを作成、削除したりできる。
パーティションを分割する理由
パーティションを分割するのは以下の理由がある。
システムとデータのバックアップ頻度を差別化する
障害発生時の影響範囲を狭める
ファイルアクセスの速度向上
$ fdisk [ オプション ] [ デバイスファイル ] ディスクの構造を表示する ディスクをパーティション分割する オプション -l デバイスのパーティション情報を表示する
パーティションの分割
コンピュータのハードディスクとして主に、SATA と SAS のインターフェース ( 周辺機器を接続するためのハードウェア ) 規格が広く使われる。ハードディスクは、1つのパーティションとして使うか、2~4までのパーティションに分割できる。
各パーティションは基本パーティションまたは拡張パーティションとなる。拡張パーティションは1台のハードディスクに1つだけ作ることができ、拡張パーティションの中には、さらに論理パーティションを複数作ることができる。
パーティション分割の例
基本パーティションを4つ
論理パーティションは、基本パーティションと同様にファイルシステムを作成して、ファイルやディレクトリを保管できる。拡張パーティションを格納する役割となっており、ファイルシステムを作成することはできない。
パーティションの最大数
Linuxでは4つ以上のパーティションは必要となるケースが多いので、拡張パーティション1つと他の3つを基本パーティションという構成で使う場合が多くなる。また、拡張されたハードディスクは基本パーティション1つや、LVM ( Logical Volume Managemer ) 機能を使って、複数のハードディスクを結合した1つのハードディスクとして大きく使うことも多い。
ハードディスクを増設して利用可能にする
Linuxマシンにハードディスクを増設して利用可能な状態にする。新しいハードディスクには、データ用の領域とスワップ領域 ( Linux がメモリ代わりにプログラムを置いておく領域 ) の2つを作成する。
利用可能にするには、 fdisk コマンドでパーティションを2つに分割する。パーティションは分割した後からサイズ等の変更が難しいので、予めどのようにパーティションを分割するのか計画してから行う。また、既に使用しているハードディスクのパーティションを操作すると、大切なデータが消えてしまうので、細心の注意を払う。パーティションを分割する作業をしている時に、指定サイズや分割すうの設定ミスに気付いたら、パーティションの変更を保存しないで直ちに終了する。
Linuxのファイル管理
ファイルシステム
ファイルシステムとは、ファイル名・更新日付などの属性データ・ファイルデータ本体を効率よくするための仕組みである。ファイルシステムにはいくつかの種類があり、利用するファイルシステムにより、ファイルをアクセスした時に得られる効率や安全性が変わる。ファイルの概要を掴むと、今までに出てきたコマンドの理解度も上がる。
パーティションとは
ハードディスクと利用するために、ハードディスクを区切った単位である。ディスクの内部を複数のパーティション( 領域 ) に区切る作業が必要になる。パーティションを分割する作業をパーティショニングと呼ぶ。
Linuxのディレクトリ構造
ファイル単位でデータを管理すると、段々とファイル数が多くなり、ファイル名の管理が難しくなる。ファイル管理の効率化を図るために、多くのファイルシステムと同様にext3ファイルシステムでも、ディレクトリという入れ物が用意されている。
ディレクトリは複数のファイルをまとめて管理できる上に、他のディレクトリもまとめられている。ディレクトリを使うと利用目的ごとにファイルをまとめたり、幾つかのディレクトリをディレクトリに入れて管理できる。Linuxを始めとするディレクトリ構造は/ディレクトリが大元になるツリー状になっている。
/ディレクトリ
大元になるディレクトリで "/" をルートと読み、/デイレクトりをルートディレクトリと読む。/ディレクトリにディレクトリやファイルが入る。
マウント
ディスク( ハードディスクを始めとして、DVD-ROMドライブやRAMドライブなど ) を利用するためには1つ目を/ディレクトリに必ずマウントする。複数のディスクを利用する場合は2つ目以降のディスクを既にマウントされているディスクの中のディレクトリにマウントする。( 既に中身があるディレクトリにディスクをマウントすると、マウントされたディレクトリが/ディレクトリであっても中身は置き換わり、今まであったディレクトリの中身は読み書きできなくなる。 )
FHS ( Filesystem Hierarchy Standard )
ファイルには必ずディレクトリに入るので、必ず/ディレクトリから始まる記述ができる。Linuxシステムには FHSと呼ばれる規格に基づいてディレクトリの構成が定められている。一般ユーザー用プログラムはbinディレクトリ、システム管理用プログラムはsbinディレクトリ、設定ファイルはetcディレクトリ、複数のプログラムで共通に使われるライブラリはlibディレクトリ、可変的なデータ ( ログ・データベース・ウェブサイトなど ) は varディレクトリという緩やかな決まりがある。 /usrディレクトリの下にも同じ構成のディレクトリがあり、ユーザが独自にインストールするファイルは/usr/localディレクトリの下に置く場合もある。
上記ディレクトリの他、起動関連のファイルが格納されるbootディレクトリ、デバイスファイルが格納されるdevディレクトリ、ユーザの作業領域が格納されているhomeディレクトリ 、一時ファイルが格納されるtmpディレクトリなどが FHS で定められているディレクトリとして挙げられる。
ファイルシステムの作成方法
ハードディスクを利用するには以下ので手順で作成して利用できる。
プロセス管理 2 シグナル プロセス間通信
シグナル
Linuxにはプロセスにシグナルというイベントを送信して、プロセスを制御する機能がある。シグナルには、シグナル番号及びにシグナル名が割り当てられており、代表的なものに以下のシグナルがある。
代表的なシグナル
シグナル番号 | シグナル名 | 意味 |
---|---|---|
1 | HUP | ハングアップ ( Hang Up ) |
2 | INT | 割り込み ( Interrupt ) |
3 | QUIT | 強制停止 ( Quit ) コアダンプ生成 |
9 | KILL | 強制終了 ( Kill ) |
15 | TERM | 終了 ( Terminate ) kill コマンドのデフォルトシグナル |
ユーザがプロセスにシグナルを送信する方法は3つ
シェルに割り当てられたキーの入力 ( ^C, ^Z, ^¥ など )
kill コマンド ( kill -HUP PID, kill -SIGINT PID, kill -9 PID など )
プログラムで kill() 関数で呼ぶ
例えば、実行中のコマンドを停止するために^Cを押すと、シェルは^Cを解釈して、実行中のプロセスに SIGINT ( Interrupt Signal: シグナル番号2 ) を送信し、受け取ったプロセスは終了する。プログラムによっては、SIGINT を無視するなど、受け取ったシグナルによって挙動を制御するように作られたものもある。
実行例 無限ループするシェルスクリプトを作成する
$ vi loop #!/bin/bash until a == 1 do sleep 3600 done :w ^Z $ chmod 755 loop ( シェルスクリプトに実行権限を与える ) $ ./loop ( 処理を無限に繰り返すため、フォアグランドで実行すると、シェルプロンプトが戻ってこない ) ^C ( CTRL + C で INT ( Interupt Singnal ) が送信され、loop を終了する )
上で作成したシェルスクリプト "loop" にtrap処理を挿入する
$ vi loop #!/bin/bash trap 'echo "CTRL+C is pressed."' 2 ( trap にて SIGINT (2) を受信した時に中断せずに別の処理を実行する ) until a == 1 do sleep 3600 done :w Z $ ./loop ^CCTRL+C is pressed. ( CTRL + C を押してもプロンプトが戻ってこない ) ^Z ( CTRL + Z でサスペンドして kill コマンドでデフォルトの TERM シグナル ( Ternminate Signal:シグナル番号15 ) を送信する ) $ fg [1] - continued ./loop $ kill %% [1] + terminated ./loop $ fg fg: no current job
プロセスの終了
$ sleep 3600 & [1] 28992 $ sleep 3601 & [2] 28993 $ ps l UID PID PPID CPU PRI NI VSZ RSS WCHAN STAT TT TIME COMMAND 501 28992 24449 0 31 5 4268176 548 - SN s006 0:00.00 sleep 3600 501 28993 24449 0 31 5 4269200 560 - SN s006 0:00.00 sleep 3601 $ kill -9 28992 28993 または $ kill -STGKILL 28992 28993 [2] + killed sleep 3601 [1] + killed sleep 3600
top コマンドと pstree コマンド
ps コマンドの他にプロセスの状態を表示するコマンドとして、 top コマンドがある。 top コマンドは実行中のプロセスの状態をダイナミックに表示する。 CPU やメモリの使用などでソートしたり、top から指定したプロセスにシグナルを送信することもできる。
また、プロセスの親子関係をツリー表示できる pstree というコマンドがある。
プロセス間通信
Linux 上である処理を完了するのに、一つのプロセスで完結する場合もあるが、複数のプロセスがコミュニケーションを取りながら同期したり、動作を変更して達成することが多々ある、これをプロセス間通信と呼ぶ。
先ほど学習したパイプやシグナルも Linux の代表的なプロセス間通信の手法である。その他に下記の手法がある。
System V IPC ( Inter Process Communication )
ソケット それぞれ以下の特徴がある
パイプ 1つのプロセスの標準入出力を繋ぎ替える。パイプ ( | ) の左側にコマンド ( プロセス ) の標準出力を、右側のコマンド ( プロセス ) の標準入力を繋ぐことで通信を実現する。
シグナル 特定のシグナルの受診を持って特定の処理を開始するなど、同期を実現する。
共有メモリ ( shared memory ) 特定のメモリ領域を複数のプロセスで共有することでメッセージの受け渡し等が行える。
セマフォ ( semaphore ) 資源のロックを行い、複数のプロセス間で同時に書き起こしたりしないよう排他的処理を実現する。
メッセージキュー ( message queue ) キューにメッセージを格納しておき、複数のプロセス間での非同期の通信を実現する。
ソケット ネットワーク経由のホスト間のプロセスでの通信を実現する。
プロセス管理 1 プロセスとは
プロセスとは
Linuxでは実行中のプログラム ( アプリケーション ) を管理する単位をプロセスと言う。コマンドインタープリターであるシェル自身もプロセスである。
ユーザがシェルからコマンドを実行すると、シェルは子プロセスとして自分の分身を作る。( これを fork と言う ) 次にシェルは子プロセスにコマンドの実行 ( これを exec と言う ) を任せ、子プロセスの終了を待つ。子プロセスはコマンドの実行を終えると親プロセスに終了を伝え、消滅する。親プロセスは子プロセスの終了を受け取り、シェルプロンプトを表示し、ユーザの次のコマンドに備える。
スケジューリング
Linux は1つの CPU でも複数のユーザが同時にログインでき、複数のプロセスを同時に実行できるマルチユーザ、マルチタスクのOSである。しかし、厳密には瞬間瞬間ではプロセスは1つしか実行されず、それぞれのプロセスの実行順序は Linux のスケジューラによって管理されている。
各プロセスは Run Queue と呼ばれる待ち行列で待機し、自分が CPU を利用できる順番を待つ。自分の順番が来ると CPU を使うことができ、一定時間 ( タイムスライス ) だけ処理を前に進める。一定の時間が超過すると、またキューで次の CPU 使用機会を待つことになる。このようなスケジューリングをラウンドロビン方式と呼ぶが、そのほかに FIFO方式 ( First In First Out ) もある。
各プロセスはキューで待機するが、プロセスによっては優先度は高いものの、それほど高くないものもある。そのパラメータの1つに Nice値がある。 Nice値は、-20から19までの値を取り、-20が最も実行優先度が高く、19が最も低くなっている。nice コマンドにより実行優先度をプロセスに指定したり、実行中のプロセスについては、renice コマンドにより優先度を変更することができる。
フォアグランドジョブとバックグランドジョブ
プロセスとよく似た管理単位としてはジョブがある。Linux が実行中のプログラムを管理する単位であるプロセスに対して、ジョブはシェルが管理するプログラムの単位である。シェルからコマンドを実行する場合、ジブをフォアグランドジョブとバックグランドジョブに切り替える機能がある。
例えば、処理に時間のかかるジョブを実行した時に、何もせずジョブの完了を待つのではなく、その間に別の作業をしたり、進捗を確認したい場合がある。そんな時にジョブをバックグラウンドで実行すれば、同じ端末から別のコマンドを実行することができる。
他にも、プログラムの編集作業を中断して、プログラムを試行し、また編集作業に戻る場合などに有効である。なぜなら、編集を中断した場合、編集の undo や redo が中断後でも継続できるからである。
コマンドをバックグランドで起動するには、コマンドの後ろに & ( アンパササンド ) を付けて実行する。
$ my_heavy_script &
実行中のコマンドをバックグランドに切り替えるには、^Z ( CTRL + Z ) でサスペンドしてから bg コマンドでバックグランドで実行を継続させる。 fg コマンドでフォアグランドに戻すこともできる。ジョブの状態は jobs コマンドで確認することができる。
$ my_heavy_script ^Z [1]+ Stopped my_heavy_script $ jobs [1]+ Stopped my_heavy_script $ bg [1]+ my_heavy_script & & jobs [1]+ Runnning my_heavy_script
実行例 複数のジョブを実行して切り替えを試してみる。
$ sleep 3600& ( 1時間スリープするプロセス ) $ sleep 3601& $ sleep 3602& $ jobs [1] running sleep 3600 [2] - running sleep 3601 [3] + running sleep 3602 $ %1 ( [1]のジョブをフォアグランドジョブにする ) [1] running sleep 3600 ^Z ( CTRL + Z でフォアグランドジョブをサスペンドする ) zsh: suspended sleep 3600 $ % jobs [1] + suspended sleep 3600 [2] running sleep 3601 [3] - running sleep 3602 $ %- ( - のついたジョブをフォアグランドジョブにする ) [3] - running sleep 3602 ^C ( フォグランドにあるジョブを停止する ) $ %% ( + のついたジョブをフォグランドジョブにする ) [1] continued sleep 3600 ^C ( フォグランドにあるジョブを停止する ) $ fg ( この場合の fg は %+,%-,%% と同じ動作になる ) [2] + running sleep 3601 ^C ( フォグランドにあるジョブを停止する ) $ jobs $ ( 実行中のプロセスは無いので何も表示されない )
プロセスID
Linux のプロセスには一意の ID であるプロセスID ( PID ) フが付与される。自身の PID は $$ で取得できる。
$ echo $$ 15081
オプション
ps [ オプション ] 現在実行されているプロセスのスナップショットを表示する オプション -A 全てのプロセスを選択する -e と等しい e コマンドの後に環境を表示する l, -l 長いフォーマット。 - ( ダッシュ ) のあるなしで表示は異なる。 w, -w 出力幅を広げる、このオプションを2つ指定すると、幅の制限がなくなる。
ps l UID PID PPID CPU PRI NI VSZ RSS WCHAN STAT TT TIME COMMAND 501 352 348 0 31 0 4334328 952 - S+ s000 0:00.18 -zsh
ps に l オプションを指定すると PID だけでなく PPID ( 親プロセスのID ) も表示される。
ネットワークの設定 2 DNSを使う設定 FQDN ポート番号
DNS を使う設定
名前解決の機能を使うには /etc/nsswitch.confファイルで何を使うか指定する。ファイルを使う指定があれば、/etc/hostsファイルを参照し、DNS ( Domain Name System : ドメイン・ネーム・システム ) を使う指定があれば、 /etc/resolv.confファイルを見て DNS サーバを使う。
/etc/nsswitch.confファイルでは、hosts: の項目でファイル ( file ) や DNS ( dns ) を指定する。hosts: の項目ファイルやDNSの優先順位は記述された順番となる。
hosts: files dns
/etc/resolve.conf ファイルにはnameserverDNSサーバのアドレスが登録されている。デフォルトでこのファイルは NetWorkManager 経由で管理されている。
cat /etc/resolve.conf nameserver 192.168.0.1
名前
インターネットでは、 IP アドレスだけを使うと人間には分かりづらいので、 FQDN ( Fully Qualifild Domain Name ) と呼ばれる名前を使う。 IP アドレスと名前の対応は dig コマンドや nslookup コマンドで調べられる。
$ nslookup ターゲット ターゲットの名前と IP アドレスを返す
ポート番号
TCP/IP で通信をする場合は、 IP アドレスに加えてサービスごとにポート番号を使う。ポート番号がどのサービスに対応するかは規格として取り決められており、一般的なサービスはサービス番号との対応が/etc/services ファイルに書かれている。
ポート番号と対応サービス
項目 | ポート番号範囲 | 内容 |
---|---|---|
WELL KNOWN PORT NUMBERS | 0~1023 | 一般的なポート番号 |
REGISTERED PORT NUMBERS | 1024~49151 | 登録済みポート番号 |
DYNAMIC AND/OR PRIVATE PORTS | 49152~65535 | 自由に利用できるポート番号 |
サーバで使われる主なポート番号と対応するサービス
ポート番号 | サービス名 |
---|---|
20 | FTP ( データ ) |
21 | FTP ( 制御 ) |
22 | SSH |
23 | Telnet |
25 | SMTP |
53 | DNS |
80 | HTTP |
443 | HTTPS |
サービスの確認
サーバではホームページを見せるなどのサービスを提供するプログラムを動かす。Linux のサービスやネットワークの状況を表示する SS コマンド は、提供されているサービスを調べて表示することができる。
ネットワークセキュリティの設定
ネットワークセキュリティのために TCP ラッパー ( TCP Wrapper ) という機能が提供されている。 TCP ラッパーでセキュリティを強化する場合は、サービスが TCP ラッパー機能を提供するライブラリ ( プログラム ) を利用している必要がある。アクセスを制限する /tec/hosts.deny ファイルとアクセスを許可する/etc/hosts.allows ファイルを要する必要がある。
2つの制御ファイルはサービスを提供するプログラムのリストに対してコロン ( : ) で区切り、対応するネットワークや IP アドレス、ホスト名、ドメイン名などのクライアントびリストをか書き、ファイルによって許可あるいは拒否をする。 クライアントのリストの後には : で区切り、制限に引っかかる場合に実行するシェルスクリプトを書ける。全てを表すときはリストの変わりにALLと記述する。
制御ファイルの例
/etc/hosts.sllow sshd:192.168.1.60 /etc/hosts.deny ALL:ALL
2つのファイルに制御を記述して初めて設定が有効になる。 /etc/hosts.denyファイルで全てのアクセスを不可にしてから/etc/hosts.allow ファイルで必要なサービスを開放すると、安全な設定となる。
ネットワークの設定 1 ネットワークインターフェース
ネットワークの設定
ネットワークインターフェース
ネットワークへアクセスするためにネットワークインターフェースが必要である。物理的なネットワークインターフェースとして、ネットワークインターフェースカード ( NIC ) がある。現在は多くの場合、ネットワークインターフェースがコントロールチップの中に統合されている。プログラムが内部的に使う仮想のネットワークインターフェースとしてループバックインターフェースがある。
IP アドレスを確認
IP アドレスの確認は ip コマンドの他、 NetworkManager のnmcli,mmtui コマンドでも行える。また、従来から ifconfig コマンドでも確認できる。
$ ip a [address] [ インターフェース ] ネットワークインターフェースに設定された IP アドレスとサブネットマスクを表示する $ nmcli [ インターフェース ] コマンドラインでネットワークの設定ができるインターフェイスである。オプション無しで実行すると、現在の設定を表示する。 $ nmtui 会話型でネットワークの設定ができるインターフェイスである。
IP アドレスの設定ファイル
RedHat Linux系のディストリビューションはIP アドレスの設定を2つの設定ファイルに記述しておき、ブート時にはそれらの設定ファイルにより設定される。
/etc/sysconfig/network-scripts/ifcg-XXX設定ファイルはXXXインターフェースの IP アドレスとサブネットマスクなど記述する。XXXはループバックインターフェースの場合はlo,ネットワークインターフェースカードの場合はenX0Y,enX1Y...とデバイスの種類とスロット位置により番号が振られる。
/etc/sysconfig/network-scripts/ifcg-XXX設定ファイルの主な内容
ifcfg設定ファイルの項目
項目 | 内容 |
---|---|
ONBBOT | 起動時にアドレスを自動設定する( yes ) か設定しない ( no ) |
DEVICE | ネットワークインターフェース |
HWADDR | MACアドレス |
BOOTPROTO 以降の設定を利用 ( static ) か自動取得 ( dhcp )
固定アドレス ( static ) を設定する場合の設定項目
項目 | 内容 |
---|---|
IPADDR | IP アドレス |
NETMASK | サブネットマスク |
NETWORK | ネットワーク |
起動時にアドレスを自動設定するには、 DHNP 機能が提供された環境が必要である。 /etc/sysconfig/network設定ファイルはデータが他のネットワークへ転送されるゲートウェイのアドレスとホストを記述する。
/etc/sysconfig/network設定ファイルの主な内容
ネットワークの項目
項目 | 内容 |
---|---|
NETWORKING | ネットワークを有効にする ( yes ) か無効にする ( no ) |
HOSTNAME | ホスト名 |
GATEWAY | ゲートウェイアドレス |
MAC アドレスはハードウェアに設定されているユニークな番号であり、正しい MAC アドレスが設定されていない場合は通信することができなくなるため、自動的に認識された番号を書き換えないようにする。ブロードキャストは一体多で通信をする場合に使われるアドレスで、ホスト部のビットが全部1のアドレスです。
インターフェースの設定
ネットワークのインターフェースは設定ファイルを書き換えて、systemctlコマンドに restart オプションを付けて再起動することで変更できる。
###ルーティング
ネットワークの状況を表示するための ip route コマンドや ss コマンドがあり、これらのコマンドでデータが流れる方向 ( ルーティング ) を調べることができる。
$ ip route [ オプション ] $ ss
SSのオプション
-V バージョン情報 -a 全てのソケットを表示 -n サービス名を変換せずに表示 -r ホスト名を名前解決 -p ソケットを使用しているプロセスIDを表示 -s 集約したソケット情報 -4 IPv4 のソケットのみ表示する。他のオプションと併用 -6 IPv6 のソケットのみ表示する。他のオプションと併用 -t TCP のソケットのみ表示 -u UDP のソケットのみ表示 -e 詳細なソケット情報を表示
ルーティングの変更
ルーティングの変更を行うには、ip route コマンドを使用する。 ip route コマンドの実行には管理者権限が必要である。
$ op [ オプション ] r [ pute ] { コマンド | help } または $ route ( 非推奨 )
$ ip route { add | del } ターゲット/サブネット via ゲートウェイアドレス dev インターフェース
$ route add [ -net | -host ] ターゲット [ netmask サブネットマスク ] [ インタフェース ]
route コマンドでは add を指定するとルーティングに経路を追加する。ターゲットには -net を指定した場合にはネットワークアドレスを、 -host を指定した場合には、ホストアドレスを宛先として設定する。
サブネットマスクの指定を省略した場合は、ターゲットに設定したアドレスから判別されたクラスに該当するマスク値が設定される。インタフェースを省略するとカーネルが自動的に最適なデバイスを設定する。
ip route コマンドでは route コマンドと違って、 -net, -host を指定できない。代わりに CIDR 表記で指定する。ターゲット/32だと -host と同様に指定でき、ターゲット/xx ( 32以外 ) だと -net と同様にネットワークを指定できる。
$ ip route add 192.168.2.0/24 via 192.168.1.1 dev enp0s3 ( 経路を追加 )
del を指定するとルーティングから経路を削除する。
$ ip route del ターゲット/サブネット via ゲートウェイアドレス
ネットワークの設定と管理 1 TCP/IP、IPアドレス
TCP/IPとは
コンピュータ間をケーブルや無線機能で接続したシステムをネットワークと言う。Linux を OS に利用したコンピュータのほとんどはネットワークに接続して利用する。物理的なネットワークはコンピュータ間をツイストペアケーブルで繋ぐ。
最近では有線のネットワークに加えて、無線機能を使って接続したり、有線と無線の混在したネットワークもある。
※ ツイストペアケーブル
撚り対線(よりついせん)とも言い、電線を2本対で撚り合わせたケーブルである。単なる平行線よりノイズの影響を受けにくい。TPケーブルと言う場合もある。古くからある技術であり電話線などに用いられてきたが、近年ではイーサネットの特にLANでの配線に使われる例がよく知られている。
ローカルエリアネットワークとワイドエリアネットワーク
学校や自宅などの閉じられた複数のコンピュータを相互接続したネットワークをローカルエリアネットワーク ( LAN ) と呼ぶ。離れた場所にある LAN と LAN と結んだネットワークのことをワイドネットワーク ( WAN ) と呼ぶ。
LAN はコンピュータ同士を LAN で結び、 WAN は LAN 同士を通信回線で結ぶ。
IP とは
ネットワークで繋がったコンピュータ動詞の間では、決まった手順 ( プロトコル ) に従ってデータを送受信している。今日一般的に使われているイーサネット規格のネットワークはプロトコルとして TCP/IP を利用している。 TCP/IP の IP ( Internet Protocol : インターネット プロトコル ) は手順の基本である。IP は送り先とデータからなるパケットを送るだけの簡単な仕組みである。 ping コマンドでデータが送信され、データを受けた機器 ( サーバやルータなど ) から確認メッセージが返って来るかを確認できる。
ping ターゲット ターゲット ( ホスト名や IP アドレス ) にデータを送り、返答が戻るまでの、時間を表示する。 -c オプションを付けて、 ping を発行する回数を指定することもできる。
実行例 ローカルなマシンの IP アドレスの確認
$ ping 192.168.1.1 ( 192.168.1.1 へ ping を送信する ) PING 192.168.1.1 (192.168.1.1): 56 data bytes ... ( control + c で終了する )
コンピュータによってはセキュリティ対策のため、 ping コマンドに応答しない場合がある。
TCP と UDP とは
TCP ( Transmission Control Protocol ) は IP ( Internet Protocolo ) の仕組みを使ってデータを送る手順である。IP はインターネットにおいて情報の伝達を行う手順 ( プロトコル ) である。
TCP ではデータのまとまりを1つ受け取ると、すぐにデータの破損などのエラーを確認し、間違っている場合はデータの再送を依頼する。
UDP ( user Datagram Protocol ) はエラー確認やデータの再送制御は行わないが ( 必要であれば上位のアプリケ−ションでそのような処理を実装する必要がある ) 、その分データを高速に送ることができるので、小さなデータや映像のような多少欠損しても問題なく、信頼性よりも速度を求められる通信に適している。
IP アドレス
TCP/IP でデータを送受信するには、発送元と発送先の場所を表すアドレスが必要である。インラーネットでは IPv4 ( Internet Protocolo version 4 ) と IPv6 という2つのプロトコルが使われている。 IPv4 では4バイト ( 16進数で8桁 ) で表せるアドレスで、4バイトのアドレスは1バイト ( 16進数で2桁 ) ごとで10進数に変換してつないで表記する。プライベートな IP アドレスを除いた IP アドレスをグローバルな IP アドレスと言う。グローバルな IP アドレスは NIC ( 日本ではJPNIC ) に管理されており、許可なく利用 ( 設定 ) できない。
IP アドレスのクラス
IPv4 で使われる IP アドレスはネットワークアドレスとホストアドレスを繋げた形となる。ネットワークアドレスはサブネットマスクのビットが立っている部分で、ホストアドレスはサブネットマスクのビットが立っていない部分である。
IP アドレスは学校や会社などの組織に対して割り当てられるので、割り当てられた組織で使われる範囲は連続したアドレスである。ネットワークアドレスの長さによりAからCのクラスがあり、クラスDやクラスEなどの特殊なクラスも予約されている ( 現状では、AからCのクラスが実用される )。
ホストアドレスにおいて、ホスト部の全てのビットが0のアドレスはそのネットワーク自身のアドレスを示し、ホスト部の全てのビットが1のアドレスは、そのネットワーク内の全てのホストに届くブロードキャストアドレスという特殊なアドレスを示す。
プライベート IP アドレス
ローカルなネットワークで自由に利用可能な IP アドレスが用意されており、プライベート IP アドレスと呼ぶ。
サブネットマスク
IP アドレスのうち、ネットワークアドレスとホストアドレスを識別するための数値をサブネットマスクと言う。サブネットマスクは通信先ホストが同一ネットワークにいるかいないかの判断に使われる。ネットワーク ( IP アドレスの集まり ) はサブネットマスクを変える事で、複数のネットワークに分けて、効率的に IP アドレスを利用できる。
CIDR ( サイダー ) 表記
最近よく使用されるようになったクラス分けをしない CIDR ( Classless Inter-Domain Routing ) 表記について述べる。
IP アドレスのネットワーク部とホスト部の境目を / ( スラッシュ ) の後に続くビット数で指定する方法である。ます、表記の例を3つ示す。
IP アドレスを先頭から8ビットをネットワーク部として、残りの24ビットをホスト部とした設定である。クラスAと同じ扱いである。
- IP アドレス: 127.0.0.1
- ネットマスク: 255.0.0.0
- ネットワーク: 127.0.0.0
- ブロードキャスト: 123.255.255.255
アドレスの数: 16,777,216個
192.168.0.1/24
IP アドレスの先頭から24ビットをネットワーク部として、残りの8ビットをホスト部とした設定である。クラスCと同じあるかである。
- IP アドレス: 192.168.0.1
- ネットマスク: 255.255.255.0
- ネットワーク: 192.168.0.0
- ブロードキャスト: 192.168.0.255
アドレスの数: 256個
192.168.0.1/28
Ip アドレスから28ビットをネットワーク部として、残りの4ビットをホスト部とした設定である。クラスCのサブセット扱いとなる。
- IP アドレス: 192.168.0.1
- ネットマスク: 255.255.255.240
- ネットワーク: 192.168.0.0
- ブロードキャスト: 192.168.0.15
- アドレスの数: 16個
経路の確認
LAN と LAN をつなげる場合、もしくは LAN と WAN をつなげる場合はゲートウェイ ( ルーター ) が間に接続されている。ゲートウェイはネットワークのデータを接続された隣のネットワークへ転送する。
インターネットは多くのネットワークが繋がっていて構成されており、いくつものゲートウェイを通ってデータが送受信される。自分が利用しているコンピュータから通信先のコンピュータまでに仲介する複数のゲートウェイを調べるには tranceroute コマンドと tranxepath コマンドがある。
$ traceroute ターゲット $ tracepath ターゲット
ターゲットの途中のゲートウェイへデータを送り、ゲートウェイから返答が戻ってくる時間を表示する。
実行例 traceroute コマンドでゲートウェイを確認
$ traceroute lpi.jp traceroute to lpi.jp (3.112.116.66), 64 hops max, 52 byte packets ...
ゲートウェイによってはセキュリティ対策のため、コマンドに応答しない場合がある。