ホーム » スタッフ » 斉藤徹

斉藤徹」カテゴリーアーカイブ

2017年12月
« 11月    
 12
3456789
10111213141516
17181920212223
24252627282930
31  

最近の投稿(電子情報)

アーカイブ

カテゴリー

WWWとhttp

前回の DNS とメールで紹介の抜けていた点を補足。

DNSと階層構造

前回説明したDNSでは、1つのDNSサーバに処理が集中しないようにするために、階層型構成となっている。

     ルートサーバ
         /    |    \
      /       |       \
   DNS        DNS        DNS
 / | \    / | \    
PC  PC  PC PC  PC  PC

組織に属するパソコンは、その組織用のDNSサーバに接続する。DNSサーバは自身の組織のDNS情報を提供するとともに、他の組織の DNS の問合せ結果をある程度保存し(キャッシュ)、同じ問合せがあった場合は保存した情報を返す。


WWWとhttp

WWWとは、ティム・バーナーズ=リーによって作られたサービスであり、元々は研究データの論文やデータの共有のために作られた。この際のWebサーバのデータのやり取りのためのプロトコルがhttp(Hyper Text Transfer Protocol)であり、ポート番号80のTCPを用いたものであり、最近では通信を暗号化したhttps(ポート番号443)も多く使われる。

httpでは、文字データの中に画像や音声といった情報に加え、他のデータへのリンクを埋め込むことができる HTML(Hyper Text Markup Language) のデータがやりとりされる。このHTML形式のデータを表示するためのソフトは、ブラウザと呼ばれる。

URL

WWWのデータの場所を示すものが、URL(Uniformed Resource Locator)であるが、最近ではインターネットが複雑化しLocationという表現が難しいため、URI(Uniformed Resource Identifier)と呼ぶようになってきた。

URLは基本的に、スキーマ://コンピュータ名/サーバ内ファイル位置 といった文字で構成される。URL は、HTTP だけでなく、インターネットの情報の場所を記述するために使われており、httpやhttps以外にも使う。

http

httpのサーバ(Webサーバ)とブラウザでは、以下のような手順で処理が行われる。例えば http://www.ei.fukui-nct.ac.jp/~t-saitoh/index.html

  1. ブラウザのURL欄に、入力。
  2. 基本的には、スキーマ欄に記載されたプロトコル(http)から、ポート番号と通信方法を決める。
  3. コンピュータ名部分(www.ei.fukui-nct.ac.jp)を DNS に問合せして、得られたIPアドレスのコンピュータに接続。
  4. 最も簡単な GET メソッドでは、Webサーバに、サーバ内のファイル位置(/~t-saitoh/index.html)を伝えると、Webサーバは指定された場所のファイルを返送する。
  5. HTML形式のデータが指定された場合、ブラウザはその HTML をどの様に表示するか判断しながら表示する。

このような予め保存されているWebページを返送する場合は静的ページと呼ばれる。サーバのデータベースなどを参照しながらページ内容を返送する場合は、動的ページと呼ばれ、CGI(Common Gateway Interface) という手法が使われたり、動的なページを表示するためのプログラム言語(例えばPHP)が使われる。

サーチエンジン

インターネットでは、大量のWebページが出現してきたため、自分の目的に応じてWebページを探す機能が必要となってきた。このような目的のWebページを検索してくれるシステムは、サーチエンジンと呼ばれる。

ディレクトリ型

最初に現れた検索システムは、ページ作者が自分のページのURLと内容となるキーワードを登録しておき、内容のカテゴリー別に、ページの紹介文章が表示されるディレクトリ型であった。(Yahoo)

しかし、登録するキーワード以外の文字で探そうとすると、情報を見つけることができない。

ロボット型

これらの問題を解決すべく登場したのが、ロボット型である。
ロボット型の検索システムでは、クローラーとかロボットとか呼ばれるプログラムを使い、Webページの内容をダウンロードし、そこに記載された文字を使ってURLのデータベースを作成する。クローラーは、リンクが貼られていると、そのページでも同様の処理を行い、大量の情報を次々と取得していく。(Google)

文字をキーとするハッシュ値

前回のハッシュ法では、数値(電話番号)をキーとする検索であった。 このためハッシュ関数は、数値の不規則性の部分を取り出すだけでよかった。 それでは、文字をキーとしてデータを探す場合はどのようにすればよいか?

文字の場合は、文字コードを用いてハッシュ値を作れば良い。

int hash_func( char* s ) {
   int sum = 0 ;
   for( int i = 0 ; s[i] != '¥0' ; i++ )
      sum += s[i] ;
   return sum % HASE_SIZE ;
}

