CS学習ドットログ

CSを勉強している人が、学習や開発の足跡を残すための手記

初学者がネットワーク像をなんとなくつかもうとしてみる。(LANが中心)

f:id:HoriK:20201029042531p:plain

概要

 LANを中心にネットワークのなんとなくのイメージをつかもうとしてみる。オープンネットワーク、クローズドネットワーク、LAN、WAN、イーサネットなど基本的な用語も触れてみる。

動機

 ネットワークについて学び始めたので、忘れないようにメモ。主にLANについて。

内容

ネットワーク技術概要

 ネットワークは大きくオープンネットワークとクローズドネットワークに分けられる。オープンネットワークはいわゆるインターネットのことで、ISP(Internet Service Provider)によって提供された回線を通じて様々な企業や個人に利用されている。クローズドネットワークは限定されたユーザ間で利用されるネットワークである。社内における社内ネットはイントラネットと呼ばれ、複数企業間で共有される部分においてはエクストラネットと呼ばれる。

 また、ネットワークはしばしば地理的分類でLANとWANに分けられる。LANはLocal Area Networkの略称で家庭内、社内といった狭い範囲に築かれるネットワークを指す。LANを複数接続すれば地理的に広範囲をカバーでき、これをWAN(Wide Area Network)と呼ぶ。ただし、この際WANはクローズドネットワークの一種であり、インターネット(オープンネットワーク)とは本質的に異なるものであることに注意したい。

 LANであれWANであれ、構築するにはネットワークインフラストラクチャが必要である。これらを構成するネットワーク機器としてはルータやレイヤ2スイッチなどが具体例として挙げられる。ネットワークの情報伝達ではコンピュータ内の「0」「1」を物理的な信号に変調して送ることになる。この方式を変調方式と呼び、有線では電気信号や光、無線では電波に変調される。

LANを構築するLAN技術

 LANを構築するLAN技術を紹介する。有線LANの構築にはイーサネットを利用するのが一般的である。イーサネットはデータ転送プロトコルの一種であり、低コストで構築できる。規格によって伝送速度が変わってくる点に注意したい。伝送速度は次のようにみる。

f:id:HoriK:20201029042417p:plain

規格の見方

 伝送媒体のケーブルにはUTPケーブル、インターフェースにはRJ-45が使われる。UTPケーブルは8本のケーブルを2本1対にして構成したもので、それに対応するRJ-45には8つの端子がある。伝送されるデータは、機器を識別するMACアドレスとタイプコードの2つを含んだイーサネットヘッダと、チェック用のFCS(Frame check sequence)を付与され、伝送される。(これをイーサネットフレームと呼ぶ)ここで付与されるMACアドレスはメーカを識別するOUIと、機器を識別するシリアル番号で構成される48bitの識別コードである。

 LANを実現するもう1つの有力な手段はケーブルを引く必要がない無線LANである。無線LANアクセスポイントを中継して機器同士を接続するインフラストラクチャモードと、機器同士を直接接続するアドホックモードの2つのモードを備える。機器同士の接続に際して、接続の互換性が気にかかるところだが、業界水準となりつつある「Wi-Fi」のロゴのある製品同士はWi-Fiによる相互接続ができることが保証されている。機器の識別は割り振られたSSIDで行われる。

 

無線LANの規格(NTT西日本公式ホームページより引用)

f:id:HoriK:20201029041728p:plain

IEEE802.11


 無線LANの問題は、通信が遅くなりがちなことや、セキュリティ対策が必要であることが挙げられる。

 無線LANではある1つの電波を複数のデバイスで共有するわけであるが、ある瞬間にデータを送受信できるデバイスは1つだけである。そのため、デバイス同士のパケットの衝突を防ぐ待ち時間が発生し、(CSMA/CAにより制御)通信のスループットが大きくなってしまう。

 セキュリティの問題は、通信が傍受された時の対策、認められていないユーザの接続についての対策をそれぞれ用意する必要があり、それぞれ

 通信の傍受 -> 暗号化 <-> AES(Advanced Encryption Standard)

 不正なユーザのアクセス -> 認証 <-> WPA2 or PSK(Pre Shared Key)

