ネットワーク 2

インターネットにおけるアドレス

インターネットで使用されるアドレスは、以下のような形式になっています。

URLでWebにアクセスする場合のwwwというホストネームは設定次第では省略できます。

ドメインネーム

インターネットの各ノード(インターネットの接続単位)を表す名前がドメインネームです。
このドメインネームがDNSによってIPアドレスに変換されて接続されます。

ドメインネームはNIC(Network Infomation Center)という組織で管理されています。
アメリカにあるIANA(Internet Assignet Number Authority)をトップとして各地域・国別に株組織が存在します。
日本のNICはJPNICです。

ドメインネームの構成

www.nsca.edu
TLDがedu
2LDがnsca
3LDがwww
indy1.cg.nippon-ec.ac.jp
TLDがjp
2LDがac
3LDがnippon-ec
cgはnippon-ec.ac.jpの中のサブドメイン
indy1はcgの中のホスト

国別TLD(ccTLD)

国別に定められたTLDとしてccTLD(Country Code Top Level Domain)があります。
nTLD(National Top Level Domain)とも言います。
国別に2文字の略号で決まっています。

jp
日本
uk
英国
fr
フランス
ko
韓国
ch
中国

日本の2LD

日本(.jp)のドメイン(2LD)には属性型と一般地域型があります。
一般地域型は以下のような型になります。

属性型ドメインは以下の通りです。

co
会社組織
ac
高等教育機関
ed
18才未満の教育機関
ad
JPNIC会員またはその組織
ne
ネットワーク管理組織
go
政府組織
gr
任意組織
or
その他の組織

ドメイン名(gTLD)

TLDの一種で国・地域に関係なく使用できるドメイン名としてgTLD(General Top Level Domain)があります。

com
会社組織
edu
学校、研究所
mil
軍隊
gov
政府組織
net
ネットワーク管理組織
org
その他の組織

多国語ドメイン名

最近、ドメイン名(2LD)に日本語などの多国語を使用できるようになってきました。

汎用JPドメイン名
ccTLDが.jpの2LDとして日本語が使用できるドメイン名。
登録開始はこれからだが、2LDとして.coなどの組織の種類を表すものではなく、個人名など好きな名前が使用できます。
NSI Registrar
gTLDの2LDに多国語が使用できるサービスを始めるらしい。
.cc
オーストラリア領ココス島のccTLD(.cc)の2LDとして多国語が使用できます。

ドメインの取得方法

独自のドメイン名は各国のNICに登録を依頼するが、手続きが面倒なので代行業者に依頼するのが簡単です。

URLとは

URL ( Uniform Resource Locator )とは、インターネット上のリソース(資源)の場所を示すために 使用される記述方法のことです。
URL を使用することによってインターネットのどこにどのようにしてアクセスすれば良いかを、 簡単に表すことができます。

URL の形式

基本的には、

(アクセス方法):(目的の場所)

の様に、: (コロン)の前にどういう方法でアクセスするかという方法を記述し、 コロンの後に、どこにアクセスするかという場所を記述します。
目的の場所は、

//ユーザーネーム:パスワード@ホストネーム:ポート番号/ディレクトリ/ファイル名

という形式になっているが、普通良く使われるのは

//ホストネーム/ディレクトリ/ファイル名

の様な形です。
ホストネームの部分は大文字・小文字を混ぜても良いことになっています。
しかし、ディレクトリ・ファイル名の部分は大文字・小文字の区別があります。

アクセス方法

http
WWW サーバーにアクセス
ftp
ftp サーバーにアクセス
gopher
gopher サーバーにアクセス
telnet
telnet でログインします。
news
ネットニュースを見ます。
wais
wais サーバーにアクセス
mailto
電子メールを出します。
file
ローカルのファイルにアクセスします。

http://www.yahoo.com/
www.yahoo.com のWWWサーバー(HTTP)にアクセス
ftp://ftp.nanda.com/pub/datafile
ftp.nanda.com のpubというディレクトリの下にあるdatafileというファイルに ftp でアクセス。
telnet://watasi:anata@kare.nanda.co.jp
kare.nanda.co.jp にユーザーネーム watasi 、パスワード anata でtelnetによってログイン。
mailto:whoami@gmail.com
whoami@gmail.comにメールを送る。

DNSとは

DNS(Domain Name System)とは、ネットワークにおける名前解決のためのシステムです。
具体的には、インターネットドメイン名(階層化された名前空間)とIPアドレスをマッピングします。

DNS とは

ホストネームからIPアドレスに変換するためのシステムを、DNS( Domain Name Service )と言います。
各マシンからホストネームを使ってインターネットにアクセスする場合は、 DNSのプログラムが走っているコンピュータ(ネームサーバー)に、 そのホストネームに対応するIPアドレスを尋ねることになります。
そのためには、あらかじめネームサーバーのIPアドレスだけは各マシンがわかっていなくてはなりません。 個人的にインターネットに接続する場合も、プロバイダーから必ずネームサーバーのIPアドレスを教えてくれるはずです。