しかし、この方法では、文字の並び順が違うだけ(“ABC”,”CBA”,”BBB”)に対して、 同じハッシュ値となってしまう。 英文字の場合は文字数も限られ、文字コード的には末尾4bitが変化するだけであり、 上位ビットは文字数に左右されることになる。 この場合、同じような文字数であれば、末尾4bitの不規則性も平均化されて、 近いハッシュ値になることが懸念される。

そこで、文字コード的に変化のある部分が、数値的に全体に影響を及ぼし、 最終的な値が広く分布するように以下のような計算とする場合が多い。

// 積算部のみ
sum = ( sum * (小さめの素数) + s[i] ) % (大きめの素数) ;

このような考え方は、疑似乱数を生成する方式と近い部分が多い。

DNSとメール

DNSとドメイン名

インターネットでの通信では、IPプロトコルでコンピュータを指定するが、IPアドレスは無機質で覚えるのが大変であり、これをサポートするのが、IPアドレスの電話帳でもある DNS(Domain Name Service) である。

コンピュータでサービスに使うコンピュータには、ドメイン名を割り振る。ドメイン名は、www.ei.fukui-nct.ac.jp といったピリオド区切りの名前であり、以下のような意味を持つ。

www. ei. fukui-nct. ac. jp
ホスト名 サブドメイン 組織ドメイン 組織種別 国ドメイン

ただしアメリカでは、国ドメインを一般的に使わない。また最近では、世界的な企業では国ドメインが意味をなさないので、アメリカ以外でも .com や .net といった、トップレベルドメインが使われる。様々なサービスを展開している企業では、組織種別が意味をなさないため、toyota.jp といったものも増えてきた。

以下に、主要な組織ドメイン・国ドメインをあげる。

このドメイン名から、IPアドレスを調べる DNS は、ポート番号53,UDP を使ったサービスで、一般的な機器はその組織用の DNS サーバに接続して名前からIPアドレスを知ることができる。各組織の DNSサーバは、上位サーバが設けられ調べられない IP アドレスは、さらに上位のサーバに問合せが行われる。

DNSの問合せには、nslookup というコマンドを用いる。

$ nslookup www.u-fukui.ac.jp     # 福井大学のWebサーバの問合せ
Server:		192.168.xx.xx
Address:	192.168.xx.xx#53

Non-authoritative answer:        # この例では、複数のコンピュータの
Name:	www.u-fukui.ac.jp        # IPアドレスが求まっている。
Address: 220.110.205.26          # 負荷分散を目的とした
Name:	www.u-fukui.ac.jp        # ラウンドロビン DNS のため
Address: 202.19.136.96
:

DNSの問合せには、ドメイン名からIPアドレスを求める「正引き」とは反対に、IPアドレスからドメイン名を求める「逆引き」もある。この機能を使って、アクセスしてきたコンピュータの逆引きを行うことで、どういった組織からのアクセスかを調べることができ、危険な組織からであればアクセスを拒否するようにサーバを設定したりする。

$ nslookup 192.156.146.100       # 福井高専のWebサーバの問合せ
 :
Non-authoritative answer:
100.146.156.192.in-addr.arpa	name = sv1.ip.fukui-nct.ac.jp.
 :

パソコンがインターネットに接続できない場合は、DNS のトラブルが原因の場合もある。こういった場合には、Google が、IPアドレス 8.8.8.8 でDNSサーバを公開している。これを使って DNS のトラブルを調べることも多い。

$ nslookup www.u-fukui.ac.jp 8.8.8.8

最近のマルウェアによる攻撃手法の1つに、DNS ポイズニングという手法がある。
マルウェアに感染した際に、パソコンの DNS の設定を攻撃者用の DNS に変更することで、偽物のコンピュータに接続させる手法。

メール

電子メールは、非常に迅速にメッセージを相手に届けることができ、そのメッセージを蓄積・加 工・編集・転送できる。また、音声や画像といった情報も、複雑な文字情報に置き換えることで、 転送できるようになっている。

メールは、foo@example.co.jp といったような、ユーザ名とドメイン名から構成される。

foo @ example.co.jp
ユーザ名 ドメイン名

メールは、直接相手のコンピュータにメールが届くわけではない。メールは、相手のメールサーバまでメールを届ける SMTP プロトコルと、メールサーバから自分のメールを取り出す POP や IMAP というプロトコルによって行われる。

