bbz

network

_
previous | next | edit
1: 2005/03/31(Thu) 21:22
デフォルトゲートウェイは、Win3.1+ダイヤルアップ接続の時代から、
設定しないとインターネット接続できないものであって、名前からしてインターネットの入り口なんだというように理解し、とにかくこれを設定すればインターネットに接続できるのだと何も考えずに設定していた。

それから10年がたった。今ではインターネット接続の設定はほとんど何もいらない。DHCPでゲートウェイもDNSも自動設定するようになっているからだ。もちろん、自分のIPアドレスが何かなんて、知る必要もない。

私はデフォルトゲートウェイの意味を、10年たった今、初めて正しく認識したのである。プロバイダに勤務していても、CCNAをとってもわからなかったことが、今日わかった。

「デフォルトゲートウェイ」とはひとつの、そして、PCをインターネットにつなぐときに設定する唯一の、ルーティング設定である。デフォルトゲートウェイの意味は、「宛先不明なパケットの送信先」である。そして、いわゆるインターネット通信というのは「宛先不明」な相手との通信である。

いわゆるブロードバンドルータを利用しているなら、そのポートのひとつにルータを接続し、ルータのもうひとつのインタフェースにPC(PC-Bとする)を接続してみる。追加したルータにルーティング設定をして、接続したネットワークのルートを設定し、PC-Bにもデフォルトゲートウェイとして追加したルータのインタフェースのアドレスを指定する。

PC-BからPC-AにPingを打つとタイムアウトする。これはBからAへのパケットは届くのだが、AからBへのリプライが届かないことが原因である。

この問題を解決するには二つの方法がある。
1.PC-Aのデフォルトゲートウェイを追加ルータのアドレスにする。
2.PC-Aに、PC-Bが所属するネットワークへのルーティング設定をおこなう。

1.の場合、A-B間で通信はできるようになるがAがインターネットに接続できなくなる。私は今日までこの方法しか思いつかなかった。
2.は、route add というコマンドを使用する。

デフォルトゲートウェイとは、宛先不明なパケットの送信先であり、それは複数存在できない。Windowsでは複数設定できるが、それはデフォルト設定が利用できなかった場合に使用されるものであり、実際に宛先不明なパケットが送信される先は常にただ一つである。

URLでもメールアドレスでもなんでも、指定した先に届くというよりは、
各ルータが「私は知らない」といってデフォルトルートに向けて、「自分宛のパケットがあったら受け取ってください」、とたらいまわししていくのだ。

・・・ただしこれはIGPでの話。インターネットの中心ではEGPでのルート交換がされている。
2: 2005/04/09 21:20
CCNAが来年夏に失効するので、そろそろCCNP対策をと考えてCCNP認定ガイドを買って勉強を始めた。しかし、やはり途中でつまずく。基礎知識を問うのがメインのCCNAと違ってBSCIは実務的な内容が多い。各ルーティングプロトコルのコマンド等を操作することなしに暗記することは退屈だし苦痛だし意味も無い。実機で試すには3台はルータが必要だ。2台はとりあえず買ったのだがもう一台買う気にならない・・・そしてNPになるには最低4回、3ヶ月に1度受けて当然合格せねばならない。最近は.net, C#, Java, C++, 文学、音楽、経済、マラソンと、興味の対象も広がっていて、資格のための勉強だけに没頭もできない。そこで、今までは考えてもみなかったが、CCNAを更新しようかと考えている。
CCNAは最近は難しくなったと言われ、取得していることの評価は結構高い。今年の秋に久しぶりに情報処理技術者試験を受けてみようかと思っている。もちろん、ネットワークの。
3: 2005/04/10(Sun) 21:34
インターネットの技術を考えるときに忘れてはならないのは、それが軍事技術であったということだ。戦争で使用するので、回線の断絶、機器の破壊等が起こりやすく、かつ、そのような事態でも通信が途絶えることが許されない。また、少なくともアメリカ大陸全体を網羅する大規模なネットワークが必要である。そのような事情から、自律分散システムを相互接続したネットワークが考案された。インターネット以前の通信といえば、電話をはじめとしてエンドツーエンドで接続を確立する通信方式が当たり前であった。信頼性や安定性、実装の容易さなどを考えればそのほうが簡単であろう。

ルーティングという技術が複雑化高度化したのも、耐障害性と高信頼性を考慮した結果である。電話交換機の機能もルーティングと言えるかもしれないが、決定的な差は、電話はデータ通信をする前にルーティングをおこない、経路が確立されてからデータ送信を開始することである。TCP/IPでは経路が確立される前に、というより経路を確立することなく、データ送信を開始する。VPNなど、仮想的な経路を確立する技術があるが、その場合でも実際の物理的経路は送信時には未確立である。データの流れるところが経路である。

よく、「TCPはコネクション型通信」である、といわれるが、このコネクションは論理的なもの、仮想のものであって、物理的な通信経路はUDPと同様に分割されたパケットがルータを飛び移って生成される。そして、経路が確立されていないので、データを送信する方法にも一工夫が必要になる。それがパケット通信である。

パケット通信は、もともとは一本の回線を多数のユーザで共有するための技術であった。自律分散ネットワーク同士が結合したインターネットでは、さらにそれが障害を回避して動的に経路を作っていくという通信方法にも便利であった。よく経路を変更する、というが、インターネットの場合変更というより、常に新しい経路ができる、というほうが適切である。故障がなければ同じルータとケーブルを流れているが、故障があったときにはもうデータは未知の経路を流れ始めるのである。

そしてその軍事技術がPC同士の通信、LANと相性がよかった。LANは基本的につながっている相手すべてと通信をおこない、失敗したらリトライする、という非常に原始的な通信方法である。繁殖するばい菌のようだ。
4: 2006/04/30(Sun) 21:35
携帯電話の充電式電池について不満が多々ある。

1.電池の寿命がだんだん縮む

最初は2,3日もつのだが、だんだん電池切れが早くなり、1年くらいたつと1日もたなくなる。電池だけ買おうとしても機種によって型が異なり、古い機種だと売っていない。それにふつうの量販店などでは売っていないし、ショップで買うと非常に高価である。やむなく新しい機種を買うことになる。とはいっても、そのころには新機種が出ていてそちらが欲しくなるものだけど。

2.電池は使い切ってから充電しないと寿命が縮む

こんな使い方をユーザーに強いるのはけしからん。常に充電器を携帯するか、予備の電池を持ち歩く必要がある。充電できる時にできるだけ充電すればその分回復するようにすべきだ。

3.圏外で消耗が激しくなる。

圏外では受信局を探すために消耗が激しくなるという。しかしこれも受信局探索方法を変えれば済む話である。おそらく一定の間隔で受信局を探して、見つかれば待機状態になるのであろう。この時、たとえば3回探して見つからなければ圏外にいると判断し、探索間隔をが1分であったのを10分に変える、さらにみつからなければ30分に変えるなどする。そして何らかの操作があった場合はそのつど探索する。

4.残量表示はなくなる直前に急に減る

だいたい3から4段階で表示されており、満タン状態はなかなか変化しないが、減り始めると急激に減少してあっという間になくなってしまう。そして上述したように充電は使い切ってからせよという事であるから、なくなる直前まで充電しないでおくと、いざという時に電池切れというハメになる。

5.節電

携帯電話ではなく普通の家電製品の話であるが、電源投入時には多くの電力を消費するそうだ。PCのモニタでいうと、電源を投入したときに2時間使用する分の電力を消費するという。だからたとえば節電のため昼休みはモニタの電源を切りましょう、というのは、実はかえって電力を無駄遣いすることになるのである。携帯電話の場合もおそらく同様だと思う。圏外圏内になるたびにこまめに電源をON/OFFするのはおそらくほとんど効果がなく、逆効果になることのほうが多いであろう。
5: 2005/07/08(Sat) 21:37
自宅のルータが4台になった。そして初めてOSPFでマルチエリアを設定してみた。


