LDAPとは
わからない用語がふと出てきたので、調べた。
LDAPとは
Lightweight Directory Access Protocol
TCP/IP上で動作するインターネット標準の、ディレクトリサービスへアクセスするためのプロトコル
WebブラウザなどのLDAPクライアントから、直接、ディレクトリサービスを検索・参照することができる
ディレクトリサービスとは
LANなどのコンピュータネットワーク上にあるユーザ情報、接続されているプリンターなどの資源を記憶し、検索しやすいようにまとめたもの。
ディレクトリ構造について
ディレクトリは基本単位であるエントリをツリー上に配置して構成する
ディレクトリは複数のオブジェクトについての情報を格納する
LDAPのエントリはオブジェクトを表現する属性情報の集合で、複数のオブジェクトを粒度に合わせてツリー上に整理する
オブジェクトに該当するものは人物やアカウント・プリンタ等の資源
ディレクトリデータベースについて
DIT Directory Information Tree
エントリの階層構造を表したもの。ディレクトリ情報ツリー。
DIB Directory Information Base
それを格納したデータベース。ディレクトリ情報ベース。
エントリとは
オブジェクトを格納するデータ構造
エントリは属性の集合であり、属性は属性名と内容の組で、一つの属性は複数の値を持つことがある
エントリはRDBではレコードに相当する
エントリの構造
各エントリが何を表現しようとしているかを決めるのが オブジェクトクラス (objectClass) という属性
エントリが何のオブジェクトクラスを持っているかによって、そのエントリが持てる属性が決まる
複数のエントリが同一の親エントリ配下にいたとしても、兄弟関係にあるエントリ間で保持可能な属性が異なる場合があるというのが、RDBのレコードと決定的に違う特徴の一つ
ディレクトリサービスを利用する
プログラムでは処理対象とするエントリを特定する必要がある
データ形式
LDIF LDAP Data Interchange Format
このファイル(テキストファイル)でやりとりをする
dn: <識別名> <属性記述子>: <属性値> <属性記述子>: <属性値> <空行> ← エントリの区切り dn: <識別名>
エントリの識別
RDN Relative Distinguished Name
親を基準とした位置を示す名前をRDN
DIT上の各エントリは親エントリから見た際に一意に識別可能な名前を付けることで、親エントリを基準とした位置が確定できる
通常はエントリ自身のいずれかの属性名をRDNとする
DN Distinguished Name
該当するエントリを一意に特定するための手段
そのオブジェクトを表すエントリおよびその上位エントリのRDNの列として定義されたもの
DNの書き方
複数のRDNをカンマ記号でつなぎ合わせて記述したもので、上位のRDNほど右側に位置する
検索について
LDAPではDITのエントリを検索するためにフィルタという構文(syntax)を利用する
RDBでフィルタは、SELECT文のWHERE句に相当する
動作について
LDAPサーバはDITを公開し、TCP/IP 経由でクライアントからのリクエストを受け付け、クライアントにその結果を返すLDAPサーバがクライアントからの接続を待ち受けるポート番号として、389(非 over SSL/TLS あるいは STARTTLS)と636(over SSL/TLS)が使用される
RDBとの違い
用途
LDAPは、検索性能重視頻繁な更新には向かない。
RDBは、検索だけでなく頻繁な更新も重視する
構造
LDAPはツリー構造で、RDBはテーブル構造
LDAPは、ディレクトリによるグルーピングを基礎とした構成となるため、管理の委任がしやすい
目的の情報がグルーピングされたディレクトリだけを指定して検索をするため、検索自体のパフォーマンスが有利
その他
リレーショナルデータベースでは、テキストベースのデータのほかバイナリベースのデータも同様に扱うが、LDAPでは主にテキストベースのデータを扱うため、処理の負荷が少なくパフォーマンスが向上する傾向にある
LDAPはディレクトリ検索のためのプロトコルとして、氏名や電話番号、メールアドレスといった基本的な属性が最初から定義されているため、リレーショナルデータベースのように自分で定義する必要がない。
apacheの設定ファイルについて
あとで…を連発したうちの一つ、apacheの設定ファイルについて調べた。
うーん長いなw
というわけで、そもそもから。
apacheとは
フリーのWebサーバソフトウェア
Webサーバ全体の環境設定(Section 1: Global Environment)
ServerRoot "/etc/httpd"
Web サーバのルートになるディレクトリで、インストールした場所のパス。基本変更しない
ServerTokens Prod
エラーメッセージ出力時等のサーバ情報を制限。
下にいくにつれ情報が増える。
値 | 表示内容 | 例 |
---|---|---|
Prod | サーバ | Server: Apache |
Major | +メジャーバージョン | Server: Apache/2 |
Minor | +マイナーバージョン | Server: Apache/2.0 |
Min | +マイナーバージョン | Server: Apache/2.0.41 |
OS | +OS | Server: Apache/2.0.41 (Unix) |
Full | すべて | Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2 |
PidFile run/httpd.pid
httpd の PID を書き込むファイルを指定する。
つまり、/etc/httpd/run/httpd.pid がPidファイルとして指定。
基本変更しない
Timeout 60
タイムアウトするまでの秒数。基本変更しない
KeepAlive Off
HTTPセッションを一定時間保持する設定
ONにするとパフォーマンスが向上するため、変更する。
MaxKeepAliveRequests 100
受け付ける接続要求数の最大許容値。
可能な限り大きな値を指定(KeepAlive Onが必須)
この値を0にすると無制限になるが、基本しない。
KeepAliveTimeout 15
HTTPセッションを保っておく秒数
値を大きくすれば、クライアント側の快適さは向上するが、サーバへの負荷は大きくなる
<IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 </IfModule>
preforkプロセス制御の設定
設定名 | 内容 |
---|---|
StartServers | 起動時に生成される子サーバプロセスの数 |
MinSpareServers | アイドルな子サーバプロセスの最小個数 |
MaxSpareServers | アイドルな子サーバプロセスの最大個数 |
ServerLimit | 設定可能なサーバプロセス数の上限 |
MaxClients | リクエストに応答するために作成される子プロセスの最大個数 |
MaxRequestsPerChild | 個々の子サーバが稼働中に扱うリクエスト数の上限 |
<IfModule worker.c> StartServers 4 MaxClients 300 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
workerスレッド制御の設定
設定名 | 内容 |
---|---|
StartServers | 起動時に生成される子サーバプロセスの数 |
MaxClients | リクエストに応答するために作成されるスレッドの最大個数 |
MinSpareThreads | アイドルなスレッド数の最小個数 |
MaxSpareThreads | アイドルなスレッド数の最大個数 |
ThreadsPerChild | それぞれの子プロセスに生成されるスレッド数の上限 |
MaxRequestsPerChild | 個々の子サーバが稼働中に扱うリクエスト数の上限0で無制限 |
Listen 80
Apacheが使用するポートを指定。基本はそのまま。
LoadModule hoge_module modules/mod_hoge.so
モジュールの読み込み
個々のモジュールはあとで調べてみよう
Include conf.d/*.conf
読み込む外部設定ファイルの設定
/etc/httpd/conf.d/ディレクトリにあるconf拡張子のファイルをすべて読み込む。
ExtendedStatus On
各リクエストに対して拡張ステータス情報を保存する。
有効にしておく
User apache Group apache
サーバーを実行するユーザとグループ。特に変更しない。
Apacheがインストールされるときに自動的に作成されるHTTP接続専用のシステムアカウント
メインのサーバの環境設定(Section 2: 'Main' server configuration)
ServerAdmin root@localhost
エラーページに表示する管理者メールアドレス。
ServerName localhost:80
サーバ名。
UseCanonicalName Off
サーバが自分自身を表す名前を作成する方法
On ServerNameで指定したポート番号とホスト名をクライアントに返す
Off クライアントから提供されたホスト名やポート番号をそのまま使用して返す
DNS Hostヘッダーをつけないクライアントをサポート(IPベースのバーチャルホストで使用されるのを想定)
DocumentRoot "/var/www/html"
ドキュメントルート
これより上位の階層へはアクセスできないが、SymbolicLink やalias を使用すれば、アクセスさせる事も可能
<Directory /> Options FollowSymLinks AllowOverride None </Directory>
サーバールート(/)に対しての設定
中身は後述
DirectoryIndex index.html index.php
/で終わるURLを指定した際にデフォルトで表示するファイルを指定
AccessFileName .htaccess
アクセス制御を行うためのファイルを指定。特に変更しない。
制限をかけたいディレクトリ内に置くことで、そのディレクトリに対して認証が行われる
Direcotryの設定で、AllowOverrideの値をAllかAuthConfigにする必要がある
<IfModule mod_userdir.c> UserDir disable #UserDir public_html </IFModule>
ユーザーディレクトリ機能を有効か無効に設定する
有効にした場合、
<Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy All </Files>
ブラウザからアクセスできないファイルを指定。
TypesConfig /etc/mime.types
MIME タイプ設定ファイルのパスを指定。基本変更しない
DefaultType text/plain
MIMEタイプファイルに記述が無かった場合の指定
HostnameLookups Off
IPアドレスをホスト名に変換し(逆引き)、ログに記録する機能
#EnableMMAP off
配送中にファイルを読み込むためにメモリマッピングを使うかどうかの設定。
SSI(Server Side Include)実行時などに利用される。
#EnableSendfile off
ファイルのクライアントへの配送時にカーネルのsendfileサポートを使うかどうかの設定
Onにするとファイルアクセスが低減される。
Apacheが参照するファイルがNFS(Network File System)上にある場合はOffにしておく必要がある。
ErrorLog logs/error_log
エラーログを記録するファイルを指定
実際のファイルの場所は/var/log/httpd/error_log
特に変更する必要なし
LogLevel warn
エラーログに出力するメッセージのレベルを指定する。
レベルを下げすぎるとログ膨大になってしまう。
指定 | 内容 |
---|---|
emerg | 緊急事態。システムが利用不可 |
alert | 直ちに対応すべき必要がある |
crit | 致命的状態 |
error | エラー |
warn | 警告 |
notice | 重要な情報 |
info | 情報 |
debug | デバッグ情報 |
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent
ログファイルで使用する書式を設定する。基本変更しない
#CustomLog logs/access_log common #CustomLog logs/referer_log referer #CustomLog logs/agent_log agent CustomLog logs/access_log combined
クライアントからのアクセスログを記録するファイルを指定する
実際のファイルの場所は/var/log/httpd/access_log
特に変更する必要なし
ServerSignature off
エラーメッセージ等をクライアントに返す際のフッターラインの表示を指定
ONにすると、ServerTokensで設定された内容だけがサーバー情報として追加表示される。
EMailにすると、上記に加えてServerAdminで設定した連絡先も掲載される
OFFにすると、エラーメッセージ以外の情報はクライアント側に表示されない
Alias /icons/ "/var/www/icons/"
仮想ディレクトリの設定。ディレクトリのシンボリックリンクに相当する機能。
HTTPではアクセスを受け付けないディレクトリを、コンテンツの配置場所として利用できる
IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8
インデックス表示に関する基本的な設定
クライアントからディレクトリのみを指定され、かつDirectoryIndexで指定されるインデックスファイルが無い場合、ディレクトリ内のファイル一覧を作成しクライアントに返す機能。
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
ファイルに表示するアイコンをMIME符号化方法で選択
AddIconByType (TXT,/icons/text.gif) text/*
ファイルの隣に表示するアイコンをMIMEタイプによって選択
AddIcon /icons/binary.gif .bin .exe
ファイルに表示するアイコンを名前で選択
DefaultIcon /icons/unknown.gif
特定のアイコンが何も設定されていない時にファイルに表示するアイコン
AddDescription "GZIP compressed document" .gz AddDescription "tar archive" .tar AddDescription "GZIP compressed tar archive" .tgz
アイコン情報の指定。特に変更する必要なし
ReadmeName README.html HeaderName HEADER.html
インデックス表示の最後および先頭に挿入するファイルを指定する。
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
インデックス表示において無視するファイルを指定する。
AddLanguage zh-TW .zh-tw
指定される拡張子を持つファイルを特定のMIME言語タイプに結びつける
基本変更しない。
LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
MIME言語タイプの適用優先順位を指定する。AddLanguageに定義されているもののみ指定可。
基本変更しない。
ForceLanguagePriority Prefer Fallback
要求に合う単独のドキュメントが見つからなかったときに行なうことを指定。
Prefer wwwサーバの応答が複数の場合に、LanguagePriorityに指定された優先順位に従い応答を返す。
Fallback wwwサーバが応答するページが無い場合にLanguagePriorityに指定されたページを応答する。
Noneも指定可。
基本変更しない。
AddDefaultCharset UTF-8
httpdが、クライアントにコンテンツデータを送るとき、Webブラウザで利用させる文字セットを設定する
指定していると、ヘッダが無視され強制的にこの文字セットになる。
Offにするとコンテンツデータに任意の文字セットが利用できるが、必ず文字セットの指定をしなければならない。
AddType application/x-tar .tgz
MIMEタイプファイルに記載されてないマッピングを追加
#AddEncoding x-compress .Z
ファイル名の拡張子を指定されたエンコーディングにマップする
AddHandler cgi-script .cgi
ファイル名の拡張子を指定されたハンドラにマップする
AddOutputFilter INCLUDES .shtml
サーバの応答をクライアントに送る前に処理するフィルタを設定する
#ErrorDocument 500 "The server made a boo boo." #ErrorDocument 404 /missing.html #ErrorDocument 404 "/cgi-bin/missing_handler.pl" #ErrorDocument 402 http://www.example.com/subscription_info.html
エラーコードごとに出力するHTMLを指定する。
ユーザーからのリクエストに何らかの問題があった場合、クライアントのブラウザにエラーページを出力する。
BrowserMatch "Mozilla/2" nokeepalive BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 BrowserMatch "RealPlayer 4\.0" force-response-1.0 BrowserMatch "Java/1\.0" force-response-1.0 BrowserMatch "JDK/1\.0" force-response-1.0
ブラウザによる環境変数の設定。
環境変数を設定すると、Apacheそのものの動作に制限をする事ができる。
#<Location /server-status> # SetHandler server-status # Order deny,allow # Deny from all # Allow from .example.com #</Location>
URLによるアクセス制御。
#<IfModule mod_proxy.c> #ProxyRequests On # #<Proxy *> # Order deny,allow # Deny from all # Allow from .example.com #</Proxy>
標準プロキシーリクエストを許可する
#ProxyVia On
ViaヘッダでのHTTP/1.1の扱いを有効/無効にする
#AddOutputFilter Includes html
利用許可する拡張子を設定
#AddHandler type-map var AddHandler cgi-script .cgi
ファイル拡張子とハンドラをマッピングする
#LanguagePriority en es de fr
2つ言語間で同じ優先度があった場合にどちらをより優先するかを設定
#ForceLanguagePriority Prefer Fallback
該当する言語がない場合に、選択肢を返すのか、アクセス拒否を返すのかの優先度を設定
選択肢を返す場合はPrefer
アクセス拒否を返す場合はFallback
バーチャルホストの設定(Section 3: Virtual Hosts)
NameVirtualHost *:80
名前ベースのバーチャルホストのための IP アドレスを指定
<VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com DocumentRoot /www/docs/dummy-host.example.com ServerName dummy-host.example.com ErrorLog logs/dummy-host.example.com-error_log CustomLog logs/dummy-host.example.com-access_log common </VirtualHost>
特定のホスト名やIPアドレスのみに適用される。
内容は上記同様
コンテナ
<Files hoge>~</Files>
hogeに指定されたファイルにのみ適用
<FilesMatch hoge>~</FilesMatch>
正規表現hogeに指定されたファイルにのみ適用
<IfModule module>~</IfModule>
moduleが読み込まれたときにだけ有効。!をmodule名の前につけると、読み込まれていないときになる
マルチプロセッシングモジュール (MPM)
apacheが、並列処理するためのモジュール
prefork
デフォルトの設定
あらかじめ複数のプロセスを用意しておき、クライアントからのリクエストを待ち受ける。
用意したプロセス数を越えるリクエストが要求された場合、新たなプロセスを生成することにより、クライアントからのアクセスに対応する
worker
リクエストの応答にスレッドを使い、プロセスベースのサーバよりも少ないシステム資源で、 多くのリクエストに応答することができる。
さらに、多くのスレッドを持った複数のプロセスを維持することで、 プロセスベースのサーバの持つ安定性を保持する。
指定したドメイン/ホストの環境設定
AllowOverride
.htaccessが使用できるかの設定
設定値 | 内容 |
---|---|
None | .htaccessでは何も設定できない |
All | .htaccessで設定可能なものは全て有効 |
AuthConfig | 認証関連の使用を許可 |
FileInfo | メタデータを制御を許可 |
Indexes | ディレクトリインデックス関連の使用を許可 |
Limit | アクセス制御関連の使用を許可 |
Options | カンマ区切りで許可するものを指定 |
Options
設定対象の基本的な動作許可、制限
設定値 | 内容 |
---|---|
None | 特殊な機能を使わない時 |
All | MultiViewsを除いた全ての機能が有効。設定しない場合はこれ |
FollowSymLinks | シンボリックリンクでのアクセスを許可 |
Includes | SSIの使用を許可 |
IncludesNOEXEC | SSIは許可するが、SSIが外部cgiを呼び出すのを禁止 |
Indexes | リクエストに対するファイルが存在しない場合に、ディレクトリ内ファイルの一覧を表示する |
MultiViews | コンテントネゴシエーションを有効 |
SymLinksIfOwnerMatch | 所有アカウントが一致している場合アクセス許可 |
ExecCGI | CGIの実行を許可 |
Order
AllowとDenyを組み合わせて、HTTPアクセスを制限する
Orderで評価される順番を制御する。
設定値 | 内容 |
---|---|
Order Deny,Allow | アクセスはデフォルトで許可(ブラックリスト方式) |
Order Allow,Deny | アクセスはデフォルトで拒否(ホワイトリスト方式) |
Satisfy all | Orderの制限と認証の両方クリアで許可 |
Satisfy any | Orderの制限か認証のどちらかクリアで許可 |
Allow from 対象 | 許可する対象を指定 |
Deny from 対象 | 拒否する対象を指定 |
すべてのアクセスを拒否する場合
Order Deny,Allow Deny from all
すべてのアクセスを許可する場合
Order allow,deny Allow from all
ローカルのみ許可
Order Deny,Allow Deny from All Allow from 127.0.0.1
ポートとは
外部とデータを入出力するための、ソフトウェアやハードウェアのインターフェース
ディレクティブとは
プログラム中に埋め込むコンパイラへの命令
MIMEタイプとは
拡張子という概念と、MIMEタイプという概念がある。
タイプ名/サブタイプ名の形式の文字列で、WEBサーバーとWEBブラウザの間は、このMIMEタイプを用いてデータの形式を指定する
例
ファイル形式 | 一般的な拡張子 | MIMEタイプ |
---|---|---|
テキスト | .txt | text/plain |
HTML文書 | .htm .html | text/html |
XML文書 | .xml | text/xml |
JavaScript | .js | text/javascript |
CSS | .css | text/css |
GIF画像 | .gif | image/gif |
JPEG画像 | .jpg .jpeg | image/jpeg |
PNG画像 | .png | image/png |
ZIPアーカイブ | .zip | application/zip |
PDFファイル | application/pdf | |
MPEG映像 | .mpg | video/mpeg |
flash | .swf | application/x-shockwave-flash |
OrderのDenyとAllowの感じがややこしい…。
次は、フレームワークに戻る予定。
Zend Frameworkインストール
入れてみる。
さっそく設定しようと思ったら、コマンドがいくつか入ってない!
ダウンロード/解凍
最新の安定バージョンをダウンロード。
パスは適当なところに設置
# cd /usr/share/php # wget http://framework.zend.com/releases/ZendFramework-1.11.11/ZendFramework-1.11.11-minimal.zip # unzip ZendFramework-1.11.11-minimal.zip # mv ZendFramework-1.11.11-minimal.zip ZendFramework
利用の設定
Zend Frameworkのファイルを読み込めるように設定。
インクルードパスを追記する。
# vi /etc/php.ini ;include_path = ".:/php/includes" include_path=".:/usr/share/php/ZendFramework/library"
URL変換にmod_rewriteを使用するため、コメントアウトをはずす
と思ったら外れてた。
# vi /etc/httpd/conf/httpd.conf LoadModule rewrite_module modules/mod_rewrite.so
さらに、.htaccessを有効にするために、追記。
ディレクトリは適当なところに。
# vi /etc/httpd/conf/httpd.conf <Directory "/var/www/public_html> # AllowOverride None AllowOverride All </Directory>
コントローラーまわりの設定
index.phpにアクセスを集中させる
上記で設定したディレクトリに作成
#vi .htaccess RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .* index.php
最後に再起動
# /etc/init.d/httpd restart apache再起動
使えているかチェック
index.phpをさきほどのディレクトリに作成
<?php require_once 'Zend/Version.php'; echo Zend_Version::VERSION;
バージョン名でました!読み込めてます。
これで何か作ってみようかな。
その前にhttpd.confについてまとめるつもり。
標準ストリームとは
またしても用語について書いている…。
用語以外のことを書こうと思いつつ…。
標準ストリームとは
UNIXおよびUnix系オペレーティングシステムや一部のプログラミング言語インタフェースにおいて、
プログラムとその環境を実行前から接続している、入出力チャネルである。
3つの入出力があり、これらは自在に切り替える事ができる。
標準入力(stdin)
デフォルトはキーボード
0番
標準出力(stdout)
デフォルトはディスプレイ
1番
標準エラー出力(stderr)
デフォルトはディスプレイ
2番
リダイレクト
標準出力の先を変更するもの。
>や>>を使って書く
標準出力をファイルにする場合
ls > file.txt ls 1> file.txt
ファイルが存在していたら上書きし、ファイルが存在していない場合作成する
ls >> file.txt
ファイルが存在していたら追記し、ファイルが存在していない場合作成する
ls hoge 2> file.txt
エラーがファイルに出力される。数字を省略した場合、 1 標準出力 が指定される。
ls hoge .* &> file.txt ls -al .* hoge > file.txt 2>&1 (ls -al .* hoge 2>&1) > file.txt
標準出力と標準エラー出力を 1 つのファイルにリダイレクト。
標準エラー出力を標準出力にまとめる。(1と2を逆にして、標準エラー出力にまとめることもできる)
ls hoge .* 2>&1 > file.txt
標準出力のみファイルにリダイレクトされる。
ls -al .* hoge >/dev/null
出力を破棄する
標準入力をファイルにする場合
cat < file.txt cat 0< file.txt
0が省略されている
パイプ
標準出力を次のコマンドの標準入力に渡す。
標準エラー出力は引き渡されない
ls | grep hoge
lsコマンドの結果をgrepする
ヒアドキュメント
コマンドの標準入力に対して、複数行にわたる任意の文字列を与えることができる
cat << EOF > file.txt >hoge >fuga >EOF
ファイルに入力した文字列を出力
web/インターネット標準について
なんぞやと。こやつは。
W3C(World Wide Web Consortium)
web技術の標準化を行う団体のひとつ
もっとも代表的な団体がW3Cで、W3Cが策定する仕様書(Specifications)はWeb標準として広く認められている
標準度合いを調べる方法
バリデータ(バリデーションを行う機能/ソフトウェア)
Validator http://validator.w3.org/
CSS Validator http://jigsaw.w3.org/css-validator/
IESG
Internet Engineering Steering Group
インターネット標準の作成を目的とする組織。
RFC
Request For Comment
IETFによって発行される提案書のシリーズ。
インターネットで利用されるプロトコルや、その他インターネットに関わるさまざまな技術の仕様・要件を、通し番号をつけて公開されている。
読むにはBNF記法の知識が必要(なので、前回書いたとさ)
RFCの読み方
すべてのRFCのリストは、RFC Indexファイルに入っているので、まずここを見る。
リストの表示項目
RFCの番号 タイトル 著者 発行日 ファイルの形式とサイズ 他のRFCとの関係 他のリストでの登録 文書の種類
6437 IPv6 Flow Label Specification. S. Amante, B. Carpenter, S. Jiang,
J. Rajahalme. November 2011. (Format: TXT=35269 bytes) (Obsoletes
RFC3697) (Updates RFC2205, RFC2460) (Status: PROPOSED STANDARD)
今回の例
RFCの番号 | 6437 |
タイトル | IPv6 Flow Label Specification |
著者 | S. Amante, B. Carpenter, S. Jiang, J. Rajahalme |
発行日 | November 2011 |
ファイル形式とサイズ | Format: TXT=35269 bytes |
他のRFCとの関係 | Obsoletes RFC3697 Updates RFC2205, RFC2460 |
文書の種類 | Status: PROPOSED STANDARD |
他のRFCとの関係の見方
表示 | 内容 | RFCxxxの有効性 |
---|---|---|
Obsoletes RFCxxx | このRFCで置き換える | 無効 |
Obsoleted by RFCxxx | このRFCはRFCxxxに置き換えられている | 無効 |
Updates RFCxxx | このRFCでRFCxxxを更新する | 有効 |
Updated by RFCxxx | このRFCはRFCxxxにて更新されている | 有効 |
文書の種類の見方
表示 | 内容 | 備考 |
---|---|---|
STANDARD | 標準化されている | |
DRAFT STANDARD | 運用評価を受けている | 標準への草稿 |
ROPOSED STANDARD | 標準トラックに入る | 標準への提唱 |
EXPERIMENTAL | 研究開発中 | 実験的なプロトコル |
INFORMATIONAL | 情報提供目的 | 有益な情報 |
HISTORIC | 何らかの理由で情報が古くなったもの | 歴史的文書 |
BEST CURRENT PRACTICE | BCPサブシリーズ | 特に認めた手順書 |
For Your Information | FYIサブシリーズ | TCP/IPやインターネットに関する一般的な情報 |
用語まとめはそろそろおいておいて、構築の続きをやろうかな…。
BNFとは
読めるように勉強。
やってくうちにパズルみたいで、ちょっとおもしろくなってきた!
BNFとは
Backus Naur Form バッカス・ナウア記法
ジョン・バッカスさんとピーター・ナウアさんが考案。
…名前のままでした。
コンピュータが扱う言語の文法を定義する際に用いられるメタ言語の一つ。
BNFを拡張(Extended)したEBNFが現在一般的。
基本
- 生成規則
- 「左辺 ::= 右辺」
- 非終端記号
- 「<」と「>」で囲まれたも
- 終端記号
- 「0」や「1」のように、新しい記号を生成しないもの。終端記号は実際のソースコードで使用できる記号。
<hoge> ::= <hogehoge> hoge は hogehoge である
例
<数字> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" <非ゼロ数字> ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" <符号なし整数> ::= <非ゼロ数字> | <符号なし整数><数字> 拡張 <符号なし整数> ::= <非ゼロ数字>{<数字>}
よく見る文字の意味
表記 | 意味 |
---|---|
| | 選択(どれか) |
[] | オプション(あってもなくても) |
{} | 0回以上の繰り返し) |
() | グループ化(単一の要素とする) |
RDBMSとは
データベースまわり調べてみた。
RDBMS
Relational DataBase Management System
リレーショナルデータベースを管理するソフトウェア
概要
- データを列と行の中にまとめ、テーブルの中に並べるもの
- データの比較には同じ位置のフィールドを見ればよいので、データの結合や抽出が容易。
- テーブルが複数の場合、主キー等関連付け内部結合を行うことで、一つテーブルのように扱える
- データベースとのやりとりはSQL言語が用いられる。
クライアント・サーバーモデル
クライアントとサーバーが連携し、プログラムやアプリケーションを効率的に実行するモデル
クライアント
- データ処理を要求する動作単位。
- サーバーに要求を出して情報や資源を利用するハードやソフトのこと
- データベースに対してアクセスを要求するプログラムのこと
サーバ
- データ処理を実行する動作単位。
- 情報や資源を一元的に管理し、提供する役割のハードやソフトのこと
- データベース本体が存在する側のこと
3層クライアントサーバーシステム
クライアント/サーバー型のアプリケーションを3つの機能モジュールに分けて開発する手法
- ユーザーインタフェース部分を実現するプレゼンテーション層
- データの加工処理を実行するファンクション層
- データベースにアクセスするデータ層
概要
- 機能的に明確に区別することでシステム性能や開発・保守効率の向上を狙う。
- 3つの層は通常、別々のコンピュータで動かすが、同一のコンピュータ上にあっても構わない。
- 特徴として、データ加工処理をサーバー側で実行させること。
- クライアントとサーバーの間のデータ通信量が減るため、低速な回線を使っていたり、クライアントの台数が多い場合でも、応答速度が落ちにくい。
- 仕様の変更が容易、並行開発により生産性も向上
- システム保守の負荷が軽減される
- サーバー上のデータベースの構造やデータの処理ロジックを変更しても、クライアント上のモジュールを変更しなくて済むため
2層クライアントサーバーシステム
サーバーにデータベース・アクセス・モジュールだけを載せ、その他の処理をクライアント側で実行する従来の一般的なクライアント/サーバー型アプリケーション開発手法
主流のRDBMS
SQLite
- オープンソース
- サーバとして動作するのではなく、アプリケーションに組み込んで利用する軽量のデータベース
- 大規模システムには不向きだが、中小規模のシステムであれば、機能、性能面において問題なく利用できる。
Microsoft SQL Server
- 商用
- Windowsとの親和性が高い
ストレージエンジン
同期方式
- マスタの更新と同時にすべてのスレーブを更新。
- 全てのスレーブの処理終了を待つ必要があるため、スレーブが増えるほど全体の処理に時間がかかるが、常にすべてのデータベースで同じデータが保持されることが保証される。
- いずれかのデータベースで障害が起きると、自動的にそのデータベースを同期対象から除外し、正常なデータベースに対してのみ同期処理を行う。
- マスタで障害が発生した場合、スレーブのうちいずれかを代理マスタに昇格させ、マスタを同期対象から除外する。
- 自動的な縮退運用への移行と、縮退運用に入ったことを外部へ通知する機構を備えている。
非同期方式
- データの更新時にまずはマスタの更新。
- マスタは更新の際、更新ログを出力し、この更新ログを順次スレーブに適用することで、同じデータが保持される。
- マスタを更新してから、スレーブで更新ログを適用するまでの間は、一時的にデータが一致していない状態となるが、スレーブ数増加による処理時間の増加は発生しない。
- マスタで障害が発生した場合、クライアントからの接続先をいずれかのスレーブに切り替えることで運用を継続できる。
- バックアップしか行っていない場合のように、完全復旧までシステムの運用ができなくなってしまうということはない。
- レプリケーションの最初のアクションはスレーブで、スレーブごとに任意のタイミングでレプリケーションを実行できる。