例えば、A さん(aaa@foo.co.jp) から、Bさん(bbb@bar.co.jp)にメールを出す場合には、送信処理で…

  1. Aさんは、メールソフトでメールを出す。この時、メールは、Aさんの利用しているメールサーバ(A-server)に SMTP で送る
  2. A-server は、メールの To: の部分の ドメイン名部分より送付先のメールサーバを見つける。[MX]
  3. 送付先の ドメイン名 から、IPアドレスを調べ、メールは SMTP で相手のメールサーバ(B-server)に送られる
  4. B-server は、メールの ユーザ名 部分をみて、各ユーザ毎にメール内容を保存する。

この後、Bさんは、自分宛のメールを受信するには…

  1. Bさんは、メールソフトでメールを受信しようとすると、メールサーバ(B-server)に、POP または IMAP で接続する。
  2. 接続時には、ユーザ名とパスワードで本人を確認する。
  3. POP であれば、新着メールをパソコン側にダウンロードし、一般的にメールはサーバから削除される。
  4. IMAP であれば、ユーザが読みたいメールをパソコンに転送し表示する。メールは削除を行わない限り、サーバに残る。

このプロトコルの流れで、注目すべき点は、SMTP でメールを送る際に、ユーザ確認が行われないことである。このため、メールでは現在でも迷惑メール(spam)を無くすことが困難となっている。

最近では、メールを自分のメールサーバに送る前に、POP/IMAP でサーバに接続して認証を受けてからでないとメールを出せないようにするなどの対応を取っているが、自組織からは、認証無しで SMTP でメールを出せる場合も多い。

[MX]メールアドレスのドメイン名では、ホスト名部分やサブドメインは省略されることも多い。送信先のメールサーバを見つける場合には、DNS の MX レコードを参照する。

$ nslookup -query=MX fukui-nct.ac.jp 8.8.8.8
 :
Non-authoritative answer:
fukui-nct.ac.jp	mail exchanger = 10 pomme.ip.fukui-nct.ac.jp.
fukui-nct.ac.jp	mail exchanger = 20 peche.ip.fukui-nct.ac.

[spam]迷惑メールの対策として、以下のような対策が行われている。

  • 組織外からメールを受信した時は、”To:”の送り先が組織内の人である確認をする。(オープンリレー対策)
  • ファイアウォールで、メールサーバ以外の機器からSMTP(ポート番号25)の接続を禁止する。(OP25B)
  • SPF,DKIM といった送信ドメインの認証を行う。
    $ nslookup -query=TXT xxx.fukui-nct.ac.jp 8.8.8.8
     :
    Non-authoritative answer:
    xxx.fukui-nct.ac.jp	text = "v=spf1 +ip4:xxx.xxx.xxx.xxx +a ~all"
    

ハッシュ法

2分木なども終わって、検索処理のさらなる高速化として、 ハッシュ法を説明する。

オープンアドレス法

電話番号が記録されているのかどうかを探す処理を考えると、 最も単純な方法は、電話番号を配列の添字にする方法となる。

int array[ 1000000 ] ; // 局番2桁+4桁
void entry( int tel ) {
   array[ tel ] = tel ;
}
int search( int tel ) {
   if ( array[ tel ] == 0 ) // O(1) のアルゴリズム
      return 0 ;
   else
      return 1 ;
}

しかしこの方法では、0778621111 といった番号も考えると、 巨大なメモリを必要として、非現実的となる。 この際の解決法がハッシュ法で、データ件数が少なければ、 例えば電話番号の末尾2桁がおなじデータの発生する確率は低い。 もし、電話番号末尾2桁が同じでも、その番号の次の場所に保存するなどすればよい。

#define SIZE 100     // ハッシュ表のサイズ
int hash[ SIZE ] ;   // ハッシュ表
int hash_func( int phone ) {   // hash_func:ハッシュ関数
   return phone % SIZE ;
}
void entry( int phone ) {
int idx = hash_func( phone ) ; // idx:ハッシュ値
   while( hash[ idx ] != 0 )   // データ件数100で無限ループだけど...
      idx = (idx + 1) % SIZE ;
   hash[ idx ] = phone ;
}
int search( int phone ) {
   int idx = hash_func( phone ) ;
   while( hash[ idx ] != 0 ) {
      if ( hash[ idx ] == phone )
         return 1 ;
      idx = (idx + 1) % SIZE ;
   }
   return 0 ;
}

チェイン法

オープンアドレス法では、次の空き場所を探して保存するが、 表サイズよりもデータ件数を多く保存することはできない。

