DHCPについて調べてみた

Advent Calendar 6日目の記事です。
ちょっと書くのが遅れましたが、許してください。
http://www.adventar.org/calendars/638

今回は身近なプロトコルのDHCPについて調べてみました。

DHCPって何?

Dynamic Host Configuration Protocol(DHCP)と言います。
このプロトコルはネットワークにホストが接続する際に動的に設定をしてくれる優れものです。
パソコンにLANケーブルをさした時とか、無線LANに接続した時とか勝手にIPアドレスが設定されますよね?
それがこのDHCPです。

DHCPで設定できる項目

DHCPにはOptionという機能があり、接続するホストに対して様々な設定をすることができます。
これに関しては配布する側(DHCP Server)と付与される側(Client)の双方が対応してることが条件です。
以下が設定できる項目である。

  • Host Name
  • IP Address, Subnet Mask
  • Default Route(Gateway)
  • DNS Server, DNS Domain name
  • NIS Server, NIS Domain name
  • Printer Server
  • NTP Server

DHCPのパケット

DHCPはどのような通信をして設定を流しこむのか、少しレイヤーを下げて考えてみましょう。
DHCP Serverは配布するIPの範囲を準備しており(アドレスプール)、
その範囲からClientに対して順番にIPを振っていきます(リースという)。

  1. DHCP Clientがネットワークに接続する。
  2. ClientがDHCP DISCOVERパケットをブロードキャストする。
  3. Serverがアドレスプールから候補を取ってきて、DISCOVERパケットを投げたClientのMac Address向けに返信します。(DHCP OFFER)
  4. ClientはそのネットワークでServerから送られてきたIPが既に使用されていないか確認して、DHCP Serverに使用承認を依頼する。(DHCP REQUEST)
  5. 使用承認を受け取ったServerはClientに使用OKのパケット(DHCP ACK)を送信すると同時に、リース済みアドレスとして管理する。

このように4回ぐらいのやりとりが行われて設定が流し込まれます。

DHCP サーバが複数台有った場合

DHCPでよくあるのが、ネットワーク内にDHCPサーバが2台有った場合の問題です。
ネットワークはとてもシンプルですので先に返事が来たサーバの設定を受け取ります。
ネットワーク内のパケットを見てみるときちんとわかるので、トラブルシューティングの際はパケットキャプチャソフトで調べるのは必須です。

# 時間ないのでここでsubmitしちゃおっと。。。
# 時間あるときにコード書いていきます

DHCPのパケットを擬似的に飛ばしてみた

ここから少し楽しいことをします。
DHCPパケットをrubyを使って生成してサーバとお話します。

今回はnet-dhcp-ruby(github)を使います。
なんかgemで入るみたいなのでパパっと入れちゃいます。

追加で必要なのでこちらも

赤鼻のトナカイ – 萌え萌えブログ///キャワワ(^^)/

みなさん、こんにちは!!
萌え萌えブログ///キャワワ(^^)/を書かせていただいているjkです。
前回は固い内容でお送りしましたが
今回はすごくやわらかい内容をお送りしたいと思います。

クリスマスまで残り三週間となりました。
どんどん町がクリスマスカラーに染まっていき
大きなツリーや、きらびやかなライトが町を彩っていく中
それに合わせて町中にクリスマスソングが流れています。
今日は、その中のひとつ「赤鼻のトナカイ」について書いていきたいと思います。

みなさん「赤鼻のトナカイ」という歌を知っていますか?
真っ赤なおはなの~から始まるクリスマスソングの定番だと思います。
みなさんは、この歌にこめられた物語をご存知ですか?

「真っ赤なお鼻のトナカイさんは
  いつもみんなのわらいもの
   でもその年のクリスマスの日
    サンタのおじさんはいいました
     暗い夜道はぴかぴかの
      おまえの鼻が役に立つのさ
       いつも泣いてたトナカイさんは
        今宵こそはとよろこびました」

という歌詞ですよね!!
最後までは知らなかったという人も多かったかも知れませんが
話の大筋は
「赤い鼻のトナカイがいる」
「いつもわらいものにされていた」
「でもサンタのおじさんが、お前の鼻は役に立つと言ってくれた」
「トナカイは今宵こそはとよろこんだ」ですよね!

わらいものにされていたトナカイが
サンタのおじさんの言葉で自分自身に自信をつけるという話なのですが
この話には実は裏話があるのです…

この歌の原案には「ルドルフ 赤鼻のトナカイ」という
ロバート・L・メイさんが書かれた児童書が使われています。

