コンピュータネットワーク
試験公開&長期公開できずに申し訳ありません。
メインの仕事で気力無くなってた+盆に近親者葬儀で盆休みつぶれた+シルバーウィークも仕事と体力回復でつぶれた、という有様です。
問題自体も30点分くらいで死んでます。
ナップザック問題を利用してのアルゴリズム問題にしようとしてたんですけどねぇ...。
中途半端な状態の問題で良ければコメントで希望者がいらっしゃれば公開します。
流石にそろそろ3学期編書き始めないと予定が狂いっぱなしだーということで進めます。
リアルだと1月2週~2月末くらいで行う3学期の授業内容ですね。
覚えてほしいポイントとしては以下になります。
- コンピュータ同士で通信するには「プロトコル」というコンピュータ間で共通して利用できるルール整備が必要
- プロトコルは廃れたのを含めて滅茶苦茶種類があるので、今利用率の高いプロトコルくらいは名前を憶えてね。
- 通信のために必要な概念は「OSI参照モデル」とその簡易版「TCP/IPモデル」は覚えてね。※TCP/IPモデルはガチで高校情報科の教科書載ってる。吹越はOSI参照モデルも教えるけど。
最低限このくらいは抑えていてほしいです。
コンピュータネットワークの概念(コンピュータ間おおざっぱ編)
まず、コンピュータ通信の機器は通信をやり取りするサーバ・クライアントと中継機器に分類できます。
この時、終端になるものをノードと呼びます。
中継機器をどのように配置すると効率が良いか、というネットワーク・トポロジーの話も存在しますが、とりあえず置いておきます。
ノード同士で通信する場合、人間の感覚だと葉書でやり取りするのが近い感じになります。
住所書いてポストに入れたら相手に届く。相手も葉書で返してくる、それをもとに次の返事を送る、という感じです。
葉書で書いてるので郵便局員(=中継機器)が中身を見ようとしたら止める方法はないわけですね。(だから知られたくない内容の通信は暗号化するという話になりますが、それはまた次回。)
これをコンピュータで現在最も普及しているTCP/IPを利用して説明します。
TCP/IPはTCPというプロトコルとIPというプロトコルのセットです。IPはInternet Protocolの略です。
IPのルールでコンピュータの住所(IPアドレス)が決まっており、このアドレスによってコンピュータ間のやり取りができます。
このとき、先の例で葉書に当たるデータの1単位をパケットと呼びます。
ガラケー世代だとパケ死という死語を聞いたことがあると思いますが(現代高校生だとギガ不足で通信制限もしくはブーストかけすぎて高額請求というのが感覚として近い。個人的にはギガ不足、という用語は気持ち悪いが・・・)そのパケはこのパケットからきています。
なお1パケットが具体的に何Bなのか、というのは可変長なので決まっていません。
設定次第です。大体この幅で設定できます、というのも自分で調べてください。
コンピュータネットワークの概念(OSI参照モデル・TCP/IPモデル編)
ノード間のIPによるおおざっぱなイメージがついたらもうちょっと細かいノード内の通信部分も考えてみます。
チャット・メール・通話やゲームなど、スマホを用いた通信はいくらでもあるわけですが、これを通信としてちゃんと成り立たせるには非常に細かいプロトコルの山があります。
なーのーでー概念としてOSI参照モデルという概念があります。これは基本情報とかで必須なのでぜひ覚えてほしいです。
OSI参照モデルは「コンピュータ間で通信をするための階層化モデル」です。
7つの層に分かれており、人間に近い側からアプリケーション層・プレゼンテーション層・セッション層・トランスポート層・ネットワーク層・データリンク層・物理層という名前がついています。
詳細としてはこの辺も見てください。
http://www5e.biglobe.ne.jp/aji/3min/05.html
概説はレイヤーが低いほうから実施します。
OSI参照モデルの説明<レイヤー1:物理層>
その名の通り物理的なルールに関するレイヤー。
・コネクタの形は?
・無線で利用する周波数帯やどんな波形が来たらビットを1,0と認識するのか?
等など。
人間が目に見えやすいので比較的わかりやすいレイヤー。
このレイヤーの媒体は色々ある。電波だったり光だったり電線上の電流だったり。
このレイヤーで通信の中身を見ないで強化・延長する機械をリピータという。
ちなみに量子コンピュータの発達にちなんで「量子通信」という用語も活発化しているが
OSI参照モデルの説明<レイヤー2:データリンク層>
同じネットワークを通信するためのプロトコル。
物理的な通信点(NIC:Network Interface Card)でのアドレス(MACアドレス:Media Access Control address)というアドレスを持って通信する。
MACアドレスは16進数の数字12桁で決められており、頭6桁は会社を、後半6桁はNICごとの番号を示すルールになっている。
裏返すと無線で飛んでる電波を捕まえてみると、このレイヤーを確認するだけで「どこの会社の機器での通信か」というのはばれる。
iPhoneとかAppleと出るのでバレバレじゃん?ということになるのでランダムにして通信する方法もある。
逆にそのせいでつながらねぇ...ということもあったりする。
書き換えも簡単なのだが、「物理的なNICと基本的に1:1である」ことを利用して簡易的な「接続できる端末の制限」に用いる会社もある。
大塚商会とか「効果ゼロですぜ」と煽ってるけど。
MACアドレス制限は"効果ゼロ"今さら聞けない「無線LAN認証」の基本【1/4】
吹越も「やるんだったらRADIUS(端末認証に用いるプロトコル)入れたほうが良いよ」と思ってるので基本的にMACアドレス認証は好きじゃない。
昔あった中でインパクトあったのは、生徒の親がネットワークエンジニアで自宅のネットワークに対して、子供がゲーム機で通信対戦を遊びすぎるのに制限するため、ゲーム機のMACアドレスを弾く設定を入れてインターネットにつなげないようにした(インターネットでやるのは承認制にした)なんて生徒から聞いて笑った記憶がある。
このレイヤーの通信データ列をフレームと言い、MACアドレスを見て送る方向を決める機器をスイッチという。
L2Switchという用語はこのレイヤーの伝送制御をする機器だよ、という意味です。
全てのL2Switchは自分に接続されている機器のMACアドレスを収集して記録している。
OSI参照モデルの説明<レイヤー3:ネットワーク層>
複数のネットワークをまたがる通信をするためのプロトコル。IPはこのレイヤーのプロトコル。
IPとデータリンク層をつなぐためのARPというプロトコルがある。
現代のコンピュータネットワーク通信だとほとんどIPだけ考えればいい。(それ以外のプロトコルはほぼ廃れたといっていい)
現在も利用が多いIPv4と置き換えを奨めようとしているIPv6が存在する。
なんでかというとIPv4の管理団体ICANNが持ってる未使用のアドレスが無くなったので枯渇した、という表現をされている。
⇒IPアドレス枯渇問題
IPv4アドレスは32bitで表現されており、制定された当初は今でいうスパコンクラスのものだけ存在するだろうから、46億個アドレスがあれば足りるだろう、と思われてたのが個人で複数の端末持つのが当たり前になったせいで世界中だと不足したねん...。
で、不足かもと言われたころに色々機能をつけ足して長持ちさせようと頑張っている感じ。
それでも足らないからIPv6もどんどん普及させようとしているのだが、IPv4と比べて理解しづらいアドレス体系なのでISPとかで利用してる感じ。
IPv6でのネットワーク構築はネットワークスペシャリスト試験でも出てこないので正直「存在するんだな」くらいの感覚でいていい。
代わりにIPv4はめっちゃくちゃ使う。
基本的には32bitを左側から「ネットワーク部」「ホスト部」として構成する。
何bit目で切り替えるかを「サブネットマスク」という。
192.0.2.0/24 もしくは192.0.2.0 255.255.255.0 なんて書き方をする。ドットで区切ってるのは見やすくするため。
それぞれ8bitの0~255が入る。左から第1、第2、第3、第4オクテットともいう。
/24や255.255.255.0がサブネットマスクで、左24bitがネットワーク部の番号、残りのbitがホスト部の番号である。
(255を2進数表記すると11111111なので、255.255.255.0を2進数で表記すると11111111.11111111.11111111.00000000となって左24bitが1になる)
ただし、ホスト部が0になる番号は「ネットワーク自体の番号(ネットワークアドレス)」、ホスト部が2進数表記ですべて1となる番号を「全ホストに一斉送信の番号(ブロードキャストアドレス)」として利用するルールになっているため、利用できない。
では/24ではないネットワークも作れるのか?
答えはYESである。応用情報の午前問題とかでもよく出てくる。以下のサンプルを参照。
(応用情報技術者平成31年春期 午前問34)
次のIPアドレスとサブネットマスクをもつPCがある。このPCのネットワークアドレスとして,適切なものはどれか。
IPアドレス: 10.170.70.19
サブネットマスク:255.255.255.240ア:10.170.70.0 イ:10.170.70.16 ウ:10.170.70.31 エ:10.170.70.255
255.255.255.240を2進数に直すと11111111.11111111.11111111.11110000なので末尾の4bitがアドレス部。
ア:第4オクテットが0で/24でのネットワークアドレスによくある。でもこれ/28ネットワークなので0~15がこのネットワークの範囲。よって別ネットワークのネットワークアドレスと判断されてアウト/24で区切ることに慣れた人をひっかける用途の誤答。
イ:これが正解。
ウ:第4オクテット31はこのネットワークのブロードキャストアドレスになるのでアウト。0と1のどっちがネットワークアドレスだったかを忘れた人をひっかける用の誤答。
エ:第4オクテット255で/24区切りにした際のブロードキャストアドレス。
残念ながら名前くらいは高校情報科として教科書にも出てくるので用語は覚えてほしい。
アドレスとしての分離は上記の通り応用情報のレベル。
IPv4枯渇問題の影響でインターネットで利用するアドレスが不足したので、延命策が複数利用されている、という話は上で行った。
サブネットマスクはその一つで、昔は/8,/16,/24で分離するクラスA,B,Cという分離法だけだった。(クラスD,Eもある)
それを1bit単位で分離できるようにしてもっと細かく配布できるようにしたわけだ。
それとは別の延命方法として「グローバルアドレス」と「プライベートアドレス」という概念ができた。
これは「特定の数字で始まるパターンは『インターネットで使用禁止』とする代わりに『個別の組織で利用してよい』」というルールがある。
そうすると何がいいのか、というと組織内のアドレスは別の組織で同じアドレスを利用してもよくなる。
組織Aの中で192.168.0.0/24というプライベートアドレスネットワークを利用している。
組織Bでも192.168.0.0/24というプライベートアドレスネットワークを利用している。
でも組織Aと組織Bは直接つながっていないのでべつに困らない。
インターネットに出るときはそれぞれの接点で「送信元・送信先をグローバルアドレスに変換する」とそれぞれの通信には困らない、という理屈だ。
この変換機能をNAT,NAPT,IPマスカレードなどという。
名称が複数あるのは特定の会社による固有名が一般化したとか微妙に処理が違うとかいろいろあるけど大まかには同じ意味ととらえてもらっていい。
まぁ・・・吹越は、「後から繋ぐことになったらアドレスが重複してたから変換を複数回噛ませて回避してる」なんて話を複数件知っているので使いようだよな...。
で、このIPアドレスはネットワーク設計者によって設定しないといけないわけだが、一般人にそんなことできるか?
というと基本的に厳しい。少なくともここまでのネットワーク基礎知識が居るのだぞ?
ということで必要になったら自動的に配布するようになったほうが要るよね?
ということによりDHCPというプロトコルでIPアドレスの自動配布をしている。
これの詳細はクッソ長くなるので第25回レイヤ7 DHCPなどを参照してほしい。
「ほかのネットワークとの接点」をゲートウェイという。
一つのネットワークでゲートウェイは複数あって当然なのだが、そのネットワークの端末が「基本的にここに行けば外部のネットワークとつながれるよ」というゲートウェイを「デフォルトゲートウェイ」という。
このレイヤーのデータを追記した状態をパケットと言い、おおざっぱ編でも説明した。
L3Switchやルーターと呼ばれる。この2つは厳密には別物なのだが...ガチンコのネットワークエンジニアでもあんまり差を気にしないので気にしたい人だけ気にしてればいいと思う。
ではこのパケットをどっちに転送すれば目的のネットワークにたどり着けるだろうか?
という視点も必要になる。これをルーティングという。(route+ing)
これを自動的に決めるプロトコルをルーティングプロトコルという。
これも詳細を語るとクッソ長いので省略する。
自分でググって...。
OSI参照モデルの説明<レイヤー4:トランスポート層>
著名なのはTCPとUDP。
ネットワーク層のIPは基本的に「パケットにして送る」が仕事なのでそれが到着したかどうかまではチェックしない。
それでは困るので「ちゃんと届いたよ」を保証させたり、同一アドレスでもどのアプリが使ってきたのかの判別をさせたりするのがこのレイヤーの仕事になる。
TCPは届いたことを保証する(1パケットごとに届いた報告を受信するまで何回か送りなおす)が、UDPは「多少損失したとしてもちゃっちゃと送る」という性質の違いがある。
TCPはファイルのやり取りとかで使い、UDPはIP電話(Skype以降によくある無料通話)とかストリーミング放送などちょっと情報が欠落したとしてもリアルタイム性を高めたいものによく向いている。
また、この両者はアプリケーションの判別に「ポート番号」という番号を利用している。
イメージとしては○○駅(アドレス)の何番線(ポート番号)、という感じになる。
で、TCP,UDPではポート番号は0~65536番まで利用可能である。
なので、サーバとしては一般的によく使われる「ウェルノウンポート」というポートがあり、新しく作った場合は1024番以降でやるのが通例である。
ウェルノウンポートのうち、本当に頻度の高い奴は覚えておくほうが良い。
- SSH: TCP 22 コンピュータをCLIで遠隔操作するためのプロトコル。
- SMTP:TCP 25 メール送信に関するプロトコル。
- HTTP:TCP 80 ウェブブラウザでインターネットを見るときに利用するプロトコル。ただし暗号化・サーバ証明無し。
- HTTPS:TCP 445 HTTPに暗号化・サーバ証明機能などがくっ付いたプロトコル。
この辺りは必須でいいかなぁ...。ほかにもいろいろある。
ちなみにSSHとかは遠隔操作に用いるプロトコルなのでアプリケーションの設定で待機ポートを別のポートにすることもできる。
FWと呼ばれるネットワーク機器はこのレイヤーまで確認し、送信元ネットワークと宛先ネットワークのIPアドレス・ポート番号で通信を許可する、止めるを判別する。
OSI参照モデルの説明<レイヤー5~7:アプリケーション層・プレゼンテーション層・セッション層>
このレイヤーになるとほぼ1セットで説明される。
トランスポート層で通信している1連の通信セットをセッションと呼び、セッションが確立した、などと表現する。
そのセッションの上でどのようにデータを流すが、ということを決めているのがアプリケーション層とプレゼンテーション層である。
HTTP(S)ならGET,POST,HEADなどの通信方式指定が該当する。
※HTTP(S)は複数レイヤーにまたがったプロトコルで、トランスポート層に近しい部分では一般的にポート番号80(443)でサーバ側は待っている、というだけでWEBブラウザに近い部分は上記の通信方式だったりHTML・CSSの解釈だったりが該当する。
という滅茶苦茶長い記事になってしまった...。
自習必須なので参考資料としてはちょいちょい挙げてた3分間ネットワーキングとか本としては1週間で CCNAの基礎が学べる本 第2版 (徹底攻略)あたりがおすすめ。