のような具合に対応している。(あくまで一例)

WANを構築する

 LANを構築したら拠点間をつなげてWANを構築したい。もっとも単純で確実な方法は拠点間を専用線でつなげることだが、これではコストが非常に高くなってしまうので、メッシュ型のWANサービスであるIP-VPNや広域イーサネットを利用するのが一般的である。とはいえこれらのサービスに接続できるアクセスポイントまではアクセス回線を専用線でつなぐ必要があり、このアクセスポイントをPOP(Point of Presence)と呼ぶ。

まとめ

   ネットワークインフラストラクチャを用いてLANやWANを構築する。

参考文献

「Gene:著 『ネットワークの基本と仕組み』ナツメ社 2018年」第1章,第2章,第3章

 

170 daily actions -英単語メモ(上)

f:id:HoriK:20201013172953p:plain

概要・動機

 170 daily actionsを読んでたらいろいろ知らなかったり忘れてた単語があったのでまとめる。ここではpart1-17のうちの前半部分(part1-8)までの単語を集めている。

内容

building a resume                         履歴書を作成する

pantry                                           食料を保管しておく空間・部屋

clean out                                      空っぽにする

non-perishable food                    腐りにくい食品

stigma                                          汚名、恥辱

speak up                                      大きな声で話す、声を上げる

misconception                             誤解

tinned foods                                缶詰食品

cycle to work                                自転車で通勤する

go for a walk                                散歩に行く

go for walks                                  散歩に行く(習慣)

ailments                                        病気、疾患

awareness                                     意識

substance abuse                           薬物乱用

out of                                           ~から

set up                                           設立する

migrant                                         移民

imigrant                                        移民(自国->他国)

emigrant                                       移民(自国->他国) 

tangible                                        触れて感知できる、有形の

keep it fun                                    楽しくやる

in need                                         必要としている

allow for                                       考える、見込む

media outlets                               報道発信地、メディアの支局

role model                                    他人の手本となる人物

scholarship                                    奨学金

inferior to           劣っている (<=> superior to)

incompetent                                 無力

decision-making processes          決定プロセス

conserve                                       節約

borehole                                       試掘用の穴

pollute                                           汚染する

faucet                                            蛇口

fundraising                                    募金

conservation                                 保全

lid                                                  ふた

going on holiday                          行楽に行く

appliance                                      電化製品

lightbulbs                                      電球

thermostat                                    自動的に温度調節を行う装置

youth                                             若者

incentive                                        動機

low-earning workers                     低所得労働者

entrepreneurs                              起業家

enpower                                          力を与える

 

まとめ

 pantryとか、なじみのない単語もちょこちょこ出てきますね。

 

シェル操作メモ2

概要

 Linux,Bashにおける基本的なコマンドをまとめている。前回の続き。よって注意事項も前回と同様で、コマンド、オプションもろもろ網羅的ではないので注意を。やはり細かい説明はマニュアルを参照すればいい話だから。

動機

 単なるメモ書き。画面の端に置いておいてちらちらとみるチートシートが欲しかったた。

内容

 ファイルの圧縮・解凍 

gzip オプション ファイル名

ファイルを圧縮するコマンド。オプションとして -d を指定すると解凍にも使える。 -c では標準出力へ内容を出力でき、 -rではディレクトリごと圧縮できる

bzip2 オプション ファイル名

ファイルを圧縮するコマンド。gzipよりも圧縮効率よい反面、圧縮には時間がかかる。ネットワークが貧弱な相手にはgzipよりもbzip2で送るほうがよいだろう。gzipと同じく -d を指定すると解答にも使える。 -c で標準出力に内容を出力する。

xz オプション ファイル名