30.0.0.4/30 10.0.0.4/30
| +--------+.6 .5+--------+ +--------+.5 .6+--------+ |
+-------+ 2514_B  +---------+ 2501_A +------+ 2514_A +-------+ 2501_B +------+
|    .254+--------+ +--------+.6 .5+--------+ +--------+.133 |

192.168.2.0/24 20.0.0.4/30 192.168.1.0/24

<- area 1 --><-------------------- area 0 ---------------------><- area 2 ->



2514_B#sho ip os nei

Neighbor ID Pri State Dead Time Address Interface
30.0.0.5 1 FULL/ - 00:00:38 30.0.0.5 Serial0

2514_B#sho ip route

20.0.0.0/30 is subnetted, 1 subnets
O 20.0.0.4 [110/128] via 30.0.0.5, 00:02:19, Serial0
10.0.0.0/30 is subnetted, 1 subnets
O 10.0.0.4 [110/192] via 30.0.0.5, 00:02:19, Serial0
O IA 192.168.1.0/24 [110/202] via 30.0.0.5, 00:02:19, Serial0
C 192.168.2.0/24 is directly connected, Ethernet0
30.0.0.0/30 is subnetted, 1 subnets
C 30.0.0.4 is directly connected, Serial0


2501_A#sho ip os nei

Neighbor ID Pri State Dead Time Address Interface
20.0.0.5 1 FULL/ - 00:00:39 20.0.0.5 Serial0
192.168.2.254 1 FULL/ - 00:00:38 30.0.0.6 Serial1

2501_A#sho ip route

20.0.0.0/30 is subnetted, 1 subnets
C 20.0.0.4 is directly connected, Serial0
10.0.0.0/30 is subnetted, 1 subnets
O 10.0.0.4 [110/128] via 20.0.0.5, 00:02:41, Serial0
O IA 192.168.1.0/24 [110/138] via 20.0.0.5, 00:02:41, Serial0
O IA 192.168.2.0/24 [110/74] via 30.0.0.6, 00:02:37, Serial1
30.0.0.0/30 is subnetted, 1 subnets
C 30.0.0.4 is directly connected, Serial1


2514_A#sho ip os nei

Neighbor ID Pri State Dead Time Address Interface
192.168.1.133 1 FULL/ - 00:00:36 10.0.0.6 Serial1
30.0.0.5 1 FULL/ - 00:00:32 20.0.0.6 Serial0

2514_A#sho ip route

20.0.0.0/30 is subnetted, 1 subnets
C 20.0.0.4 is directly connected, Serial0
10.0.0.0/30 is subnetted, 1 subnets
C 10.0.0.4 is directly connected, Serial1
O IA 192.168.1.0/24 [110/74] via 10.0.0.6, 00:02:59, Serial1
O IA 192.168.2.0/24 [110/138] via 20.0.0.6, 00:02:55, Serial0
30.0.0.0/30 is subnetted, 1 subnets
O 30.0.0.4 [110/128] via 20.0.0.6, 00:02:59, Serial0


2501_B#sho ip os nei

Neighbor ID Pri State Dead Time Address Interface
20.0.0.5 1 FULL/ - 00:00:39 10.0.0.5 Serial0

2501_B#sho ip route

20.0.0.0/30 is subnetted, 1 subnets
O 20.0.0.4 [110/128] via 10.0.0.5, 00:03:34, Serial0
10.0.0.0/30 is subnetted, 1 subnets
C 10.0.0.4 is directly connected, Serial0
C 192.168.1.0/24 is directly connected, Ethernet0
O IA 192.168.2.0/24 [110/202] via 10.0.0.5, 00:03:30, Serial0
30.0.0.0/30 is subnetted, 1 subnets
O 30.0.0.4 [110/192] via 10.0.0.5, 00:03:34, Serial0
6: 2006/07/08(Sat) 21:39
・・・結局エリアをわけても、OSPFを設定した5つのネットワークがすべてのルータで見えている。おそらく、エリアをわけなかったらルーティングテーブルの O IAがOに変わるだけだろう。この構成ではエリアをわける意味がない事になる。やってみよう・・・・・・・・・・・・・・・やっぱりそうだった。上記のような構成で、端っこのルータの内側ネットワークは知らせたくないという場合はどうしたらよいだろうか?

実用的なのはそれぞれ内側ネットワークをNATによって隠す方法。
そしてもう一つの方法は、passive interfaceにする方法・・・と思ったが違う。確かに内側はpassiveにすべきであろうが、そうしてもやはりこの経路は広告される。それがスタブエリア?エリアを分けただけではなにもかわらないが、スタブに設定することで意味を持つようになる・・・。やってみよう!!

結局、こうなった。



30.0.0.4/30 10.0.0.4/30

| +--------+.6 .5+--------+ +--------+.5 .6+--------+ |
+-------+ 2514_B +---------+ 2501_A +------+ 2514_A +-------+ 2501_B +------+
| .254+--------+ +--------+.6 .5+--------+ +--------+.133 |

192.168.2.0/24 20.0.0.4/30 192.168.1.0/24

<------------- area 1 ---------><------------- area 0 ----------><- area 2 ->
(totally stub) (stub)



2514_B#sho ip proto
Routing Protocol is "ospf 1"
Outgoing update filter list for all interfaces is not set
Incoming update filter list for all interfaces is not set
Router ID 192.168.2.254
Number of areas in this router is 1. 0 normal 1 stub 0 nssa
Maximum path: 4
Routing for Networks:
30.0.0.4 0.0.0.3 area 2
192.168.2.0 0.0.0.255 area 2
Passive Interface(s):
Ethernet0
Routing Information Sources:
Gateway Distance Last Update
20.0.0.5 110 00:24:28
30.0.0.5 110 00:17:20
192.168.2.254 110 00:17:20
192.168.1.133 110 00:26:08
Distance: (default is 110)


2514_B#sho ip route
Codes: C - connected, S - static, I - IGRP, 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, E - EGP
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 30.0.0.5 to network 0.0.0.0

C 192.168.2.0/24 is directly connected, Ethernet0
30.0.0.0/30 is subnetted, 1 subnets
C 30.0.0.4 is directly connected, Serial0
O*IA 0.0.0.0/0 [110/65] via 30.0.0.5, 00:17:25, Serial0


2514_B#ping 192.168.1.133

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.133, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 60/60/64 ms


2501_B#sho ip route
Codes: C - connected, S - static, I - IGRP, 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, E - EGP
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

20.0.0.0/30 is subnetted, 1 subnets
O 20.0.0.4 [110/128] via 10.0.0.5, 00:03:47, Serial0
10.0.0.0/30 is subnetted, 1 subnets
C 10.0.0.4 is directly connected, Serial0
C 192.168.1.0/24 is directly connected, Ethernet0
O IA 192.168.2.0/24 [110/202] via 10.0.0.5, 00:03:48, Serial0
30.0.0.0/30 is subnetted, 1 subnets
O IA 30.0.0.4 [110/192] via 10.0.0.5, 00:03:48, Serial0