このロバートさんが書かれた「ルドルフ 赤鼻のトナカイ」は
”生まれつき鼻の赤いトナカイ「ルドルフ」は
 みんなに馬鹿にされ悲しい日々を送っていました。
 ところがあるクリスマスイブのこと、
 8頭のトナカイがサンタクロースを乗せて出発したところ
 深い霧が立ち込めて出発することができなくなりました。
 煙突を探すことのできないサンタクロースは困ってしまいます。
 どうしようかとサンタクロースが悩んでいると
 人だかりができており、その注目の的になっているのが
 ルドルフでした。
 なぜならルドルフの鼻がピカピカ光っていたからです。
 サンタクロースがルドルフに近づくとルドルフは泣いていました。
 自分の赤い鼻を笑われていると思ったからです。
 しかしサンタクロースはルドルフにお願いをします。
 「君はみんなとは違う。でも、だからすごいんだ。
  君のピカピカの赤鼻はみんなとは違うけれど、暗い夜道を照らすことができる。
  だから役に立つんだよ!」
 そして、ルドルフの活躍によって無事にプレゼントを届けられ
 ルドルフは一躍みんなにあこがれるトナカイになりました。”

実はこの話、ロバートさんが自身の娘のために即興で作ったお話なのです。
 
当時ロバートさんは寝たきりの奥さんと幼い娘を抱えて
とても貧乏な生活を送っていました。
12月のある日、娘はロバートに
「どうしてわたしのママはみんなのママと違うの?」と聞きます。
ロバートは娘になんと答えていいか分かりません。
そこでロバートは娘を喜ばせるために
即興で話を聞かせます。
たとえ他の人と違っていても、いつかきっと幸せになることができると
伝えるために…

「赤鼻のトナカイ」には、そんな優しい思いがこもった話なのです。

 
どうでしたでしょうか?
だいぶ長くなりましたが、たまにはItの話ばかりではなく
このような話をいいかなと思い書かせていただきました。
クリスマスでの話題にでも使ってください!

それでは、みなさんにメリークリスマス!! 

 
 

Arduinoでビンゴマシーン① 

この記事はAdvent Calendar 2014 4日目の記事です。
http://www.adventar.org/calendars/638

初めまして44と申します。
今回は二桁の7セグLEDで二桁の数字を表示するためのプログラムを紹介したいと思います。
Aruduinoの回路はArduinoと7セグLEDの接続で紹介しております。

7セグに二桁の数字を表示

ピンの設定

setupという関数はArduinoが起動した時に呼び出される関数です。
pinMode(ピン番号,OUTPUT)でそのピンの出力モードに設定します。
10,11番ピンは一桁目、二桁目の表示の切り替えに使います。

7セグ

上の画像は各セグメントがArduinoのどのピンに繋がっているかを示しています。

表示するためのプログラム

int型のfont配列には数値を表示するための各ピンのパラメータが入っています。
出力をHIGH(1)に設定するとセグメントが点き、LOW(0)に設定すると点きません。

例えば7を表示するには、
a(D2),b(D3),c(D4)はHIGHで、d(D5),e(D6),f(D7),g(D8)はLOWで出力します。
7セグ7

このようにして10の位、1の位を高速で交互に表示することで二桁の数値を表示することができます。

次回はC#でランダムに番号を出力し、番号を管理するプログラムとAruduinoのシリアル通信について紹介したいと思います。

Arduinoと7セグLEDの接続

この記事はAdvent Calendar 2014 2日目の記事です。
http://www.adventar.org/calendars/638

出だしとなるこの記事で皆にプレッシャーを与えれるよう頑張ります。

Arduino

昔電子工作をするにあたって必要な知識は、トランジスタ・コンデンサ・抵抗・論理回路等々様々な知識が必要で計算もとても難しく面倒なものでした。パソコンとの接続まで行おうものならまた労力が更に増えました。

その電子工作を簡単に行えるようにマイコンと集権機器を整備したのがArduinoです。

ジャンパピンと呼ばれる導線で、端子とLED等の部品を繋ぎます。そして、USBでArduinoとPCを接続してC言語でプログラミングするとあっという間にLEDが光る回路の完成です。

回路図・ソフトウェアなどは公開されていて、自分だけのArduinoの基板を作ることも可能です。今回はArduinoの中でも小さく、安価でUSBが標準で接続できる「ArduinoNano」を使用します。

部品

LED

LEDはみんな知ってるLEDです。3Vくらいの電圧をかければすぐに光ってくれるものの、極性(プラスとマイナス)があるので少々みんなを悩ませます。5Vくらいの電源から3VのLEDのを光らせてあげたい場合は抵抗器を使用します。電流を制限していい感じに3Vくらいの電圧を作ってくれます。プラス端子をアノードマイナス端子をカソードと読んでいます。
2014-12-02 blog LED


ブレッドボード

穴がいっぱい開いている板です。ジャンパピン・ArduinoNano・LED・抵抗器などを刺すだけで接続されるのでハンダ付けをする必要がありません。下の図の右側のように内部的に結線されています。
2014-12-02 blog Breadboard


7セグメントLED