ファイルを圧縮するコマンド。gzip,bzip2よりも圧縮効率が良い半面、圧縮には時間がかかる。ネットワークが貧弱な相手にデータを送り付けるのに最適。オプションで -d を指定すれば解答にも使える。また -l で圧縮ファイルの中身を確認したり、 -k で圧縮解凍後に元ファイルを残したりと、高度なこともできる。

gunzip ファイル名

gzipコマンドで圧縮されたファイル・ディレクトリを解凍するコマンド

bunzip2 ファイル名

bzip2で圧縮されたファイルを解凍するコマンド

unxz ファイル名

xzコマンドで圧縮されたファイルを解凍するコマンド

zcat ファイル名

gzipで圧縮されたファイルの中身を解答せずに覗き見れる。

bzcat ファイル名

bzip2で圧縮されたファイルの中身を解答せずに覗き見れる。

xzcat ファイル名

xzで圧縮されたファイルの中身を解答せずに覗き見れる。

アーカイブを使う

tar オプション アーカイブアーカイブするファイル・ディレクトリ名

アーカイブを管理するコマンド。オプションがたくさんあるが、アーカイブを作るときは -cvf , アーカイブを展開するときは -xvf を使う。 -r でアーカイブにファイルを追加し、 --delete で削除する。また、 -z でgzip、 -j でbzip2、 -J でxzで圧縮・解凍できる。

cpio フラグ オプション

アーカイブを作ったり、ファイルをコピーしたり、抽出したりできる。フラグは3種類。 -i ファイル抽出、-o アーカイブ作成、 -p ファイルを別のディレクトリにコピー。使うときには

ls | cpio -o > ディレクトリ名

のようにパイプを使うので、LPIC等の問題で見かけてもすぐ回答できるだろう。

権限の設定

chmod オプション アクセス権 ファイル名

権限を設定するコマンド。ユーザ、グループなどに対して、それぞれ権限を設定できる。ユーザは u 、グループは g、そのほかのユーザは o ,すべてのユーザを対象にするときは a を設定し、権限を与えるのか取り上げるのかを + , - で指定する。その後対象にする権限を r(読み取り)、w(書き込み・削除)、x(実行)で選択する。例として、グループに対して読み取りの権限を与えるときは g+r という具合にする。また、数値で指定することもできて、r =4 , w = 2 , x = 1 と割り振られているので、ユーザ・グループ・その他ユーザ の順に権限を足した和をつかって3桁で指定する。例として、ユーザには読みとり、書き込み、実行を許可し、グループとそのほかのユーザには読み取りと実行を許可する場合、

chmod 755 ファイル名

という具合にする。スティッキービットを指定したいときは3桁の頭に1を、SUIDを指定したいときには3桁の頭に4をつければよい。

chown オプション ユーザ名(:グループ名) ファイル名・ディレクトリ名

ファイルやディレクトリの所有者を再設定できる。root権限必須。

chgrep オプション グループ ファイル名・ディレクトリ名

ユーザの所属するグループを再設定できる。root権限必須。

リンク作る

ln オプション リンク元 リンクファイル

リンクファイルを作成する。オプションを指定しないとハードリンク、オプションで -s を指定するとシンボリックリンクを作成する。ハードリンクはファイルの実体を指すファイルで、シンボリックリンクリンク元のファイルやディレクトリを指すファイルになる。

プロセス・ジョブ・システムの管理

ps オプション

コマンドを打ったユーザが実行中のプロセスを一覧表示する。オプション ax や -e を指定するとシステム上のすべてのプロセスを確認できる。また、 f でプロセスをツリー上で表示したりということもできる。

pstree

ps f と同義でプロセスをツリー上で表示する。

top

実行中のプロセスを継続的に監視する。

     kill シグナル プロセスID 
     kill -s シグナル名 プロセスID
     kill -SIGシグナル名 プロセスID

プロセスにシグナルを送信する。シグナルは60種類くらいあるが、これは kill -l で確認できる。killコマンドで使う主なシグナルとしては、-TERM (通常終了) -KILL (強制終了) HUP (ハングアップ) などがある。詳しくはマニュアルを参照。