2501_B#sho ip proto
Routing Protocol is "ospf 1"
Outgoing update filter list for all interfaces is not set
Incoming update filter list for all interfaces is not set
Router ID 192.168.1.133
It is an area border router
Number of areas in this router is 2. 1 normal 1 stub 0 nssa
Maximum path: 4
Routing for Networks:
10.0.0.4 0.0.0.3 area 0
192.168.1.0 0.0.0.255 area 2
Passive Interface(s):
Ethernet0
Routing Information Sources:
Gateway Distance Last Update
20.0.0.5 110 00:03:51
30.0.0.5 110 00:03:51
192.168.1.133 110 00:03:51
Distance: (default is 110)


2501_B#ping 192.168.2.254

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.2.254, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 60/60/60 ms



7: 2005/07/10(Sun) 21:34
わたしたちは「インターネットに接続する」という言い方をする。IEを使って検索サイトに言葉を入力してどこかのホームページを表示する。メールを送受信する。この時我々は自分が世界中に張り巡らされたネットワークに参加しているという感覚を持つだろう。しかしそのようなインターネットの使用は、たとえば役所の窓口に行って必要な書類を交付してもらうようなもので、ネットワークのほんの末端しか利用していない。
ADSL、ISDN、光ファイバなどの接続サービスは、インターネットというネットワークへのアクセス手段である。どんなにそれが速くても、インターネット自体のスループットが遅ければ意味がない。役所へ歩いて行っていた人が車を使うようになっても、役所の仕事が遅ければあまり意味がないようなものである。また、みんなが車を使って役所へ行けば道が混雑してしまうこともある。また、役所へいきやすくなることで役所が混雑して役所の仕事が増えてしまい結果として利用者が書類を受け取るのが遅くなることもある。
8: 2006/07/11(Tue) 21:40
フレームリレー

ciscoの試験勉強で出てくるこの用語。それ以外まったく聞かないし、見たことも触ったこともない。フレームリレーって何?と半ば怒りさえ覚えるくらい、よくわからないもの。「もう時代遅れのすたれた技術なんでしょ」と見くびっているが、問題集ではこれでもかと出題されている。
PVCとかDLCIとかいうものはATMに似ている。「パケット交換」という用語があるが、TCP/IPはパケット交換ではないのか?回線交換(ISDNとか)からパケット交換(X.25、TCP/IP、フレームリレー)への移行。ATMはパケット交換か?階層が違うか?
9: 2007/11/02(Fri) 21:41
通常のメールソフトでフィルタできるような、送信者名、送信者のメールアドレス、ドメイン名、件名および本文に含まれる特定の単語、などでは、最近のSPAMは捕えることができない。それらは簡単に偽装でき、しかも一定でないからである。

今私を悩ませているSPAMは、上記はすべて不定である。SPAMMERが送信してくるのは投資情報なのだがそれは画像として挿入されており、フィルタリングが不可能である。その画像の前後にはおそらくなんの関係も無いと思われる長文が挿入されており、使用される単語からSPAMであることを推測するものに徒労を強いる。

宛先に私のアドレスがない場合もある。同じプロバイダで最初の1文字だけが私のアドレスと同じである。私のアドレスはBCCに含まれていると思われるが、ヘッダにはBCCの内容は載らない。

フィルタリングサービスで、「件名と本文がすべて英語(非日本語)のメールをSPAMとする」という条件があって、非常に有効と思われた。上記のSPAMをはじく、という点では完璧だ。しかし、MLBとかWHOとかDYLANとか、BORLANDとか関連のMLもはじかれてしまう。

それから、POPサーバとメーラーの間にもうひとつサーバを置くのは、
たとえそれがローカルであっても、不愉快である。SPAMの被害というのは実は非常にささやかなものである。蚊に刺されるよりもっとささやかなくらいに。しかし、そのささやかさが違う意味の強烈な不快感を生むのである。

未確認だが、おそらくほぼ完璧と思われる対策を見つけた。「メールサーバ以外のIPアドレスから転送されたメールをSPAMとみなす」というものである。メールサーバかどうか、の判定は逆引き可能かどうかを基本とする。もし逆引きできても、最初が数字で始まる逆引き名であったら不可とする。これは非常に有効である。今まで目でヘッダを見た限りではほとんどが上記の条件ではじかれる。

ただしこれを実施するにはBECKYが必要である。BECKYはシェアウェアである。いいソフトだという噂は聞いているが、「SPAM対策のためにはどんなに苦労はしてもカネはビタ一文出さない」という自分でたてた戒律に反する。

そこで、多分実現される見込みは薄いと思うが、プロバイダで提供しているSPAM防止機能に、上記条件を設定できるようにお願いしてみたいと思う。何度も何度も、それこそSPAMのように。
10: 2007/11/02(Fri) 21:30
ちなみにVC++>NET2003のコマンドコンパイラ cl.exeでこのサンプルをそのままコンパイルしてみると、以下のようなエラーになる。ちなみにincludeディレクトリは、winsock2.hがあるディレクトリを探して、それをコピーしてきたものである。


C:\aaa>cl client.c /Iinclude
Microsoft(R) 32-bit C/C++ Standard Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.

client.c
client.c(13) : error C2275: 'SOCKET' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用し
ました。
Include\WinSock2.h(95) : 'SOCKET' の宣言を確認してください。
client.c(13) : error C2146: 構文エラー : ';' が、識別子 'm_socket' の前に必要です。
client.c(13) : error C2144: 構文エラー : '<不明>' は '<不明>' によって先行されなければなりません。
client.c(13) : error C2144: 構文エラー : '<不明>' は '<不明>' によって先行されなければなりません。
client.c(13) : error C2143: 構文エラー : ';' が '識別子' の前にありません。
client.c(13) : error C2065: 'm_socket' : 定義されていない識別子です。
client.c(23) : error C2065: 'sockaddr_in' : 定義されていない識別子です。
client.c(23) : error C2146: 構文エラー : ';' が、識別子 'clientService' の前に必要です。
client.c(23) : error C2144: 構文エラー : '<不明>' は '<不明>' によって先行されなければなりません。
client.c(23) : error C2144: 構文エラー : '<不明>' は '<不明>' によって先行されなければなりません。
client.c(23) : error C2143: 構文エラー : ';' が '識別子' の前にありません。
client.c(23) : error C2065: 'clientService' : 定義されていない識別子です。
client.c(25) : error C2224: '.sin_family' : 左側が構造体、共用体ではありません。
client.c(26) : error C2224: '.sin_addr' : 左側が構造体、共用体ではありません。
client.c(27) : error C2224: '.sin_port' : 左側が構造体、共用体ではありません。
client.c(36) : error C2143: 構文エラー : ';' が '型' の前にありません。
client.c(37) : error C2143: 構文エラー : ';' が '型' の前にありません。
client.c(38) : error C2143: 構文エラー : ';' が '型' の前にありません。
client.c(39) : error C2143: 構文エラー : ';' が '型' の前にありません。
client.c(41) : error C2065: 'bytesSent' : 定義されていない識別子です。
client.c(41) : error C2065: 'sendbuf' : 定義されていない識別子です。
client.c(41) : warning C4047: '関数' : 間接参照のレベルが 'const char *' と 'int' で異なっています。

client.c(41) : warning C4047: '関数' : 間接参照のレベルが 'const char *' と 'int' で異なっています。

client.c(44) : error C2065: 'bytesRecv' : 定義されていない識別子です。
client.c(45) : error C2065: 'recvbuf' : 定義されていない識別子です。
client.c(45) : warning C4047: '関数' : 間接参照のレベルが 'char *' と 'int' で異なっています。

C:\aaa>


error C2275のエラーを人間がわかる言葉に翻訳すると「変数の定義はプログラムの最初にしなさい」
ということだそうである・・・ということをWEBで調べた。
というわけで変数定義をぜんぶ上に持ってきて、もう一度やってみる。