表が埋まって、同じハッシュ値のデータがでてきたら、同じハッシュ値どうしを リスト構造で保存する方法はチェイン法と呼ばれる。

struct List *hash[ SIZE ] ; // ポインタはNULLで全て初期化
void entry( int phone ) {
   int idx = hash_func( phone ) ;
   hash[ idx ] = cons( phone , hash[ idx ] ) ;
}
int search( int phone ) {
   int idx = hash_func( phone ) ;
   struct List* p ;
   for( p = hash[ idx ] ;
        p != NULL ;
        p = p->next )
   {
      if ( p->data == phone )
         return 1 ;
   }
   return 0 ;
}

情報構造論はテスト返却

情報構造論は、来週不在となるので、授業時間を振り替えてテスト返却を行った。

データベースのテスト返却

後期中間試験が終わり、あわてて採点していたデータベースの返却。
来週が不在となるので、課題を出すなら、12/1 17:00 までとアナウンス。

データベースの設計

返却を終え、残り時間は後半の説明。

データベース設計には、概念設計、論理設計、物理設計に分けられる。
概念設計では、データベースによって管理の対象とするものを現実の世界から抽出して設計を行う。一般的にはER図などを描きながら設計を行う。論理設計では、どのようなデータモデルで作成するのかを設計。通常であれば、リレーショナルモデルで概念設計に沿って設計を行う。物理設計では、データベースの効率を考えながら設計を行い、インデックスをどう作成するかなどを設計する。

ER図とは、データの対象で具体的な物や人といった実体(Entity)と、その実体の間の関連(Relation)であらわされるものを、図にして表現したもの。ER図では、実体を長方形、関連をひし形、属性を楕円であらわす。属性のなかでキーとなるものには、下線をつけて表す。ER図の表現には、色々な方式があるが、Peter Chen記法で説明を行う。

このような、プログラム開発での考えを表すための図には、UML(Uniformed Modeling Language)というものもある。ER図は、データ構造を表現するための構造図と、処理を表現する振る舞い図がある。

iMacの時計のずれ

自室のiMacの時計が5分もずれてた。原因は、ntp サーバの先頭に、故障で運用を止めたサーバが書いてあった。そりゃずれるわな。

Peter Chen記法(ER図)

データベースのテスト問題を考えるべくWeb閲覧中。授業後半で説明するER図の書き方には様々なものがある。後半の授業用にメモ。

  • Peter Chen記法実体を長方形関連をひし形属性を角丸長方形で描く最もシンプルな書き方。授業では、この方式で説明している。
  • IDEF1X(Integration Definition)記法:アメリカ標準技術研究所(NIST)が規格化。
  • IE(Information Engineering)記法:データベース設計に特化した、ER図表現法

図は、参照元サイトからの引用

家族のGoogleアカウントへの攻撃

うちの奥さんに、Google さんから、「あなたのアカウントに台湾からアクセスがありました」といったメールが届く。海外に遊びに行ってるわけでもなく、まずはメール自体が「フィッシングメール」かどうか確かめる。この文面からすると、アカウントにアクセスがあったけど、国外でのアクセスは異常なのでブロックしたという雰囲気。つまり、パスワードが漏れている可能性が高い。

使い回しパスワードは危険

パスワードの使用状況を聞いてみたら、gmail のメールアドレスで、複数の Web サービスを利用していて、そのパスワードが全部同じ。これからすると、使っている Web サービスのどこかで認証情報が盗まれ、そのアカウントで別の Web サービスに侵入が行われたと考えるべき。典型的な、共通パスワード利用者への辞書攻撃。

お金系は2段階認証が必須

ということで、早々に (1)Googleのパスワード変更と2段階認証設定、(2)Google IDと同じパスワードを使っている他のWeb サービスのパスワード変更を行った。特に金融系とか通販でクレジットカードを入力しているものは、特に。ただ、よく使っていたクレジットカードはサービス停止で切り替えたようで、多少は安心。(3)最後に Apple ID, Amazon, Facebook といったものも、2段階認証をONにする。

専門基礎3-キルヒホッフの法則

オームの法則での合成抵抗などの理解ができたところで、キルヒホッフの法則の説明。

2電源3抵抗の回路をキルヒホッフで解く

2電源3抵抗の問題で、オームの法則を使って式を立てる前に、電位のイメージを水の高さでイメージして、電流が合流してGNDまで落ちていく様を見せるための資料。

この電位の考えにもとづいて、式を立てると以下の連立方程式が求まる。あとは、E1,E2,R1,R2,R3の値が与えられれば、I1,I2,I3を求めることができる。

(さらに…)