print "r,b,swpd,free,buff,cache,si,so,bi,bo,in,cs,us,sy,id,wa,st,\n"; while(<>){ if(/\d/){ chomp; $_ =~ s/\t//; @array = split / /, $_; foreach(@array){ if($_ =~ /.+/){ print; print","; } } print "\n"; } }
このブログを検索
2010/12/21
vmstat
2010/11/05
print reverse<>;
引数に指定したファイルの内容をすべて表示するperlスクリプトを書け、と言われたら、私なら以下のように書く。
そしてperlって簡単だなァ・・・とニタニタする。しかし、実は以下のように書けばいいのである。
そしてもっと恐ろしいことには、
でよい。そして、このときの引数は複数あってもよい。指定されただけのファイルについて、内容を表示する。そして、以下のようにすると、ファイル内容を逆順に、つまり最後の行から順に先頭の行まで表示する・・・
・・・・・。これは、実は一番最後のスクリプトを見たのである。そして、これでこうならもしかして、と、今書いたのと逆にさかのぼっていったのである。
これは、「初めてのPerl」からのネタです。「初P」では「ダイヤモンド演算子」ということでその使い方が説明してあるのでそれを読んでいればわかることですが、私はここを飛ばしていたのです。そして5章のハッシュのところを読み、最後の問題の答えを見ていたら、6章の答えである
が目に入ったわけです。今日は仕事がちょっとヒマだったので「初P」を読んでいたのですが、何度か吹き出しました。こういう冗談って、なかなか書けないですよね。絵文字も、(笑)ともかかずに、マジメな顔してあきらかに冗談であることがわかる文章を書くのって、難しいものです。
open IN,"<".$ARGV[0]; while(){ print; }
そしてperlって簡単だなァ・・・とニタニタする。しかし、実は以下のように書けばいいのである。
while(<>){ print; }
そしてもっと恐ろしいことには、
print <>;
でよい。そして、このときの引数は複数あってもよい。指定されただけのファイルについて、内容を表示する。そして、以下のようにすると、ファイル内容を逆順に、つまり最後の行から順に先頭の行まで表示する・・・
print reverse<>;
・・・・・。これは、実は一番最後のスクリプトを見たのである。そして、これでこうならもしかして、と、今書いたのと逆にさかのぼっていったのである。
これは、「初めてのPerl」からのネタです。「初P」では「ダイヤモンド演算子」ということでその使い方が説明してあるのでそれを読んでいればわかることですが、私はここを飛ばしていたのです。そして5章のハッシュのところを読み、最後の問題の答えを見ていたら、6章の答えである
print reverse<>;
が目に入ったわけです。今日は仕事がちょっとヒマだったので「初P」を読んでいたのですが、何度か吹き出しました。こういう冗談って、なかなか書けないですよね。絵文字も、(笑)ともかかずに、マジメな顔してあきらかに冗談であることがわかる文章を書くのって、難しいものです。
オブジェクト指向@perl
これもほぼ丸パクリである。
元は車だったのだが、人間に変えた。
実行した結果。
最後の「死にました」は、何もしていないのに表示される。
終了するときに自動的にデストラクタが動いているようだ。
こういうものは、「C++入門」とかを読んで何度かやってみたことがあるが、いつもサンプルを写して、一部を今回のように変えて、「フーン・・・」で終わっている。おもしろそうだな、とは思うのだが・・・。
元は車だったのだが、人間に変えた。
package Man; sub new{ my $this = shift; my ( $name, $gender ) = @_ ; print "$nameさんが誕生しました。\n" ; my $man = {"Name" => $name, "Gender" => $gender, "Age" => 0, "Money" => 0 } ; bless $man, $this; return $man ; } # デストラクタ sub DESTROY{ my $this = shift; print "$this->{Name}($this->{Age})さんが死にました。\n"; } sub tosi{ $this = shift ; $this->{Age}++; print "$this->{Name}さんが$this->{Age}才になりました。\n\n" ; } sub tellage{ my $this = shift; print "わたしは$this->{Name}、$this->{Age}才です。\n"; } package main; my $taro = new Man "太郎", "Male"; my $hanako = new Man "花子", "Female"; $taro->tosi; print"\n"; $taro->tosi; $hanako->tellage; $hanako->tosi; $hanako->tosi; $hanako->tosi; $hanako->tosi; $hanako->tellage; print"\n";
実行した結果。
C:\>perl man.pl 太郎さんが誕生しました。 花子さんが誕生しました。 太郎さんが1才になりました。 太郎さんが2才になりました。 わたしは花子、0才です。 花子さんが1才になりました。 花子さんが2才になりました。 花子さんが3才になりました。 花子さんが4才になりました。 わたしは花子、4才です。 太郎(2)さんが死にました。 花子(4)さんが死にました。 C:\>
最後の「死にました」は、何もしていないのに表示される。
終了するときに自動的にデストラクタが動いているようだ。
こういうものは、「C++入門」とかを読んで何度かやってみたことがあるが、いつもサンプルを写して、一部を今回のように変えて、「フーン・・・」で終わっている。おもしろそうだな、とは思うのだが・・・。
2010/10/31
動的に二次元配列を作成する
$ref_array1 = [apple, banana, cherry, donkey]; $ref_array2 = [monkey, dog, cat, fish, horse, sheep]; push(@a,$ref_array); push(@a,$ref_array2);
このようにして、配列のリファレンスを変数に格納し、それを配列にpushしていくことはできる。
しかし、STDINとか、ファイルを読むとかして作る配列を、同じようにpushできない。
while(){ chomp; @b=split / /, $_; push (@a,@b); }
こういう風にすると、単に配列を追加するだけになる。そうではなくて、2次元配列にしたい。
dog cat horse orange banana apple
と入力したら、
@a=([dog cat horse],[orange banana apple]);
という配列にしたいのである。
while(){ chomp; @b=split / /, $_; $ref=\@b; push (@a,$ref); } for $i (0 .. $#a) { for $j (0 .. $#{$a[$i]}) { print '$a[' . $i . '][' . $j . ']=' . $a[$i][$j] . ' '; } print "\n"; }
固定文字列のときは、スカラー変数に[]で囲った配列を代入し、そのスカラー変数を配列にpushしたから、
$ref=\@b
として、それを同じように配列にpushしたらできるのかと思ったら、
a b c d e f ^Z $a[0][0]=d $a[0][1]=e $a[0][2]=f $a[1][0]=d $a[1][1]=e $a[1][2]=f
という風になってしまう。2行目は望みどおりの結果なのだが、1行目も2行目と同じになってしまっている。
「スカラー変数」
「配列」
「リファレンス」
「[]で囲って,で区切ったた複数の文字列」
「()で囲って,で区切った複数の文字列」
「配列に\をつけたもの \@array」
「スカラー変数に\をつけたもの \$var」
これらの意味がよくわからず混同している。
[]で囲った文字列を「無名配列」と呼び、
$ref = ["apple", "orange", "banana"];
のようにした時、$ref に代入されるのは「無名配列へのリファレンス」だそうだ。
つまり、$ref には配列そのものの値が入っているのではなく、配列へのポインタが入っている。だから、さっきのスクリプトでSTDINが2行入力されたときに、1行目のポインタの内容が2行目で上書きされ、@aに入っているポインタが指す内容が同じになる、というわけか。
じゃあどうすればいいのか・・・。リファレンスについては、「続・はじめてのPerl」に書いてあるそうだ。買わなきゃだめか・・・。
while () { chomp(); push(@a, [ split(" ") ]); } for $i (0 .. $#a) { for $j (0 .. $#{$a[$i]}) { print '$a[' . $i . '][' . $j . ']=' . $a[$i][$j] . ' '; } print "\n"; }
とりあえずこれで、やりたいことはできた。某所からの丸パクリであるが。
2010/10/23
MeCab
MeCabというものを知った。あの、食べる「めかぶ」だ。日本語の形態素解析をするソフトである。Yahooのapiとか、「ちゃせん」とかいろいろあるようだが、これが新しくて速いようだ。
形態素解析という言葉は、何度か耳にしている。初めて聞いたのは、コールセンターなどに寄せられた問い合わせ内容を分析するソフトの説明を聞いたときだ。その後、いわゆる「人口無能」というもの、「意味不明だがなんとなく文章として成立している」というものを作るのに使われているということだった。
「言葉をコンピュータで解析する」とか、自動翻訳とかいうものについては、私はとても否定的に考えている。つまり、「そんなのはムリだ」という考えである。実際、形態素解析を使って一番おもしろいのは「無能」であり、自動翻訳はせいぜい、その文章に含まれる単語を辞書で引いて並べるくらいのことしかできていない。
私は語学は好きだが、外国語を読むというのはつまり辞書を引くことである。そして、辞書を引くというのはある単語をリストのなかから探すことでは、ない。それだけなら、コンピューターでできるだろう。
しかし、まったく未知の文章を辞書をひいて理解しようとした人にはわかるだろうが、辞書があっても引けないことがある。まずは動詞の活用。辞書に載っている動詞は原型だけである。そして動詞の活用の仕方は多様で、単純に規則化することもできない。それから同音意義語や、特別な言い回し、とにかく例外だらけなのである。
文法という、なまじ法則化されたようなものがあるから、人は言葉を科学的に扱おうとするが、結局言葉は科学の対象にはならない。極端なことを言うと、言葉というのは科学を拒否するものである。自動翻訳の精度もずいぶん向上したようだが、聞いた話ではとにかく大量の例文を持つそうである。そしてその中から同じ表現をさがしてくる、という方法がとられているようだ。
話がそれたが、perlでmecabを使ってみた。職場のWindows XPで、active perlで使ってみた。おもしろそうなので続きは家で、と思ったら、xpで使えたモジュールがvistaでインストールできなかった。vistaはよく俺を困らせる。
しかし、私はvistaを使うことをやめない。もうvistaもリリースされてずいぶんたつ。これだけたってvistaに移植されていないのには、理由があるのだ。だが、私にはさくらインターネットのレンタルサーバがある。さくらに最近mecabがインストールされたという情報を見て、sshで入って使えることを確認している。cygwinも、virtual pcもいらない。私はすでにfreebsd(だっけ)が動くサーバを持っているのだ。
さて、ではさくらでめかぶを。と、その前にcgiを動かすだけでひと騒動。まず、cgiを動かすディレクトリは決めてある。そしてパスワードを設定してある。パスワードが何か忘れている。なんとか思い出す。mecabを呼ぶperlが動くことをsshで確認する。しかしcgiにするとinternal server errorになる。いろいろ悩んだ末、permissionが777だと動かないことがわかる。755にしたら、動く。
このソースは、shift_jisで保存してあり、読み込むファイル 「jpsjis.txt」もshift_jisである。そのため、エンコード処理が入っている。
私のcgiは全部UTF8にしており、これもUTF8にしてエンコードなどしたくなかったのだが、utf8だとどうしてもうまくいかない。mecabがeuc-jpなのだろうか?cgiをやるときはいつも日本語の文字コードで悩む。日本人のハンデである。
このスクリプトは日本語でかかれた文章を形態素で「分かち書き」するだけのものである。とりあえずmecabをcgiで動かすテスト用スクリプトである。
本当にやりたいことのひとつが、アクセスログの検索後から名詞を抜き出すことだ。webalizerの検索語一覧は、複数の検索文字列をそのまま表示するので、同じ名詞が含まれていても別の検索語としてカウントされる。
というようになる。この場合、"delphi"というキーワードを数えたいのである。私のサイトだと、"delphi", "tokai", "トーカイ", "whea-logger" などがこれで数えられて上位にランクされるはずだ。
次にやりたいのが、人口無能、あるいはbot、のようなもの。すでにtwitterにたくさんあるbotである。
これらは形態素解析するだけでなく、それを再構成する必要がある。このときに使われるのが「マルコフ連鎖」とかいうリクツである。マルコフなんたらがどういうことなのかはなんとなくわかるのだが、はっきりとはわからない。だが、少なくとも形態素で分解できてその品詞まで判定してもらえば、あとはなんとかなりそうだ。
これで名詞だけを抜き出せる。$n->{posid} というのが品詞IDで、これは自由に設定できるようだが、さくらでは38になっていた。区別さえできればよいので、そのまま、「38だったらと」いう条件で$n-{surface}を表示した。
そして文章のなかで名詞の出現回数をかぞえるには、名詞を保存していき、すでにあるかを検索して、
なかったら追加する、ということをすればよい。私がやろうとしている規模であればたいしたことはないが、大量に処理するならDBが必要かな。
今、「英単語はどうなるのかな」と思ってアクセスログを読ませてみたら、逆に英単語しか表示されない。そう、日本語はエンコードされているからデコードしないといけないのだ。メンドクサイ・・・。
ログから検索文字列を抜き出し、それをデコードする処理が必要だ。これは以前作ってある。
さっきeuc_jpでデコードするのがどうこう、と言っていた件は、めかぶの辞書がeuc_jpだからだそうだ。そして辞書をUTF8に変更できるようだ。あとでやろう。
さくらのログを表示させようとして、残っているのが前日の日付であることに気づいた。1日引けば・・・と思ったところで月初だったら、年初だったら・・・とそう単純ではないことに気づいたが、
調べると簡単にできた。
とりあえずmecabがどんなものか試すスクリプト。htmlからpostしたテキストを形態素に分割して品詞等を表示する。
cgiを呼び出すhtml。cgiもこのhtmlファイルも、文字コードはutf-8で保存する。
とりあえず名詞の抽出をする。頻出単語を数えるなどをしてみるが、一般名詞と固有名詞の区別も簡単ではない。たとえば「中国国家発展改革委員会」という言葉は
中国[47]国家[38]発展[36]改革[36]委員[38]会[51]
という風に分離される。カッコ内の数字は品詞の種類を表す数値である。こういうものはくっつけたいが、なんでもくっつけるわけにもいかない。とりあえず、いろんな文章を形態素分離させてみて、どういうパターンがあるかを見て、38->36はくっつける、などとひとつひとつ決めていくしかないか。
「人口無能」であれば、その辺はテキトーにやって、頻度や乱数をつかって文章を切り貼りしていけばいい。だが、まったくの「無能」ではやっぱり面白くない。「圧縮新聞」はそれを新聞でやることによって、ある程度のもっともらしさを保っている。ツイッターのツイートやブログなどでは、文体が多様すぎて混沌としすぎる。
形態素解析という言葉は、何度か耳にしている。初めて聞いたのは、コールセンターなどに寄せられた問い合わせ内容を分析するソフトの説明を聞いたときだ。その後、いわゆる「人口無能」というもの、「意味不明だがなんとなく文章として成立している」というものを作るのに使われているということだった。
「言葉をコンピュータで解析する」とか、自動翻訳とかいうものについては、私はとても否定的に考えている。つまり、「そんなのはムリだ」という考えである。実際、形態素解析を使って一番おもしろいのは「無能」であり、自動翻訳はせいぜい、その文章に含まれる単語を辞書で引いて並べるくらいのことしかできていない。
私は語学は好きだが、外国語を読むというのはつまり辞書を引くことである。そして、辞書を引くというのはある単語をリストのなかから探すことでは、ない。それだけなら、コンピューターでできるだろう。
しかし、まったく未知の文章を辞書をひいて理解しようとした人にはわかるだろうが、辞書があっても引けないことがある。まずは動詞の活用。辞書に載っている動詞は原型だけである。そして動詞の活用の仕方は多様で、単純に規則化することもできない。それから同音意義語や、特別な言い回し、とにかく例外だらけなのである。
文法という、なまじ法則化されたようなものがあるから、人は言葉を科学的に扱おうとするが、結局言葉は科学の対象にはならない。極端なことを言うと、言葉というのは科学を拒否するものである。自動翻訳の精度もずいぶん向上したようだが、聞いた話ではとにかく大量の例文を持つそうである。そしてその中から同じ表現をさがしてくる、という方法がとられているようだ。
話がそれたが、perlでmecabを使ってみた。職場のWindows XPで、active perlで使ってみた。おもしろそうなので続きは家で、と思ったら、xpで使えたモジュールがvistaでインストールできなかった。vistaはよく俺を困らせる。
しかし、私はvistaを使うことをやめない。もうvistaもリリースされてずいぶんたつ。これだけたってvistaに移植されていないのには、理由があるのだ。だが、私にはさくらインターネットのレンタルサーバがある。さくらに最近mecabがインストールされたという情報を見て、sshで入って使えることを確認している。cygwinも、virtual pcもいらない。私はすでにfreebsd(だっけ)が動くサーバを持っているのだ。
さて、ではさくらでめかぶを。と、その前にcgiを動かすだけでひと騒動。まず、cgiを動かすディレクトリは決めてある。そしてパスワードを設定してある。パスワードが何か忘れている。なんとか思い出す。mecabを呼ぶperlが動くことをsshで確認する。しかしcgiにするとinternal server errorになる。いろいろ悩んだ末、permissionが777だと動かないことがわかる。755にしたら、動く。
#!/usr/bin/perl -w use strict; use Encode; use MeCab 0.97; open IN,"<jpsjis.txt"; print "Content-type: text/html\n"; print "\n"; print "<h3>mecab test</h3>\n"; while(<IN>){ my $str = $_; my $t = new MeCab::Tagger("-Owakati"); Encode::from_to($str, "Shift_JIS", "EUC-JP"); $str = $t->parse($str); Encode::from_to($str, "EUC-JP", "Shift_JIS"); print "<p>$str</p>\n"; } close IN;
このソースは、shift_jisで保存してあり、読み込むファイル 「jpsjis.txt」もshift_jisである。そのため、エンコード処理が入っている。
私のcgiは全部UTF8にしており、これもUTF8にしてエンコードなどしたくなかったのだが、utf8だとどうしてもうまくいかない。mecabがeuc-jpなのだろうか?cgiをやるときはいつも日本語の文字コードで悩む。日本人のハンデである。
このスクリプトは日本語でかかれた文章を形態素で「分かち書き」するだけのものである。とりあえずmecabをcgiで動かすテスト用スクリプトである。
本当にやりたいことのひとつが、アクセスログの検索後から名詞を抜き出すことだ。webalizerの検索語一覧は、複数の検索文字列をそのまま表示するので、同じ名詞が含まれていても別の検索語としてカウントされる。
"delphi ics ftp" "delphi コンポーネント テキスト ルビ" "delphi ハードコピー bitblt"
というようになる。この場合、"delphi"というキーワードを数えたいのである。私のサイトだと、"delphi", "tokai", "トーカイ", "whea-logger" などがこれで数えられて上位にランクされるはずだ。
次にやりたいのが、人口無能、あるいはbot、のようなもの。すでにtwitterにたくさんあるbotである。
これらは形態素解析するだけでなく、それを再構成する必要がある。このときに使われるのが「マルコフ連鎖」とかいうリクツである。マルコフなんたらがどういうことなのかはなんとなくわかるのだが、はっきりとはわからない。だが、少なくとも形態素で分解できてその品詞まで判定してもらえば、あとはなんとかなりそうだ。
#!/usr/bin/perl -w use strict; use Encode; use MeCab 0.97; open IN,"<jpsjis.txt" or die; print "Content-type: text/html\n"; print "\n"; print "<h3>mecab test</h3>\n"; while(<IN>){ my $m = new MeCab::Tagger (""); my $str2 = $_; Encode::from_to($str2, "Shift_JIS", "EUC-JP"); for (my $n = $m->parseToNode ($str2); $n ; $n = $n->{next}) { if($n->{posid}==38){ my $surf=$n->{surface}; Encode::from_to($surf, "EUC-JP", "Shift_JIS"); print $surf."<br>"; } } } close IN;
これで名詞だけを抜き出せる。$n->{posid} というのが品詞IDで、これは自由に設定できるようだが、さくらでは38になっていた。区別さえできればよいので、そのまま、「38だったらと」いう条件で$n-{surface}を表示した。
そして文章のなかで名詞の出現回数をかぞえるには、名詞を保存していき、すでにあるかを検索して、
なかったら追加する、ということをすればよい。私がやろうとしている規模であればたいしたことはないが、大量に処理するならDBが必要かな。
今、「英単語はどうなるのかな」と思ってアクセスログを読ませてみたら、逆に英単語しか表示されない。そう、日本語はエンコードされているからデコードしないといけないのだ。メンドクサイ・・・。
ログから検索文字列を抜き出し、それをデコードする処理が必要だ。これは以前作ってある。
さっきeuc_jpでデコードするのがどうこう、と言っていた件は、めかぶの辞書がeuc_jpだからだそうだ。そして辞書をUTF8に変更できるようだ。あとでやろう。
さくらのログを表示させようとして、残っているのが前日の日付であることに気づいた。1日引けば・・・と思ったところで月初だったら、年初だったら・・・とそう単純ではないことに気づいたが、
調べると簡単にできた。
my $yesterday = DateTime->now->subtract( days => 1 );
とりあえずmecabがどんなものか試すスクリプト。htmlからpostしたテキストを形態素に分割して品詞等を表示する。
#!/usr/bin/perl -w use strict; use CGI; use utf8; use Encode; use MeCab 0.97; my $q= CGI->new; my $value=$q->param('text'); print $q->header(-charset=>'utf-8'), $q->start_html(-title=>'mecab'), $q->p($value), $q->br; print "\n"; print "<hr>\n"; my $m = new MeCab::Tagger (""); my $str2 = $value; Encode::from_to($str2, "UTF8", "EUC-JP"); for (my $n = $m->parseToNode ($str2); $n ; $n = $n->{next}) { my $surf=$n->{surface}; Encode::from_to($surf, "EUC-JP", "UTF8"); print '<font size="5">'.$surf.' </font>'; my $feature=$n->{feature}; Encode::from_to($feature, "EUC-JP", "UTF8"); print '<font size="2">'.$feature.' </font>'; print '<font size="1">'.$n->{posid}.' </font>'; if($n->{posid}==4){ print "<br><br>"; } if($n->{posid}==9){ print "<br>"; } } print $q->end_html; exit;
cgiを呼び出すhtml。cgiもこのhtmlファイルも、文字コードはutf-8で保存する。
<html lang="ja" xml:lang="ja" xmlns="hxtp://www.w3.org/1999/xhtml"> <head> <meta hxtp-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>just post</title> </head> <body> <form action="meca6.cgi" target=_self method=post> <textarea name="text" rows="20" class=input cols="100"></textarea><br> <input type=submit value="post"> </form> </body></html>
とりあえず名詞の抽出をする。頻出単語を数えるなどをしてみるが、一般名詞と固有名詞の区別も簡単ではない。たとえば「中国国家発展改革委員会」という言葉は
中国[47]国家[38]発展[36]改革[36]委員[38]会[51]
という風に分離される。カッコ内の数字は品詞の種類を表す数値である。こういうものはくっつけたいが、なんでもくっつけるわけにもいかない。とりあえず、いろんな文章を形態素分離させてみて、どういうパターンがあるかを見て、38->36はくっつける、などとひとつひとつ決めていくしかないか。
「人口無能」であれば、その辺はテキトーにやって、頻度や乱数をつかって文章を切り貼りしていけばいい。だが、まったくの「無能」ではやっぱり面白くない。「圧縮新聞」はそれを新聞でやることによって、ある程度のもっともらしさを保っている。ツイッターのツイートやブログなどでは、文体が多様すぎて混沌としすぎる。
2010/10/02
BSCI合格
受かった・・・。844点・・・。危なかった・・・。「簡単じゃん」と思ったが、どうやらシミュレーションを間違えたようだ。シミュレーションはあまり時間をかけられないと思いろくに確認せずに終わった。確認コマンドで何を入力したかも採点されるのか?それはないか・・・。時間は10分くらいあまったかな。最後に「次へ」を押してかなり待った。3分くらい?もっと?待ちながら、『だいじょぶだいじょぶ、受かったって、絶対ダイジョブ、900点くらい取れてるって』と心の中でつぶやいていた・・・。達成感よりも安堵感、そして得点がイマイチだったことにちょっとがっかりした。
ciscoのCLIは、何の変哲もないようで、非常に工夫されていて使いやすい。
今回はガイドも買わず、クラムメディア問題集もやらず、買ったのは黒本のみ。マルチキャストの本も買ったがほとんど読まず。実機は2610を3台、合計で1万円くらいを買って、dynamipsも使った。これなしには絶対に受からなかっただろう。2610のみでも、dynamipsのみでもダメだったと思う。勉強期間は、3ヶ月弱。けっこう時間はかけた。効率はあまりよくなかったかもしれないが。おかげで問題を読んで意味がわからないものはほとんどなかった。いつもは数問は何を言っているのかすらわからないものがあるものだが。
ciscoのCLIは、何の変哲もないようで、非常に工夫されていて使いやすい。
今仕事で使っているルータとは雲泥の差だ。というのが一番感じたことだ。
だが、各プロトコルによる実装の違い、サマリーの仕方とか、パラメータの変更の仕方とか、show コマンドの名前の付け方とか、もうちょっと統一した一貫性のあるものにできないのかな、と思った。
おそらくプロトコルごとに開発者が違うのだろう・・・。
だが、各プロトコルによる実装の違い、サマリーの仕方とか、パラメータの変更の仕方とか、show コマンドの名前の付け方とか、もうちょっと統一した一貫性のあるものにできないのかな、と思った。
おそらくプロトコルごとに開発者が違うのだろう・・・。
さて次だが、3月までにTSHOOTか、ISCWとONTのどちらかをとらねばならない。
TSHOOTは英語本を買ってあるのだが、パラパラと見るとcatalystとかwirelessとかQoSとかRIPngとか、いろいろあって大変そうだ。まあ、科目数が減ったわけだから試験範囲は広いのだろう・・・。英語でTSHOOTをとる気で、それも年内に、いたが、まず無理だろうな・・・。でも、それを目指すくらいで勉強してちょうどいいくらいだろう。
2010/10/01
BSCIの準備 BGPいろいろ
show ip bgp route というコマンドはない。
weightと、local preferenceと、MED、この3つの意味がさっぱりわからない。
WEBからの引用を貼る。
local preference
local preference
LOCAL_PREF属性は,IBGP専用の属性で,AS内のBGPスピーカーに,経路情報の優先度を知らせる用途で使います。 「低速回線のピアよりも高速回線のピアを使いたい」などという場合に使います。 IBGPで同じあて先の経路情報を複数取得したとき,LOCAL_PREF値の大きい方をベストパスとして採用します。 設定できる値は0~4294967295で,何も設定しなければデフォルトで100が設定されます。
内部ASのネイバールータに対して、外部ASへの優先パスを示す属性です。Local Preferenceはルータ自身に設定される値であり、Local Preference値はデフォルトで「 100 」です。この値は高い値を持つパスが優先され使用されます。Local Preference値は、同一のAS内のルータ間でのみ交換され、発信トラフィックに影響します。
Local Preference属性は、発信トラフィックに影響を与える属性。内部ASのネイバールータに対して、外部ASへの優先パスを示す。ルータ自身に設定する。デフォルト値は「100」。高い値を持つパスが優先される。
Local Preference値は、同一のAS内のルータ間でのみ交換され、発信トラフィックに影響する。
自AS内部において、他ASに行くときに、どの対外ルータを経由すべきか指定。 AS_PATHの長さよりもLOCAL_PREFの値が優先される。 上りのトラフィック制御に適用。
ローカル プリファレンスは AS に対する指標で、その AS から特定のネットワークに到達する際にどのパスが優先されるかを示します。ローカル プリファレンス値の高いパスが優先されます。ローカル プリファレンスのデフォルト値は 100 です。
ローカル ルータにだけ関連するウェイト アトリビュートとは異なり、ローカル プリファレンスは、同じ AS 内のルータ間で交換されるアトリビュートです。MED
着信トラフィックに影響を与える属性
- 外部ASのネイバールータに対して、自身のAS内への優先パスを示す。
- 外部ASから自身のASへ、どのパスを優先させるのかを指示する唯一の属性
- デフォルト値は、「0」
- 低い値を持つパスが優先される。
- MED属性を加えた経路情報が伝わるのはは隣接するASまでで、その次のASには伝わらない。
外部ASのネイバールータに対して、自身のAS内への優先パスを示す属性です。MEDはAS内部にどのようにしてトラフィックを流し込むのかを制御できる唯一の属性です。MED値はデフォルトで「 0 」です。MED値は低い値を持つパスが優先され使用されます。MED値はAS間で交換され、その渡されたAS内では搬送されそのAS内で使用されますが次のASに送信される事はありません。MEDは着信トラフィックに影響を与えます。
MED はオプションの非推移的なアトリビュートです。 MED は、複数のエントリ ポイントがある Autonomous System(AS; 自律システム)への優先パスに関して、外部隣接ルータへの手掛りとなります。 MED は、ルートの外部メトリックとしても認識されています。 大きな MED 値よりも、小さい MED 値の方が優先されます。weight
ウェイト アトリビュートは、Cisco で定義されたアトリビュートです。このアトリビュートは、ウェイトを使用して最適なパスを選択します。ウェイトは、ルータにローカルに割り当てられます。この値が意味を持つのは、特定のルータだけです。この値は、別のルータに伝搬されたり、ルート アップデートによって伝達されたりはしません。ウェイトは 0 ~ 65,535 の数値を取ることができます。このルータが発信元のパスのウェイトはデフォルトで 32,768 に設定されており、他のパスのウェイトは 0 に設定されています。
WEIGHT属性はCisco独自の属性で、対象のルータでのみ使用される属性であり他のルータに伝達されることはありません。そのルータ自身が接続しているルートにはデフォルトで"32768"の値が割り当てられ、それ以外のルートの値は"0"になります。(WEIGHT値は0~65535で割り当てられる。)WEIGHT属性が大きいパスが優先されます。
メトリック
メトリック アトリビュートは、MULTI_EXIT_DISCRIMINATOR、MED(BGP4)、または INTER_AS(BGP3)とも呼ばれます。このアトリビュートは、AS への優先パスに関する外部隣接ルータへのヒントです。このアトリビュートは、AS への入口ポイントが複数ある場合に、特定のルートに到達するように、別の AS に対して動的に影響を与える方法を提供します。メトリックの値の小さい方が優先されます。
ローカル プリファレンスとは異なり、メトリックは AS 間で交換されます。別の AS に伝達されたメトリックは、その AS からさらに別の AS へ伝達されることはありません。特定のメトリックを持つアップデートが AS に到達すると、AS 内部ではメトリックを使用してルートが決定されます。同じアップデートが第 3 の AS に送信される場合、メトリックは 0 に戻ります。このセクションの図は、メトリックの設定を示しています。メトリックのデフォルト値は 0 です。multi exit だから、出て行くトラフィックの区別かと思ったら逆で、入ってくるトラフィックを制御するとか・・・ でも、そもそも経路の比較に使うんだから、着信も発信もないと思うんだけどな・・・ ルーティングってのは全部出て行くトラフィックのためにあるんじゃないのか・・・?
BSCIの準備 bgp peer group
BGPのピアグループを設定してみる。
まずpeer-groupを作りなさい、と言われる。
どこで作るのか?さがしたがわからない。
bgpでしか使わないから config-routerモードだと思うのだが・・・
調べてようやくわかった。
remote-asを先に設定する。
やれやれ・・・
R1(config-router)#neighbor 10.1.1.2 ? activate Enable the Address Family for this Neighbor advertise-map specify route-map for conditional advertisement advertisement-interval Minimum interval between sending BGP routing updates allowas-in Accept as-path with my AS present in it capability Advertise capability to the peer default-originate Originate default route to this neighbor description Neighbor specific description disable-connected-check One-hop away EBGP peer using loopback address distribute-list Filter updates to/from this neighbor dmzlink-bw Propagate the DMZ link bandwidth ebgp-multihop Allow EBGP neighbors not on directly connected networks fall-over session fall on peer route lost filter-list Establish BGP filters inherit Inherit a template local-as Specify a local-as number maximum-prefix Maximum number of prefixes accepted from this peer next-hop-self Disable the next hop calculation for this neighbor next-hop-unchanged Propagate the iBGP paths's next hop unchanged for this neighbor password Set a password peer-group Member of the peer-group prefix-list Filter updates to/from this neighbor remote-as Specify a BGP neighbor remove-private-as Remove private AS number from outbound updates route-map Apply route map to neighbor route-reflector-client Configure a neighbor as Route Reflector client send-community Send Community attribute to this neighbor shutdown Administratively shut down this neighbor soft-reconfiguration Per neighbor soft reconfiguration timers BGP per neighbor timers translate-update Translate Update to MBGP format transport Transport options ttl-security BGP ttl security check unsuppress-map Route-map to selectively unsuppress suppressed routes update-source Source of routing updates version Set the BGP version to match a neighbor weight Set default weight for routes from this neighbor R1(config-router)#neighbor 10.1.1.2 peer-group ? WORD peer-group name R1(config-router)#neighbor 10.1.1.2 peer-group GROUP1 % Configure the peer-group first
まずpeer-groupを作りなさい、と言われる。
どこで作るのか?さがしたがわからない。
bgpでしか使わないから config-routerモードだと思うのだが・・・
調べてようやくわかった。
R1(config-router)#neighbor ? A.B.C.D Neighbor address WORD Neighbor tag X:X:X:X::X Neighbor IPv6 address R1(config-router)#neighbor GROUP1 ? activate Enable the Address Family for this Neighbor advertise-map specify route-map for conditional advertisement advertisement-interval Minimum interval between sending BGP routing updates allowas-in Accept as-path with my AS present in it capability Advertise capability to the peer default-originate Originate default route to this neighbor description Neighbor specific description disable-connected-check One-hop away EBGP peer using loopback address distribute-list Filter updates to/from this neighbor dmzlink-bw Propagate the DMZ link bandwidth ebgp-multihop Allow EBGP neighbors not on directly connected networks fall-over session fall on peer route lost filter-list Establish BGP filters inherit Inherit a template local-as Specify a local-as number maximum-prefix Maximum number of prefixes accepted from this peer next-hop-self Disable the next hop calculation for this neighbor next-hop-unchanged Propagate the iBGP paths's next hop unchanged for this neighbor password Set a password peer-group Configure peer-group prefix-list Filter updates to/from this neighbor remote-as Specify a BGP neighbor remove-private-as Remove private AS number from outbound updates route-map Apply route map to neighbor route-reflector-client Configure a neighbor as Route Reflector client send-community Send Community attribute to this neighbor shutdown Administratively shut down this neighbor soft-reconfiguration Per neighbor soft reconfiguration timers BGP per neighbor timers translate-update Translate Update to MBGP format transport Transport options ttl-security BGP ttl security check unsuppress-map Route-map to selectively unsuppress suppressed routes update-source Source of routing updates version Set the BGP version to match a neighbor weight Set default weight for routes from this neighbor R1(config-router)#neighbor GROUP1 peer-group ? nlri Specify nlri type supported by peer-group <cr> R1(config-router)#neighbor GROUP1 peer-group R1(config-router)#neighbor 10.1.1.2 peer-group GROUP1 % Specify remote-as or peer-group remote AS first
remote-asを先に設定する。
R1(config-router)#neighbor 10.1.1.2 remote-as 65000 R1(config-router)#neighbor 10.1.1.2 peer-group GROUP1 R1(config-router)#end R1#sho run ! router bgp 65000 no synchronization bgp log-neighbor-changes neighbor GROUP1 peer-group neighbor 10.1.1.2 remote-as 65000 neighbor 10.1.1.2 peer-group GROUP1 no auto-summary ! !
やれやれ・・・
BSCIの準備 route map
route-mapの適用場所は二つある。
ひとつは、redistribute コマンドのオプションとして。わたしはこれしかやったことがない。
もうひとつは、IFで ip policy routemap MAPNAME として。
distribute-listは、IFには適用しない。 router-configモードで設定する。
route-mapを ip policy routemap で指定すると、受信したパケットについて処理をおこなう。 出力IFに設定するのではない。
ひとつは、redistribute コマンドのオプションとして。わたしはこれしかやったことがない。
もうひとつは、IFで ip policy routemap MAPNAME として。
distribute-listは、IFには適用しない。 router-configモードで設定する。
route-mapを ip policy routemap で指定すると、受信したパケットについて処理をおこなう。 出力IFに設定するのではない。
R1#sho ip policy Interface Route map Serial1/0 MAP1
BSCIの準備 フレームリレー
フレームリレーの実機(dynamipsだけど)演習をやるかな・・・。
CCNAのときからずっと逃げ続けてきたフレームリレー・・・。
dynamipsのサンプルラボにフレームリレーもある。 image名だけ書き換えて起動してみるがrouterにtelnetできない。
.netファイルを見てみると autostart がどうのこうのというのがある。こんな設定があるのかとコメントにすると起動する。
たいした設定はない。フレームリレースイッチがあり、3台のルータのs1/0がつないであるだけだ。
とりあえず3台のs1/0に同じサブネットのアドレスを振ってno shutする。
が、通信できない。
pingを打ったらifがdownしてしまった。
encapusulationとかdlciとかあるんだっけ、ととりあえず
では ospfをやってみる。
etherのときと同じようにnetworkコマンドを設定するが、neighborが出てこない。
sho ip os intをやると
NON_BRODCAST ...。これが、NON_BROADCASTか・・・。
nighborを明示的に指定すればいいのかな?と、一台で設定する。
では対向も・・・と設定しようとしたら
が。
これがNBMAか・・・。
もうひとつ方法がある。neighborを指定せずに、network typeをbroadcastに変えるのである。 これは両方変える必要がある。
あーこういうことか。
「ブロードキャストネットワークであるか」かどうかで、neighborを自動検出するかが決まる。
「マルチアクセスネットワークであるか」どうかで、DRが選出されるかどうかが決まる。
NBMAはその名の通り、「ブロードキャストではないが、マルチアクセス」なので、neighborを指定する必要があり、DRは選出される。
ただし、今回NON_BROADCASTになったが、networkタイプを BROADCAST に変更することができ、そうするとethernetと同じようにneighborを自動検出し、DRも選出された。
「ブロードキャストかどうか」は、名前でわかる。 「NBMA」と「ポイントツーマルチポイントノンブロードキャスト」の二つだ。 このモードでは、ネイバー設定が必要になる。
マルチアクセスかどうかは、「ポイント」があるかどうかで決まる。「ポイントツーポイント」は一対一だから、マルチアクセスでないのはわかる。「ポイントツーマルチポイント」は、複数の接続があっても、単位はP-to-Pであり、P-to-Pの集合なので、「マルチアクセス」ではない。
CCNAのときからずっと逃げ続けてきたフレームリレー・・・。
dynamipsのサンプルラボにフレームリレーもある。 image名だけ書き換えて起動してみるがrouterにtelnetできない。
.netファイルを見てみると autostart がどうのこうのというのがある。こんな設定があるのかとコメントにすると起動する。
たいした設定はない。フレームリレースイッチがあり、3台のルータのs1/0がつないであるだけだ。
とりあえず3台のs1/0に同じサブネットのアドレスを振ってno shutする。
が、通信できない。
pingを打ったらifがdownしてしまった。
encapusulationとかdlciとかあるんだっけ、ととりあえず
encapsulation frame-relay
だけ設定するとpingはできた。
では ospfをやってみる。
etherのときと同じようにnetworkコマンドを設定するが、neighborが出てこない。
sho ip os intをやると
R2#sho ip os interface Serial1/0 is up, line protocol is up Internet Address 10.10.10.3/24, Area 0 Process ID 100, Router ID 10.10.10.3, Network Type NON_BROADCAST, Cost: 64 Transmit Delay is 1 sec, State WAITING, Priority 1 No designated router on this network No backup designated router on this network Timer intervals configured, Hello 30, Dead 120, Wait 120, Retransmit 5 oob-resync timeout 120 Hello due in 00:00:24 Wait time before Designated router selection 00:01:24 Supports Link-local Signaling (LLS) Index 1/1, flood queue length 0 Next 0x0(0)/0x0(0) Last flood scan length is 0, maximum is 0 Last flood scan time is 0 msec, maximum is 0 msec Neighbor Count is 0, Adjacent neighbor count is 0 Suppress hello for 0 neighbor(s) R2#
NON_BRODCAST ...。これが、NON_BROADCASTか・・・。
nighborを明示的に指定すればいいのかな?と、一台で設定する。
では対向も・・・と設定しようとしたら
*Oct 1 14:56:20.579: %OSPF-5-ADJCHG: Process 100, Nbr 10.10.10.3 on Serial1/0 from LOADING to FULL, Loading Done
が。
R1#sho ip os neighbor Neighbor ID Pri State Dead Time Address Interface 10.10.10.3 1 FULL/DR 00:01:50 10.10.10.3 Serial1/0 R1#
DRが検出されている。
R1#debug ip os eve OSPF events debugging is on R1# *Oct 1 14:59:20.351: OSPF: Rcv hello from 10.10.10.3 area 0 from Serial1/0 10.10.10.3 *Oct 1 14:59:20.355: OSPF: End of hello processing *Oct 1 14:59:31.979: OSPF: Send hello to 10.10.10.3 area 0 on Serial1/0 from 10.10.10.1 *Oct 1 14:59:50.351: OSPF: Rcv hello from 10.10.10.3 area 0 from Serial1/0 10.10.10.3 *Oct 1 14:59:50.355: OSPF: End of hello processing *Oct 1 15:00:01.983: OSPF: Send hello to 10.10.10.3 area 0 on Serial1/0 from 10.10.10.1 R1#
debug してみると、helloの間隔が30秒になっている・・・。
これがNBMAか・・・。
もうひとつ方法がある。neighborを指定せずに、network typeをbroadcastに変えるのである。 これは両方変える必要がある。
あーこういうことか。
「ブロードキャストネットワークであるか」かどうかで、neighborを自動検出するかが決まる。
「マルチアクセスネットワークであるか」どうかで、DRが選出されるかどうかが決まる。
NBMAはその名の通り、「ブロードキャストではないが、マルチアクセス」なので、neighborを指定する必要があり、DRは選出される。
ただし、今回NON_BROADCASTになったが、networkタイプを BROADCAST に変更することができ、そうするとethernetと同じようにneighborを自動検出し、DRも選出された。
「ブロードキャストかどうか」は、名前でわかる。 「NBMA」と「ポイントツーマルチポイントノンブロードキャスト」の二つだ。 このモードでは、ネイバー設定が必要になる。
マルチアクセスかどうかは、「ポイント」があるかどうかで決まる。「ポイントツーポイント」は一対一だから、マルチアクセスでないのはわかる。「ポイントツーマルチポイント」は、複数の接続があっても、単位はP-to-Pであり、P-to-Pの集合なので、「マルチアクセス」ではない。
R1#sho running-config ! hostname R1 ! interface FastEthernet0/0 ip address 192.168.1.1 255.255.255.0 duplex half speed auto ! interface Serial1/0 no ip address encapsulation frame-relay ip ospf network broadcast serial restart-delay 0 ! interface Serial1/0.1 multipoint ip address 10.10.10.1 255.255.255.0 frame-relay map ip 10.10.10.5 102 broadcast frame-relay map ip 10.10.10.6 103 broadcast ! router ospf 100 log-adjacency-changes network 10.10.10.0 0.0.0.255 area 0 network 192.168.1.0 0.0.0.255 area 0 neighbor 10.10.10.6 neighbor 10.10.10.5 ! end R2#sho running-config ! hostname R2 ! ! interface FastEthernet0/0 ip address 192.168.2.1 255.255.255.0 duplex half speed auto ! interface Serial1/0 no ip address encapsulation frame-relay ip ospf network broadcast serial restart-delay 0 ! interface Serial1/0.1 multipoint ip address 10.10.10.5 255.255.255.0 frame-relay map ip 10.10.10.1 201 broadcast frame-relay map ip 10.10.10.6 203 broadcast ! router ospf 100 log-adjacency-changes network 10.10.10.0 0.0.0.255 area 0 network 192.168.2.0 0.0.0.255 area 0 ! ! end R3#sho running-config ! hostname R3 ! interface FastEthernet0/0 ip address 192.168.3.1 255.255.255.0 duplex half speed auto ! interface Serial1/0 no ip address encapsulation frame-relay ip ospf network broadcast serial restart-delay 0 ! interface Serial1/0.1 multipoint ip address 10.10.10.6 255.255.255.0 frame-relay map ip 10.10.10.1 301 broadcast frame-relay map ip 10.10.10.5 302 broadcast ! router ospf 100 log-adjacency-changes network 10.10.10.0 0.0.0.255 area 0 network 192.168.3.0 0.0.0.255 area 0 ! ! end
R1#sho ip os neighbor Neighbor ID Pri State Dead Time Address Interface 192.168.3.1 1 FULL/DR 00:01:40 10.10.10.6 Serial1/0.1 192.168.2.1 1 FULL/DROTHER 00:01:53 10.10.10.5 Serial1/0.1 R1#sho ip route Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route Gateway of last resort is not set 10.0.0.0/24 is subnetted, 1 subnets C 10.10.10.0 is directly connected, Serial1/0.1 C 192.168.1.0/24 is directly connected, FastEthernet0/0 O 192.168.2.0/24 [110/65] via 10.10.10.5, 00:07:57, Serial1/0.1 O 192.168.3.0/24 [110/65] via 10.10.10.6, 00:07:57, Serial1/0.1 R1#
びっくりしたのは、ATTEMPT という neighbor Stateが登場したこと。 10秒くらいかな、しばらくこのStateになっていた。
R1#sho ip os neighbor Neighbor ID Pri State Dead Time Address Interface N/A 0 ATTEMPT/DROTHER 00:01:37 10.10.10.5 Serial1/0.1 R1#
2010/09/27
BSCIの準備 いろいろ
eigrpで外部ASからredistributeされた経路のメトリックは170となる。
BSCIの勉強を初めて2ヶ月半くらいたった。そうとうストレスが溜まっている。
腰が痛いし、酒を飲み始めたし・・・。
いままでciscoの勉強でこんなにみっちりやったことがあっただろうか?というくらい、やった。
今受けたら絶対落ちる。あと三日ある。ここが勝負である。
BGPがヤバい。 MEDとかlocal preferenceとかweightとか・・・。わかってる人がいるのか?
経路の優先度に重みをつけて任意に選択させよう、というのはわかるが同じような重みがいくつもあって混同する。
Weightはcisco独自
local preferenceはwell-known discretionary(任意)デフォルトは100
MEDはoptional nontransitiveで、これだけ小さいものが優先される。
interface configモードで ip route コマンドが入力できる。
入力するとconfigモードになる。 ほかのコマンドもいけるかな?
eigrpで、eigrp stub summary とあるけど、summaryがなくても集約を設定すれば送信される。 どういうときに必要なのか?
これを見てください。hello-intervalの変更コマンド。
eigrpとospf、両方設定してみました。 やらしい・・・。
key chainを使うのはeigrpだけなのか。ospfはinterfaceの設定だけで完結するのに。
これもやらしい・・・。
どうして、
ってしなかたんだろうね?普通、こうするよね?
R2#sho ip route Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route Gateway of last resort is not set 2.0.0.0/32 is subnetted, 1 subnets C 2.2.2.2 is directly connected, Loopback0 100.0.0.0/24 is subnetted, 2 subnets C 100.0.0.0 is directly connected, Ethernet0/0 C 100.0.10.0 is directly connected, Ethernet1/0 D EX 222.0.0.0/24 [170/307200] via 100.0.10.200, 00:00:31, Ethernet1/0 D 192.168.200.0/24 [90/307200] via 100.0.10.200, 02:38:20, Ethernet1/0 D 192.168.100.0/24 [90/307200] via 100.0.0.100, 02:36:20, Ethernet0/0 R2#
BSCIの勉強を初めて2ヶ月半くらいたった。そうとうストレスが溜まっている。
腰が痛いし、酒を飲み始めたし・・・。
いままでciscoの勉強でこんなにみっちりやったことがあっただろうか?というくらい、やった。
今受けたら絶対落ちる。あと三日ある。ここが勝負である。
BGPがヤバい。 MEDとかlocal preferenceとかweightとか・・・。わかってる人がいるのか?
経路の優先度に重みをつけて任意に選択させよう、というのはわかるが同じような重みがいくつもあって混同する。
Weightはcisco独自
local preferenceはwell-known discretionary(任意)デフォルトは100
MEDはoptional nontransitiveで、これだけ小さいものが優先される。
interface configモードで ip route コマンドが入力できる。
入力するとconfigモードになる。 ほかのコマンドもいけるかな?
eigrpで、eigrp stub summary とあるけど、summaryがなくても集約を設定すれば送信される。 どういうときに必要なのか?
これを見てください。hello-intervalの変更コマンド。
eigrpとospf、両方設定してみました。 やらしい・・・。
interface FastEthernet0/0 ip address 172.16.32.1 255.255.240.0 ip hello-interval eigrp 100 100 ip router isis ip ospf hello-interval 100 duplex halfmd5認証。これもやらしい。mode eigrp って・・・。やらしい・・・。
interface FastEthernet0/0 ip address 172.16.32.1 255.255.240.0 ip hello-interval eigrp 100 100 ip authentication mode eigrp 100 md5 ip authentication key-chain eigrp 100 MYCHAIN ip router isis ip ospf authentication message-digest ip ospf message-digest-key 1 md5 PASSWORD ip ospf hello-interval 100 duplex half speed auto
key chainを使うのはeigrpだけなのか。ospfはinterfaceの設定だけで完結するのに。
これもやらしい・・・。
どうして、
ip eigrp 100 hello-interval 100 ip eigrp 100 authentication message-digest ip eigrp 100 message-digest-key 1 md5 PASSWORD
ってしなかたんだろうね?普通、こうするよね?
BSCIの準備 マルチキャスト(2)
クライアントで再生しているとき
サーバで止めても変わらない。
クライアントで止めると、PTとなる。
今のはclientが繋がっているルータのである。
vlc環境を復活させるのに思わぬ手間がかかった。
まず、サーバ側はVirtual PCのxpでやっていたことを忘れ、vistaでvlcを動かしていた。
こないだはvistaでは動くことさえしなかったのだが、アップデートが入ってvistaでもストリームできるようになったようだ。
なぜvistaだとダメなのかわからないがxpでやっていたことを思い出して、virtual pcをあげたらユーザ認証しなさいという画面になって、インターネットに繋がる設定になっていなかったので仕方なく電話して48桁の数字を電話とPCに入力する。
再生できたと思ったらなぜかすぐに落ちてしまう。どうもクライアント側のリソース不足のように見える。
いろんなソフトをいれたからかなと、アンインストールとか常駐解除とかしてみたがダメで、結局軽いムービーを作った。
R1#sho ip mroute IP Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT, M - MSDP created entry, X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement, U - URD, I - Received Source Specific Host Report, Z - Multicast Tunnel, z - MDT-data group sender, Y - Joined MDT-data group, y - Sending to MDT-data group Outgoing interface flags: H - Hardware switched, A - Assert winner Timers: Uptime/Expires Interface state: Interface, Next-Hop or VCD, State/Mode (*, 239.255.1.1), 00:32:26/stopped, RP 0.0.0.0, flags: DC Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet0/0, Forward/Dense, 00:01:20/00:00:00 Ethernet1/0, Forward/Dense, 00:32:26/00:00:00 (192.168.100.88, 239.255.1.1), 00:04:52/00:02:56, flags: T Incoming interface: Ethernet1/0, RPF nbr 100.0.10.100 Outgoing interface list: Ethernet0/0, Forward/Dense, 00:01:21/00:00:00 (*, 224.0.1.40), 00:32:53/00:02:48, RP 0.0.0.0, flags: DCL Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet1/0, Forward/Dense, 00:32:53/00:00:00 Ethernet0/0, Forward/Dense, 00:32:53/00:00:00 (*, 239.255.255.250), 00:32:22/00:02:51, RP 0.0.0.0, flags: DC Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet0/0, Forward/Dense, 00:11:14/00:00:00 Ethernet1/0, Forward/Dense, 00:32:22/00:00:00
サーバで止めても変わらない。
クライアントで止めると、PTとなる。
R1#sho ip mroute IP Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT, M - MSDP created entry, X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement, U - URD, I - Received Source Specific Host Report, Z - Multicast Tunnel, z - MDT-data group sender, Y - Joined MDT-data group, y - Sending to MDT-data group Outgoing interface flags: H - Hardware switched, A - Assert winner Timers: Uptime/Expires Interface state: Interface, Next-Hop or VCD, State/Mode (*, 239.255.1.1), 00:32:38/stopped, RP 0.0.0.0, flags: D Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet1/0, Forward/Dense, 00:32:38/00:00:00 (192.168.100.88, 239.255.1.1), 00:05:04/00:02:54, flags: PT Incoming interface: Ethernet1/0, RPF nbr 100.0.10.100 Outgoing interface list: Null (*, 224.0.1.40), 00:33:03/00:02:37, RP 0.0.0.0, flags: DCL Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet1/0, Forward/Dense, 00:33:04/00:00:00 Ethernet0/0, Forward/Dense, 00:33:04/00:00:00 (*, 239.255.255.250), 00:32:34/00:02:39, RP 0.0.0.0, flags: DC Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet0/0, Forward/Dense, 00:11:25/00:00:00 Ethernet1/0, Forward/Dense, 00:32:34/00:00:00 R1#
今のはclientが繋がっているルータのである。
vlc環境を復活させるのに思わぬ手間がかかった。
まず、サーバ側はVirtual PCのxpでやっていたことを忘れ、vistaでvlcを動かしていた。
こないだはvistaでは動くことさえしなかったのだが、アップデートが入ってvistaでもストリームできるようになったようだ。
なぜvistaだとダメなのかわからないがxpでやっていたことを思い出して、virtual pcをあげたらユーザ認証しなさいという画面になって、インターネットに繋がる設定になっていなかったので仕方なく電話して48桁の数字を電話とPCに入力する。
再生できたと思ったらなぜかすぐに落ちてしまう。どうもクライアント側のリソース不足のように見える。
いろんなソフトをいれたからかなと、アンインストールとか常駐解除とかしてみたがダメで、結局軽いムービーを作った。
2010/09/24
BSCIの準備 いろいろ
またマルチキャストに戻ってきた。
IGMPv2で追加された機能
1)leaveメッセージ
2)クエリ最大応答時間の設定
3)クエリア選出
4)group specific query
ようやく黒本を一通り読んで未理解事項を勉強した。受験日は予約してあったのだがちょっと伸ばした。あんまり伸ばしてもキリがないから、一回だけ。
残りは、マルチキャストと、ルートマップと、フレームリレーと、そのあたりだ。
OSPFのバーチャルリンクは相互に設定するんだっけ・・・。間違って覚えていた。
そして、dynamipsでやってみたのだがどうしてもupしない。なんだろう・・・。
が、virtualリンクを設定するような場面にはでくわしたこともなければ、それが話題になることすら、ない。
そもそもOSPFでマルチエリアで設定したこと自体ほとんどない。
わかっていないこと。
EIGRP
VLSMの意味。
不等コストロードバランシングをサポートしているルーティングプロトコル。
show ip eigrp neighbors の SRTT, RTO, Q Cnt の意味。
EIGRPでデフォルトルートを通知する方法。
EIGRP stub機能。
EIGRPのキーチェーンの使い方。
わかっていないこと。
OSPF
OSPFのLSAシーケンス番号。
NBMAネットワークでのネットワークモード
redistribute
配送リストの使い方。
スタティックルートのAD値は変更できる。
OSPF→RIPの再配送時にはmetic指定が必要。
BGP
local preference のデフォルトは100
マルチキャスト
sho ip igmp groups の意味。
uptime, Expires, Last Reporterの意味。
show ip mroute で flags: T は転送中。
IPv6
エニーキャストアドレスはクライアントPCに割り当てることはできない。
割り当てたグローバルユニキャストアドレスをエニーキャストアドレスとして使用する方法。
show ip eigrp topologyに表示される P, A, R, U, Q の意味。
nssaのabrがデフォルトルートを通知するには
(config-router)#area 1 nssa default-information originate
各ISへの最短パスを表示するコマンドは show isis topology
EIGRPのルーティングアップデートはマルチキャストでおこなう。
IS-ISのメトリックはデフォルトで10
EIGRPのスタブ機能はSIAを防止する。
IGMPv2では最小IPアドレスを持つルータがクエリアに選出される。
マルチキャストmacアドレスの範囲は 01-00-5e-00-00-00~01-00-5e-7f-ff-ff
IS-ISでISを識別するのはシステムID
show ip bgp summary で stateが空白はestablishedを示す。
外部ASからEIGRPへ再配送されたルートのADは170
異なるASのピアから来たルートはMEDを比較しないが、bgp always-compare-medを設定すると比較する。
ciscoは MOSPFと DVMRPをフルサポートしていない。
bgpのnetworkコマンドでマスク指定をする場合は
network 10.0.1.0 mask 255.255.255.0
ospfでNBMAモードとpoint-to-point multipoint non-broadcastモードではneighborを静的に設定する必要がある。
IGMPv2で追加された機能
1)leaveメッセージ
2)クエリ最大応答時間の設定
3)クエリア選出
4)group specific query
ようやく黒本を一通り読んで未理解事項を勉強した。受験日は予約してあったのだがちょっと伸ばした。あんまり伸ばしてもキリがないから、一回だけ。
残りは、マルチキャストと、ルートマップと、フレームリレーと、そのあたりだ。
OSPFのバーチャルリンクは相互に設定するんだっけ・・・。間違って覚えていた。
そして、dynamipsでやってみたのだがどうしてもupしない。なんだろう・・・。
が、virtualリンクを設定するような場面にはでくわしたこともなければ、それが話題になることすら、ない。
そもそもOSPFでマルチエリアで設定したこと自体ほとんどない。
わかっていないこと。
EIGRP
VLSMの意味。
不等コストロードバランシングをサポートしているルーティングプロトコル。
show ip eigrp neighbors の SRTT, RTO, Q Cnt の意味。
EIGRPでデフォルトルートを通知する方法。
EIGRP stub機能。
EIGRPのキーチェーンの使い方。
わかっていないこと。
OSPF
OSPFのLSAシーケンス番号。
NBMAネットワークでのネットワークモード
redistribute
配送リストの使い方。
スタティックルートのAD値は変更できる。
OSPF→RIPの再配送時にはmetic指定が必要。
BGP
local preference のデフォルトは100
マルチキャスト
sho ip igmp groups の意味。
uptime, Expires, Last Reporterの意味。
show ip mroute で flags: T は転送中。
IPv6
エニーキャストアドレスはクライアントPCに割り当てることはできない。
割り当てたグローバルユニキャストアドレスをエニーキャストアドレスとして使用する方法。
show ip eigrp topologyに表示される P, A, R, U, Q の意味。
nssaのabrがデフォルトルートを通知するには
(config-router)#area 1 nssa default-information originate
各ISへの最短パスを表示するコマンドは show isis topology
EIGRPのルーティングアップデートはマルチキャストでおこなう。
IS-ISのメトリックはデフォルトで10
EIGRPのスタブ機能はSIAを防止する。
IGMPv2では最小IPアドレスを持つルータがクエリアに選出される。
マルチキャストmacアドレスの範囲は 01-00-5e-00-00-00~01-00-5e-7f-ff-ff
IS-ISでISを識別するのはシステムID
show ip bgp summary で stateが空白はestablishedを示す。
外部ASからEIGRPへ再配送されたルートのADは170
異なるASのピアから来たルートはMEDを比較しないが、bgp always-compare-medを設定すると比較する。
ciscoは MOSPFと DVMRPをフルサポートしていない。
bgpのnetworkコマンドでマスク指定をする場合は
network 10.0.1.0 mask 255.255.255.0
ospfでNBMAモードとpoint-to-point multipoint non-broadcastモードではneighborを静的に設定する必要がある。
2010/09/15
BSCIの準備 マルチエリアOSPF
マルチエリアOSPFの実験をする。家にあるルータを総動員。ciscoが3台、その他が3台。それにdyanmipsをくっつける。
普通
totally stub
これは、area 0のルート。
O IA 192.168.100.0/24 [110/129] via 45.45.0.129, 00:01:05, Serial1/0
この3つは、area 1のルート。
O IA 100.0.0.0 [110/139] via 45.45.0.129, 00:01:05, Serial1/0
O IA 172.16.0.0/16 [110/140] via 45.45.0.129, 00:01:05, Serial1/0
O IA 32.0.0.0/8 [110/150] via 45.45.0.129, 00:01:05, Serial1/0
すべてが via 45.45.0.129 となっている。
まず area 2をstub にすると、デフォルトルートが現れる。
O*IA 0.0.0.0/0 [110/129] via 45.45.0.129, 00:01:05, Serial1/0
違いはそれだけで、先ほどの4つのIAルートはそのまま残っている。 これではデフォルトルートのありがたみがあまりない。
さらに area 2 stub no-summary にすると、 IAルートがなくなって、デフォルトルートのみとなる。
普通
R3#sho ip os database OSPF Router with ID (30.30.30.30) (Process ID 100) Router Link States (Area 2) Link ID ADV Router Age Seq# Checksum Link count 10.10.10.10 10.10.10.10 21 0x80000001 0x004088 2 20.20.20.20 20.20.20.20 20 0x80000003 0x007BD4 4 30.30.30.30 30.30.30.30 92 0x80000002 0x0038F0 2 Summary Net Link States (Area 2) Link ID ADV Router Age Seq# Checksum 32.0.0.0 10.10.10.10 22 0x80000001 0x009747 100.0.0.0 10.10.10.10 22 0x80000001 0x00B1F3 172.16.0.0 10.10.10.10 22 0x80000001 0x004FFC 192.168.100.0 10.10.10.10 22 0x80000001 0x0064E1 Summary ASB Link States (Area 2) Link ID ADV Router Age Seq# Checksum 10.10.10.10 10.10.10.10 22 0x80000001 0x0062A9 R3#sho ip rou R3#sho ip route Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route Gateway of last resort is not set O IA 32.0.0.0/8 [110/150] via 45.45.0.129, 00:00:17, Serial1/0 100.0.0.0/24 is subnetted, 1 subnets O IA 100.0.0.0 [110/139] via 45.45.0.129, 00:00:17, Serial1/0 O IA 172.16.0.0/16 [110/140] via 45.45.0.129, 00:00:17, Serial1/0 O IA 192.168.100.0/24 [110/129] via 45.45.0.129, 00:00:17, Serial1/0 45.0.0.0/25 is subnetted, 1 subnets C 45.45.0.128 is directly connected, Serial1/0 30.0.0.0/8 is variably subnetted, 2 subnets, 2 masks C 30.30.30.30/32 is directly connected, Loopback0 O 30.0.0.0/30 [110/128] via 45.45.0.129, 00:00:17, Serial1/0 R3#
stub
R3#sho ip os database
OSPF Router with ID (30.30.30.30) (Process ID 100)
Router Link States (Area 2)
Link ID ADV Router Age Seq# Checksum Link count
10.10.10.10 10.10.10.10 18 0x80000004 0x00586F 2
20.20.20.20 20.20.20.20 20 0x80000006 0x0093BB 4
30.30.30.30 30.30.30.30 37 0x80000003 0x0054D5 2
Summary Net Link States (Area 2)
Link ID ADV Router Age Seq# Checksum
0.0.0.0 10.10.10.10 24 0x80000001 0x008491
32.0.0.0 10.10.10.10 24 0x80000002 0x00B32C
100.0.0.0 10.10.10.10 24 0x80000002 0x00CDD8
172.16.0.0 10.10.10.10 24 0x80000002 0x006BE1
192.168.100.0 10.10.10.10 24 0x80000002 0x0080C6
R3#
R3#sho ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is 45.45.0.129 to network 0.0.0.0
O IA 32.0.0.0/8 [110/150] via 45.45.0.129, 00:01:05, Serial1/0
100.0.0.0/24 is subnetted, 1 subnets
O IA 100.0.0.0 [110/139] via 45.45.0.129, 00:01:05, Serial1/0
O IA 172.16.0.0/16 [110/140] via 45.45.0.129, 00:01:05, Serial1/0
O IA 192.168.100.0/24 [110/129] via 45.45.0.129, 00:01:05, Serial1/0
45.0.0.0/25 is subnetted, 1 subnets
C 45.45.0.128 is directly connected, Serial1/0
30.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 30.30.30.30/32 is directly connected, Loopback0
O 30.0.0.0/30 [110/128] via 45.45.0.129, 00:01:05, Serial1/0
O*IA 0.0.0.0/0 [110/129] via 45.45.0.129, 00:01:05, Serial1/0
totally stub
R3#sho ip os database
OSPF Router with ID (30.30.30.30) (Process ID 100)
Router Link States (Area 2)
Link ID ADV Router Age Seq# Checksum Link count
10.10.10.10 10.10.10.10 155 0x80000004 0x00586F 2
20.20.20.20 20.20.20.20 157 0x80000006 0x0093BB 4
30.30.30.30 30.30.30.30 174 0x80000003 0x0054D5 2
Summary Net Link States (Area 2)
Link ID ADV Router Age Seq# Checksum
0.0.0.0 10.10.10.10 31 0x80000002 0x008292
R3#
R3#sho ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is 45.45.0.129 to network 0.0.0.0
45.0.0.0/25 is subnetted, 1 subnets
C 45.45.0.128 is directly connected, Serial1/0
30.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 30.30.30.30/32 is directly connected, Loopback0
O 30.0.0.0/30 [110/128] via 45.45.0.129, 00:00:37, Serial1/0
O*IA 0.0.0.0/0 [110/129] via 45.45.0.129, 00:00:13, Serial1/0
最初は、4つのIAルートが見えている。構成図がないのでなんのこっちゃかもしれないが、 area2---area0---area1とつながっている。
これは、area 0のルート。
O IA 192.168.100.0/24 [110/129] via 45.45.0.129, 00:01:05, Serial1/0
この3つは、area 1のルート。
O IA 100.0.0.0 [110/139] via 45.45.0.129, 00:01:05, Serial1/0
O IA 172.16.0.0/16 [110/140] via 45.45.0.129, 00:01:05, Serial1/0
O IA 32.0.0.0/8 [110/150] via 45.45.0.129, 00:01:05, Serial1/0
すべてが via 45.45.0.129 となっている。
まず area 2をstub にすると、デフォルトルートが現れる。
O*IA 0.0.0.0/0 [110/129] via 45.45.0.129, 00:01:05, Serial1/0
違いはそれだけで、先ほどの4つのIAルートはそのまま残っている。 これではデフォルトルートのありがたみがあまりない。
さらに area 2 stub no-summary にすると、 IAルートがなくなって、デフォルトルートのみとなる。
2010/09/11
show ip protocol, do show
わたしはルーティング設定を変更したり修正したりするときに show runをやって現在の設定を確認する。ルーティングに限らずほとんどの場合、sho runをやる。だが、configが膨大な場合はそうもいかない。
そこで私が最近使うようになったのは show ip protocolである。これによって現在設定されているルーティングプロトコルとそのAS番号あるいはプロセス番号が表示される。他にも情報は表示されるが、とりあえず今ある設定がわかる。これがわかればそのモードに入れるし、消すこともできる。
さらに最近(といってももう10年くらい前からかな)はconfigモードでも doをつけることでshow コマンドが実施できるので、conf tをしてしまった後でも「あっいけね、exit」としなくても、「do sho ip proto」でよいのである。ospfのnetworkコマンドをやるときなどは do sho ip int briでipアドレスを確認する。
私は基本的にどんな簡単な構成であっても、走り書き程度でも構成図を描いて、それを見ながら設定する。それはミスがないからとか記録に残すためとかではなく、そのやり方が「計画、デザイン、実装、フィードバック」という進め方となるからだ。
構成図を描かずにいきなり設定していき、ガンガンコマンドを打っていくのもある意味速かったり楽だったりするのだが、わたしはそういうやり方は暴走、いわゆる「ハマリ」を生むような気がしてならない。
紙にボールペンで丸や四角を描いて線で結んで名前を描いたり数字を振ったりする。
それだけで、さっき言った計画から実装までの一連の作業の全体が見えるのである。
もちろんそれはあくまでも「机上の空論」であるが、どんなことでもまずは空論で始まるのだ。
do sho ip int brie までいれないとダメだね。
そこで私が最近使うようになったのは show ip protocolである。これによって現在設定されているルーティングプロトコルとそのAS番号あるいはプロセス番号が表示される。他にも情報は表示されるが、とりあえず今ある設定がわかる。これがわかればそのモードに入れるし、消すこともできる。
さらに最近(といってももう10年くらい前からかな)はconfigモードでも doをつけることでshow コマンドが実施できるので、conf tをしてしまった後でも「あっいけね、exit」としなくても、「do sho ip proto」でよいのである。ospfのnetworkコマンドをやるときなどは do sho ip int briでipアドレスを確認する。
私は基本的にどんな簡単な構成であっても、走り書き程度でも構成図を描いて、それを見ながら設定する。それはミスがないからとか記録に残すためとかではなく、そのやり方が「計画、デザイン、実装、フィードバック」という進め方となるからだ。
構成図を描かずにいきなり設定していき、ガンガンコマンドを打っていくのもある意味速かったり楽だったりするのだが、わたしはそういうやり方は暴走、いわゆる「ハマリ」を生むような気がしてならない。
紙にボールペンで丸や四角を描いて線で結んで名前を描いたり数字を振ったりする。
それだけで、さっき言った計画から実装までの一連の作業の全体が見えるのである。
もちろんそれはあくまでも「机上の空論」であるが、どんなことでもまずは空論で始まるのだ。
do sho ip int brie までいれないとダメだね。
BSCIの準備 BGPの再配送
ospf, isis, eigrp, bgp などの間でredstribute を設定しているが、なかなか思うように再配送されない。
まず、eigrpとospfでは、metricを明示的に設定しないとダメだ。デフォルトでは再配送されない。 デフォルト値でダメならエラーといって欲しい気もする。
metric指定はしかたないとしても、bgpからospfへの再配送ができない。
bgpとospfを有効にしたルータで、redistribute bgp 400 とやる。
ルーティングテーブルには Bのルートがあるのに、再配送されない。
metricやmetric typeやsubnet指定をつけてもダメだ。 なぜだ!?
router bgpで、
bgp redistribute-internal が必要。
ある人のブログに書いてあった。 今読んでいる黒本にも出てこない。
だが、私はgoogleで「bgp ospf 再配送」と調べているうちに、だんだん今やろうとしていることがどういうことなのかに気付き始めた。
「bgpで学習した経路を、ospfに再配送する」という例が見当たらない。逆はある。
おそらく、普通はbgp→ospf という再配送はしないのだろう。
なぜかは説明できないが・・・。
(2012/02/13追記 これはiBGPの経路をIGPにredistributeする場合の話です。eBGPの経路はこれがなくても再配送できます。)
まず、eigrpとospfでは、metricを明示的に設定しないとダメだ。デフォルトでは再配送されない。 デフォルト値でダメならエラーといって欲しい気もする。
metric指定はしかたないとしても、bgpからospfへの再配送ができない。
bgpとospfを有効にしたルータで、redistribute bgp 400 とやる。
ルーティングテーブルには Bのルートがあるのに、再配送されない。
metricやmetric typeやsubnet指定をつけてもダメだ。 なぜだ!?
router bgpで、
bgp redistribute-internal が必要。
ある人のブログに書いてあった。 今読んでいる黒本にも出てこない。
だが、私はgoogleで「bgp ospf 再配送」と調べているうちに、だんだん今やろうとしていることがどういうことなのかに気付き始めた。
「bgpで学習した経路を、ospfに再配送する」という例が見当たらない。逆はある。
おそらく、普通はbgp→ospf という再配送はしないのだろう。
なぜかは説明できないが・・・。
(2012/02/13追記 これはiBGPの経路をIGPにredistributeする場合の話です。eBGPの経路はこれがなくても再配送できます。)
2010/08/31
BSCIの準備 EIGRP
マルチキャストで盛り上がりすぎた。
EIGRPに戻る。
全然わからない。一回舐めたはずだが・・・K値の意味を調べた記憶はあるがすっかり忘れている。 FDとADの意味がさっぱりわからない。ADは何の略かすらわからない。
ADは Advertised Distanceだった。 「AdvertiseされたDistance」だから、next hopから宛先までの「距離」。なんとなくわかる。
FDはFeasible Distance。 Feasibleとは、「実行可能な」「もっともらしい」「適して、便利で」などの意味。 「ネクストホップルータと宛先間のコストとローカルルータとネクストホップルータ間のコストの合計」 ・・・。なんだこの日本語。怒りすら覚える。
よく読めば、ADとFDというのがどういう意味なのかはわかる。しかし、どうしてADとかFDという考えを持ち出してきたのか、それらを使って何をするのか、ということが知りたい。
そもそも、ルーティングというのはもっともコストの低いnext hopを探すことではないのか。つまり「FD」が最小となるnext hopを探せばよいのだ。しかし、どうしてEIGRPだけにFDという概念が登場するのか。OSPFやRIPにはどうして出てこないのか。
さらに、ADは何か。ADとFDの差は、自身とnext hopの間のコストである。ADが最小のnext hopが存在しても、そこへ至るまでのコストが膨大であればnext hopとしては採用しない。それは当然のことだ。
だったら最初からFDを計算して最小のnext hopを探せばよい。では、ADという概念はどういうときに必要となるのか。 ちなみにFDが最小となるnext hopはサクセサと呼ばれる。普通のルーティングでいう、next hopだ。 EIGRPでは、サクセサの代替としてフィージブルサクセサというものを選出する。 フィージブルサクセサは、ADがFDより小さいルータである。 だから、フィージブルサクセサが存在しないこともありえる。
「AD<FDでなければならない」というのはどこにでも書いてあるが、なぜそうなのか説明している人はほとんどいない。 「『AD<FD』でないルータをフィージブルサクセサ(代替経路)とすると、ルーティングループが発生する」と書いている人はちらほらいるが、それでも、「なぜループが発生するのか」を説明している人がいない。
たとえば下記のような構成があったとする。
Aから、Dが持っている 100.0.0.0/24 へ到達したい。
BからDまでのコストは100、CからDまでのコストは120。
AからBまでのコストは10で、サクセサはBで、FDは110となる。
CのADは120なので、フィージブルサクセサにならない。
では、Cがフィージブルサクセサになると、どんな不都合があるのか。 どうしてCはフィージブルサクセサにならないのか。
「AD>FDだから」ではなくて、「どうしてAD>FDだと困るのか」ということである。
答え。
ルータCからDへの経路は二つ存在する。すなわち図では略されているCからDへの経路と、C-A-B-(略)-Dという経路である。
C-(略)-Dのコストは120。そして、C-A-B-Dのコストもまた120なのである。
等コストの経路が2本あったらどうなるか。どうなるんだ?先に登録された経路が採用されるのか? とにかく、CがAにパケットを返してループが発生することがありうる。
C-(略)-Dのコストが130だったらもっとわかりやすい。 この場合はC-A-B-Dのコストが120だから、確実にCはAへパケットを返す。 かくしてループが発生する。
だから、 AD>FDとなるルータをフィージブルサクセサとして選択できない、というわけだ。
もっと正確に言うと、Cから見たAのADは、Aから見たDへのFDである。 だから、比較するのは「AにとってのFD」と「CにとってのAのAD」となる。 これをAから見ると「FDとAのAD」の比較になる。 「AのFD」はすなわち「CにとってのAのAD」となる。
さっきの図では、CのフィージブルサクセサがAになるから、 C---(略)の経路がダウンしたら、CはD宛のパケットをAに転送する。 同時にA---B間がダウンしたら、AもCへ転送する。 A-C間でループというかピンポンが発生する。
これは多分、「ちょっと考えればわかることだからわざわざ説明しない」だけなのに「何か理由があるんだ」と思い込まれてしまっただけだと思う。とくに資格試験の参考書やWEBページなら、「とりあえず受かればいい」となるから。
・・・こんな感じでやっていかないと、全然頭に入らない。
もう受験予約もしてしまったのに・・・間に合わないぞ・・。
全然わからない。一回舐めたはずだが・・・K値の意味を調べた記憶はあるがすっかり忘れている。 FDとADの意味がさっぱりわからない。ADは何の略かすらわからない。
ADは Advertised Distanceだった。 「AdvertiseされたDistance」だから、next hopから宛先までの「距離」。なんとなくわかる。
FDはFeasible Distance。 Feasibleとは、「実行可能な」「もっともらしい」「適して、便利で」などの意味。 「ネクストホップルータと宛先間のコストとローカルルータとネクストホップルータ間のコストの合計」 ・・・。なんだこの日本語。怒りすら覚える。
よく読めば、ADとFDというのがどういう意味なのかはわかる。しかし、どうしてADとかFDという考えを持ち出してきたのか、それらを使って何をするのか、ということが知りたい。
そもそも、ルーティングというのはもっともコストの低いnext hopを探すことではないのか。つまり「FD」が最小となるnext hopを探せばよいのだ。しかし、どうしてEIGRPだけにFDという概念が登場するのか。OSPFやRIPにはどうして出てこないのか。
さらに、ADは何か。ADとFDの差は、自身とnext hopの間のコストである。ADが最小のnext hopが存在しても、そこへ至るまでのコストが膨大であればnext hopとしては採用しない。それは当然のことだ。
だったら最初からFDを計算して最小のnext hopを探せばよい。では、ADという概念はどういうときに必要となるのか。 ちなみにFDが最小となるnext hopはサクセサと呼ばれる。普通のルーティングでいう、next hopだ。 EIGRPでは、サクセサの代替としてフィージブルサクセサというものを選出する。 フィージブルサクセサは、ADがFDより小さいルータである。 だから、フィージブルサクセサが存在しないこともありえる。
「AD<FDでなければならない」というのはどこにでも書いてあるが、なぜそうなのか説明している人はほとんどいない。 「『AD<FD』でないルータをフィージブルサクセサ(代替経路)とすると、ルーティングループが発生する」と書いている人はちらほらいるが、それでも、「なぜループが発生するのか」を説明している人がいない。
たとえば下記のような構成があったとする。
10 100 A---B---(略)--+--D-| 100.0.0.0/24 | | |10 120 | +---C---(略)--+
Aから、Dが持っている 100.0.0.0/24 へ到達したい。
BからDまでのコストは100、CからDまでのコストは120。
AからBまでのコストは10で、サクセサはBで、FDは110となる。
CのADは120なので、フィージブルサクセサにならない。
では、Cがフィージブルサクセサになると、どんな不都合があるのか。 どうしてCはフィージブルサクセサにならないのか。
「AD>FDだから」ではなくて、「どうしてAD>FDだと困るのか」ということである。
答え。
ルータCからDへの経路は二つ存在する。すなわち図では略されているCからDへの経路と、C-A-B-(略)-Dという経路である。
C-(略)-Dのコストは120。そして、C-A-B-Dのコストもまた120なのである。
等コストの経路が2本あったらどうなるか。どうなるんだ?先に登録された経路が採用されるのか? とにかく、CがAにパケットを返してループが発生することがありうる。
C-(略)-Dのコストが130だったらもっとわかりやすい。 この場合はC-A-B-Dのコストが120だから、確実にCはAへパケットを返す。 かくしてループが発生する。
だから、 AD>FDとなるルータをフィージブルサクセサとして選択できない、というわけだ。
もっと正確に言うと、Cから見たAのADは、Aから見たDへのFDである。 だから、比較するのは「AにとってのFD」と「CにとってのAのAD」となる。 これをAから見ると「FDとAのAD」の比較になる。 「AのFD」はすなわち「CにとってのAのAD」となる。
さっきの図では、CのフィージブルサクセサがAになるから、 C---(略)の経路がダウンしたら、CはD宛のパケットをAに転送する。 同時にA---B間がダウンしたら、AもCへ転送する。 A-C間でループというかピンポンが発生する。
これは多分、「ちょっと考えればわかることだからわざわざ説明しない」だけなのに「何か理由があるんだ」と思い込まれてしまっただけだと思う。とくに資格試験の参考書やWEBページなら、「とりあえず受かればいい」となるから。
・・・こんな感じでやっていかないと、全然頭に入らない。
もう受験予約もしてしまったのに・・・間に合わないぞ・・。
2010/08/24
BSCIの準備 マルチキャスト(1)
マルチキャストの原理的なものは、もう嫌と言うほど聞いた。動画の配信をするだとか、groupだとか、joinだとか。ちょっとした設定もしたことがある。
しかし、私はマルチキャストを設定したルータを介して、どこかのサーバから動画を配信してクライアントで受信する様子を一度も見たことがない。だから、マルチキャストなんて本当に使われているのかと、はなはだ疑問なのである。
pimって何? マルチキャスト用のルーティングプロトコルである。
RPって何? Rendez-vouz Point(ランデブーポイント)
なんでこんなロマンチックなフランス語を使うんでしょうか。 ときどきこういうくだらない冗談がありますね。RSVPとか。要は、何かが出会うところで、マルチキャストルータ群で形成されるツリーの中心となるルータ、というような意味のようです。
RPを自動設定するようにdynamipsでしてみたが、ダメ。 まさかdynamipsのバグかと思ったりしたらidlepcを設定してるのにCPU使用率100になってて、再設定とかできなくて再インストールしてxpでやろうかとかごちゃごちゃやって時間をムダにした。
マルチキャストに関する素朴な疑問。
ルーターからigmp queryが送信されて、PCで受信したとする。Queryというのはマルチキャストを受信する人を探すもの?joinというのは、Queryに対するレスポンスとして送信されるのか?またはクライアントから任意に送信されるのか? いずれにしても、クライアント側で、「マルチキャストを受信したい」という意志を示す必要があり、その設定をしなければQueryを無視するはずだ。 そうしないと見たくもない動画のデータを受信することになる。
普通に考えると、「あるサービスを受けたいから、そのサービスを提供しているサーバのアドレス宛にリクエストを送る」ということをクライアントがするはずだ。それがjoinであろう。サーバーのアドレスはユニキャストならIPアドレスもしくはホストネームだが、マルチキャストの場合はマルチキャストアドレスとなる。
今使っているPCのNICをキャプチャすると、PIMv2のhelloがv6で届いている。あと、Multicast listeneer queryが届いている。Multicast Listner Report Message v2 というのも見える。 これの送信者は複数あり、ひとつは自分自身で、もうひとつはPIMv2のhelloを送っているアドレス、おそらく光電話のルータだ。
ICMPv6はおいといて、PIMv2のhelloはなんだろう?
みんな、coLinuxとか、virtualPCとかvlcとか使って、ちゃんと実験してるようだ。 ちょっと手間ヒマかかりそうだが、俺もやってみる。
dynamips、なんかおかしくないか?いろいろめんどくさいので、秋葉で3台シスコかっちゃったよ。
とりあえず、vistaのdynamipsで3台のルータを作り、外へ通信できるようにした。 サーバとなるのはvistaのvirtual pcのwindows xpのvlc。
クライアントは、昨日買ってきたファンレスPC。 なんか、シスコの実機はいらなかった感じ。まあいいや。
紹介します、ファンレスPC、DNRH-001です。 藤沢のソフマップUなんとかで15000円くらいで買ったものです。 LANアダプタ2つ、UPSつきです。winxp homeがインストールされてました。 昨日一日がかりで大量のアップデートをし、sp2, sp3, IE8をインストールしました。 今日秋葉でPC3200の1GBメモリを買ってきました2000円くらいでした。 規格はPC2100なんですけど2100なんかどこにも売ってませんでした。 1Gは新品だと5000円くらいで売ってました。じゃんぱらで買いました。 ちなみに最初についているkingstonの256MBのメモリは、ある店で大量に1個300円で売られていました。 ついでに100円のキーボード買ってきました。で、DNRHでdynamips動かそうとしたんですが遅くて使い物になりませんでした。dynamipsはけっこうリソースを必要とするようですね。 DNRHはこれから何に使おうかな・・・
とりあえず今はvlcのクライアントになります。まずはunicastルーティングを設定して、サーバ・クライアント間で通信できるようにする。vlcを双方にインストールし、サーバでストリーミングの設定をする。
さて、それではマルチキャストルーティングの設定だ.....というほどの設定は無い。
ip multicast-routing と、IFでpimのモードを設定するだけ。
メンドクサイのはvlcの設定である。 結果からいうととりあえずクライアントで何らかの動画が表示された。しかしそれは「何かが動いている」程度のモノであり、それが何かは全くわからず、 しかもすぐに止まってしまう。
vlcの配信側は、メニューの「メディア/ストリーミング」を開き、再生するファイルを選択して、「ストリーム再生」をクリックする。 「出力先」をクリックして、「RTP/MPEG Transport Stream」を選択し、 いろいろ試したがこれのときだけ、とりあえず何かが表示された。
そしてその右の「追加」をクリックする。 アドレスに「239.255.1.1」を入力する。(某サイトを参考のマネ) ベースポートはデフォルトの「5004」のまま。 トランスコーディングオプションはデフォルトの「Video - H.264 + AAC(MP4)」 「次へ」→「ストリーム再生」をクリックする。
クライアント側は、「メディア」→「ネットワークストリームを開く」で、 「ネットワークURLを入力してください」のところに「udp://@239.255.1.1:5004」を入力し、「再生」をクリックする。 再生開始までに少し時間がかかる。 そして、30秒くらいかな、経つと再生が止まる。データ自体が止まる。
VLCのバージョンは1.1.3
うまく表示できない原因として考えられるのは、
・クライアント側のスペック不足
・サーバ側のビデオのレートが高すぎる(ムービーメーカーで低品質ビデオを作ってみたがダメ)
・サーバ側がRTPで受信側がUDPである(受信側もRTPにしたり送信側をUDPにしたりしてみたがダメ)
など。
ただ、肝心のルータの設定はさっきも書いたがごく単純で、joinやらleaveはサーバとクライアントが勝手にやるだけ。
マルチキャストというのは、あたり前なのだが、あくまでも配信方法である。 再生はサーバのアプリケーションでおこなう。それをユニキャストで配信することも可能だ。(やってないが)
明日、今日買ったciscoが届くので、
PC(client)---RT1---RT2---RT3---PC(server)
という物理構成を作って、もう一度やってみる。
後もうひとつ、今は上記の構成のRT1~PC(Server)までをvistaでシミュレートしているが、そのときにvistaのネットワークアダプタのアドレスを、論理構成で使用しているサブネットのアドレスにすると、うまく動かない。「同じにしなくてもよい」のではなく「同じにしてはいけない、違うサブネットのアドレスにする必要がある」。理由がよくわからないのだが。
vlsってのがあるな・・・ ttl=1でやってたけど1じゃダメだな・・・でも届いてはいたっぽいけどな・・・ また明日・・・ passwordの設定の仕方を忘れている。ccnaでシミュレーション問題だったところだ。
ciscoはデフォルトの状態ではtelnetできないようになっている。
マルチキャスト配信ができない。何も映らない。
まず、http配信をやってみる。とりあえずできる。だがこんなのはただ相手のhttpを見ているだけで配信とは言えない。さらに、こんなものでも再生が途中で止まったりする。 httpでwmvのムービーをasfで、またはmp3なら、オリジナルクオリティでOK。
動画は音声がわずかに遅れる。一回しか再生できないのは、キャッシュ動作のせいだろうか? 途中でケーブルを抜いてみると、再生は停止したが、クライアントの受信をいったんとめて再受信したら再開できた。
落ち着いて考え直す。
mp3のhttpによるstreamingなら問題ない。これの、配信方法をmulticastに変えればよいのだ。
配信側は"RTP / MPEG Transport Stream"にする。
そして、配信したPCでもう一個vlcプレイヤーを立ち上げ、"rtp://239.255.1.1:5004"のurlを開く。
聞こえる!
これでいいんだ。 やっと見れた・・・
一番の問題はvlcのGUIで設定したttlが反映していなかったこと。
なんとずっとttl=1でやっていたのだ。
それから、client側に 224.0.0.0 mask 240.0.0.0 nexthop のルーティングがなかったこと。
あー疲れた。 ちなみに配信したのは、笑点でやった麒麟のネタのwmvである。5分46秒。
一式、ぶちまけときましょうかね。 まずは、クライアントが繋がっているルータ。 なんていうんだっけ、なんか名前があるんだよな・・・
サーバ
クライアント
そうそう、vlcのコマンドね。
vlcのttlは、cliで動かすと変更できるんだって。
GUIで設定して、最後に表示される文字列を、vlc.exe kirin.wmv の後に貼り付け、さらにその後に"--ttl 10"というようにttlを指定する。
kirin.wmv というのが動画ファイル名。 239.255.x.x というのは、マルチキャストのプライベートアドレス。
あとは、rtp以外で、udpとか、できるかやってみるか。 ttlか・・・ mroute で 239.255.1.1 がないなあとは思っていたのだが・・・ joinが出ているのは見たが、ttlが変わっていなかったとは・・・
ちなみに帯域は10Mbpsのethernetです。 10Mbpsで、十分です。
マルチキャストアドレスはけっこう見ることは見る。ospfとか、ripとか、UPnPとか。 今もキャプチャしてみたら、239.255.255.250 あてのSSDPとかいうのが出ている。 これは何だろう? たしかこれがUPnPなのである。
たしかにこのアドレスはマルチキャストアドレスであるが、私が言っているのはルーティングされる、ルータを越えるマルチキャストのことである。同じサブネット内であるなら、ほとんどブロードキャストと同じである。 ブロードキャストは全ホストが受信し、箱を開ける。マルチキャストはどうなのだろう?おそらく、ブロードキャストほどは負荷をかけないはず。箱のラベルだけ見て、開けずに捨てる感じか。
マルチキャストというのはまず、「ひとつの相手ではないがすべてでもない」というのがあり、さらに、「ルーティングできる」というのがある。これがなかなか説明されない。
unicastとbroadcastとmulticastの違いを説明するけど、ここで、broadcastはルーティングできないが、multicastはルーティングできる、ということをもっと強調すべきではないか。
マルチキャストルーティングとユニキャストルーティングの違いは何か。
そもそも、ルーティングとはどういうことか。 それは、next hopの指定であった。ルーターが知っているのは次の出口だけである。最終目的地は知らない。右から来たものを左へ受け流すだけである。
そのパケットがどこから来てどこへ行くのか(最終的にどこへ行くのか、何をしにいくのか)は関知しない。(することもあるが、それには手間がかかる。)
そうそう、マルチキャストルーティングするには、ユニキャストルーティングが必要。これも大事な前提だ。
ユニキャストとマルチキャストは用途によってどちらかを選ぶようなものではないのだ。 ・・・かな?
さて、マルチキャストでのポイントは、特定の相手にだけ送信するということだ。「特定の相手」とは?誰が決めるのか?送信者?違う。受信者が、「私のところに送って欲しい」と申し出る。 この申し出をおこなった人に対してのみ、送信をおこなうのである。この申し出のことを、joinという。
黒本より
cisco推奨のモードは sparse-dence-mode
しかし、私はマルチキャストを設定したルータを介して、どこかのサーバから動画を配信してクライアントで受信する様子を一度も見たことがない。だから、マルチキャストなんて本当に使われているのかと、はなはだ疑問なのである。
pimって何? マルチキャスト用のルーティングプロトコルである。
RPって何? Rendez-vouz Point(ランデブーポイント)
なんでこんなロマンチックなフランス語を使うんでしょうか。 ときどきこういうくだらない冗談がありますね。RSVPとか。要は、何かが出会うところで、マルチキャストルータ群で形成されるツリーの中心となるルータ、というような意味のようです。
RPを自動設定するようにdynamipsでしてみたが、ダメ。 まさかdynamipsのバグかと思ったりしたらidlepcを設定してるのにCPU使用率100になってて、再設定とかできなくて再インストールしてxpでやろうかとかごちゃごちゃやって時間をムダにした。
マルチキャストに関する素朴な疑問。
ルーターからigmp queryが送信されて、PCで受信したとする。Queryというのはマルチキャストを受信する人を探すもの?joinというのは、Queryに対するレスポンスとして送信されるのか?またはクライアントから任意に送信されるのか? いずれにしても、クライアント側で、「マルチキャストを受信したい」という意志を示す必要があり、その設定をしなければQueryを無視するはずだ。 そうしないと見たくもない動画のデータを受信することになる。
普通に考えると、「あるサービスを受けたいから、そのサービスを提供しているサーバのアドレス宛にリクエストを送る」ということをクライアントがするはずだ。それがjoinであろう。サーバーのアドレスはユニキャストならIPアドレスもしくはホストネームだが、マルチキャストの場合はマルチキャストアドレスとなる。
今使っているPCのNICをキャプチャすると、PIMv2のhelloがv6で届いている。あと、Multicast listeneer queryが届いている。Multicast Listner Report Message v2 というのも見える。 これの送信者は複数あり、ひとつは自分自身で、もうひとつはPIMv2のhelloを送っているアドレス、おそらく光電話のルータだ。
ICMPv6はおいといて、PIMv2のhelloはなんだろう?
みんな、coLinuxとか、virtualPCとかvlcとか使って、ちゃんと実験してるようだ。 ちょっと手間ヒマかかりそうだが、俺もやってみる。
dynamips、なんかおかしくないか?いろいろめんどくさいので、秋葉で3台シスコかっちゃったよ。
とりあえず、vistaのdynamipsで3台のルータを作り、外へ通信できるようにした。 サーバとなるのはvistaのvirtual pcのwindows xpのvlc。
クライアントは、昨日買ってきたファンレスPC。 なんか、シスコの実機はいらなかった感じ。まあいいや。
紹介します、ファンレスPC、DNRH-001です。 藤沢のソフマップUなんとかで15000円くらいで買ったものです。 LANアダプタ2つ、UPSつきです。winxp homeがインストールされてました。 昨日一日がかりで大量のアップデートをし、sp2, sp3, IE8をインストールしました。 今日秋葉でPC3200の1GBメモリを買ってきました2000円くらいでした。 規格はPC2100なんですけど2100なんかどこにも売ってませんでした。 1Gは新品だと5000円くらいで売ってました。じゃんぱらで買いました。 ちなみに最初についているkingstonの256MBのメモリは、ある店で大量に1個300円で売られていました。 ついでに100円のキーボード買ってきました。で、DNRHでdynamips動かそうとしたんですが遅くて使い物になりませんでした。dynamipsはけっこうリソースを必要とするようですね。 DNRHはこれから何に使おうかな・・・
とりあえず今はvlcのクライアントになります。まずはunicastルーティングを設定して、サーバ・クライアント間で通信できるようにする。vlcを双方にインストールし、サーバでストリーミングの設定をする。
さて、それではマルチキャストルーティングの設定だ.....というほどの設定は無い。
ip multicast-routing と、IFでpimのモードを設定するだけ。
メンドクサイのはvlcの設定である。 結果からいうととりあえずクライアントで何らかの動画が表示された。しかしそれは「何かが動いている」程度のモノであり、それが何かは全くわからず、 しかもすぐに止まってしまう。
vlcの配信側は、メニューの「メディア/ストリーミング」を開き、再生するファイルを選択して、「ストリーム再生」をクリックする。 「出力先」をクリックして、「RTP/MPEG Transport Stream」を選択し、 いろいろ試したがこれのときだけ、とりあえず何かが表示された。
そしてその右の「追加」をクリックする。 アドレスに「239.255.1.1」を入力する。(某サイトを参考のマネ) ベースポートはデフォルトの「5004」のまま。 トランスコーディングオプションはデフォルトの「Video - H.264 + AAC(MP4)」 「次へ」→「ストリーム再生」をクリックする。
クライアント側は、「メディア」→「ネットワークストリームを開く」で、 「ネットワークURLを入力してください」のところに「udp://@239.255.1.1:5004」を入力し、「再生」をクリックする。 再生開始までに少し時間がかかる。 そして、30秒くらいかな、経つと再生が止まる。データ自体が止まる。
VLCのバージョンは1.1.3
うまく表示できない原因として考えられるのは、
・クライアント側のスペック不足
・サーバ側のビデオのレートが高すぎる(ムービーメーカーで低品質ビデオを作ってみたがダメ)
・サーバ側がRTPで受信側がUDPである(受信側もRTPにしたり送信側をUDPにしたりしてみたがダメ)
など。
ただ、肝心のルータの設定はさっきも書いたがごく単純で、joinやらleaveはサーバとクライアントが勝手にやるだけ。
マルチキャストというのは、あたり前なのだが、あくまでも配信方法である。 再生はサーバのアプリケーションでおこなう。それをユニキャストで配信することも可能だ。(やってないが)
明日、今日買ったciscoが届くので、
PC(client)---RT1---RT2---RT3---PC(server)
という物理構成を作って、もう一度やってみる。
後もうひとつ、今は上記の構成のRT1~PC(Server)までをvistaでシミュレートしているが、そのときにvistaのネットワークアダプタのアドレスを、論理構成で使用しているサブネットのアドレスにすると、うまく動かない。「同じにしなくてもよい」のではなく「同じにしてはいけない、違うサブネットのアドレスにする必要がある」。理由がよくわからないのだが。
vlsってのがあるな・・・ ttl=1でやってたけど1じゃダメだな・・・でも届いてはいたっぽいけどな・・・ また明日・・・ passwordの設定の仕方を忘れている。ccnaでシミュレーション問題だったところだ。
ciscoはデフォルトの状態ではtelnetできないようになっている。
line vty 0 4 password xxxxxxxx loginが必要。
マルチキャスト配信ができない。何も映らない。
まず、http配信をやってみる。とりあえずできる。だがこんなのはただ相手のhttpを見ているだけで配信とは言えない。さらに、こんなものでも再生が途中で止まったりする。 httpでwmvのムービーをasfで、またはmp3なら、オリジナルクオリティでOK。
動画は音声がわずかに遅れる。一回しか再生できないのは、キャッシュ動作のせいだろうか? 途中でケーブルを抜いてみると、再生は停止したが、クライアントの受信をいったんとめて再受信したら再開できた。
落ち着いて考え直す。
mp3のhttpによるstreamingなら問題ない。これの、配信方法をmulticastに変えればよいのだ。
配信側は"RTP / MPEG Transport Stream"にする。
そして、配信したPCでもう一個vlcプレイヤーを立ち上げ、"rtp://239.255.1.1:5004"のurlを開く。
聞こえる!
これでいいんだ。 やっと見れた・・・
一番の問題はvlcのGUIで設定したttlが反映していなかったこと。
なんとずっとttl=1でやっていたのだ。
それから、client側に 224.0.0.0 mask 240.0.0.0 nexthop のルーティングがなかったこと。
あー疲れた。 ちなみに配信したのは、笑点でやった麒麟のネタのwmvである。5分46秒。
一式、ぶちまけときましょうかね。 まずは、クライアントが繋がっているルータ。 なんていうんだっけ、なんか名前があるんだよな・・・
R1#sho run Building configuration... Current configuration : 917 bytes ! version 12.3 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption ! hostname R1 ! boot-start-marker boot-end-marker ! enable password enable ! no aaa new-model ip subnet-zero ip cef ! ! no ip domain lookup ! ip multicast-routing ip audit po max-events 100 ! ! ! ! interface Loopback0 ip address 1.1.1.1 255.255.255.255 ! interface Ethernet0/0 ip address 192.168.100.99 255.255.255.0 ip pim dense-mode full-duplex ! interface BRI0/0 no ip address encapsulation hdlc shutdown ! interface Ethernet1/0 ip address 10.0.0.1 255.255.255.0 ip pim dense-mode full-duplex ! router ospf 100 log-adjacency-changes passive-interface Ethernet0/0 network 10.0.0.0 0.0.0.255 area 0 network 192.168.100.0 0.0.0.255 area 0 ! ip httq server ip classless ! ! ! line con 0 exec-timeout 0 0 password password line aux 0 line vty 0 4 password telnet login ! ! end
R1#sho ip mroute IP Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT, M - MSDP created entry, X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement, U - URD, I - Received Source Specific Host Report, Z - Multicast Tunnel, z - MDT-data group sender, Y - Joined MDT-data group, y - Sending to MDT-data group Outgoing interface flags: H - Hardware switched, A - Assert winner Timers: Uptime/Expires Interface state: Interface, Next-Hop or VCD, State/Mode (*, 239.255.1.1), 00:13:44/stopped, RP 0.0.0.0, flags: DC Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet0/0, Forward/Dense, 00:06:27/00:00:00 Ethernet1/0, Forward/Dense, 00:13:44/00:00:00 (192.168.200.240, 239.255.1.1), 00:07:43/00:02:53, flags: T Incoming interface: Ethernet1/0, RPF nbr 10.0.0.2 Outgoing interface list: Ethernet0/0, Forward/Dense, 00:06:28/00:00:00 (*, 224.0.1.40), 01:11:48/00:02:12, RP 0.0.0.0, flags: DCL Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet1/0, Forward/Dense, 01:11:39/00:00:00 Ethernet0/0, Forward/Dense, 01:11:48/00:00:00 (*, 239.255.255.250), 00:40:07/00:02:11, RP 0.0.0.0, flags: DC Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet1/0, Forward/Dense, 00:40:07/00:00:00 Ethernet0/0, Forward/Dense, 00:40:07/00:00:00 R1#sh ip igmp membership Flags: A - aggregate, T - tracked L - Local, S - static, V - virtual, R - Reported through v3 I - v3lite, U - Urd, M - SSM (S,G) channel 1,2,3 - The version of IGMP the group is in Channel/Group-Flags: / - Filtering entry (Exclude mode (S,G), Include mode (*,G)) Reporter: - last reporter if group is not explicitly tracked / - reporter in include mode, reporter in exclude Channel/Group Reporter Uptime Exp. Flags Interface *,239.255.1.1 192.168.100.1 00:06:36 02:57 2A Et0/0 *,224.0.1.40 10.0.0.2 01:11:47 02:01 2A Et1/0 *,224.0.1.40 192.168.100.99 01:11:56 02:04 2LA Et0/0 *,239.255.255.250 192.168.100.1 00:40:15 02:03 2A Et0/0 R1#sho ip igmp interface Ethernet0/0 is up, line protocol is up Internet address is 192.168.100.99/24 IGMP is enabled on interface Current IGMP host version is 2 Current IGMP router version is 2 IGMP query interval is 60 seconds IGMP querier timeout is 120 seconds IGMP max query response time is 10 seconds Last member query count is 2 Last member query response interval is 1000 ms Inbound IGMP access group is not set IGMP activity: 3 joins, 0 leaves Multicast routing is enabled on interface Multicast TTL threshold is 0 Multicast designated router (DR) is 192.168.100.99 (this system) IGMP querying router is 192.168.100.99 (this system) Multicast groups joined by this system (number of users): 224.0.1.40(1) Ethernet1/0 is up, line protocol is up Internet address is 10.0.0.1/24 IGMP is enabled on interface Current IGMP host version is 2 Current IGMP router version is 2 IGMP query interval is 60 seconds IGMP querier timeout is 120 seconds IGMP max query response time is 10 seconds Last member query count is 2 Last member query response interval is 1000 ms Inbound IGMP access group is not set IGMP activity: 1 joins, 0 leaves Multicast routing is enabled on interface Multicast TTL threshold is 0 Multicast designated router (DR) is 10.0.0.2 IGMP querying router is 10.0.0.1 (this system) No multicast groups joined by this system
R1#sho ip pim interface Address Interface Ver/ Nbr Query DR DR Mode Count Intvl Prior 192.168.100.99 Ethernet0/0 v2/D 0 30 1 192.168.100.99 10.0.0.1 Ethernet1/0 v2/D 1 30 1 10.0.0.2 R1#sho ip pim neighbor PIM Neighbor Table Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority,S - State Refresh Capable Neighbor Interface Uptime/Expires Ver DR Address Prio/Mode 10.0.0.2 Ethernet1/0 01:12:03/00:01:39 v2 1 / DR S
R1#sho ip route Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route Gateway of last resort is not set 1.0.0.0/32 is subnetted, 1 subnets C 1.1.1.1 is directly connected, Loopback0 20.0.0.0/24 is subnetted, 1 subnets O 20.0.0.0 [110/20] via 10.0.0.2, 01:11:08, Ethernet1/0 O 192.168.200.0/24 [110/30] via 10.0.0.2, 01:11:08, Ethernet1/0 10.0.0.0/24 is subnetted, 1 subnets C 10.0.0.0 is directly connected, Ethernet1/0 C 192.168.100.0/24 is directly connected, Ethernet0/0次は、真ん中のルータ。
R2#sho running-config Building configuration... Current configuration : 875 bytes ! version 12.3 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption ! hostname R2 ! boot-start-marker boot-end-marker ! enable password enable ! no aaa new-model ip subnet-zero ip cef ! ! no ip domain lookup ! ip multicast-routing ip audit po max-events 100 ! ! ! ! interface Loopback0 ip address 2.2.2.2 255.255.255.255 ! interface Ethernet0/0 ip address 10.0.0.2 255.255.255.0 ip pim dense-mode full-duplex ! interface BRI0/0 no ip address encapsulation hdlc shutdown ! interface Ethernet1/0 ip address 20.0.0.1 255.255.255.0 ip pim dense-mode full-duplex ! router ospf 100 log-adjacency-changes network 10.0.0.0 0.0.0.255 area 0 network 20.0.0.0 0.0.0.255 area 0 ! ip httq server ip classless ! ! ! line con 0 exec-timeout 0 0 password password line aux 0 line vty 0 4 password telnet login ! ! end
R2#sho ip mroute IP Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT, M - MSDP created entry, X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement, U - URD, I - Received Source Specific Host Report, Z - Multicast Tunnel, z - MDT-data group sender, Y - Joined MDT-data group, y - Sending to MDT-data group Outgoing interface flags: H - Hardware switched, A - Assert winner Timers: Uptime/Expires Interface state: Interface, Next-Hop or VCD, State/Mode (*, 239.255.1.1), 00:16:26/stopped, RP 0.0.0.0, flags: D Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet1/0, Forward/Dense, 00:16:26/00:00:00 Ethernet0/0, Forward/Dense, 00:16:26/00:00:00 (192.168.200.240, 239.255.1.1), 00:16:26/00:02:50, flags: T Incoming interface: Ethernet1/0, RPF nbr 20.0.0.2 Outgoing interface list: Ethernet0/0, Forward/Dense, 00:09:09/00:00:00 (*, 224.0.1.40), 01:14:20/00:02:36, RP 0.0.0.0, flags: DCL Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet1/0, Forward/Dense, 01:13:51/00:00:00 Ethernet0/0, Forward/Dense, 01:14:20/00:00:00 R2#sh ip igmp membership Flags: A - aggregate, T - tracked L - Local, S - static, V - virtual, R - Reported through v3 I - v3lite, U - Urd, M - SSM (S,G) channel 1,2,3 - The version of IGMP the group is in Channel/Group-Flags: / - Filtering entry (Exclude mode (S,G), Include mode (*,G)) Reporter: - last reporter if group is not explicitly tracked / - reporter in include mode, reporter in exclude Channel/Group Reporter Uptime Exp. Flags Interface *,224.0.1.40 20.0.0.2 01:13:40 02:29 2A Et1/0 *,224.0.1.40 10.0.0.2 01:14:27 02:23 2LA Et0/0
R2#sh ip igmp interface Ethernet0/0 is up, line protocol is up Internet address is 10.0.0.2/24 IGMP is enabled on interface Current IGMP host version is 2 Current IGMP router version is 2 IGMP query interval is 60 seconds IGMP querier timeout is 120 seconds IGMP max query response time is 10 seconds Last member query count is 2 Last member query response interval is 1000 ms Inbound IGMP access group is not set IGMP activity: 1 joins, 0 leaves Multicast routing is enabled on interface Multicast TTL threshold is 0 Multicast designated router (DR) is 10.0.0.2 (this system) IGMP querying router is 10.0.0.1 Multicast groups joined by this system (number of users): 224.0.1.40(1) Ethernet1/0 is up, line protocol is up Internet address is 20.0.0.1/24 IGMP is enabled on interface Current IGMP host version is 2 Current IGMP router version is 2 IGMP query interval is 60 seconds IGMP querier timeout is 120 seconds IGMP max query response time is 10 seconds Last member query count is 2 Last member query response interval is 1000 ms Inbound IGMP access group is not set IGMP activity: 1 joins, 0 leaves Multicast routing is enabled on interface Multicast TTL threshold is 0 Multicast designated router (DR) is 20.0.0.2 IGMP querying router is 20.0.0.1 (this system) No multicast groups joined by this system
R2#sh ip pim neighbor PIM Neighbor Table Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority, S - State Refresh Capable Neighbor Interface Uptime/Expires Ver DR Address Prio/Mode 10.0.0.1 Ethernet0/0 01:14:07/00:01:31 v2 1 / S 20.0.0.2 Ethernet1/0 01:14:07/00:01:25 v2 1 / DR S最後、サーバが繋がってるルータ。
R3#sho running-config Building configuration... Current configuration : 933 bytes ! version 12.3 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption ! hostname R3 ! boot-start-marker boot-end-marker ! enable password enable ! no aaa new-model ip subnet-zero ip cef ! ! no ip domain lookup ! ip multicast-routing ip audit po max-events 100 ! ! ! ! interface Loopback0 ip address 3.3.3.3 255.255.255.255 ! interface Ethernet0/0 ip address 20.0.0.2 255.255.255.0 ip pim dense-mode full-duplex ! interface BRI0/0 no ip address encapsulation hdlc shutdown ! interface Ethernet1/0 ip address 192.168.200.99 255.255.255.0 ip pim dense-mode full-duplex ! router ospf 100 log-adjacency-changes passive-interface Ethernet1/0 network 10.0.0.0 0.0.0.255 area 0 network 20.0.0.0 0.0.0.255 area 0 network 192.168.200.0 0.0.0.255 area 0 ! ip httq server ip classless ! ! ! line con 0 exec-timeout 0 0 line aux 0 line vty 0 4 password telnet login ! ! end
R3#sho ip route Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route Gateway of last resort is not set 3.0.0.0/32 is subnetted, 1 subnets C 3.3.3.3 is directly connected, Loopback0 20.0.0.0/24 is subnetted, 1 subnets C 20.0.0.0 is directly connected, Ethernet0/0 C 192.168.200.0/24 is directly connected, Ethernet1/0 10.0.0.0/24 is subnetted, 1 subnets O 10.0.0.0 [110/20] via 20.0.0.1, 01:15:38, Ethernet0/0 O 192.168.100.0/24 [110/30] via 20.0.0.1, 01:15:38, Ethernet0/0
R3#sho ip mroute IP Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT, M - MSDP created entry, X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement, U - URD, I - Received Source Specific Host Report, Z - Multicast Tunnel, z - MDT-data group sender, Y - Joined MDT-data group, y - Sending to MDT-data group Outgoing interface flags: H - Hardware switched, A - Assert winner Timers: Uptime/Expires Interface state: Interface, Next-Hop or VCD, State/Mode (*, 239.255.1.1), 00:18:51/stopped, RP 0.0.0.0, flags: D Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet0/0, Forward/Dense, 00:18:51/00:00:00 (192.168.200.240, 239.255.1.1), 00:12:50/00:02:51, flags: T Incoming interface: Ethernet1/0, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet0/0, Forward/Dense, 00:11:33/00:00:00 (*, 224.0.1.40), 01:16:50/00:02:17, RP 0.0.0.0, flags: DCL Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet0/0, Forward/Dense, 01:16:50/00:00:00 (*, 239.255.255.250), 01:15:58/00:02:10, RP 0.0.0.0, flags: DC Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet1/0, Forward/Dense, 01:15:58/00:00:00 Ethernet0/0, Forward/Dense, 01:15:58/00:00:00
R3#sho ip igmp membership Flags: A - aggregate, T - tracked L - Local, S - static, V - virtual, R - Reported through v3 I - v3lite, U - Urd, M - SSM (S,G) channel 1,2,3 - The version of IGMP the group is in Channel/Group-Flags: / - Filtering entry (Exclude mode (S,G), Include mode (*,G)) Reporter: - last reporter if group is not explicitly tracked / - reporter in include mode, reporter in exclude Channel/Group Reporter Uptime Exp. Flags Interface *,224.0.1.40 20.0.0.2 01:16:55 02:11 2LA Et0/0 *,239.255.255.250 192.168.200.240 01:16:04 02:04 2A Et1/0
R3#sho ip igmp interface Ethernet0/0 is up, line protocol is up Internet address is 20.0.0.2/24 IGMP is enabled on interface Current IGMP host version is 2 Current IGMP router version is 2 IGMP query interval is 60 seconds IGMP querier timeout is 120 seconds IGMP max query response time is 10 seconds Last member query count is 2 Last member query response interval is 1000 ms Inbound IGMP access group is not set IGMP activity: 1 joins, 0 leaves Multicast routing is enabled on interface Multicast TTL threshold is 0 Multicast designated router (DR) is 20.0.0.2 (this system) IGMP querying router is 20.0.0.1 Multicast groups joined by this system (number of users): 224.0.1.40(1) Ethernet1/0 is up, line protocol is up Internet address is 192.168.200.99/24
IGMP is enabled on interface Current IGMP host version is 2 Current IGMP router version is 2 IGMP query interval is 60 seconds IGMP querier timeout is 120 seconds IGMP max query response time is 10 seconds Last member query count is 2 Last member query response interval is 1000 ms Inbound IGMP access group is not set IGMP activity: 5 joins, 4 leaves Multicast routing is enabled on interface Multicast TTL threshold is 0 Multicast designated router (DR) is 192.168.200.99 (this system) IGMP querying router is 192.168.200.99 (this system) No multicast groups joined by this system
R3#sho ip pim interface Address Interface Ver/ Nbr Query DR DR Mode Count Intvl Prior 20.0.0.2 Ethernet0/0 v2/D 1 30 1 20.0.0.2 192.168.200.99 Ethernet1/0 v2/D 0 30 1 192.168.200.99
R3#sho ip pim neighbor PIM Neighbor Table Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority, S - State Refresh Capable Neighbor Interface Uptime/Expires Ver DR Address Prio/Mode 20.0.0.1 Ethernet0/0 01:17:06/00:01:27 v2 1 / S R3#sho ip route Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route Gateway of last resort is not set 3.0.0.0/32 is subnetted, 1 subnets C 3.3.3.3 is directly connected, Loopback0 20.0.0.0/24 is subnetted, 1 subnets C 20.0.0.0 is directly connected, Ethernet0/0 C 192.168.200.0/24 is directly connected, Ethernet1/0 10.0.0.0/24 is subnetted, 1 subnets O 10.0.0.0 [110/20] via 20.0.0.1, 01:16:08, Ethernet0/0 O 192.168.100.0/24 [110/30] via 20.0.0.1, 01:16:08, Ethernet0/0あとは、サーバとクライアントのルーティングテーブル
サーバ
=========================================================================== Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.168.200.99 192.168.200.240 20 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 192.168.200.0 255.255.255.0 192.168.200.240 192.168.200.240 20 192.168.200.240 255.255.255.255 127.0.0.1 127.0.0.1 20 192.168.200.255 255.255.255.255 192.168.200.240 192.168.200.240 20 224.0.0.0 240.0.0.0 192.168.200.240 192.168.200.240 20 255.255.255.255 255.255.255.255 192.168.200.240 192.168.200.240 1 Default Gateway: 192.168.200.99 =========================================================================== Persistent Routes: None
クライアント
=========================================================================== Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.3 20 0.0.0.0 0.0.0.0 192.168.100.99 192.168.100.1 30 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 192.168.1.0 255.255.255.0 192.168.1.3 192.168.1.3 20 192.168.1.3 255.255.255.255 127.0.0.1 127.0.0.1 20 192.168.1.255 255.255.255.255 192.168.1.3 192.168.1.3 20 192.168.100.0 255.255.255.0 192.168.100.1 192.168.100.1 30 192.168.100.1 255.255.255.255 127.0.0.1 127.0.0.1 30 192.168.100.255 255.255.255.255 192.168.100.1 192.168.100.1 30 224.0.0.0 240.0.0.0 192.168.1.3 192.168.1.3 20 224.0.0.0 240.0.0.0 192.168.100.1 192.168.100.1 30 224.0.0.0 240.0.0.0 192.168.100.99 192.168.100.1 1 255.255.255.255 255.255.255.255 192.168.1.3 192.168.1.3 1 255.255.255.255 255.255.255.255 192.168.100.1 192.168.100.1 1 Default Gateway: 192.168.1.1 =========================================================================== Persistent Routes: None
そうそう、vlcのコマンドね。
vlcのttlは、cliで動かすと変更できるんだって。
GUIで設定して、最後に表示される文字列を、vlc.exe kirin.wmv の後に貼り付け、さらにその後に"--ttl 10"というようにttlを指定する。
C:\Program Files\VideoLAN\VLC>vlc kirin.wmv :sout=#transcode{vcodec=h264,vb=0,scale=0,acodec=mp4a,ab=32,channels=2,samplerate=8000}:rtp{dst=239.255.1.1,port=5004,mux=ts} :no-sout-rtp-sap :no-sout-standard-sap :sout-keep --ttl 10
kirin.wmv というのが動画ファイル名。 239.255.x.x というのは、マルチキャストのプライベートアドレス。
あとは、rtp以外で、udpとか、できるかやってみるか。 ttlか・・・ mroute で 239.255.1.1 がないなあとは思っていたのだが・・・ joinが出ているのは見たが、ttlが変わっていなかったとは・・・
ちなみに帯域は10Mbpsのethernetです。 10Mbpsで、十分です。
マルチキャストアドレスはけっこう見ることは見る。ospfとか、ripとか、UPnPとか。 今もキャプチャしてみたら、239.255.255.250 あてのSSDPとかいうのが出ている。 これは何だろう? たしかこれがUPnPなのである。
たしかにこのアドレスはマルチキャストアドレスであるが、私が言っているのはルーティングされる、ルータを越えるマルチキャストのことである。同じサブネット内であるなら、ほとんどブロードキャストと同じである。 ブロードキャストは全ホストが受信し、箱を開ける。マルチキャストはどうなのだろう?おそらく、ブロードキャストほどは負荷をかけないはず。箱のラベルだけ見て、開けずに捨てる感じか。
マルチキャストというのはまず、「ひとつの相手ではないがすべてでもない」というのがあり、さらに、「ルーティングできる」というのがある。これがなかなか説明されない。
unicastとbroadcastとmulticastの違いを説明するけど、ここで、broadcastはルーティングできないが、multicastはルーティングできる、ということをもっと強調すべきではないか。
マルチキャストルーティングとユニキャストルーティングの違いは何か。
そもそも、ルーティングとはどういうことか。 それは、next hopの指定であった。ルーターが知っているのは次の出口だけである。最終目的地は知らない。右から来たものを左へ受け流すだけである。
そのパケットがどこから来てどこへ行くのか(最終的にどこへ行くのか、何をしにいくのか)は関知しない。(することもあるが、それには手間がかかる。)
そうそう、マルチキャストルーティングするには、ユニキャストルーティングが必要。これも大事な前提だ。
ユニキャストとマルチキャストは用途によってどちらかを選ぶようなものではないのだ。 ・・・かな?
さて、マルチキャストでのポイントは、特定の相手にだけ送信するということだ。「特定の相手」とは?誰が決めるのか?送信者?違う。受信者が、「私のところに送って欲しい」と申し出る。 この申し出をおこなった人に対してのみ、送信をおこなうのである。この申し出のことを、joinという。
黒本より
cisco推奨のモードは sparse-dence-mode
2010/08/22
ストリームAPI
public_timelineは20tweetsずつしか取得できないのだが、実際にtweetされているのは600/secくらいあるそうだ。public_timelineではそのうちの20コだけを取得する。
しかしもっと多くのtweetを取得できるストリームapiというのがあるそうだ。それは取得できるtweetの量に応じて3種類に分かれていて、100%取得するにはtwitter社と契約する必要があるという。
まあ、誰も彼もが取得できるようになったらどうなるかは想像がつく。しかし、サービスを作ったらpublic_timelineのようなものは誰でもすべて表示するようにと考えるのが普通だろう。
それがないのは意図されたものか、パフォーマンス的に無理なのかは不明だが、twitterの大きな特徴のひとつである。
このために、アカウントを作った直後には何も表示されないという淋しいことになる。ところでそのstream APIだが、誰でも取得できるのは5%を表示するものだという。しかし、600tweets/secとしてその5%といったら、30コしかない。
しかしもっと多くのtweetを取得できるストリームapiというのがあるそうだ。それは取得できるtweetの量に応じて3種類に分かれていて、100%取得するにはtwitter社と契約する必要があるという。
まあ、誰も彼もが取得できるようになったらどうなるかは想像がつく。しかし、サービスを作ったらpublic_timelineのようなものは誰でもすべて表示するようにと考えるのが普通だろう。
それがないのは意図されたものか、パフォーマンス的に無理なのかは不明だが、twitterの大きな特徴のひとつである。
このために、アカウントを作った直後には何も表示されないという淋しいことになる。ところでそのstream APIだが、誰でも取得できるのは5%を表示するものだという。しかし、600tweets/secとしてその5%といったら、30コしかない。
2010/08/18
BSCIの準備 BGP
private ASは 64512-65535,
BGPはパスベクタ型(ディスタンスベクタではない)、
トランジットASとは通過するASでありこのASではBGPを使用すべきである、
BGPスピーカが持つテーブル
(1)ネイバーテーブル
(2)BGPフォワーディングテーブル
(3)routing table、
EBGPピアは原則として直接接続している必要がありTTL=1で送信され接続していないときはebgp-multihopコマンドを設定してTTLを増加させる
next hopは受信したnext-hop属性をそのまま転送するが、自身の出力IFのアドレスをnext hopにすることができる。
どういう場合にこれが必要になるか?黒本でも、あるサイトでも、EBGPネイバーから受け取った経路情報をiBGPネイバーに転送するときが紹介されている。
RTA(100)---RTB(200)---RTC(200)というような。
このとき、RTBからRTCにアップデートを送信するときに、next-hopがRTAのアドレスになり、RTCが到達できない、ということを防ぐために、RTBのアドレスをnext-hopとして通知する、と。
なんとなくわかったような気もするが、それくらい勝手にやってくんないかな、という気もする。
ということは、EBGPピアがいて、かつ、そのEBGPピアとネイバーになっていないiBGPピアとネイバーになっているときには必須の設定と言うことかな。つまりASBR(BGPでこう呼ぶのか知らないが)では必須の設定である、と。
マルチアクセスネットワークでは、勝手にやってくれるようだ。
IBGPスプリットホライズンとは、「IBGPピアから受信したルートをほかのIBGPピアにアドバタイズしない」というルールで、AS内でルートがループするのを回避する。これは設定しなくても勝手にやってくれる。
同期(synchronization);「BGPで取得したルートはIGPでも同じルートを取得しなければルーティングテーブルに反映せず、他のピアにアドバタイズもしない」
例
RTA(100)---RTB(200)---RTC(non BGP)---RTD(200)---RTE(300)
同期がない場合、RTEからの経路情報がRTAまで伝わるが、その情報に基づいて送信されたRTAからのパケットは、non BGPスピーカーのRTCが破棄してしまう。
同期をしなくても、RTCもBGPスピーカーにすればいい?もしくはRTBとRTCを直接接続する。
こんなケースはそんなにないとは思うが、あるAS内でIGPつまりOSPFとかRIPとかが動いてなくて、つまりAS内にあるルータ同士が通信できない状態があって、しかしiBGPはフルメッシュで有効になっていて、synchronizationが有効になっていると、ASBRのルータがEBGPピアから受け取った経路はAS内に転送されないことになる。(という問題が黒本にあった)
フルメッシュに接続すれば情報がもれなく行き渡るのはわかる。だが、それをやると通信量が増えるから、なるべくしたくない。
スリットホライズンは、フルメッシュでない状態でブラックホールが発生するのを防ぐための機能である。しかしそれはもれなくルーティングする機能ではない。
「通信できない経路だったら最初から伝えない」という機能であり、それによってアクセスできなかったルータにアクセスできるようになるわけではない。
そこでルートリフレクタ。やっぱりフルメッシュ接続というのは現実的な解決ではない。
ルートリフレクタという特別なルータを作って、そこから必要なルータ宛に経路情報を転送する。これだけ。転送先に設定は必要ない。EBGPピアから受け取ったら、とか、クライアントから受け取ったら、とか、非クライアントからだったら、とかを覚える必要はない。(そういう問題が黒本にあった)
リフレクタである以前にIGPルータでありIBGPルータでありEBGPルータなのだから、経路情報は転送するのが基本。ただし、スプリットホライズンの規則によりIBGPピアから受け取った経路情報はIBGPピアには転送されない。それだと困るので、ルートリフレクタで指定したクライアントには経路情報を転送する。
黒本には以下のように書いてある。
(2)は、いい。IBGPスプリットホライズンにより転送しないのが原則だがリフレクタを設定したのでクライアントには転送する。(3)も、いい。EBGPピアからのルートなので、スプリットホライズンの対象外だから転送する。問題は(1)だ。「クライアントのピア」というのは、IBGPピアである。IBGPピアからの経路情報は転送しないのがスプリットホライズンの原則であり、ルートリフレクタのクライアントには例外的に送信する。
ま、「こう書いてあるからこうなんだ」「やってみたらそうなったからそうなんだ」というのは嫌なんだけど。そういうのが嫌だから勉強してんだけど。まあ、いっか・・・
ピアのアドレスをloopbackにする場合は、マルチホップ扱いになる。ふーん・・・。これはやってみるべきだとは思うが、メンドクサイ・・・。
やってみた。loopbackなんだからupdate sourceも必要である。
BGPのnetworkコマンドはBGPを有効にするinterfaceを指定するのでは、ない。
networkコマンドで経路情報を送信するが、自分自身のルーティングテーブルにない経路情報は送信されない。
as-pathはpushされていく。最後のpathがリストの最上位にある。
(config-router)#bgp default local-preference 200
matchもsetもないルートマップは permit all を意味する。
MED(Multi-Exit-Discriminator)
show ip bgp では Metricと表示される(じゃあMetricと呼べよといいたい)
自ASに入ってくるトラフィックを制御することができる。
optional nontransitive attribute
(config-router)#default-metric xxxで設定する。
低い値が採用される。優先度は6番目で低い。
clear ip bgp * soft in
BGPセッションをリセットさせずに、ピアから受信したルートを一時的にメモリに格納する。
認証
R1(config-router)#neighbor 2.2.2.2 password unkotare
BGPはパスベクタ型(ディスタンスベクタではない)、
トランジットASとは通過するASでありこのASではBGPを使用すべきである、
BGPスピーカが持つテーブル
(1)ネイバーテーブル
(2)BGPフォワーディングテーブル
(3)routing table、
EBGPピアは原則として直接接続している必要がありTTL=1で送信され接続していないときはebgp-multihopコマンドを設定してTTLを増加させる
next hopは受信したnext-hop属性をそのまま転送するが、自身の出力IFのアドレスをnext hopにすることができる。
どういう場合にこれが必要になるか?黒本でも、あるサイトでも、EBGPネイバーから受け取った経路情報をiBGPネイバーに転送するときが紹介されている。
RTA(100)---RTB(200)---RTC(200)というような。
このとき、RTBからRTCにアップデートを送信するときに、next-hopがRTAのアドレスになり、RTCが到達できない、ということを防ぐために、RTBのアドレスをnext-hopとして通知する、と。
なんとなくわかったような気もするが、それくらい勝手にやってくんないかな、という気もする。
ということは、EBGPピアがいて、かつ、そのEBGPピアとネイバーになっていないiBGPピアとネイバーになっているときには必須の設定と言うことかな。つまりASBR(BGPでこう呼ぶのか知らないが)では必須の設定である、と。
マルチアクセスネットワークでは、勝手にやってくれるようだ。
IBGPスプリットホライズンとは、「IBGPピアから受信したルートをほかのIBGPピアにアドバタイズしない」というルールで、AS内でルートがループするのを回避する。これは設定しなくても勝手にやってくれる。
同期(synchronization);「BGPで取得したルートはIGPでも同じルートを取得しなければルーティングテーブルに反映せず、他のピアにアドバタイズもしない」
例
RTA(100)---RTB(200)---RTC(non BGP)---RTD(200)---RTE(300)
同期がない場合、RTEからの経路情報がRTAまで伝わるが、その情報に基づいて送信されたRTAからのパケットは、non BGPスピーカーのRTCが破棄してしまう。
同期をしなくても、RTCもBGPスピーカーにすればいい?もしくはRTBとRTCを直接接続する。
こんなケースはそんなにないとは思うが、あるAS内でIGPつまりOSPFとかRIPとかが動いてなくて、つまりAS内にあるルータ同士が通信できない状態があって、しかしiBGPはフルメッシュで有効になっていて、synchronizationが有効になっていると、ASBRのルータがEBGPピアから受け取った経路はAS内に転送されないことになる。(という問題が黒本にあった)
フルメッシュに接続すれば情報がもれなく行き渡るのはわかる。だが、それをやると通信量が増えるから、なるべくしたくない。
スリットホライズンは、フルメッシュでない状態でブラックホールが発生するのを防ぐための機能である。しかしそれはもれなくルーティングする機能ではない。
「通信できない経路だったら最初から伝えない」という機能であり、それによってアクセスできなかったルータにアクセスできるようになるわけではない。
そこでルートリフレクタ。やっぱりフルメッシュ接続というのは現実的な解決ではない。
ルートリフレクタという特別なルータを作って、そこから必要なルータ宛に経路情報を転送する。これだけ。転送先に設定は必要ない。EBGPピアから受け取ったら、とか、クライアントから受け取ったら、とか、非クライアントからだったら、とかを覚える必要はない。(そういう問題が黒本にあった)
リフレクタである以前にIGPルータでありIBGPルータでありEBGPルータなのだから、経路情報は転送するのが基本。ただし、スプリットホライズンの規則によりIBGPピアから受け取った経路情報はIBGPピアには転送されない。それだと困るので、ルートリフレクタで指定したクライアントには経路情報を転送する。
黒本には以下のように書いてある。
「クライアントのピアから受け取ったルートは、クライアントと非クライアントピアの両方に転送(1)」「非クライアントのピアから受け取ったルートは、クライアントだけに転送(2)」「EBGPピアから受け取ったルートは、クライアントと非クライアントピアの両方に転送(3)」
(2)は、いい。IBGPスプリットホライズンにより転送しないのが原則だがリフレクタを設定したのでクライアントには転送する。(3)も、いい。EBGPピアからのルートなので、スプリットホライズンの対象外だから転送する。問題は(1)だ。「クライアントのピア」というのは、IBGPピアである。IBGPピアからの経路情報は転送しないのがスプリットホライズンの原則であり、ルートリフレクタのクライアントには例外的に送信する。
だが、非クライアントピアにも転送する、とある。これは、「ルートリフレクタを設定するとそうする」ということなのだろうか?どうやら「ルートリフレクタはクライアントから受信した経路情報はIBGPスプリットホライズンの原則の例外で転送される」ということのようだ。
RFCの登場
5. OperationWhen a route is received by a RR, it selects the best path based onits path selection rule. After the best path is selected, it must dothe following depending on the type of the peer it is receiving thebest path from:1) A Route from a Non-Client peerReflect to all other Clients.2) A Route from a Client peerReflect to all the Non-Client peers and also to theClient peers other than the originator. (Hence theClient peers are not required to be fully meshed).3) Route from an EBGP peerSend to all the Client and Non-Client Peers.
ま、「こう書いてあるからこうなんだ」「やってみたらそうなったからそうなんだ」というのは嫌なんだけど。そういうのが嫌だから勉強してんだけど。まあ、いっか・・・
ピアのアドレスをloopbackにする場合は、マルチホップ扱いになる。ふーん・・・。これはやってみるべきだとは思うが、メンドクサイ・・・。
やってみた。loopbackなんだからupdate sourceも必要である。
BGPのnetworkコマンドはBGPを有効にするinterfaceを指定するのでは、ない。
networkコマンドで経路情報を送信するが、自分自身のルーティングテーブルにない経路情報は送信されない。
as-pathはpushされていく。最後のpathがリストの最上位にある。
(config-router)#bgp default local-preference 200
matchもsetもないルートマップは permit all を意味する。
MED(Multi-Exit-Discriminator)
show ip bgp では Metricと表示される(じゃあMetricと呼べよといいたい)
自ASに入ってくるトラフィックを制御することができる。
optional nontransitive attribute
(config-router)#default-metric xxxで設定する。
低い値が採用される。優先度は6番目で低い。
clear ip bgp * soft in
BGPセッションをリセットさせずに、ピアから受信したルートを一時的にメモリに格納する。
認証
R1(config-router)#neighbor 2.2.2.2 password unkotare
2010/08/07
BSCIの準備 再配送
デフォルトシードメトリック
RIPとEIGRP(IGRP):0(無限大)
OSPF:20(BGPからの再配送時は1)
IS-IS:0
BGP:IGPルーティングメトリック値を保持
RIPへの再配送
(config)#router rip
(config-router)#redistribute ospf metric 10 route-map 10
isisへの再配送
(config)#router ospf 1
(config-router)#redistribute isis level-1 metric-type 1 subnets
配送リストは特定のルートの送受信両方のフィルタリングに使える。
ルートマップはNATの変換対象のフィルタリングにも使える。
ルートマップはmatchとsetで定義する。
最後には暗黙のdenyがある。
ルートマップは適用されたIFの受信パケットが対象となる。
ルートマップが適用されているIFを表示するのはshow ip policy
debug ip policy
ripでneighborを指定するとunicastでupdateを送る。
選択式問題ばかりやっている人の思考法の欠陥。消去法で消していった結果、正しいかどうか自信がないがそれしか選択の余地がないので選択する。誤った確信にもとづきすべての選択を消去した場合、「設問がおかしいから解くに値しない」として自分で答えを出そうとしない。正しいと思っていることであっても、他に未知の用語や情報が存在するとそちらが正しいのではと確信が揺らぎ、自分が知らないことを選択する。
RIPとEIGRP(IGRP):0(無限大)
OSPF:20(BGPからの再配送時は1)
IS-IS:0
BGP:IGPルーティングメトリック値を保持
RIPへの再配送
(config)#router rip
(config-router)#redistribute ospf metric 10 route-map 10
isisへの再配送
(config)#router ospf 1
(config-router)#redistribute isis level-1 metric-type 1 subnets
配送リストは特定のルートの送受信両方のフィルタリングに使える。
ルートマップはNATの変換対象のフィルタリングにも使える。
ルートマップはmatchとsetで定義する。
最後には暗黙のdenyがある。
ルートマップは適用されたIFの受信パケットが対象となる。
ルートマップが適用されているIFを表示するのはshow ip policy
debug ip policy
ripでneighborを指定するとunicastでupdateを送る。
選択式問題ばかりやっている人の思考法の欠陥。消去法で消していった結果、正しいかどうか自信がないがそれしか選択の余地がないので選択する。誤った確信にもとづきすべての選択を消去した場合、「設問がおかしいから解くに値しない」として自分で答えを出そうとしない。正しいと思っていることであっても、他に未知の用語や情報が存在するとそちらが正しいのではと確信が揺らぎ、自分が知らないことを選択する。
2010/08/04
BSCIの準備 IS-IS
おっとすっかりご無沙汰してしまった。とりあえず黒本をなめる。
バックボーンは特定のエリアではなく、L2ルータまたはL1/L2ルータによって接続されたパスを意味する。スタブエリアがある。バックボーンはエリアではない。
OSPFに比べてLSPが流れる量が少ないため1000ルータ/エリアくらいまで運用可能である。メトリックは帯域に関係なくデフォルト値を使用する。
ESH・・・はESからISへのHello, ISHはISからESへのHello, IIHはISとIS間でのHello L1はエリア内ルーティングをおこなう。
L2はエリア間ルーティングをおこなう。
L1ルータが隣接関係を確立できるのはL1またはL1/L2ルータのみで、L2ルータとはできない。
すべてのルータはひとつのエリアのみに所属する。
エリアの境界はリンク上に存在する。
OSIで使用されるネットワーク層のアドレスはNSAPである。
IDP=AFI+IDIAFIが49のアドレスはプライベート
NSAP=エリア+システムID+NSEL
ルータに割り当てるアドレスはNETである。
LSPはPtP上ではunicastで、BC上ではマルチキャストで送信される。
最低必要な3つのコマンド
(config)#router isis
(config-router)#net xx.xxxx.xxxx.xxxx.xxxx.xx
(config-if)#ip router isis
DISはpriority値で選出され、同点ならSNPA(LANならmac)で決まる。
DISとだけでなく、すべてのルータと隣接関係を確立する。
PSNP(Partial Sequence Number PDU)は、p-t-pリンクではLSPの確認応答として使用される。
特定のIF上で動作レベルを変更するには
(config-if)#isis circuit-type level-1とか。
SNPAはL2アドレス
L1ルータが自分の所属するAREA以外からのパケットを受け取ったら、もっとも近いL1/L2ルータへ転送する。
ADのデフォルトは115。OSPFより5大きい。IGRPが100。
EIGRPは内部、外部、集約で異なり、順に90,170,5。
ciscoルータではリンクメトリックは10となる。
(config-router)#summary-address xx.xx.xx.xx 255.255.255.128
とか。
フレームリレーではCLNSフレームリレーマップをbroadcastオプションつきで設定する必要がある。ただしp-t-pのサブインタフェースの場合は不要。
hello intervalの変更は
(config-if)#isis hello-interval 100
とか。
passive interfaceにすると、helloを送出しないが経路情報はadvertiseする。
PSNP(Partial Sequence Number PDU):LSPを受信したときの確認応答、およびLSPの要求に使用される。
NSAP(Network Service Access Point):OSIで使用されるネットワーク層のアドレス。
LSP(Link State PDU):リンクステート情報の配布に使用される。OSPFのLSAに相当する。
CLNP(ConnectionLess Network Protocol):コネクションレス型のデータとエラー通知を伝送するOSIネットワーク層プロトコル。
IS-ISは、わかりやすい。合理的で、すっきりしている。多分そのうち誰も使わなくなるであろうが、惜しい。
一方BGPは、わかりにくいがこれからも使用され続けるであろう。IS-ISの勉強ははかどり、BGPはすすまない・・・。世の中そういうものだ。
バックボーンは特定のエリアではなく、L2ルータまたはL1/L2ルータによって接続されたパスを意味する。スタブエリアがある。バックボーンはエリアではない。
OSPFに比べてLSPが流れる量が少ないため1000ルータ/エリアくらいまで運用可能である。メトリックは帯域に関係なくデフォルト値を使用する。
ESH・・・はESからISへのHello, ISHはISからESへのHello, IIHはISとIS間でのHello L1はエリア内ルーティングをおこなう。
L2はエリア間ルーティングをおこなう。
L1ルータが隣接関係を確立できるのはL1またはL1/L2ルータのみで、L2ルータとはできない。
すべてのルータはひとつのエリアのみに所属する。
エリアの境界はリンク上に存在する。
OSIで使用されるネットワーク層のアドレスはNSAPである。
IDP=AFI+IDIAFIが49のアドレスはプライベート
NSAP=エリア+システムID+NSEL
ルータに割り当てるアドレスはNETである。
LSPはPtP上ではunicastで、BC上ではマルチキャストで送信される。
最低必要な3つのコマンド
(config)#router isis
(config-router)#net xx.xxxx.xxxx.xxxx.xxxx.xx
(config-if)#ip router isis
DISはpriority値で選出され、同点ならSNPA(LANならmac)で決まる。
DISとだけでなく、すべてのルータと隣接関係を確立する。
PSNP(Partial Sequence Number PDU)は、p-t-pリンクではLSPの確認応答として使用される。
特定のIF上で動作レベルを変更するには
(config-if)#isis circuit-type level-1とか。
SNPAはL2アドレス
L1ルータが自分の所属するAREA以外からのパケットを受け取ったら、もっとも近いL1/L2ルータへ転送する。
ADのデフォルトは115。OSPFより5大きい。IGRPが100。
EIGRPは内部、外部、集約で異なり、順に90,170,5。
ciscoルータではリンクメトリックは10となる。
(config-router)#summary-address xx.xx.xx.xx 255.255.255.128
とか。
フレームリレーではCLNSフレームリレーマップをbroadcastオプションつきで設定する必要がある。ただしp-t-pのサブインタフェースの場合は不要。
hello intervalの変更は
(config-if)#isis hello-interval 100
とか。
passive interfaceにすると、helloを送出しないが経路情報はadvertiseする。
PSNP(Partial Sequence Number PDU):LSPを受信したときの確認応答、およびLSPの要求に使用される。
NSAP(Network Service Access Point):OSIで使用されるネットワーク層のアドレス。
LSP(Link State PDU):リンクステート情報の配布に使用される。OSPFのLSAに相当する。
CLNP(ConnectionLess Network Protocol):コネクションレス型のデータとエラー通知を伝送するOSIネットワーク層プロトコル。
IS-ISは、わかりやすい。合理的で、すっきりしている。多分そのうち誰も使わなくなるであろうが、惜しい。
一方BGPは、わかりにくいがこれからも使用され続けるであろう。IS-ISの勉強ははかどり、BGPはすすまない・・・。世の中そういうものだ。
2010/07/21
BSCIの準備
wikiにまとめる。dynamipsでコマンドを確認しつつ。
やっぱり、実機がないと無理だ。少なくとも私は。そして、コマンドを一回打てば、10回読んでも頭に入らないようなことが一瞬で理解できる。
今日はISISをやった。なかなかはかどらない。やる気も起きない。もう試験範囲からはずれることがわかっているプロトコルだ。だが、ISISというプロトコルがあることを知っておくのはいいことだ。もちろん、こんなプロトコルを設定する機会は前回BSCIを取ってから今までなかった。ISISという言葉を聞くことも見ることもなかった。そんなもの覚えてもしょうがない、とほとんどの人が言うだろう。でも、私には意味がある。このプロトコルが試験範囲からはずれ、EIGRPが残るということに、意味がある。
再配送・・・
bgp...
bgpがよくわからない。使ったこともないし。原理的なことはなんとなくわかるのだが、なぜそういう機能が必要なのか、どういう時に使い、どういう時に使わないのか、たとえるとどんなものか、などがピンとこない。それは前回勉強したときも同様で、まあいいやとりあえず覚えちまえ!とやりすごした。しかし最近はそういう力ずくの飲み込みというか暗記が難しくて、いちいち意味と意義が納得できないと受け付けない。
たとえば、IBGPスプリットホライズン、BGP同期、ルートリフレクタ、コンフェデレーション等の機能。これらはどれも、「余計な経路広告をしない」ことを目的としている。単純に考えるとノードが複数接続してネットワークを形成していて、何かの情報を交換しようとしたら、一番確実なのはすべてのノードにもれなく伝えるのが確実である。
しかし、それだと重複がありそうだなというのは想像がつく。OSPFの場合はそれを防ぐためにDRという役割がある。つまり、フラットな組織ではなく階層ができるのである。
BGPにはDRはない。だから、先ほど挙げたようなワザを使って、余計な経路情報の交換をしないようにする。だが、それはBGPプロトコルの欠陥に思えてしまう。欠陥はいいすぎとしても、欠点だ。
そして、前にも書いたけど、黒本は文章が雑だ。文法が間違っているというわけではないが、言葉の使い方が雑で、読みにくい。イライラする。情報が系統だてて書かれていないせいもあるだろうが、読んでいてスっと頭に入ってこない。ギクシャクギクシャクしている。また見つけた。
next-hop-self とか。あと update-sourceとか。どうもbgpはインテリジェントじゃない感じがする。非常に単純なプロトコルで、その単純さゆえの不都合をいろんなオプションで対応させている。egpなので、そんなに大きなトポロジ変化はなく、ASごとにまとめた情報をごっそりやり取りするので、コンバージェンスとか拡張性とかをあまり意識しないでもいいのではないだろうか、と、得意の何の根拠もない推測。
やっぱり、実機がないと無理だ。少なくとも私は。そして、コマンドを一回打てば、10回読んでも頭に入らないようなことが一瞬で理解できる。
今日はISISをやった。なかなかはかどらない。やる気も起きない。もう試験範囲からはずれることがわかっているプロトコルだ。だが、ISISというプロトコルがあることを知っておくのはいいことだ。もちろん、こんなプロトコルを設定する機会は前回BSCIを取ってから今までなかった。ISISという言葉を聞くことも見ることもなかった。そんなもの覚えてもしょうがない、とほとんどの人が言うだろう。でも、私には意味がある。このプロトコルが試験範囲からはずれ、EIGRPが残るということに、意味がある。
再配送・・・
bgp...
bgpがよくわからない。使ったこともないし。原理的なことはなんとなくわかるのだが、なぜそういう機能が必要なのか、どういう時に使い、どういう時に使わないのか、たとえるとどんなものか、などがピンとこない。それは前回勉強したときも同様で、まあいいやとりあえず覚えちまえ!とやりすごした。しかし最近はそういう力ずくの飲み込みというか暗記が難しくて、いちいち意味と意義が納得できないと受け付けない。
たとえば、IBGPスプリットホライズン、BGP同期、ルートリフレクタ、コンフェデレーション等の機能。これらはどれも、「余計な経路広告をしない」ことを目的としている。単純に考えるとノードが複数接続してネットワークを形成していて、何かの情報を交換しようとしたら、一番確実なのはすべてのノードにもれなく伝えるのが確実である。
しかし、それだと重複がありそうだなというのは想像がつく。OSPFの場合はそれを防ぐためにDRという役割がある。つまり、フラットな組織ではなく階層ができるのである。
BGPにはDRはない。だから、先ほど挙げたようなワザを使って、余計な経路情報の交換をしないようにする。だが、それはBGPプロトコルの欠陥に思えてしまう。欠陥はいいすぎとしても、欠点だ。
そして、前にも書いたけど、黒本は文章が雑だ。文法が間違っているというわけではないが、言葉の使い方が雑で、読みにくい。イライラする。情報が系統だてて書かれていないせいもあるだろうが、読んでいてスっと頭に入ってこない。ギクシャクギクシャクしている。また見つけた。
next-hop-self とか。あと update-sourceとか。どうもbgpはインテリジェントじゃない感じがする。非常に単純なプロトコルで、その単純さゆえの不都合をいろんなオプションで対応させている。egpなので、そんなに大きなトポロジ変化はなく、ASごとにまとめた情報をごっそりやり取りするので、コンバージェンスとか拡張性とかをあまり意識しないでもいいのではないだろうか、と、得意の何の根拠もない推測。
2010/07/15
CCNPになる時
このスレがたって、5年が経つ。ついにAがPになるときが来た。
BSCIとBCMSNを取ったあと、どうしてもONTとISCWという試験を取る気になれず、もう失効させちゃおうかなと思っていたところに、試験科目が改定された。私が持っているのは642-801J(BSCI)と、642-812J(BCMSN)である。あとTSHOOTを取ればCCNPだ!と思ったが・・・BSCIが古くてダメか?ダメなら再度取るのみ。2006年か・・・。
ちなみに642-832 TSHOOTは、まだ日本語試験がなく、開始は12月である。しかし、待っていられない。今日、英語のガイドを買った。6000円以上した。英語で受けてやるのだ。TSHOOTに受かったら、642-801Jが有効かどうかがわかる。有効ならCCNPになる。
CCNPにならなかったら、BSCIが無効ということだ。それならもう一度取り直す。
いや、ダメだ。有効期間はやっぱり3年だ。去年切れていたのか・・・。2006/7 にBSCI2008/3 にBCMSNということで来年の3月までにBSCIとTSHOOTを取らねばならない。面倒なので、何も考えず、取る。定番問題集をやって。BSCIは一度ちゃんと勉強しているからざっと復習すれば受かるはず。
カネがかかるな・・・・受験料が18500円?うわー・・・。黒本が4410円。あと、悪名高いあの問題集も買おうかなと思っている。8000円。bsciだけで3万を越す。そしてTSHOOT。すでに6000円を出した。こちらには問題集がない。実機もない。間違いなく不合格パターンである。英語ガイドを読み、1回受けてみて歯が立たないようなら、日本語化を待つか。その間にBSCIを取って、お金を貯めておく・・・。でもどうなんだろう、確実にcisco認定の市場価値は下がっているだろうな・・・。まあ、やる気の指標ってことで。
黒本買ってきた。どれくらいできるかな・・・。まずはEIGRPか・・・。懐かしいな・・・。全然わからん。途中で戦意喪失。・・・これはまずい。黒本を章ごとにばらす。ばらしながら思う。よく、黒本だけで受かるという人がいるが、私には無理だ。それは受かるためだけの勉強じゃ意味がないとかいうことではなく、黒本だけではまったく頭に入らない。これだけで実機も触らずガイドも読まずに受かる人は、それはそれで何かの能力がある。その能力を使って生きていけるだろう。
ばらして、できそうなIPv6とOSPFからやってみることにする。v6も、自信を持って答えられるのは半分くらいだ。アドレスの :: は2回以上使えるかと思ったりしていた・・・。NAT-PTというものを初めて知る。ciscsoは、
(config)#ipv6 unicast-routing
だったっけ、そういえば・・・。
v6のOSPF, OSPFv3 は使ったことがない。これは前回受けたとき試験範囲だったっけ・・・?全然記憶にないが・・・。
router-id に 255.255.255.255 を指定してもいいんだね・・・。ま、そんな奴は頭どうかしてるけどな。
down→INIT→TWO-WAY→ExStart→EXCHANGE→LOADING→FULL
INITの次はTWO-WAYか・・・。
そうだ。neighborならここで止まる。DRやBDR相手のときはExStartになって adjacencyまで行く、と。
224.0.0.5 ... all ospf routers
224.0.0.6 ... DR/BDR
これはおぼえるしかない。
NBMA とか フレームリレーとか・・・。これは前回取ったときもよくわからなかったところだが、4年経った今、さらにわからない。
BSCIはROUTEという試験に変わるらしいが、これは範囲からはずれるかな?フレームリレーのことは範囲であるともないとも書いてないが、IS-ISがなくなってるね。
やっぱり実機が必要だ。実家の2514を持って来ようか・・・。いい加減新しいの買うか・・・。dynamipsでいいか・・・。仮想モノはどうも嫌いなんだよね・・・。dynamipsはすでに入っていた・・・。vista 64bitでも動く・・・。
そうだ、そういえば1年ちょい前になんかやったっけ・・・。IOSもなぜかある・・・。うまく動かないので最新版をインストールしなおしたら起動した・・・。
ああ・・・これでいいや・・・・。これで・・・・。
BSCI程度ならこれで十分だろ・・・・・・・・。
あああ・・・。bgp, eigrp, isis,全部あるよ・・・。
ああなんか、やっと身分相応な、趣味と実益をかねた私的時間の使い方ができたな・・・。
あれか、wikiにまとめるか。
BSCIとBCMSNを取ったあと、どうしてもONTとISCWという試験を取る気になれず、もう失効させちゃおうかなと思っていたところに、試験科目が改定された。私が持っているのは642-801J(BSCI)と、642-812J(BCMSN)である。あとTSHOOTを取ればCCNPだ!と思ったが・・・BSCIが古くてダメか?ダメなら再度取るのみ。2006年か・・・。
ちなみに642-832 TSHOOTは、まだ日本語試験がなく、開始は12月である。しかし、待っていられない。今日、英語のガイドを買った。6000円以上した。英語で受けてやるのだ。TSHOOTに受かったら、642-801Jが有効かどうかがわかる。有効ならCCNPになる。
CCNPにならなかったら、BSCIが無効ということだ。それならもう一度取り直す。
いや、ダメだ。有効期間はやっぱり3年だ。去年切れていたのか・・・。2006/7 にBSCI2008/3 にBCMSNということで来年の3月までにBSCIとTSHOOTを取らねばならない。面倒なので、何も考えず、取る。定番問題集をやって。BSCIは一度ちゃんと勉強しているからざっと復習すれば受かるはず。
カネがかかるな・・・・受験料が18500円?うわー・・・。黒本が4410円。あと、悪名高いあの問題集も買おうかなと思っている。8000円。bsciだけで3万を越す。そしてTSHOOT。すでに6000円を出した。こちらには問題集がない。実機もない。間違いなく不合格パターンである。英語ガイドを読み、1回受けてみて歯が立たないようなら、日本語化を待つか。その間にBSCIを取って、お金を貯めておく・・・。でもどうなんだろう、確実にcisco認定の市場価値は下がっているだろうな・・・。まあ、やる気の指標ってことで。
黒本買ってきた。どれくらいできるかな・・・。まずはEIGRPか・・・。懐かしいな・・・。全然わからん。途中で戦意喪失。・・・これはまずい。黒本を章ごとにばらす。ばらしながら思う。よく、黒本だけで受かるという人がいるが、私には無理だ。それは受かるためだけの勉強じゃ意味がないとかいうことではなく、黒本だけではまったく頭に入らない。これだけで実機も触らずガイドも読まずに受かる人は、それはそれで何かの能力がある。その能力を使って生きていけるだろう。
ばらして、できそうなIPv6とOSPFからやってみることにする。v6も、自信を持って答えられるのは半分くらいだ。アドレスの :: は2回以上使えるかと思ったりしていた・・・。NAT-PTというものを初めて知る。ciscsoは、
(config)#ipv6 unicast-routing
だったっけ、そういえば・・・。
v6のOSPF, OSPFv3 は使ったことがない。これは前回受けたとき試験範囲だったっけ・・・?全然記憶にないが・・・。
router-id に 255.255.255.255 を指定してもいいんだね・・・。ま、そんな奴は頭どうかしてるけどな。
down→INIT→TWO-WAY→ExStart→EXCHANGE→LOADING→FULL
INITの次はTWO-WAYか・・・。
そうだ。neighborならここで止まる。DRやBDR相手のときはExStartになって adjacencyまで行く、と。
224.0.0.5 ... all ospf routers
224.0.0.6 ... DR/BDR
これはおぼえるしかない。
NBMA とか フレームリレーとか・・・。これは前回取ったときもよくわからなかったところだが、4年経った今、さらにわからない。
BSCIはROUTEという試験に変わるらしいが、これは範囲からはずれるかな?フレームリレーのことは範囲であるともないとも書いてないが、IS-ISがなくなってるね。
やっぱり実機が必要だ。実家の2514を持って来ようか・・・。いい加減新しいの買うか・・・。dynamipsでいいか・・・。仮想モノはどうも嫌いなんだよね・・・。dynamipsはすでに入っていた・・・。vista 64bitでも動く・・・。
そうだ、そういえば1年ちょい前になんかやったっけ・・・。IOSもなぜかある・・・。うまく動かないので最新版をインストールしなおしたら起動した・・・。
ああ・・・これでいいや・・・・。これで・・・・。
BSCI程度ならこれで十分だろ・・・・・・・・。
あああ・・・。bgp, eigrp, isis,全部あるよ・・・。
ああなんか、やっと身分相応な、趣味と実益をかねた私的時間の使い方ができたな・・・。
あれか、wikiにまとめるか。
2010/04/30
UI
iPhoneのUIがとても気持ちがよく、直感的に操作できるので、情報の取得や表示にたいしてとてもワガママになってきている。
最近気付いたのだが、私は非常にUIにうるさい。UI評論家にでもなったらいいと思うくらいだ。そして、UIというのは、特に日本では、軽んじられている。たかがUI、大事なのは性能や安定性であって、UIなど素人をごまかす子供だまし、そういう発想が強く、私は職場でも不快である。
仕事が終わって、iPhoneを触る。イヤホンをつける。iPhoneはやっぱり画面が小さい。複数の画面をタイル状にならべたりできない。知りたい情報は、量としてはささやかなのである。今日の松井の成績は?何打数何安打打点がいくつ、Angelsが勝ったのかどうか。あの会社の株価はいくらだったのか。10文字にも満たないような情報だ。そんな情報であれば、空中にポップアップできないだろうか?
そう、「空中にポップアップ」。最近、ことあるごとにそれを思う。具体的な実現方法は思いつかないが、セカイカメラが、それに近いことをやっている。あれを、ゴーグルのようなものに取り付ければ、ちょっと近いが、やっぱりゴーグルを通した仮想というか、重ねられた画面ではなく、空中に文字や映像を表示させたい。手のひらをスクリーンにして映すくらいでもいい。名刺の裏でもいい。
最近気付いたのだが、私は非常にUIにうるさい。UI評論家にでもなったらいいと思うくらいだ。そして、UIというのは、特に日本では、軽んじられている。たかがUI、大事なのは性能や安定性であって、UIなど素人をごまかす子供だまし、そういう発想が強く、私は職場でも不快である。
仕事が終わって、iPhoneを触る。イヤホンをつける。iPhoneはやっぱり画面が小さい。複数の画面をタイル状にならべたりできない。知りたい情報は、量としてはささやかなのである。今日の松井の成績は?何打数何安打打点がいくつ、Angelsが勝ったのかどうか。あの会社の株価はいくらだったのか。10文字にも満たないような情報だ。そんな情報であれば、空中にポップアップできないだろうか?
そう、「空中にポップアップ」。最近、ことあるごとにそれを思う。具体的な実現方法は思いつかないが、セカイカメラが、それに近いことをやっている。あれを、ゴーグルのようなものに取り付ければ、ちょっと近いが、やっぱりゴーグルを通した仮想というか、重ねられた画面ではなく、空中に文字や映像を表示させたい。手のひらをスクリーンにして映すくらいでもいい。名刺の裏でもいい。
2010/04/20
曲順
iPhoneであるアルバムを聴いていたら曲順がおかしい。iPhoneではどうにもならないので、iTunesで並べ替えをしようと思ったが、ドラッグしてもできない。プロパティを見ると、トラック番号とディスク番号という項目があって、全曲数とディスク番号が空白になっている曲が先に並んでいたので、そこを埋めると正しい順序にならんだ。なんでこんなことになったかというと、このアルバムの一部の曲だけ先に取り込み、あとから全部を取り込んで、その後に重複した曲を削除したからである。アルバムの曲の順序は大切だ。曲間の秒数も。
2010/04/16
adjacency
ospfの動作を確認するときによく、「ネイバーがフルになった」とか、「フルになってネイバーが確立した」とか言う。
コマンドでも show ip ospf neighborなどというのがあって、その結果 init とか full とか表示されている。
私も言っていた。「ネイバーがフルになった」「ネイバーが確立した」と。しかし、この使い方は間違っている。間違っているというのは言いすぎだとしても、不正確である。
まず、fullの状態になった関係は、adjacencyという。読み方はあえてカタカタにすると「アジェーセンシー」である。adjustのように「アジャセンシー」とは読まないようだ。
adjacencyという関係になってもneighborでもあるから、「ネイバーがフルになった」という言い方は、セーフかもしれない。しかし、「フルになったので、ネイバー関係が確立した」と言ったら、完全に間違いである。
うしてそうなるのかというと、二台のルータを対向させてOSPFを設定させた場合は常に、お互いにfullつまりadjacencyの関係になるからだ。だから、ospfが正しく設定されればfullになる、fullにならなければ正しくない、と思い込むのである。
同じリンク上に3台のOSPFルータを作ってみる。それぞれのルータに2台ずつのneigborが存在することになる。1台がDR、もう一台がBDRとなる。DRとは、すべてのneighborが adjacencyの関係になる。BDRともかな?では、4台になったら。このとき、DRでもBDRでもないルータが2台存在することになる。この2台の関係はどうなるか。neighborではある。しかし、adjacencyにはならない。つまり、show ip ospf neighborコマンドを実行した結果が、full にならないのである。(確か 2wayでとまる)そして、それでも neighborの関係なのである。
この状態を見る機会はあまり無いと思う。CCNAとかのためにOSPFを勉強した人では、一つのネットワークに4台のOSPFルータを作ることはまずないだろうから。覚えておいてほしい。状態がfullにならなくてもneighborである場合があるということを。というか、adjacencyの関係の方が特別であるということを。
OSPFのDRというのは、OSPFルータが多数存在する状況で、すべてのルータ同士で経路情報の交換をしなくてよいようにと、考えられた機能である。だから、OSPFルータ同士の関係がneighborなのか、adjacencyなのか、というのは重要な違いであり、「neighborもadjacencyも同じようなもの」ということはできない。また、よくこれらの語を「隣接」とか「近傍」とか訳す人がいるが、これくらいの語は訳さずにそのまま使うべきである。ただでさえ紛らわしい概念が翻訳することでさらに紛らわしくなる。
コマンドでも show ip ospf neighborなどというのがあって、その結果 init とか full とか表示されている。
私も言っていた。「ネイバーがフルになった」「ネイバーが確立した」と。しかし、この使い方は間違っている。間違っているというのは言いすぎだとしても、不正確である。
まず、fullの状態になった関係は、adjacencyという。読み方はあえてカタカタにすると「アジェーセンシー」である。adjustのように「アジャセンシー」とは読まないようだ。
adjacencyという関係になってもneighborでもあるから、「ネイバーがフルになった」という言い方は、セーフかもしれない。しかし、「フルになったので、ネイバー関係が確立した」と言ったら、完全に間違いである。
うしてそうなるのかというと、二台のルータを対向させてOSPFを設定させた場合は常に、お互いにfullつまりadjacencyの関係になるからだ。だから、ospfが正しく設定されればfullになる、fullにならなければ正しくない、と思い込むのである。
同じリンク上に3台のOSPFルータを作ってみる。それぞれのルータに2台ずつのneigborが存在することになる。1台がDR、もう一台がBDRとなる。DRとは、すべてのneighborが adjacencyの関係になる。BDRともかな?では、4台になったら。このとき、DRでもBDRでもないルータが2台存在することになる。この2台の関係はどうなるか。neighborではある。しかし、adjacencyにはならない。つまり、show ip ospf neighborコマンドを実行した結果が、full にならないのである。(確か 2wayでとまる)そして、それでも neighborの関係なのである。
この状態を見る機会はあまり無いと思う。CCNAとかのためにOSPFを勉強した人では、一つのネットワークに4台のOSPFルータを作ることはまずないだろうから。覚えておいてほしい。状態がfullにならなくてもneighborである場合があるということを。というか、adjacencyの関係の方が特別であるということを。
OSPFのDRというのは、OSPFルータが多数存在する状況で、すべてのルータ同士で経路情報の交換をしなくてよいようにと、考えられた機能である。だから、OSPFルータ同士の関係がneighborなのか、adjacencyなのか、というのは重要な違いであり、「neighborもadjacencyも同じようなもの」ということはできない。また、よくこれらの語を「隣接」とか「近傍」とか訳す人がいるが、これくらいの語は訳さずにそのまま使うべきである。ただでさえ紛らわしい概念が翻訳することでさらに紛らわしくなる。
2010/04/03
search API
search APIを使ってみる。
公式ページでは、userしか検索できない。
echofonではtweetや場所から検索できる。
public timelineはあまりに膨大というか速いというか混沌としている。しかし、今この瞬間に吐かれているtweetを見たい、ということはよくある。たとえば今、LAAの松井の様子を見ている人とか、何か事件があった時とか。
searchのAPIは簡単で、例によってURL形式でパラメータを渡すだけだ。結果はjsonまたはatomのいずれかを選ぶ。どちらともxmlのようなタグが付いている。
jsonはjavascriptで使うためのフォーマットのようだ。
atomというのは確か、rssみたいな用途で使われるものだと思う。いずれもテキストのカタマリだから、perlであれば自由に検索して必要なところだけ取り出せばいい。
でも、せっかくjsonとかatomのフォーマットで帰ってきているのだから、そのフォーマットを扱うやり方でスマートに取り出したい・・・。と思ったが結局得意のsplit&正規表現ですませた。
とりあえずはこれでOK。よく見たら、オフィシャルのページの横に、検索のためのテキストエリアとボタンがあった。そりゃそうだよな。というわけでだいたい最後はオフィシャルページに帰ってくる。
twitterの魅力のひとつは、公的なものと私的なものの境目が曖昧なところだ。作家や政治家が昼食に何を食べたとか、寒いとか、どこへ行ったとかカゼをひいたなどをつぶやく。かと思えばどこの誰だかわからない人が景気回復の方法を論じたり、民主党を批判したりする。
なかにはtwitterを自分のブログの更新通知に使ったり、イベントなどの告知をしたり、著作や出演番組の宣伝をしたりする人もいる。
というか、いわゆる有名人、ジャーナリスト、芸能人、作家等はそれが主目的であろう。
特にジャーナリストや作家は、自分達の仕事である文章表現を使って、無料で宣伝や広報ができるのだから、使わない手はない。しかし、ただ「無料で文章を書く」というだけなら、インターネット自体はずいぶん前からあって、自身のウェブサイト、メール、ブログ、掲示板、ミクシイなどのSNSと呼ばれるものでもよかったはずだ。そしてtwitterをやるような人はだいたいそれらも利用していた人たちだ。
でも、twitterほど大勢が利用しなかったし、twitterほど異業種・異文化の人が対等に会話できるものはなかった。
その違いは一体なんだろうか?「ミニブログ」などと言われるように140字という文字数の少なさだろうか?それよりも、followという仕組みのほうが重要なのではないだろうか。
followというのは一見なにも目新しいことのない機能に見える。ブログだったら読者になるとか、やったことはないがmixiならマイミクになるとかと同じようなものだと私も何の抵抗も無く理解した。しかし、私がtwitterを始めて誰かをfollowするまでには少し時間を要した。twitterは、自分が誰かをfollowしないと、まったく他人の発言が読めないのである。一言たりとも。
followをブログの読者のようなものだと考えていた私は、どこの誰だかわからない人をfollowすることに抵抗があった。followする人はサーチしなければならないが、その検索するキーワードも思い浮かばない。ところがtwitter利用者が増えて、購読しているブログの書き手もtwitterを話題にすることが多くなってきた。
そんなある日、誰かが私のアカウントをfollowしたことを告げるメールが届いた。そのときの私のツイートなんて、「メシ食った」くらいしかなかったはずなのに。多分、その人も適当な言葉や文字列で検索してfollowしたのだと思う。わたしはちょっと驚きつつもその人をfollowした。この、「followされたら自分もその人をfollowする」ということは、なんだか当たり前のマナーのようになっているが、私はそれは間違いではないかと思っている。
そこから、followした人がfollowしている人をfollowする、ということを繰り返したら、発言が表示され始めた。何の関係もない、誰宛かもわからない発言が雑多に表示される。なんだこれは・・・・。
しばらくしておもしろいと思い始めたのは、有名人のツイートが読めることだった。孫正義、ホリエモン、芸能人、作家・・・。「あの人もこんなことを言うのか」というギャップに驚いたり、親しみを感じたりする。総じて不満を吐き出したり泣き言を言ったり暴露したりするようなネガティブな発言が非常に少ないと感じた。これはよいことでもあるが、本音がないとか、刺激がないとか退屈だとかいうマイナスなことでもある。
最初に作ったアカウントは匿名である。アイコンも自分で適当に描いたマンガの顔である。つぶやきは当たり障りのないこと、テレビを見ながら思ったことや、どうでもいいことを誰にともなくつぶやいていた。
しかし、次第に他人のつぶやきの内容が高度というか、内容が濃いことに劣等感というか、恥ずかしさを感じ始めた。さらに多くの人が実名と顔を公表しているのも気になった。
そこで、あるとき、実名と顔を公表するアカウントを作って、それまでのアカウントは削除した。一応、このアカウントはやめて実名をさらす、と宣言した。実名にするとやはり発言内容に慎重になる。うかつなことは言えない。ますます自分の発言がつまらなくなるのを感じた。
followする人はどんどん増やして300人くらいになった。そのうち8割から9割はfollowされた。基本的に、有名人で何千何万というfollowerがいるような人以外は、だいたいfollowするとfollowし返す。
私はこれがなんだかうっとうしくなってきた。他人の発言はたくさん読みたいのだが、自分のつぶやきはあまり読まれたくない。そこで、followする人を一気に減らした。そして、followを返さないであろう人を探してfollowし始め、followされたくないもしくはfollowしていることを気付かれたくない人はfollowせずにprivateなlistに登録した。原則としてfollowするのは自分の顔をアイコンにしていて、名前を名乗っている人。ボットや企業の宣伝みたいなのは避ける。あと、やたらめったらRTしたり、あいさつばっかりしてたり、ニュースなどを引用してくる人も避ける。
というわけで、私はfollowした人が自分のことをfollowしなくても全然気にしない。むしろその方がありがたい。followされたからfollowしないと失礼だな、なんてことは思わせたくないし、思わない。そしてそれは、私のtwitterのやり方ではなく、皆がそうするべきなのではないか、それがtwitterの自由さというか、垣根の低さというか、孫正義とその辺の人が気軽に話せるよさなのではないか。
2ちゃんねるを始めたばかりの頃も、実質上誰も管理・検閲していない場に、ある秩序が存在していることに驚いたが、twitterの場合はそれよりもっと、自然な、おおらかな、それでいて有益でおもしろい場になっている。それは、ユーザーがすでにインターネットやSNSの利用に慣れてきたこともあるだろうが、やはりtwitterの仕組み自体が、うまくできているのだと思う。
いろんな人が、私と同様にtwitterの魅力、twitterの優れたところについて語っているのを見聞きしてきたが、多くの人が、有益で濃密なコミュニケーションが瞬時に広範囲に可能である、というようなことを言っていた。
しかし、わたしがtwitterに感心しているのも、求めているのも、そういうものではない。わたしは最初、twitterというのが「ゆるいつながり」だというのを聞いて、「これは2ちゃんねるの実況みたいなものだ!」とピンと来て始めたのだが、実際はゆるくなどないのでがっかりした。
しかし、始めて数ヶ月たった今では、やはりゆるいつながりになっている。自分のツイートになんの反応がなくても気にならない。というか、基本的に反応はない。反応されないようなことをつぶやいている。たまに淋しくなって特定の人あてにツイートしたりするが、その後は必ず後悔する。だいたい、ツイートというものは、follower全員が見るのである。そのようなものであるのに、特定の一人だけにあいさつの様なことをするのは、失礼と言ってもいいのではないか。
わたしはいつも2ちゃんねるとtwitterを比較する。それは非常によく似ているからだ。2ちゃんねるは1スレッド1000レスというのが絶妙だった、という話をきいたことがある。同じように、twitterでは140文字が絶妙だったとも。他の2ちゃんねるの長所は、板の種類の豊富さとかカテゴリ分けがよかったとか、書き込みが自分で削除できないこと、ほぼなんでも書ける、などがあげられた。
twitterも、140字と言う気軽に書ける文字数であることとか、APIが公開されているとかがあげられている。それらはおそらく正しい指摘であろう。しかし、本当に2ちゃんねるとtwitterが価値を持つようになった理由はただひとつ、ユーザー数が膨大だったから、これに尽きる。先ほどあげたような長所があったからユーザーが集まって膨大になったのだ、と言えるかもしれないが、twitterと同じようなサービスはたくさんある。google buzz, アメーバなう、など。2ちゃんねるだって、ただの掲示板である。まったく同じ形式の掲示板を見たことがある。しかし、いずれもユーザーが少なければ価値がない。WindowsやMS Officeも同じである。よいソフトウェアであったのは確かであろうが、それを大勢が使用してファイル等が交換可能になったこと、ここに意味がある。つまり、独占したから意味がある。独占がユーザーに利益となったのである。
twitterがアメーバなうやgoogle buzzと競い合うことは、ユーザーのためにならない。この手のものはとっかえひっかえするのが面倒だからだ。いろんなところに簡単にフィットしてしみこんで言った、それがtwitterであったのだろう。
そうそう、これが書きたかったのだが、twitterでは国境の壁が高い。異なる言語間でのコミュニケーションが難しい。私はいろんな国の言葉がTLに表示されるのがおもしろくて外国人をテキトーにfollowしてきたが、followし返されることはまずなかった。逆に、私のことをfollowする外国人もいない。これは、ツイートが短文で流れる速度も速いため、外国語をじっくり読んだり翻訳するヒマがないというのと、ツイートが形式ばらずに自由で慣用的な文句を多様するため外国人には理解しにくいからではないかと思う。
たぶんこれは日本人同士でも、話の合う・合わないが普通よりも強くでるのではないだろうか。気軽な発言は仲のよい気心のしれた人同士でしか通じない。万人に理解されるためには形式がしっかりして、普遍的なものでなければならない。私はネットでも、日常生活でも、深い仲になること、徒党を組むことが嫌いである。集団においてはのけものになって、自分の所属以外の人と仲良くすることが好きである。
公式ページでは、userしか検索できない。
echofonではtweetや場所から検索できる。
public timelineはあまりに膨大というか速いというか混沌としている。しかし、今この瞬間に吐かれているtweetを見たい、ということはよくある。たとえば今、LAAの松井の様子を見ている人とか、何か事件があった時とか。
searchのAPIは簡単で、例によってURL形式でパラメータを渡すだけだ。結果はjsonまたはatomのいずれかを選ぶ。どちらともxmlのようなタグが付いている。
jsonはjavascriptで使うためのフォーマットのようだ。
atomというのは確か、rssみたいな用途で使われるものだと思う。いずれもテキストのカタマリだから、perlであれば自由に検索して必要なところだけ取り出せばいい。
でも、せっかくjsonとかatomのフォーマットで帰ってきているのだから、そのフォーマットを扱うやり方でスマートに取り出したい・・・。と思ったが結局得意のsplit&正規表現ですませた。
とりあえずはこれでOK。よく見たら、オフィシャルのページの横に、検索のためのテキストエリアとボタンがあった。そりゃそうだよな。というわけでだいたい最後はオフィシャルページに帰ってくる。
twitterの魅力のひとつは、公的なものと私的なものの境目が曖昧なところだ。作家や政治家が昼食に何を食べたとか、寒いとか、どこへ行ったとかカゼをひいたなどをつぶやく。かと思えばどこの誰だかわからない人が景気回復の方法を論じたり、民主党を批判したりする。
なかにはtwitterを自分のブログの更新通知に使ったり、イベントなどの告知をしたり、著作や出演番組の宣伝をしたりする人もいる。
というか、いわゆる有名人、ジャーナリスト、芸能人、作家等はそれが主目的であろう。
特にジャーナリストや作家は、自分達の仕事である文章表現を使って、無料で宣伝や広報ができるのだから、使わない手はない。しかし、ただ「無料で文章を書く」というだけなら、インターネット自体はずいぶん前からあって、自身のウェブサイト、メール、ブログ、掲示板、ミクシイなどのSNSと呼ばれるものでもよかったはずだ。そしてtwitterをやるような人はだいたいそれらも利用していた人たちだ。
でも、twitterほど大勢が利用しなかったし、twitterほど異業種・異文化の人が対等に会話できるものはなかった。
その違いは一体なんだろうか?「ミニブログ」などと言われるように140字という文字数の少なさだろうか?それよりも、followという仕組みのほうが重要なのではないだろうか。
followというのは一見なにも目新しいことのない機能に見える。ブログだったら読者になるとか、やったことはないがmixiならマイミクになるとかと同じようなものだと私も何の抵抗も無く理解した。しかし、私がtwitterを始めて誰かをfollowするまでには少し時間を要した。twitterは、自分が誰かをfollowしないと、まったく他人の発言が読めないのである。一言たりとも。
followをブログの読者のようなものだと考えていた私は、どこの誰だかわからない人をfollowすることに抵抗があった。followする人はサーチしなければならないが、その検索するキーワードも思い浮かばない。ところがtwitter利用者が増えて、購読しているブログの書き手もtwitterを話題にすることが多くなってきた。
そんなある日、誰かが私のアカウントをfollowしたことを告げるメールが届いた。そのときの私のツイートなんて、「メシ食った」くらいしかなかったはずなのに。多分、その人も適当な言葉や文字列で検索してfollowしたのだと思う。わたしはちょっと驚きつつもその人をfollowした。この、「followされたら自分もその人をfollowする」ということは、なんだか当たり前のマナーのようになっているが、私はそれは間違いではないかと思っている。
そこから、followした人がfollowしている人をfollowする、ということを繰り返したら、発言が表示され始めた。何の関係もない、誰宛かもわからない発言が雑多に表示される。なんだこれは・・・・。
しばらくしておもしろいと思い始めたのは、有名人のツイートが読めることだった。孫正義、ホリエモン、芸能人、作家・・・。「あの人もこんなことを言うのか」というギャップに驚いたり、親しみを感じたりする。総じて不満を吐き出したり泣き言を言ったり暴露したりするようなネガティブな発言が非常に少ないと感じた。これはよいことでもあるが、本音がないとか、刺激がないとか退屈だとかいうマイナスなことでもある。
最初に作ったアカウントは匿名である。アイコンも自分で適当に描いたマンガの顔である。つぶやきは当たり障りのないこと、テレビを見ながら思ったことや、どうでもいいことを誰にともなくつぶやいていた。
しかし、次第に他人のつぶやきの内容が高度というか、内容が濃いことに劣等感というか、恥ずかしさを感じ始めた。さらに多くの人が実名と顔を公表しているのも気になった。
そこで、あるとき、実名と顔を公表するアカウントを作って、それまでのアカウントは削除した。一応、このアカウントはやめて実名をさらす、と宣言した。実名にするとやはり発言内容に慎重になる。うかつなことは言えない。ますます自分の発言がつまらなくなるのを感じた。
followする人はどんどん増やして300人くらいになった。そのうち8割から9割はfollowされた。基本的に、有名人で何千何万というfollowerがいるような人以外は、だいたいfollowするとfollowし返す。
私はこれがなんだかうっとうしくなってきた。他人の発言はたくさん読みたいのだが、自分のつぶやきはあまり読まれたくない。そこで、followする人を一気に減らした。そして、followを返さないであろう人を探してfollowし始め、followされたくないもしくはfollowしていることを気付かれたくない人はfollowせずにprivateなlistに登録した。原則としてfollowするのは自分の顔をアイコンにしていて、名前を名乗っている人。ボットや企業の宣伝みたいなのは避ける。あと、やたらめったらRTしたり、あいさつばっかりしてたり、ニュースなどを引用してくる人も避ける。
というわけで、私はfollowした人が自分のことをfollowしなくても全然気にしない。むしろその方がありがたい。followされたからfollowしないと失礼だな、なんてことは思わせたくないし、思わない。そしてそれは、私のtwitterのやり方ではなく、皆がそうするべきなのではないか、それがtwitterの自由さというか、垣根の低さというか、孫正義とその辺の人が気軽に話せるよさなのではないか。
2ちゃんねるを始めたばかりの頃も、実質上誰も管理・検閲していない場に、ある秩序が存在していることに驚いたが、twitterの場合はそれよりもっと、自然な、おおらかな、それでいて有益でおもしろい場になっている。それは、ユーザーがすでにインターネットやSNSの利用に慣れてきたこともあるだろうが、やはりtwitterの仕組み自体が、うまくできているのだと思う。
いろんな人が、私と同様にtwitterの魅力、twitterの優れたところについて語っているのを見聞きしてきたが、多くの人が、有益で濃密なコミュニケーションが瞬時に広範囲に可能である、というようなことを言っていた。
しかし、わたしがtwitterに感心しているのも、求めているのも、そういうものではない。わたしは最初、twitterというのが「ゆるいつながり」だというのを聞いて、「これは2ちゃんねるの実況みたいなものだ!」とピンと来て始めたのだが、実際はゆるくなどないのでがっかりした。
しかし、始めて数ヶ月たった今では、やはりゆるいつながりになっている。自分のツイートになんの反応がなくても気にならない。というか、基本的に反応はない。反応されないようなことをつぶやいている。たまに淋しくなって特定の人あてにツイートしたりするが、その後は必ず後悔する。だいたい、ツイートというものは、follower全員が見るのである。そのようなものであるのに、特定の一人だけにあいさつの様なことをするのは、失礼と言ってもいいのではないか。
わたしはいつも2ちゃんねるとtwitterを比較する。それは非常によく似ているからだ。2ちゃんねるは1スレッド1000レスというのが絶妙だった、という話をきいたことがある。同じように、twitterでは140文字が絶妙だったとも。他の2ちゃんねるの長所は、板の種類の豊富さとかカテゴリ分けがよかったとか、書き込みが自分で削除できないこと、ほぼなんでも書ける、などがあげられた。
twitterも、140字と言う気軽に書ける文字数であることとか、APIが公開されているとかがあげられている。それらはおそらく正しい指摘であろう。しかし、本当に2ちゃんねるとtwitterが価値を持つようになった理由はただひとつ、ユーザー数が膨大だったから、これに尽きる。先ほどあげたような長所があったからユーザーが集まって膨大になったのだ、と言えるかもしれないが、twitterと同じようなサービスはたくさんある。google buzz, アメーバなう、など。2ちゃんねるだって、ただの掲示板である。まったく同じ形式の掲示板を見たことがある。しかし、いずれもユーザーが少なければ価値がない。WindowsやMS Officeも同じである。よいソフトウェアであったのは確かであろうが、それを大勢が使用してファイル等が交換可能になったこと、ここに意味がある。つまり、独占したから意味がある。独占がユーザーに利益となったのである。
twitterがアメーバなうやgoogle buzzと競い合うことは、ユーザーのためにならない。この手のものはとっかえひっかえするのが面倒だからだ。いろんなところに簡単にフィットしてしみこんで言った、それがtwitterであったのだろう。
そうそう、これが書きたかったのだが、twitterでは国境の壁が高い。異なる言語間でのコミュニケーションが難しい。私はいろんな国の言葉がTLに表示されるのがおもしろくて外国人をテキトーにfollowしてきたが、followし返されることはまずなかった。逆に、私のことをfollowする外国人もいない。これは、ツイートが短文で流れる速度も速いため、外国語をじっくり読んだり翻訳するヒマがないというのと、ツイートが形式ばらずに自由で慣用的な文句を多様するため外国人には理解しにくいからではないかと思う。
たぶんこれは日本人同士でも、話の合う・合わないが普通よりも強くでるのではないだろうか。気軽な発言は仲のよい気心のしれた人同士でしか通じない。万人に理解されるためには形式がしっかりして、普遍的なものでなければならない。私はネットでも、日常生活でも、深い仲になること、徒党を組むことが嫌いである。集団においてはのけものになって、自分の所属以外の人と仲良くすることが好きである。
2010/03/25
hash
hashの例。
すると、それぞれのfirst nameをキーとして、family nameをハッシュとして登録する。いったんCtrl+Zを押す。今度は、first nameのみを入力する。
すると、それに対応するfamily nameが表示される。
$members; while (<>){ chomp; @inputs = split / /; $members{$inputs[0]} = $inputs[1]; } while (<>){ chomp; print $members{$_}."\n"; }まず、フルネームを入力する。first nameとlast nameの間はスペースをいれる。
すると、それぞれのfirst nameをキーとして、family nameをハッシュとして登録する。いったんCtrl+Zを押す。今度は、first nameのみを入力する。
すると、それに対応するfamily nameが表示される。
C:\Users\t>perl mem.pl John Lennon Bob Dylan Pete Townshend ^Z John Lennon Pete Townshend John Lennon Bob Dylan
2010/03/20
リファレンスによる多次元配列
while(<>){ @tmp = split; push @LoL, [ @tmp ]; } for $array_ref ( @LoL ) { print "\t [ @$array_ref ], \n"; }
リファレンスによる多次元配列の作り方と表示の仕方である。たったこれだけである。いろいろ情報をさがしたが、この7行に尽きる。プログラミングperlの4章にある。
public_timeline
public timelineというAPIがある。これは、そのときの最新の20個のつぶやきを表示するものである。APIはURLで指定し、xmlで帰ってくる。perlでは LWP::Simpleを使って、xmlを変数に格納する。
そこでかっこつけて「xmlをパースしよう」などと考えたのだが、めんどくさいので正規表現で必要なものを取り出してhtmlとして書いた。とりあえず、textと、アイコンと、screen_name。リロードしていくと、まず同じアイコンは見当たらない。なんせ世界中のtweetを見てるわけだから。「風速」はどれくらいなんだろう?
これだけ速くてなんの脈絡もないと、もはやtweetを読まないので、プロフィールにリンクしたアイコンだけを並べた。ひたすらF5を押して、目に留まったアイコンがあったらプロフィールを開く。
public_timelineは、url形式のapiを呼ぶことができたが、friends_timelineは、Net::Twitterを使った。これは便利ではあるが、さくらサーバで使えない。friendsも、homeも、url形式で使いたい。
そこでかっこつけて「xmlをパースしよう」などと考えたのだが、めんどくさいので正規表現で必要なものを取り出してhtmlとして書いた。とりあえず、textと、アイコンと、screen_name。リロードしていくと、まず同じアイコンは見当たらない。なんせ世界中のtweetを見てるわけだから。「風速」はどれくらいなんだろう?
これだけ速くてなんの脈絡もないと、もはやtweetを読まないので、プロフィールにリンクしたアイコンだけを並べた。ひたすらF5を押して、目に留まったアイコンがあったらプロフィールを開く。
public_timelineは、url形式のapiを呼ぶことができたが、friends_timelineは、Net::Twitterを使った。これは便利ではあるが、さくらサーバで使えない。friendsも、homeも、url形式で使いたい。
2010/03/18
MACアドレステーブルとarpテーブル again
ぱっと聞くと両者は同じように思えるが別物である。利用者にはあまり意識することのないテーブルであり、とくにmac addressテーブルを参照することはほとんどないだろう。この二つのテーブルをそれぞれ一言で説明すると、arpテーブルとは、macアドレスとipアドレスの対応表、mac addressテーブルとは、macアドレスとポートの対応表である。arpテーブルはL3通信で使用され、mac addressテーブルはL2通信で使用される。L3通信というのはL2通信を含むので、そういう意味ではL3通信をおこなう際には両方のテーブルを使用すると言うことができる。
arpテーブルの原理はわかりやすい。送信したい相手のIPアドレスに対応するMACアドレスを探すのである。テーブルに該当するIPアドレスがなかったらどうなるか?arpリクエストを送信して、その答えを待つ。先ほどL3通信といったが、arpキャッシュを参照するL3通信というのは、L3通信であっても同一ネットワーク内での通信に限られる。L3通信というのは、異なるネットワーク外への通信を含み、本来、それが目的の通信である。同一ネットワーク内の通信であれば、macアドレスだけでよいのである。
ルータはルーティングテーブルを見て、宛先IPアドレスがconnectedの経路であることを知ると、arpキャッシュを参照する。そして宛先macアドレスを知る。普通のルータであればここで話は終わる。ここから先はL3スイッチとか、ルータでもLAN側に複数ポートがあるようなものの話だ。
ブロードバンドルータでもそのようなものが多い、というかほとんどがそうであろう。この時には、出力ポートを選ぶのにMACアドレステーブルを使用する。MACアドレスとポートの対応表である。arpキャッシュの場合は見つからないときにはarp requestを送信したが、L2通信の場合は見つからないときはすべてのポートから送信する。これをフラッディングという。
MACアドレスを学習するのはフレームを受信したときで、そのときにそのポートにそのMACアドレスを持つ装置が接続していえることを学習するのである。
arpテーブルの原理はわかりやすい。送信したい相手のIPアドレスに対応するMACアドレスを探すのである。テーブルに該当するIPアドレスがなかったらどうなるか?arpリクエストを送信して、その答えを待つ。先ほどL3通信といったが、arpキャッシュを参照するL3通信というのは、L3通信であっても同一ネットワーク内での通信に限られる。L3通信というのは、異なるネットワーク外への通信を含み、本来、それが目的の通信である。同一ネットワーク内の通信であれば、macアドレスだけでよいのである。
ルータはルーティングテーブルを見て、宛先IPアドレスがconnectedの経路であることを知ると、arpキャッシュを参照する。そして宛先macアドレスを知る。普通のルータであればここで話は終わる。ここから先はL3スイッチとか、ルータでもLAN側に複数ポートがあるようなものの話だ。
ブロードバンドルータでもそのようなものが多い、というかほとんどがそうであろう。この時には、出力ポートを選ぶのにMACアドレステーブルを使用する。MACアドレスとポートの対応表である。arpキャッシュの場合は見つからないときにはarp requestを送信したが、L2通信の場合は見つからないときはすべてのポートから送信する。これをフラッディングという。
MACアドレスを学習するのはフレームを受信したときで、そのときにそのポートにそのMACアドレスを持つ装置が接続していえることを学習するのである。
half duplexとfull duplex
最近のPCおよびルータ、スイッチは、ほぼ100%full duplexで運用されているはずです。しかも、固定ではなくauto設定で、ユーザーはもちろん管理者もduplexについてはほとんど意識することはないでしょう。
しかし、最新の装置でも、固定設定は可能でhalf duplexを設定することもでき、half duplexで通信することができます。
half duplexというのは、2つのノード間で通信をおこなう際に、送信と受信を交互におこない、送受信を同時におこなうことができません。
full duplexでは送受信が同時に可能であり、100Mbpsのfull duplexであれば、送信を100Mbps、受信を100Mbpsで同時に通信できるので、実質200Mbpsの通信が可能ということになります。
あるノード間がhalf duplexでリンクされている場合に、各ノードから同時に通信をおこなうと、コリジョンが発生し、完全な通信がおこなえません。
では、どうしてhalf duplexが設定できるようになっているのでしょうか?
half duplexを設定しなければならないのはどういう場合でしょうか?
「full duplexに未対応の装置との互換性を保つため」というのが答えだと考える人が多いでしょう。
しかし、厳密に言うとそうではなく、「Ethernetの規格を満たすため」です。
half duplexの通信がおこなえない装置はethernetの規格を満たしているとは言えないためです。
では、どうしてethernetの規格はhalf duplexを規格に残しているのでしょうか。
ここまで考えていくと、ようやくhalf duplexが何であるかが理解できます。
現在のethernetはノード同士が「リンク」によって接続されているが、ethernet初期はそうではなく「バス」によって接続されていた。
バスというのは、一本のケーブルにたくさんのノードがぶら下がるような形である。
現在のetherネットでも見ようによってはバスに見えるかもしれないが、ノードを接続するには、直接ケーブルで接続するか、間にスイッチやルータを経由する必要があり、それらの装置はノードであって、その間はリンクで接続されるから、バスとは異なるのである。
バス型のethernetでは、通信をおこなえるノードが3台以上存在できる。
これを Mixing Segmentと呼ぶ。
一方、現在使用されているUTPケーブルなどはケーブル上にノードが2台までしか存在できない。
これを Link Segment と呼ぶ。
そしてLink Segmentでは送受信用のケーブルが対になっているために衝突が発生しないので、
全二重通信がおこなえる。
こうしてみてくると、「半二重通信はMixing Segmentでの通信方法」だということがわかる。
可能ならば全二重通信のほうがよいにきまっている。
しかし、最新の装置でも、固定設定は可能でhalf duplexを設定することもでき、half duplexで通信することができます。
half duplexというのは、2つのノード間で通信をおこなう際に、送信と受信を交互におこない、送受信を同時におこなうことができません。
full duplexでは送受信が同時に可能であり、100Mbpsのfull duplexであれば、送信を100Mbps、受信を100Mbpsで同時に通信できるので、実質200Mbpsの通信が可能ということになります。
あるノード間がhalf duplexでリンクされている場合に、各ノードから同時に通信をおこなうと、コリジョンが発生し、完全な通信がおこなえません。
では、どうしてhalf duplexが設定できるようになっているのでしょうか?
half duplexを設定しなければならないのはどういう場合でしょうか?
「full duplexに未対応の装置との互換性を保つため」というのが答えだと考える人が多いでしょう。
しかし、厳密に言うとそうではなく、「Ethernetの規格を満たすため」です。
half duplexの通信がおこなえない装置はethernetの規格を満たしているとは言えないためです。
では、どうしてethernetの規格はhalf duplexを規格に残しているのでしょうか。
ここまで考えていくと、ようやくhalf duplexが何であるかが理解できます。
現在のethernetはノード同士が「リンク」によって接続されているが、ethernet初期はそうではなく「バス」によって接続されていた。
バスというのは、一本のケーブルにたくさんのノードがぶら下がるような形である。
現在のetherネットでも見ようによってはバスに見えるかもしれないが、ノードを接続するには、直接ケーブルで接続するか、間にスイッチやルータを経由する必要があり、それらの装置はノードであって、その間はリンクで接続されるから、バスとは異なるのである。
バス型のethernetでは、通信をおこなえるノードが3台以上存在できる。
これを Mixing Segmentと呼ぶ。
一方、現在使用されているUTPケーブルなどはケーブル上にノードが2台までしか存在できない。
これを Link Segment と呼ぶ。
そしてLink Segmentでは送受信用のケーブルが対になっているために衝突が発生しないので、
全二重通信がおこなえる。
こうしてみてくると、「半二重通信はMixing Segmentでの通信方法」だということがわかる。
可能ならば全二重通信のほうがよいにきまっている。
2010/03/14
新科目 TSHOOT
そろそろ試験を受けようと思ってciscoのページを見に行ったら、どうしても受ける気にならなかったONTとISCWの2科目がなくなって、TSHOOTという科目ができるようだ。
しかもこれを取ればCCNPになれる。まだベータで、英語だけど。
しかもこれを取ればCCNPになれる。まだベータで、英語だけど。
2010/03/10
friends_timeline
こんどは、皆の発言を表示させてみた。私は公式のWEBでほとんど十分なのだが、オートリロードしないのだけが不満だったので、それだけをやりたかった。tweetdeckとかtweenとかを使ってみたが、みなフォントが小さすぎるのだ。もっと大きく表示させたい。
friendsというAPIがあって、簡単に表示させることができた。適当に整形しながら、一向に発言内容が更新されないことに気付いていた。APIのアクセス制限にしては早すぎる。しばらく時間を置くと更新されたが、また更新されない。調べると、デフォルトでは100件しか表示できないとのことだった。更新日時を指定すれば、最近の発言を表示させることができる。が、それをどうやるのか・・・?
と、よく見たら、friends APIというのは、followしている人の一覧から、最後のtweetを集めて、100件まで表示するものだった。最近フォローした人からチェックしていき、100人分のつぶやきを表示したところで終わり。これは「フォローしている人の一覧」を表示するのと同じことだ。公式のWEBだと、ページ指定で100人以上表示させられる。Net::Twitter ではページ指定ができないようだ。表示したいのは、「自分がフォローしている人達の発言の中で、最新のもの」であるから、これではない。
friendsで取得して並びかえる必要があるのかな?面倒なので、その前にsearchを試してみる。
さっきのは、friends_timeline というAPIだった。簡単にできた。
おっと、フランス語が化けている。ファイルをutf-8で保存しないといけない。
friendsというAPIがあって、簡単に表示させることができた。適当に整形しながら、一向に発言内容が更新されないことに気付いていた。APIのアクセス制限にしては早すぎる。しばらく時間を置くと更新されたが、また更新されない。調べると、デフォルトでは100件しか表示できないとのことだった。更新日時を指定すれば、最近の発言を表示させることができる。が、それをどうやるのか・・・?
と、よく見たら、friends APIというのは、followしている人の一覧から、最後のtweetを集めて、100件まで表示するものだった。最近フォローした人からチェックしていき、100人分のつぶやきを表示したところで終わり。これは「フォローしている人の一覧」を表示するのと同じことだ。公式のWEBだと、ページ指定で100人以上表示させられる。Net::Twitter ではページ指定ができないようだ。表示したいのは、「自分がフォローしている人達の発言の中で、最新のもの」であるから、これではない。
friendsで取得して並びかえる必要があるのかな?面倒なので、その前にsearchを試してみる。
さっきのは、friends_timeline というAPIだった。簡単にできた。
おっと、フランス語が化けている。ファイルをutf-8で保存しないといけない。