C:\aaa>cl client.c /Iinclude
Microsoft(R) 32-bit C/C++ Standard Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.

client.c
client.c(9) : error C2065: 'sockaddr_in' : 定義されていない識別子です。
client.c(9) : error C2146: 構文エラー : ';' が、識別子 'clientService' の前に必要です。
client.c(9) : error C2144: 構文エラー : '<不明>' は '<不明>' によって先行されなければなりません。
client.c(9) : error C2144: 構文エラー : '<不明>' は '<不明>' によって先行されなければなりません。
client.c(9) : error C2143: 構文エラー : ';' が '識別子' の前にありません。
client.c(9) : error C2065: 'clientService' : 定義されていない識別子です。
client.c(10) : error C2143: 構文エラー : ';' が '型' の前にありません。
client.c(11) : error C2143: 構文エラー : ';' が '型' の前にありません。
client.c(12) : error C2143: 構文エラー : ';' が '型' の前にありません。
client.c(13) : error C2143: 構文エラー : ';' が '型' の前にありません。
client.c(18) : error C2143: 構文エラー : ';' が '型' の前にありません。
client.c(19) : error C2065: 'iResult' : 定義されていない識別子です。
client.c(33) : error C2224: '.sin_family' : 左側が構造体、共用体ではありません。
client.c(34) : error C2224: '.sin_addr' : 左側が構造体、共用体ではありません。
client.c(35) : error C2224: '.sin_port' : 左側が構造体、共用体ではありません。
client.c(45) : error C2065: 'bytesSent' : 定義されていない識別子です。
client.c(45) : error C2065: 'sendbuf' : 定義されていない識別子です。
client.c(45) : warning C4047: '関数' : 間接参照のレベルが 'const char *' と 'int' で異なっています。

client.c(45) : warning C4047: '関数' : 間接参照のレベルが 'const char *' と 'int' で異なっています。

client.c(48) : error C2065: 'bytesRecv' : 定義されていない識別子です。
client.c(49) : error C2065: 'recvbuf' : 定義されていない識別子です。
client.c(49) : warning C4047: '関数' : 間接参照のレベルが 'char *' と 'int' で異なっています。
とさ
11: 2005/11/03(Thu) 21:21
ネットワークはつまらん。つまらんよ、やっぱり。プログラミングの方が楽しい。つまらないし、ヤな奴が多いよ、ネットワークは。なんでかね?
12: 2005/11/12(Sat) 21:23
最近会社で「セキュリティ」にうるさい。個人情報保護法なる法律も施行された。特にPCの使用についてはファイアウォールやパッチやウィルス対策ソフトやら、めんどくさいことこの上なく、PCは日に日に使いづらくなっていく。情報漏えいが問題になっているのは知っているが、
それに対して現在行われている対策はほとんど意味が無い。なぜなら、情報漏えいはほとんど内部の人間がこっそり持ち出して公開することで起きている。それに対して、「個人情報は大切だから気をつけましょう」と呼びかけるだけですんだら警察も裁判所もいらない。暗号化をおこなっても、ファイアウォールを厳重にしても、アクセスログを毎日チェックしても、情報を使用しているユーザがUSBメモリにコピーしたり、メモしたり、暗記したりして、持ち帰られたらそれで終わりだ。

個人のモラル低下はよろしくないことではあるが、個人情報保護のためにモラル向上をよびかけるのも本末転倒である。そもそも、特に情報通信システムに関係した個人情報の流出というのは、モラルの低下というよりも、公開してはいえないデータを公開できてしまうようなシステムを作ってしまうことに原因ある。

電子媒体は複製と配布が非常に容易にかつ高速にできてしまう。
その威力をしらずに安易に重要な情報を電子化してしまう、そこに原因がある。聖人君子しかいない会社であれば、たとえそのようなシステムであっても、情報漏えいはない。そして、今ほとんどの企業等がやろうとしているのは、社員を聖人君子にすることである。私はその実現についてはきわめて悲観的である。

となると、個人情報保護のためには、情報の電子化自体を見直さねばならない。そして、インターネットはもはや公衆回線と化しており、そこに情報を流す時点で、世界中にばら撒かれることを覚悟するくらいの心構えが必要である。暗号化や種々のセキュリティ保護の仕組みも、完璧なものなどないのだ。わたしは、名前・生年月日・住所・電話番号くらいは公表されるのを覚悟している。メールアドレスも。今までだって病院や役所の職員、教師、上司などには知られていたのである。その範囲がちょっと広がっただけである、と考える。そして、自分の身の危険はある程度自分で守る。信頼できない相手には教えない。冷たい人とおもわれてもしかたがない。
13: 2005/11/26(Sat) 21:25
以下は、MSDNに紹介されていたwinsockのサンプルを少し手直ししたものである。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/complete_client_code.asp
サンプルのままでborlandのBCC5.5でコンパイルするとうまくいかないところがある。幸いいきなりcomplete codeにたどりつかず、wincoskを初期化するところから順を追ってコンパイルしていったため、手直しができたが、いきなりこれをコンパイルしたら挫折していたかもしれない。

・変数定義を最初に持ってくる
・sockaddr_inをSOCKADDR_INにする

サーバー


#include &lt;stdio.h&gt;
#include "winsock2.h"

void main() {

// Initialize Winsock.
WSADATA wsaData;
SOCKET m_socket;
SOCKADDR_IN service;
SOCKET AcceptSocket;

int bytesSent;
int bytesRecv = SOCKET_ERROR;
char sendbuf[32] = "Server: Sending Data.";
char recvbuf[32] = "";


int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
if ( iResult != NO_ERROR )
printf("Error at WSAStartup()\n");

// Create a socket.
m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );

if ( m_socket == INVALID_SOCKET ) {
printf( "Error at socket(): %ld\n", WSAGetLastError() );
WSACleanup();
return;
}

// Bind the socket.

service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr( "127.0.0.1" );
service.sin_port = htons( 27015 );

if ( bind( m_socket, (SOCKADDR*) &service, sizeof(service) ) == SOCKET_ERROR ) {
printf( "bind() failed.\n" );
closesocket(m_socket);
return;
}

// Listen on the socket.
if ( listen( m_socket, 1 ) == SOCKET_ERROR )
printf( "Error listening on socket.\n");

// Accept connections.


printf( "Waiting for a client to connect...\n" );
while (1) {
AcceptSocket = SOCKET_ERROR;
while ( AcceptSocket == SOCKET_ERROR ) {
AcceptSocket = accept( m_socket, NULL, NULL );
}
printf( "Client Connected.\n");
m_socket = AcceptSocket;
break;
}

// Send and receive data.

bytesRecv = recv( m_socket, recvbuf, 32, 0 );
printf( "Bytes Recv: %ld\n", bytesRecv );

bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 );
printf( "Bytes Sent: %ld\n", bytesSent );

return;
}



クライアント


#include &lt;stdio.h&gt;
#include "winsock2.h"

void main() {

// Initialize Winsock.
WSADATA wsaData;
SOCKET m_socket;
SOCKADDR_IN clientService;
int bytesSent;
int bytesRecv = SOCKET_ERROR;
char sendbuf[32] = "Client: Sending data.";
char recvbuf[32] = "";


int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
if ( iResult != NO_ERROR )
printf("Error at WSAStartup()\n");

// Create a socket.

m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );

if ( m_socket == INVALID_SOCKET ) {
printf( "Error at socket(): %ld\n", WSAGetLastError() );
WSACleanup();
return;
}

// Connect to a server.


clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" );
clientService.sin_port = htons( 27015 );