バック・トゥ・ザ・フューチャーのアレです(正確には違いますが)。7個のLEDを組み合わせていい感じに数字を表示できるようにした部品です。7個のLEDのプラス端子、マナス端子をそれぞれ出して14本の端子が出ているのは格好が悪いので、マイナス端子もしくはプラス端子をそれぞれくっつけてしまうのが普通です。プラス端子をくっつけたのをアノードコモン、マイナス端子をくっつけたのをカソードコモンと呼びます。
2014-12-02 blog 7seg kairo

組み立て

今回はアノードコモン型の7セグを2桁を光らすことを目標としていたので、PNP型と呼ばれるトランジスタを使用しました。これは、信号を流すと多くの電力を7セグに供給してくれます。マイコンだけでは7個のLED全部を光らせることは出来ないので使用します。トランジスタで、右の7セグのみに電力を供給し、光らせる。これを左も行い高速で繰り返すことで人は同時に点灯しているものと錯覚します。
2014-12-02 blog body

ソフトウェアは、明日以降のAdvent Calendarで@44x1carbonさんに託します。

使用した部品

  • 抵抗器330Ω 7個
  • 抵抗器数キロΩ 2個
  • PNP型トランジスタ 2SA1300 2個
  • ブレッドボード
  • Arduino Nano
  • ジャンパピン
    Arduinoを含めずに合計400円程度で手に入る部品です。

図を作成したソフトfritzing

JKが語るIT問題 – 萌え萌えブログ///キャワワ(^^)/

スマートフォンなどの電子通信メディアの普及によって
我々はItによる恩恵を多大に受けてきたが
それに伴って様々な問題も発生してきた。

昨今のItによるトラブルで目立つのはlineなどの
コミュニケーションソフトによるものであると筆者は思う。
lineなどのコミュニケーションの増加により
数々の人達とつながれるようになって
いつでも人と人とのつながりを感じれるようになったが
反面情報モラルに疎い人たちのトラブルが目立ってきた。

未成年者のlineによるトラブル件数は
年を経ることに増加している。
それは情報モラル(情報社会を生きぬき,健全に発展させていく上で,
すべての国民が身につけておくべき考え方や態度)が学校などの教育機関で
重要度が正しく認識されていないことに原因があると思う。

所詮子供のやることと大人は考えがちだが
実際の問題として、いじめなどのクラス内の問題から
自殺などの社会問題まで発展していき
それは決して無視することのできない問題だということ
もう一度認識していただきたい。

子供達の情報モラルを考える前に
今一度我々大人たちの情報モラルを見直していただきたいと思う。

Advent Calendar 2014

こんにちはITCreate部のかみじんです。

今日から毎日クリスマスまでの日を数えるアドベントカレンダーを開始します。
http://www.adventar.org/calendars/638

みんな趣味が幅広く、IT系だけでもウェブ ネットワーク 組み込み アプリケーション等々。
様々な記事が毎日公開されていくと思います。

では!

[jQuery] $.ajaxで Content-Typeを指定する

$.ajaxでpost送信した場合に、
Content-Typeがapplication/jsonにならなかったので指定して送る方法です。

これでContent-Typeを指定して送信することが出来ます。

ポイントは、 contentType:’application/json’ これです。

Content-Typeって?

受取先にこのファイルはこういう形式です。と伝えるヘッダ。

JSONの場合は application/jsonなんですが、
フォームデータの場合だとapplication/x-www-form-urlencodedになっていて
サーバ側でうまくデータの受取ができないことがあります。
その場合にjavascript側で指定してあげれば綺麗に処理できるってことですね。

jQuery API Document

こちらに詳しく書いています
http://api.jquery.com/jquery.ajax/

[PHP] str_padで数値の桁揃えを行う

str_pad関数で簡単にできる

printf();よりきれいな気がします。

str_padとは

文字列を固定長の他の文字で埋める関数です

この関数は文字列 input の左、右または両側を指定した長さで埋めます。オプションの引数 pad_string が指定されていない場合は、 input は空白で埋められ、それ以外の場合は、 pad_string からの文字で制限まで埋められます。

pad_typeについて

桁揃えとかに最適ですね。

Linux Kernel Moduleを起動時にロードする

/etc/modules

こちらのファイルに記述されているモジュールはブート時にロードされます。

記述された1行1モジュールとしてロードされます。
引数を指定することもできます。
“#” でコメントアウトできます。

KVMをモジュールを起動時にロードする

example.

KVMの上にKVMを動かす [Nested KVM]

KVMで立ち上げた仮想環境の上にKVMで仮想環境を立ち上げる方法です。

環境
Debian GNU/Linux 7 (wheezy)
kvm_intel (3.2.0-4-amd64)

kvm_intelの情報を確認する

nestedの項目があれば、値を確認します。

kvm_intelのnestedを変更

/etc/modprobe.d/にconfファイルを追加して設定します。
kvm_intelを再読み込みすればすぐ反映されます。

これらのファイルがmodule用の設定ファイルです。

optionの設定は、
options [modulename] [option…]
になります。
詳しくは man 5 modprobe.d

確認

これでKVMの上にKVMの立てることができます。