pgrep オプション プロセス名

プロセスIDを調べられる。オプションで -u を指定するとユーザ名 -g を指定するとグループ名を検索に使うこともできる。

     killall -シグナル名 プロセス名
     killall -s シグナル名 プロセス名
     killall -SIGシグナル名 プロセス名

名前が一致するプロセスすべてにシグナルを送信する。

pkill オプション シグナル プロセス名

名前が一致するプロセスにシグナルを送信する。 -u でユーザ、-g でグループのプロセスに対してのみにシグナルを送信できる。

jobs

実行中のジョブを確認できる。

nohub コマンド

指定されたコマンドの処理をログアウト後も続けるようにする。

free オプション

システムの利用状況を確認する。 -m でMB単位で表示、 -s で指定した間隔で再表示する。

uname

OS,アーキテクチャの種類を確認できる。 -a オプションで詳細に表示できる。

watch オプション コマンド名

指定されたコマンドを一定時間ごとに実行する。 -n で秒数を指定し、 -d で変化部分を強調して表示、-t でヘッダを省いて表示する。

uptime

CPUの実行待ちのプロセスの平均値を出力する。load average の3つの数字は前から順に、直近1,5,15分の実行待ちプロセスの平均値。

bg ジョブ番号

ジョブをバックグラウンドへ。

fg ジョブ番号

ジョブをフォアグラウンドへ。

nice -n ナイス値 コマンド名

実行しているプロセスのナイス値を高くする。一般ユーザは0~19までナイス値を増やせる。root権限を持っているときは -をつけてナイス値を指定する。

renice -n ナイス値 -p プロセスID -u ユーザ名

ユーザのプロセスIDを指定してナイス値を変更できる。root権限必須

まとめ

  bashには便利なコマンドがたくさん備わっている。

 ここに乗せているコマンド以外にもたくさんコマンドがある。詳しい説明はmanでマニュアルを検索して調べよう。(再び)

参考文献

「中島能和:著 濱野賢一郎:監修 『Linux教科書 LPIC レベル1』翔泳社 2019年」第4章

Trelloを1か月使ってみたが割と感触は良い。

f:id:HoriK:20201007194502p:plain

概要

 Trelloを1か月ほど使ったところ、かなりの好印象だったので褒めたたえる。

trello.com

動機

 これまで長い間システム手帳を愛用してきたが、このデジタル時代にアナログな手帳を持ち歩きたくないとおもい、1か月ほど前にTrelloをつかってタスク管理をすることにした。 

内容 

 Trelloの簡単な説明

  Trelloはタスクを書き込んだカードをボード上に貼り付けて管理するタスク管理ツール。アプリでもブラウザ上でも使える

  ボード上にはリストが用意できて、カードはボード上のいずれかのリストの中に入れておく。例えば、日常的なタスク管理のボードであれば、「Todo」「作業中」「完了」などを作って、その中でカードを移動させながら進捗状況を可視化できる。個々のカードにはタスクの詳細を書いたり、期限を設定したり、ラベルを貼ったりできる。

 ボード自体も複数作成でき、日常的なタスク管理とは別に長期目標を管理したりといったこともできる。

 自分のTrelloの使い方。

  日常的なタスク管理においては、ボード内に「今日取り組むこと」

「作業中」「1週間以内に取り組むこと」「1か月以内に取り組むこと」

「完了したもの」の5つで分けている。毎朝起きてログインしたら、1週間以内に取り組むことリストの中からその日にやるべきことを今日取り組むことリストに入れる。作業中のものは、今日やることリストから作業中リストに移動させる。その日の終わりに未完了タスクが残っていたら1週間以内に取り組むリストに戻す。このようにして、その日一日のタスクは必ずすべて(見かけ上は)処理されるようにする。

 週の初めでは、1か月以内に取り組むことリストからその週に取り組むことを移動させる。

 また、個々のタスクについて、カード名は極力パッと見てわかるようにして、タスクの詳細は詳細欄に書くようにする。ラベルも活用する。自分はこの世のタスクは「A:3日以内に取り組む必要があるもの」「B:1週間以内の取り組む必要が得あるもの」「C:それ以外」しかないと思っているので、この3つのラベルをすべてのタスクに貼り付けるようにする。

 