if ( connect( m_socket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) {
printf( "Failed to connect.\n" );
WSACleanup();
return;
}

// Send and receive data.

bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 );
printf( "Bytes Sent: %ld\n", bytesSent );

while( bytesRecv == SOCKET_ERROR ) {
bytesRecv = recv( m_socket, recvbuf, 32, 0 );
if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) {
printf( "Connection Closed.\n");
break;
}
if (bytesRecv < 0)
return;
printf( "Bytes Recv: %ld\n", bytesRecv );
}

return;
}


14: 2005/11/26(Sat) 21:31
sockaddr_inは大文字でなければならない。なぜかはわからない。
hファイルを見ても大文字でなど定義されていないのだが。
大文字に直すと以下のようにコンパイルが通る。


C:\aaa>cl client.c /Iinclude
Microsoft(R) 32-bit C/C++ Standard Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.

client.c
Microsoft (R) Incremental Linker Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.

/out:client.exe
client.obj
LINK : fatal error LNK1104: コンパイラは、ファイル 'uuid.lib' を開くことができません。



vsvar32.batを起動してやると、includeやlibのディレクトリをVSのディレクトリにしてくれる。これを実行すればわざわざincludeオプションをつける必要はなくなる。ところが、それでもリンカのエラーが出る・・・。


C:\aaa>cl client.c
Microsoft(R) 32-bit C/C++ Standard Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.

client.c
Microsoft (R) Incremental Linker Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.

/out:client.exe
client.obj
client.obj : error LNK2019: 未解決の外部シンボル __imp__recv@16 が関数 _main で参照されました。
client.obj : error LNK2019: 未解決の外部シンボル __imp__send@16 が関数 _main で参照されました。
client.obj : error LNK2019: 未解決の外部シンボル __imp__connect@12 が関数 _main で参照されました。
client.obj : error LNK2019: 未解決の外部シンボル __imp__htons@4 が関数 _main で参照されました。
client.obj : error LNK2019: 未解決の外部シンボル __imp__inet_addr@4 が関数 _main で参照されました。
client.obj : error LNK2019: 未解決の外部シンボル __imp__WSACleanup@0 が関数 _main で参照されました。

client.obj : error LNK2019: 未解決の外部シンボル __imp__WSAGetLastError@0 が関数 _main で参照されま
した。
client.obj : error LNK2019: 未解決の外部シンボル __imp__socket@12 が関数 _main で参照されました。
client.obj : error LNK2019: 未解決の外部シンボル __imp__WSAStartup@8 が関数 _main で参照されました。

client.exe : fatal error LNK1120: 外部参照 9 が未解決です。

C:\aaa>set lib
LIB=C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\ATLMFC\LIB;C:\Program Files\Microsoft Vis
ual Studio .NET 2003\VC7\LIB;C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\PlatformSDK\lib\
prerelease;C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\PlatformSDK\lib;C:\Program Files\M
icrosoft.NET\SDK\v1.1\lib;C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\ATLMFC\LIB;C:\Progr
am Files\Microsoft Vis

ws2_32.libというライブラリを、明示的にリンクしなければならないようだ。なぜそうなるのかはわからないが、どこかのWinsock2プログラムでそういう指定があったのでやってみたら通った。


C:\aaa>cl client.c /link ws2_32.lib
Microsoft(R) 32-bit C/C++ Standard Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.

client.c
Microsoft (R) Incremental Linker Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.

/out:client.exe
ws2_32.lib
client.obj

じゃあ、実行してみよう。

C:\aaa>server
Waiting for a client to connect...


ここでもう一個コマンドプロンプトを起動してclientを実行する。

C:\aaa>client
Bytes Sent: 21


clientが接続するとサーバは終了する。

C:\aaa>server
Waiting for a client to connect...
Client Connected.
Bytes Recv: 21
Bytes Sent: 21


やれやれ・・・・・・・・・・・・・・・・・・・・・・・・・・・・
15: 2006/12/01(Fri) 21:42
そう甘くはなかった・・・。

逆引きをSPAM判定に使うのはかなり難しいようだ。例外であるホワイトリストが必須でしかもそのメンテナンスが頻繁に発生するらしい。
あるプロバイダで採用されたがすぐにやめたとか。

現状ではこの判定法の例外が多数あるらしいが、本当にSPAMを防ごうと思うなら、メールサーバを運用するものに対してある程度の規制を設けるのは仕方のない事ではないか。逆引き設定ができないという都合と、SPAMを防がねばならないという都合。多分後者は前者よりはるかに重要なはずだ。
16: 2007/01/10(Wed) 21:43
ネットワークに問題があったりしてpingを打ったときによく見るエラーは以下の二つである。
request timed out
destination host unreachable

以下のようなエラーも簡単なテスト構成を作ってだすことができる。
net unreachable
expired in transit

これらのエラーの意味は、RFCを始めとしていろんなところで説明されているが、実際にどういう場合にこのようなエラーになるのだろうか。
まず、自分の所属しているネットワーク内の、存在しないホストに打つとtimed outになる。「存在しない」というのは、アドレスを割り当てたホストが存在しないという意味である。たとえば家庭で使われるBBルータでは192.168.1.0/24というプライベートネットワークをLAN側に割り当てる事が多いだろう。そして192.168.1.1とか192.168.1.254などがルータのLAN側インタフェースに割り当てられ、これが家庭内のPCで設定するデフォルトゲートウェイのアドレスとなる。LAN側に接続しているPCのIPアドレスが192.168.1.2で、ほかにPCが接続されていないなら、192.168.1.5へpingを打ったらtimed outとなる。あるいは、接続しており、192.168.1.5というIPアドレスも設定しているのにtimed outになるなら、ケーブルが抜けているとか、NICが故障しているとか、PCが故障しているとかいう事もありうる。しかし、私の経験上では、「pingが通らない」原因は90パーセントくらいはケーブルが抜けている、設定したアドレスが間違っている、pingで指定したアドレスが間違っているなどの、ごく基本的な人為的なミスである。95パーセントくらいかもしれない。

次に多い、destination host unreachableであるが、これはLAN外との通信をおこなおうとした時に出るエラーだ。しかし、一般家庭でPCをインターネットに接続する程度の場合であれば、デフォルトゲートウェイが設定されていないか間違った設定をしている場合がほとんどだろう。このエラーの意味は、自分の所属するネットワーク(同じIPアドレスグループ)以外のアドレスと通信しようとしたが、そのホストに到達できない、という意味である。LAN外のネットワークと通信するときにはルーティングが必要になり、それを行うのは言うまでも無いがルータである。ルーティングとは、宛先ネットワークとそれを転送するネットワークインタフェースの対応表のことである。そしてデフォルトゲートウェイというのはデフォルトルートが対応付けられたネットワークインタフェースのことである。一般家庭で使用するPCにはたいていNICは1枚しかないから、デフォルトゲートウェイはそれ以外にありえないのだが、IPアドレスが何になるか分からないので明示的にIPアドレスを指定しなければならない。最近はDHCPでデフォルトゲートウェイが自動認識されるようだが。

さてデフォルトルートとはなんだろうか?デフォルトネットワークとは0.0.0.0/0と表現され、「すべてのネットワーク」という意味である。ただし、もし明示的に宛先が指定されたネットワークが存在すれば、そこに関しては指定先へ転送される。というわけで、LAN外のネットワークへpingしたときにデフォルトゲートウェイが存在しないと、destination host unreachableというエラーになるのである。
ではdestination net unreachableとは何か?
これが出た時はデフォルトゲートウェイを通ってLANの外へは出ている。しかし、その次のルータへ転送した時に、転送先のルータがそのネットワークを知らない場合にnet unreachableとなる。これが一般家庭での使用であまり起こらないのは、一般家庭では極端に言うとLANとインターネットという二つのネットワークしか存在しないからである。net unreachableが発生するには最低3つのネットワークが存在していて、問題は端末から二つ先、デフォルトゲートウェイの次のルータで起きているからである。これを実験で起こすにはこうする。