DNSのしくみ

  1. ホストネームを使うマシンには、あらかじめネームサーバーのIPアドレスを設定しておきます。
  2. インターネットにアクセスするために、ホストネームが使われます。
  3. そのホストネームをネームサーバーに送ります。
  4. ネームサーバが、そのホストネームに対応するIPアドレスを調べて返します。
  5. そのIPアドレスでインターネット上のホストにアクセスします。

  1. ここでは、まず最初にAというマシンにネームサーバーのIPアドレス 192.62.22.5 を覚えさせておきます。
  2. そして例えば、マシンAでWWWのサーバー( http://www.ahoo.com/ )にアクセスしようとします。
  3. ホストネームのIPアドレスを調べるために、www.ahoo.com をネームサーバーに送ります。
  4. ネームサーバーでは www.ahoo.com のIPアドレス 186.33.15.6 を調べてマシンAに送り返します。
  5. マシンAでは、インターネット上の 186.33.15.6 のWWWサーバーにアクセスしにゆきます。

DNSの構造

DNSは、UNIXのディレクトリと同じようなツリー構造になっています。
ディレクトリにおけるルートディレクトリ( / )の代わりに . (ピリオド)を使用して表します。

例えば、indy1.CGtec.ac.jp. が正式なホストネームになるが、たいていは最後のピリオドを省略して使用します。 (使用しているプログラムの方で最後のピリオドを補ってくれます)

BIND

DNSの実装として、標準的なものにはBIND(Berkeley Internet Name Domain)があります。
実際にネームサーバとして実行されるのは、UNIXではnamedというデーモンです。

ネームサーバの動作モード

ネームサーバの動作モードには、マスターサーバー・スレーブサーバー・キャッシュサーバーの3種類があります。
以下に出てくるゾーンとは、ネームサーバーが責任を持って名前解決を行う範囲(サブドメイン)のことです。

マスターサーバー
あるゾーンを管理するサーバーでローカルディスクにデータベースを持っているものです。
プライマリサーバーとも言います。
スレーブサーバー
マスターサーバーから、ゾーン情報をネットワーク経由でコピーして、リクエストに答えるサーバー。
スレーブサーバーは何台でも置くことができます。
セカンダリサーバーとも言います。
キャッシュサーバー
他のネームサーバーから得た答えをキャッシュしておくサーバー。
マスターサーバー・スレーブサーバーもキャッシュサーバーになれます。

マスターサーバ・スレーブサーバーの返す答えは、 権威のある(Authoritative)応答、キャッシュサーバーの返す答えは権威のない(Non-authoritative)応答です。
なお、通信時にはネームサーバーは53番ポート、クライアント(nslookupなど)は1024番以降のポートを使用し、ゾーン転送時はTCP、検索時はUDPまたはTCPを使用します。

ネームサーバの設定ファイル

ネームサーバの設定ファイルはnamed.confです。

設定ファイルの項目

options
namedの動作モード、各種ファイルの存在するディレクトリ
zone
ゾーンの定義
zone (ゾーンのドメイン名) { ゾーンに関する設定 }

設定ファイルの例

options {
	directory "/etc/namedb";
};
zone "." {
	type hint;
	file "named.root";
};
zone "bbb.aaa.co.jp" {
	type master;
	file "bbb.db";
};
zone "aaa.co.jp" {
	type slave;
	master 192.168.10.1;
};

データベースファイル

データベースファイルは、以下の形式のテキストファイルです。
また、データベースファイル内のドメイン名はFQDN(Fully Qualified Domain Name - さいごに.がつく)です。

(名前) (クラス) (レコード種別) (パラメータ)

(名前)
ドメイン名
@が(名前)として使用されているとnamed.confで指定されたゾーンのドメイン名(FQDN)になります。
(名前)が省略されていると、その前のレコードに書かれたドメイン名になります。
(クラス)
データのクラス
インターネットの場合INになります。
(レコード種別)
レコードのタイプ
(パラメータ)
レコードに応じたパラメータ

レコードの種類

基本的なレコードは以下の通りです。

SOA
Start Of Authority
ゾーン定義の開始。
ゾーン関連のパラメータを定義します。
シリアル番号
データベースファイルの履歴
この番号が、スレーブサーバーの持っている番号より大きければゾーン転送が行われます。
どんな番号でも良いが、更新した日付にしておくとわかりやすいでしょう。
リフレッシュ時間
データの更新があったかどうかをスレーブサーバーがチェックする間隔。(秒)
再試行時間
トラブルによってリフレッシュが行えなかった場合、どれだけ後に再試行するかを表します。(秒)
最大有効時間
チェックができない時に、スレーブサーバー上のデータを無効にする時間。(秒)
生存時間
TTL(Time To Live)
他のネームサーバーで読み込まれたデータベースが、どれだけの時間有効かを示す時間。(秒)
NS
Name Server
ゾーンを管轄する権威あるネームサーバの名前。
A
Address
(名前)に対するIPアドレスの指定。
(名前)がピリオドで終っていない場合はゾーンを表すドメイン名(@)が付加されます。
CNAME
Canonical Name
別名定義。

データベースファイルの例

@	IN	SOA	ns.bbb.aaa.co.jp.	postmaster.aaa.co.jp. {
		2000081101		; シリアル番号
		10800			; リフレッシュ時間
		3600			; 再試行時間
		604800			; 最大有効時間
		86400			; 生存時間
		}
	IN	NS	ns.bbb.aaa.co.jp.
	IN	NS	ns.aaa.co.jp.
ns	IN	A	192.1.1.1
mail	IN	A	192.1.1.2
www	IN	A	192.1.1.3
ftp	IN	CNAME	www.bbb.aaa.co.jp.

メールとは

インターネットにおいて、最も実用的で良く使用されるのがメールです。
現在はメールと言えば、ネットワーク上のメールと言うことになっていますが、 電子メールまたは、Eメールなどと呼ばれることもあります。
メールが電話・郵便などと比べて長所と思われるのは以下の点でしょう。

逆に欠点と思われるのは以下の点である。

メールのシステム

メールの配送システムは、MUA(メールユーザーエージェント)とMTA(メール転送エージェント)のふたつで作られています。

MUA
電子メールクライアント、いわゆるメールソフトです。
ユーザーとのフロントエンドとなってMTAにメールの配送を依頼します。
MTA
メール転送エージェント、つまりメールを他の目的地まで転送するソフトウエアです。
SMTPというプロトコルによって送られます。
良く使用されるMTAは以下のものがあります。

メールの構造

電子メールは以下のような構造になっています。

ヘッダ
        <--- 空行
本文

ヘッダと呼ばれる、メールに関するいろいろな情報の書いてある部分があり、その後に空行(何もない行)があって、最後にメールの本文がきます。

ヘッダの表示

多くのメールソフトでは、ヘッダ情報の一部しか表示しません。
そのようなソフトでヘッダーをすべて表示させるには、メニューのオプションその他によって表示させる必要があります。
例えば、OutLook Expressでは受信メールのプロパティ(マウス右ボタン->プロパティ)から「詳細」の項目を開くことで見ることができます。
(さらに、「メッセージのソース」を開くとメールの完全なデータを見ることができます)

文字コード

メールを送信する時、文字コードの種類にやっては文字化けをおこしてメールが読めなくなってしまうことがあります。
これを防ぐためには、文字コードをインターネットの標準(ISO-2022-JP)のものにしておく必要があります。
現在、コンピュータで使用される主な日本語の文字コードは次の4種類です。

JIS
7bitの文字コード。(インターネットにおける標準)
SJIS
パソコン(DOS,Windows,Mac)で使用される。
EUC
UNIXで良く使用される。
UTF-8
現在、主流になりつつある。

SJISやEUCだと文字化けしてしまうことがあるので、インターネットではJISコード(iso-2022-jp)が標準になっています。
これには、パソコンで良く使われる半角かなや丸文字などの特殊な文字は含まれないので、メールにはそれらの文字は使用しないのがエチケットです。
SJIS、EUCからJISへの変換はメールソフトが自動的にやってくれることもありますが、自分で変換する時は文字コードを変換するソフト(nkfなど)を使用します。

ヘッダ

メールには必ずヘッダがついています。 (1行目から最初の空行まで)
このヘッダの部分を見ると、そのメールに関する情報がいろいろわかるようになっています。 (各行をフィールドと呼びます)
しかし、メールソフトによっては、ヘッダの部分が表示されないものがあります。 (表示されるかどうかは設定次第)

主なヘッダの内容は以下の通り。

Date:
メールを出した日時
From:
メールの送付元
To:
メールの送付先
Cc:
コピーの送付先
Bcc:
コピーの送付先(ただし、送付先には見えません)
Fcc:
コピーの送付先(ただし、送付先には見えません)
自分のフォルダーに直接送られます。
Subject:
メールのタイトル
Received:
メールの経由してきたホスト
Reply-To:
メールの応答先のアドレス
From:と違うアドレスに返事が欲しい場合などに付けられます。
Message-Id:
メールのID (送付元で付けられる)
世界中でただひとつのユニークなIDになっている(はずです)。
X-Mailer:
メールの種類
X-URL:
メールに関係のあるURL

これら以外にも、様々な種類があります。(MIMEなど)
最後のX-が付いたフィールドは、ユーザーやプログラムが自由に設定できます。 ここにリストアップしたもの(X-)は習慣的に決まっているものです。
また、ヘッダでは大文字・小文字の区別はありません。 (詳しくは、RFC822を参照)

バイナリーデータの送信・受信

メールは基本的にテキストデータしか送ることができません。
しかし、画像データなどのバイナリーデータを送ることもできます。 そのために、バイナリーデータをエンコード(バイナリーデータをテキストデータに変換) しなくてはならなりません。 エンコードされたデータを受けとった時は、デコード(テキストデータをバイナリーデータに変換)します。
インターネットにおけるエンコードの方法には、主に以下の方法があります。

uuencode
UNIXで使用されます。
デコードには、uudecodeが使用されます。
BinHex
Macintoshで使用されます。
BASE64
MIMEによる方式。
quoted-printable
これもMIMEによる方式。
英語以外の言語のエンコードに良く使用されます。

最近のメールソフトでは、これらの方法でエンコードされたデータも自動的に デコードされるようになっているものが多いようです。

MIME

MIMEとは、メールにおいてバイナリーデータを送信するための標準として規定された規格です。
MIMEでは以下のようなヘッダが付きます。

MIME-Version:
MIMEのバージョンを表します。
これがあるとMIME対応メールであることを示します。
Content-Type:
MIMEデータの内容を表します。
text/plain
普通のテキストデータ(英語、日本語など)
charset
使われている言語の種類を表します。
  • iso-2022-jp (日本語)
  • shift_jis (日本語)
  • euc-jp (日本語)
  • utf-8 (Unicode)
  • utf-16 (Unicode)
  • iso-2022-kr (韓国語)
  • us-ascii (英語)
  • iso-8859-1 (ヨーロッパ系言語)
image/gif
GIF画像データ
image/jpeg
JPEG画像データ
audio
音声データ
multipart/mixed
複数の内容を持つデータ(テキストと画像データなど)
Content-Transfer-Encoding:
エンコードの方法を表します。
7bit
英文、JISなどのテキスト
8bit
8bitのテキスト
binary
バイナリーデータ
base64
BASE64でエンコードされたデータ
quoted-printable
quoted-printableでエンコードされたデータ

メール送信プログラム例

Gmailを利用して、メールを送信するプログラム例です。


import smtplib
import email
from email.MIMEText import MIMEText

from_addr = 'whoami@gmail.com'
to_addr = 'whoami@yahoo.co.jp'
subject = 'my subject'
body = 'test'

msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = from_addr
msg['To'] = to_addr
msg['Date'] = email.Utils.formatdate()

s = smtplib.SMTP('smtp.gmail.com', 587)
s.ehlo()
s.starttls()
s.ehlo()
s.login('whoami@gmail.com', 'passwd')
s.sendmail(from_addr, [to_addr], msg.as_string())
s.close()

プログラム解説

import smtplib
smtplibモジュールをインポートします。
import email
emailモジュールをインポートします。
from email.MIMEText import MIMEText
MIMETextクラスをインポートします。
from_addr = 'whoami@gmail.com'
送信元アドレスwhoami@gmail.comをfrom_addrに代入します。
to_addr = 'whoami@yahoo.co.jp'
送り先アドレスwhoami@yahoo.co.jpをfrom_addrに代入します。
subject = 'my subject'
サブジェクトとして文字列'my subject'をsubjectに代入します。
body = 'test'
本文として文字列'test'をbodyに代入します。
msg = MIMEText(body)
bodyを本文にして、MIMEテキストを作成します。
msg['Subject'] = subject
subjectをMIMEのサブジェクトに設定します。
msg['From'] = from_addr
from_addrをMIMEの送信元アドレスに設定します。
msg['To'] = to_addr
to_addrをMIMEの送り先アドレスに設定します。
msg['Date'] = email.Utils.formatdate()
email.Utils.formatdate()によって、MIMEの時間を設定します。
s = smtplib.SMTP('smtp.gmail.com', 587)
ホストsmtp.gmail.comの587ポートに接続します。
s.ehlo()
"EHLO"を利用し、ESMTPサーバに身元を明かします。
ESMTPとは、Extended SMTPの略で、オリジナルのSMTPを拡張したものです。
s.starttls()
TLS(Transport Layer Security)モードでSMTPコネクションを出します。 この後、全てのSMTPコマンドは暗号化されます。
s.ehlo()
もう一度、暗号化された"EHLO"を利用し、ESMTPサーバに身元を明かします。
s.login('whoami@gmail.com', 'passwd')
ユーザ whoami@gmail.com、パスワードpasswdでGmailにログインします。
s.sendmail(from_addr, [to_addr], msg.as_string())
メールを送信します。
s.close()
SMTP送信を閉じます。

参考


Prev | Next
index | home
abetmhr@gmail.com