Trelloの気に入っているところ

 ・同期できる。いつでも書ける

   Trelloはデスクトップでもラップトップでも、スマホでも同じアカウントでログインすればカードが同期される。思いついたときにすぐタスクを作ったり詳細を書き込んだりでき、紙の手帳のように常に持ち歩く意識をしなくても"常にある"ので安心感がある。

 ・時間管理がざっくり

   これは自分が使いこなしていないだけかもしれないが、Trelloの時間管理はざっくりである。システム手帳では時間管理をかなり細かく設定できるが、自分は残念ながら時間割を作ると途端にやる気が消失するという謎の病にかかっているので、ざっくりとしか管理できないのが逆にプラスの意味で作用している。

 ・タスクの移動が楽

   カードをドラッグアンドドロップで移動できるので、タスクを移動するのが非常に楽。紙だと移動するときには、前に書いた内容を消して、新たに別の場所に書かなきゃいけないのでそれがつらかった。

 などなど...

まとめ

 Trelloを使い始めたら結構快適だった。

 

整数の補数表現について

f:id:HoriK:20201006214839p:plain


概要

 コンピュータにおける符号あり整数の表現方法をまとめている。

動機

 補数表現の意義がようやく理解できたので覚え書き。

内容

 コンピュータで符号あり整数を表現する方法として考えられるのは、

 1、先頭ビットを符号ビットにする

 2、1の補数を利用する(減基数の補数)

 3、2の補数を利用する(基数の補数)

 の3つであるが、一般的に利用するのは2の補数である。

 ここでは8bitのビット列で整数を表現することを例にして考える。

1、先頭ビットを符号ビットにする

符号ビット(1bit) 絶対値(7bit)

 この場合-127 \sim 127を表現できるが、+0-0が同じものであるにもかかわらず、1000000000000000の2通りが存在してしまうという問題がある。

 

2、1の補数を利用する

  これは元の正の数をビット反転することによって負の数を表す表現方法。

 10進数の5を、2進数で表現すれば00000101となる。これをビット反転して-5 = 11111010と割り当てることにする。

 これで符号ビットを使わずに負数を表現できるようになったわけだが、問題もあって、例えば次のような計算を考える。

5-5 = 0 

5+(-5) = 0

これはどちらも答えが0になるわけであるが、1の補数を用いた計算では

00000101 - 00000101 = 00000000 ←5-5=0

00000101 + 11111010 = 11111111   ←5+(-5)=0

と2つのビットが存在してしまう。

3、2の補数を利用する

 作業工程は1の補数と似ているが、とてもすごい効力がある。

 負数を表すときは、ビット反転ののち値を+1することにする。

 これに従えば、10進数の500000101、これをビット反転したのち+1して、

-5 = 11111011と表される。

 これで先ほどの 5-5 5+(-5) を計算する

00000101 - 00000101 = 00000000    ←5-5=0 

00000101 + 11111011 = 100000000   ←5+(-5)=0

ここで桁あふれしたビットを無視しすれば、

 100000000 = 00000000となり、2の補数で0の重複を解決できたことがわかる。

またここで注目すべき点は、加算で減算を扱うことができたということで、加算回路のみで加減算を行えたという点である。

つまり、2の補数を使って負数を表現することによって回路規模の縮小が図れる。これは2の補数表現が広く使われる理由の一つである。

まとめ

 2の補数表現を利用することで整数の加減算を加算回路のみで行うことができる。

参考文献

 「小柳滋、内田啓一郎『IT Text コンピュータアーキテクチャ改訂2版』情報処理学会 2019年」 第1章

   「栢木厚 『栢木先生の基本情報技術者教室 第15版』技術評論社 2019年」第3章