192.168.1.0/24 10.0.0.0/24

+-------+.1 .254+-------+.1 .254+-------+
+ A +-------------+ B +-----------+ C +
+-------+ +-------+Wi +-------+


Aで10.0.0.0/24へのstatic経路を192.168.1.254宛に設定する。
Cで192.168.1.0/24へのstatic経路を10.0.0.1宛に設定する。

ここまでは必要な設定で、こうしないとA-Cが通信できる。

ここで、たとえば20.0.0.1へpingを打ったらどうだろうか?net unreachableになるか?・・・ならない。この場合でもhost unreachableになる。

Bで20.0.0.0/24へのstatic経路を192.168.1.254宛に設定する。

ルータAから 30.0.0.1あてにPINGを送信する。

(未完)
17: 2007/03/09(Fri) 21:43
マルチキャストとはその名前の通り、ブロードキャストとユニキャストの中間にある、複数の相手との通信の事である。そして重要なのは、マルチキャストが利用されるのは、単に複数の相手というだけではなく、「同内容の」通信が複数の相手と行われることである。マルチキャストが使用されるのが動画配信であるのは、その通信データ量が膨大であることよりも、内容が同じであることのほうによる。どんなにデータ量が膨大であろうと、内容が相手によって異なるならば、マルチキャストで通信することはできない。通信データ量が大量であることは、マルチキャストを使用することによる恩恵が大きいということでしかない。

マルチキャストでは、同一ネットワークには1度だけ送信し、宛先ネットワークでデータを複製してユーザに配信してもらう。では、送信者はどのように宛先を指定するのだろうか?ブロードキャストの場合はネットワークの全ノードに対してフラッディングをするので宛先は知る必要がない。ユニキャストでは当然単一の宛先アドレスを指定する。マルチキャストの場合はマルチキャスト用の特別なアドレスがあるのでそれを使用する。しかし、その宛先を見てマルチキャストアドレスだとはわかるが、そのパケットをどこへ転送すればいいのか?

マルチキャストではユーザはグループに所属する。ユーザをグループに所属させるにはどうしたらよいか?
18: 2007/03/09(Fri) 21:44
IPv6ではアドレス空間が32bitsから128bitsへ拡大された。それ以外の変更点はなんだろうか。途中でのフラグメント禁止。最小MTUを調べて転送元ルータでフラグメントをおこない、中継ルータでフラグメントすることがないようにする。チェックサムの廃止。確認する手間が省ける。チェックはTCPに任せる。ヘッダのTTLがホップリミットという名前に変わった。TTLというのは生存時間であるがv4のときでもホップ数として使用されていたのでそれにあわせた。ブロードキャストの廃止。
エニイキャストが追加された。アドレスの自動割り当て。MACアドレスを元に、リンクローカルアドレスは自動割り当てされる。IPsecの標準サポート。v4ではオプションであったIPsecが標準サポートされた。
とはいえIPsecを利用するようclient等を設定しなければ暗号化はされない。

IPアドレス数がほぼ無限になったため、NATが不要になる。このことは直接の変更点ではないが、非常に重要なことである。
19: 2007/03/09(Fri) 21:45
ルータの正体

ルーティングを理解するには、ルータの役割を理解する事である。ルータは通信機器とされているが、実はルータは通信する機器ではなく、通信を断絶する機器なのである。

通信をするのはPCでありサーバであり携帯端末である。ルータはそれらの通信を断絶する。だから基本的に何かの通信機器がルータにつながったら通信は断絶されてしまうと考えるのである。

しかし実際にはルータが通信を断絶するという感覚はないだろう。むしろ通信するために、インターネットに接続するために、会社のサーバに接続するために、ルータに接続するのである。

いやでもやっぱり、我々はルータにつないで通信をしない。あなたはルータにPCを接続した事があるだろうか?あまり無いはずである。
家庭用のブロードバンドルータになら、接続した人は多いだろう。
その時、あなたはインターネットに接続した、というつもりだったかもしれない。しかし、やっぱり、それは、ルータに接続したのは、通信を断絶するためだったのである。

ファイアウォールというのは、ルータの機能である。ポートや送受信IPアドレスなどによって、通信をフィルタリングするのがファイアウォールであるが、ファイアウォールは何を拒絶するかというより、何を許可するか、と考えるのである。原則は、遮断なのである。単純に誰かと通信をしたければその人に接続すればよい。多数の相手と接続するためにルータと接続するのだろうか?そうではない。ハブやスイッチがある。それなら断絶されない。

どうしてルータが登場するのか。何のために?ルータというくらいだから経路を探し出して目的の相手につないでくれる優秀な通信機器なのだろうか?そうではない。ルータは超能力者ではないので誰が誰と通信したいかなど、まったく理解できない。通信データを受け取ると、原則として捨てるのである。そのため通信が断絶される。遮断される。ルータとはとてもいじわるな装置なのである。網の目のようなネットワーク。ルータはそこから必要な経路を探すのではない。
20: 2007/04/04(Wed) 21:46
インターネットでの迷惑行為(2007/04/04)

1.SPAM(迷惑メール)
2.情報を盗む
3.情報を漏らす
4.ウイルス送りつけ
5.サーバに過負荷をかける
6.掲示板・ブログ等での誹謗・中傷
7.掲示板・ブログ等での犯罪予告
8.掲示板・ブログ等の荒らし行為
9.著作物の無断使用、コピー、配布、それらを可能にするソフトウェアの作成、公開

技術的な対策が必要なものと、法律の対応が必要なものとがある。
私が一番頭にきているのは、匿名をいい事に中傷をおこなう行為、
その次がSPAMである。

インターネットが匿名で利用できるというのは実は間違いであり、
実際にはいつ誰が何をしたかという情報は各ISPが詳細に把握している。
そしてインターネットを利用するには必ずISPからIPアドレスを割り当ててもらう必要がある。
その割り当てはICANだかIANAだかを頂点として世界各地にあるNICが管理している。

メールの場合、誰でも送信者のIPアドレスを確認できる。
掲示板では管理者なら確認できる。送信者のIPアドレスを記録しないようにもできるが、
そうすることは今や管理者としては許されないだろう。
私も不正行為についてのクレームから犯人が逮捕、新聞に載るまでの顛末を身近に見た経験がある。
SPAMについての苦情が無い日はまずなかった。

というわけで、メールヘッダやサーバのアクセスログがあって、
個人を特定するのはプロバイダにとっては簡単な事である。
何年も前の事だとかいうのでなければ。
他人の家に忍び込んでPCを使ったといった場合は例外。
マンガ喫茶等の場合はまた別の問題であるから除く。

あとは本当にそれが不正か否か、という事になるだろう。
特に、誹謗中傷などの場合は判断が難しい。
クレームがつくたびに調査して削除するのは管理者にとって尋常な苦労ではない。

誹謗中傷の問題となると見過ごす事ができないのが2chである。
ここは誹謗中傷の宝庫である。
なぜか?事はそう単純ではないが、一番根本の原因は管理者がそれを扇動している事である。
少なくとも熱望している。
「放置している」「野放しにしている」というレベルではない。
積極的に、一般のネットのタブーを犯すことを、主義としておこなっているのである。

ここでいう管理者とは、有名なN氏一人を指すのではない。
もちろん彼が責任者であるのだが、彼を取り巻く、ユーザーと同じように「匿名の」管理者が存在するのである。
彼らにいたってはアクセス数を増やす事だけを使命とした狂気すら感じる不気味な人種である。

まず、インターネットで掲示板をはじめとする多数の匿名者が集う「コミュニティサイト」においては、管理者は、利用者が決して匿名などではない事、管理側では彼らのアクセス記録を保持しており迷惑・不正・犯罪行為があった際には容易に個人を特定できることを十分に警告すべきである。また、それは準個人情報であり、それがISPに伝わっていること、左記のような事態以外には不正に利用しないことを宣言するとともにそれが承認できない利用者には利用を停止するよう警告すべきでもある。
21: 2007/04/04(Wed) 21:47
pingをピングと発音する人とピンと発音する人がいます。玄人っぽい人はピンと言う人が多いですが、ピングの方が一般的だと思います。
私も最初から今までピングと発音し続けています。周囲にもピンと言う人などほとんどいませんでした。しかしたまにピンと言う人がいて、それはたいてい玄人っぽい人だったので、辞書を引いてみるとたしかに、「グ」は発音しないのが本当なんだ、と納得していました。

しかし最近待てよ、と思うようになりました。

king, thing, ringなどの ing の発音は、pingと同じなのです。これらのもう日本語になっている単語を、キン、シン(ティン)、リン、などと発音する人はいないでしょう。ですから、「ピング」でよいのです。いや、「ピング」でなければ、pinとの区別がつかないのです。
22: 2007/04/18(Wed) 21:47
BCMSNの問題集を解いていたら、10進数の4097を16進数に直さなければならなくなったのだが、そこでつまずいてしまい、10分くらい計算したあげく間違えてしまった。

4097は4096+1だ。4096は、256,512,1024,2048,4096だから、2の12乗だ。と、ここまではすぐわかったのだが、2^12を16進数にするとどうなるかが出てこない。

FFは255である。FFFFは65535である。FFFかな?と思った。
しかし、16^3x15 + 16^2x15 + 15 という計算を間違えてしまったのだ。

正解は0x1001である。こんなの計算するまでもないくらいだ。なんてことはない。多分これを読んでいる人は俺をバカにしているだろう。しかし「4097って16進で何?」と聞かれてぱっと1001という答えが出せる人は少ないと思う。

257は?FFが255だからそれに2を足すから、101。65537は?FFFFに2を足すから、10001。こっちは簡単だと思う。でも4096が2^12だというのは盲点だ。

1バイトが16進数二桁だというのは知っていても、1桁が4バイトで桁数かける4がbit数になる、と言う事を確認するとちょっと不思議だった。
23: 2007/04/19(Thu) 21:49
続・ルータの正体

ネットワークの真髄をつかんだ気がする。以前書いた「ルータはネットワークを遮断する機器だ」がきっかけとなっている。これを発展させて、LANとは何か、WANとは何か、を説明したい。非常に明快、単純な話なので気を楽にしてもらいたい。ルータがネットワークを切断するという話をした。そのルータを境として、内側がLAN、外側がWANである。以上。

もしどちらが内側なのかという疑問を持ったなら、あなたが使用する機器が接続されているのが内側である。もしくは、インターネットが存在する側が外側である。しかし、内側外側というのはやはり各人が何を目的としているかによって決定される相対的な区別であるから、「あなたが使用する機器が接続されているのが内側つまりLAN」という一見抽象的であいまいなようなこの定義が正しい。

ネットには、「複数のPCをインターネットに接続するために必要」などと書いてある。なるほど、その通りである。しかしこれも、ルータがネットワークを遮断することで可能になっているのである。ルータをはさむと、たとえPCが1台であってもネットワークは二つである。PCを増やしていけばネットワークが増えていく。

テレビアンテナに分配器というのがある。一見、複数のPCを接続するルータも分配器のように機能しているように見える。分配器が電波を遮断する機器だという人はいないだろう。しかし、ルータは本当にデータを、パケットを、「分配している」と言えるのだろうか?ただ分配するだけなら、ハブでよいはずである。実際、わたしは昔、モデムの先にPCを2台つなげてWEBを見た気がする。多分、サービスによって利用可能なものとそうでないものがあるはず。ただヤフーのホームページを表示するだけならハブでよいはず。

さあ、これを簡単に、しかし嘘をつかずに、何かにたとえたりせずに、
説明できるだろうか?

モデムはどんな機器か?レイヤ2?1?3?1・・・だよね?
あれは信号を変換するから、ARPとかipアドレスとかいうのより下位の層の機器である。モデムの先に、プロバイダのルータが居て、そのi/fとPCのi/fが接続されるわけだ。

これも以前に自分が経験したことであるが、ケーブルテレビのモデムにPCをつないでキャプチャすると、ヨソのPCから・へのブロードキャストなどが見えていたことがある。今はどうなっているんだろうか。
24: 2007/04/20(Fri) 21:49
スイッチとルータ

ルータがネットワークを遮断する機器であるなら、スイッチはネットワークを拡大する機器である。スイッチはポートにケーブルが接続されると通信をおこなう。ルータは遮断が原則で、必要ならば通信をおこなう。スイッチは通信をおこなうのが原則で必要ならば遮断する。ルータはL3デバイス、スイッチはL2デバイスという分類が一般的であるが、忘れてはならないのはL3機器にはL2機能が含まれていることだ。L2機能の上位の機能が付加されたとき、その機能は下位層に対してどのような影響を及ぼすのか。答えは何度も言っているとおり、断絶である。遮断である。ルータは異なるネットワークと通信をおこなうために必要だ、ということもよく言われる。これは現状としてはそうなっているが、ethernet&TCP/IPの通信においては、逆なのである。 ネットワークのすべてのノードで通信ができてしまっては不都合なのでルータによってネットワークを分割したのである。
25: 2007/04/25(Wed) 21:50
イーサネットの最大フレーム長がどうして1518という中途半端な数字なのか気になった。1500にしとけよ、と。調べたらすぐに理由がわかった。データの長さを1500と決めた。ヘッダとFCSが合計で18バイトなので、1500+18となった。

ちなみにヘッダはDA(6),SA(6),Type(2)である。さらにいうとその前にプリアンプルという8バイトのフィールドがある。これはイーサリアルでは出てこない。
26: 2007/05/09(Wed) 21:50
ネットワークでよく出てくるL2、L3とかいう階層について、よく考えてみるとこんなものはネットワークに限った事ではなく、この世のあらゆる現象に当てはめることができる。一番わかりやすいのが人間の肉体とそれを操る神経、それから脳。もっと大きく分けてしまえば、「こころ」と「からだ」。生き物でいうと、物質、有機物、生物、哺乳類、人類、黄色人種、のように。でも、OSIの階層化のキモは、L2とL3の区別である。
アドレッシングに物理的なものと論理的なものを設けたことである。
コリジョンドメインとブロードキャストドメインの区別。これは、自然界に類似したものがあるだろうか?これが、あれか、まさに、人種や職業で人は差別されないということか。
27: 2007/11/13(Tue) 23:13
最近ようやくTCP/IPの基本的な仕組みがわかってきた。
ただ単にパケットを転送するだけなら転送先アドレスを設定して送ってやればよい。
しかし各プロトコルが面倒くさいことをしているのは、通信できない場合の事を考慮しているからである。
TCP/IPは回線に障害が起こる事を前提にしたシステムである。
helloというのはOSPFやLDPなどで使われている方法で、一定間隔で自分の存在を知らせるパケットである。
相手はそれを受け取ることで相手が通信可能な状態で存在している事を知り、一定時間そのパケットが受信できないと相手とは通信できなくなったとみなす。だいたい、helloパケットを送信する間隔の3倍くらいが使用され、hold down timeという。
helloパケットの中には、通信するために必要な前提条件が含まれており、ある条件を満たすと次の段階に進み、なんらかのセッションを確立する。OSPFであればadjacencyであり、LDPであればLSPの確立である。
セッションを確立すると今度はその特定の相手と必要な情報をやり取りする。

「セッションを確立する」というのは、ただ投げっぱなしではなく、相手と通信が行える事を確認し、保証するということを意味する。そのために、相手からパケットを受け取った事を知らせる機能がackなどである。通信するだけなら、ackは必要ない。必要な情報さえ送って届けばそれでよいのである。しかし、通信が失敗することが好ましくない場合は、パケットの到達完了を確認するようにして、それがなければ再送したりするのである。

28: 08/03/18(Tue) 20:32
輻輳ってどんなことかよくわからないのだが、簡単に言うとネットが混むことのようである。どこかのサーバに大量の人がアクセスすれば、混雑して遅くなったり表示ができなくなるのはなんとなくわかる。しかし、これは単に細い道にたくさん車が押し寄せて渋滞しているよりも、
もっと悲惨な事態なのである。HT*PプロトコルというのはTCPセッション上で機能する。TCPというのは到達保証性があって、パケットロスが起こると再送する。混雑した状況になるとパケットロスがおきるので再送が起こる。つまり混雑しているのだからアクセスを控えねばならないところなのに、さらに多くのアクセスが起こるわけである。先ほど車にたとえたが、渋滞して道からあふれた車がまたその道に戻ってくるような事態である。おそらく再送したパケットもロスして、再送ループがおきるであろう。ただし、TCPにはWindowsサイズ制御機能があって、一度に送るパケットサイズ(数?)を動的に変更するらしい。パケットロスが多発すると、Windowサイズを小さくする。すると、混雑が緩和される。緩和されたらまた元に戻す、という動作をするらしい。だから、あるサイトにアクセスが殺到すると、パケットロスが起こる→ウィンドウサイズが縮小する→混雑緩和→ウィンドウサイズが拡大→再び混雑というように、混雑が波のように強くなったり弱くなったりするそうである。
さらに悪いことに、これが起こるのはTCPだけなので、それ以外のトラフィックが使用されていると、それが帯域を占領してTCPのトラフィックがますます圧迫されてしまうそうです。私が今いる職場では、昼休みになるとインターネットが全然使えなくなります。RSSフィードもYahooのニュースもアクセスできなくなります。
29: Fri Dec 30 08:33:38 2016
ネットワークとは何だろうか?

技術としての、インターネットや無線LANなどのネットワークのことである。

「ネットワーク」という言葉は一般的にも、交友関係とか情報交換をする仲間といったような意味でも使われるが、

IT技術の中の一分野という意味でも使われる。

30: Fri Dec 30 08:39:45 2016
そういう意味での、ネットワークとは何だろうか?

ネットワークとは何かを、技術者ではない人や子供などにわかりやすく説明するとしたら、
どう説明するだろうか?

まず思いつくのは「つなげる」「接続する」「情報を伝える」などだろう。

しかしネットワークエンジニアとかインフラエンジニアとか言われる仕事をしている人ならすぐに、
「はて、俺の仕事はつなげる仕事だろうか?」と思うのではないだろうか。

たとえば、家庭のパソコンをブロードバンドルータのLANポートにカチっと挿すのは「つなげる」ということだろう。

でも、我々がしているのはそんなことではない。

それも、ただ挿すだけではなく複雑な設定をするとかいうことではない。

結論を言ってしまうと我々の仕事は接続するというよりもむしろ、分離する、隔離する、分断する、
と言った方が適切ではないか?
31: Fri Dec 30 08:47:40 2016
ネットワークの基本となる技術にルーティングとスイッチングがある。

ルーティングは複数のネットワークが接続されているときにあるノードとあるノードの間で経路情報を交換して相手に到達するための技術である。
今「ネットワーク」という言葉をさらっと使ってしまったが、この「ネットワーク」はITの一分野という意味ではなく、もっと狭い意味のネットワークである。それについては後で述べる。

スイッチングというのは、ルーティングとは異なる。「L2」と言われる。レイヤー2、第二層ということである。

第一は物理、第二はデータリンク、第三はネットワークとも呼ばれる。

階層は全部で7層あるのだが、L2とL3がよく言及され、L4、L7も多少言及されるがそれはほとんど「L3より上」という意味でつかわれる。

この層というのは、国際的な標準なのだが、抽象的なのであまり重要ではない。

32: Fri Dec 30 08:51:12 2016
実は私はL2が苦手である。

L2というのはその名の通りL3の下層であるから、あまり重要でないという意識がある。

L2というのは単純な接続、拡大であって、L3はそれを統制するもの、というようなイメージがある。

そんなに間違ったとらえかたえはないとは思うが、

L2の動作というのはどこまでもついて回る。
33: Fri Dec 30 08:54:49 2016
L2にもL3にもアドレスがある。

いずれも、送信元と宛先がある。
送信元はsourceで、srcと略される。
宛先はdestinationで、dstとか「デスト」と呼ばれる。

アドレスがあってその間で通信をおこなうのだからそれは接続することだと、私も思った。

でも、だんだん、そうではないのだとわかってきた。
34: Fri Dec 30 08:57:24 2016
我々は電気で動くものに囲まれている。

それらには電源コードがついている。

また、電話やファクスを利用するときには、電源コードではない違うケーブルが接続されていた。

今は携帯電話さらにはスマートフォンというものが普及してケーブルレスの通信をしているが、

それはあくまでも物理的な話であって論理的にはケーブルのようなものつまり「電波」で通信しているのだと、

皆理解しているだろう。
35: Fri Dec 30 08:59:03 2016
誰かと音声で会話する、メールを送受信する、メッセージを送る、サーバーに文章をアップロードする。

これらを実現するためには2点間を接続して伝達する何かがあって、ネットワークエンジニアというのはそれを仕事にしているのだと、知らない人は思うだろうが、そうではない。
36: Fri Dec 30 09:06:32 2016
電気信号というのは、つながってさえいれば流れる。

無線でも同様で、電波がとどけば聞こえたり見えたりする。


そういう性質のものを使って通信をおこなうときに問題が起こる。

多数の相手と通信するには多数の相手と接続しなければならない。

多数の相手と接続すると、通信する相手を選ばなければならない。

このとき、「選ぶ」というのは、通信する相手を探してそこだけに送信する、
と思っている人が多いと思うが、そうではない。

なぜなら通信する相手を探す段階ですでに通信が発生するからだ。
37: Fri Dec 30 09:11:21 2016
多数の相手と通信するのに一番簡単なやり方は、全員に送信することである。

実際に、現在でもそういう通信が使われている。ブロードキャストという。

しかし、ブロードキャストは当然不要な通信を伴う。

「うるさい」のである。


相手を選んで通信することを「ユニキャスト」という。特定の相手にのみ送信する。

特定のアドレスのみに送るのか、と思うかもしれないが、それが難しいのである。

そのために考えられた仕組の一つがTCP/IPである。



38: Fri Dec 30 09:17:52 2016
ここまで来て、私はあることに気づいた。というか思い出した。

私がとらえている「ネットワーク」というものはデジタルなものという限定があったことだ。

TCP/IPはデジタル通信のプロトコルか・・・と思いかけて、まてよと思った。

そうとは言えないのではないか。

ASDLはアナログ回線を利用していた。


L1/L2/L3という階層化は、アナログとかデジタルとかいう区別を意識しないためのものではないのか?
^
previous | next | edit



log