ネットワークの勉強に関するメモ2
ネットワークとセキュリティ用語1
- NIDS(Network Intrusion Detection System)は侵入を試みる不正アクセスを検知して、いろいろ動いて管理者に通知を送る
- HIDS(Host Intrusion Detection System)はサーバ上のファイルが改ざんされてないか確認する
- ペネトレーションテスト(侵入テスト)は文字通り、実際ネットワークを介してサイトを攻撃し、不正にサイトに侵入できるかどうかを検査
NASの話
お仕事でNAS使うようになって、あーあれかーーー!!って少しイメージ湧くようになったので嬉しかった。
ストレージを直接イーサネットに接続する方式で、ストレージとファイルシステムが一体になっており、そのファイルシステムに特化したOS上でストレージをコントロールする。
NASにたくさんの端末が接続しても大丈夫なように、アクセス制御やアクセス権のコントロールを持っているものが多い。
NASの利用IDとコンピュータのログインIDが同一である必要がないため、私はたびたびNASの利用IDを忘れて情シスのかたのお世話になるわけですし、NASの利用IDによってNASの各ファイルに対するアクセス権が決まります。
直接内臓ストレージと1対1でつなぐのはDAS. ファイバチャネルなどによる専用ネットワークでストレージと接続するのはSAN(というかStorage Area Networkの略だった).
Power Over Ethernet
USBのやつかな? と一瞬思ったけど全然違った。LANケーブルを利用して電源を供給するのだそうです。
結構画像がごつかった。
ルータのルーティングに関するプロトコルについて
制御しようとする経路の対象範囲によって、EGP(Exterior Gateway Protocol)、IGP(Interior Gateway Protocol)の二つに大別される。
- EGP
- IGP
- OSPF ... Open Shortest Path First. 隣接するルータ同士がノードのエリア、インタフェースに接続されたリンクのコストといったリンクステート(ネットワーク内のどのルータとどのルータが隣接しているかという接続情報)の情報(LSA(Link State Advertisement:リンクステート広告))を互いに交換することで経路を選択する方式.
- RIP ... Routing Information Protovol ルータといえばこれかと思っていた。OSPFがルータ間の接続のコスト(最高通信速度)を用いるのと違い、これはホップ数を用いる
TCPとフロー制御
参考: http://www.infraexpert.com/study/tcpip11.html
参考先の図がめっちゃわかりやすいけど、Webサービスに例えると、アクセス毎にログインするのは大変だから、クッキーで一週間はログインしなおさなくていいように設定させる、一週間の区切りのとき、ログイン画面に飛ばす前の画面を覚えておいてログイン後もなめらかに操作できるようにする、みたいな話が、TCPで接続しているときのウィンドウサイズの設定とフロー制御の話になる。
TCPのフロー制御の場合、時間ではなくてデータの容量でACKを送りなおすタイミングを決めていて、そのデータ容量をウィンドウサイズといい、TCPヘッダにのっています。
ウィンドウサイズ分のデータを続けて送った後、そのまま、次のACKを素直に待っていてはやはり遅くなってしまうため、スライディングウィンドウという工夫を使います。
これは、まあ、Webサービスのたとえだと、通信を行うたびに裏でOAuthのリフレッシュトークン投げてますよ、みたいな話で、受信側が送信側からデータを受け取ったときに、転送されてきたデータの容量が達していなくてもACKを送っておいて、データの容量が限界に達したら、前に受け取ったACK受け取って続ける、みたいな感じと理解。
続きはまた明日!
ネットワークの勉強に関するメモ
インフラ周りわからなすぎて最近ネットワークの勉強をしているのですが、わかってないことだけひたすらわかっていき、闇。
ICMP(Internet Control Message Protocol)
ICMPはIPメッセージが送信元から相手に届くまでの間に起きたエラー関連の情報を送信元に通知するためのプロトコル、とありますが、では具体的にそのプロトコルを使ったソフトウェアに何があるかと言いますと、まずpingですね。
ほら、pingのログを見るとicmpって書いてあります。
ping hatenablog.com PING hatenablog.com (52.192.41.52): 56 data bytes Request timeout for icmp_seq 0 64 bytes from 52.192.41.52: icmp_seq=1 ttl=52 time=17.178 ms 64 bytes from 52.192.41.52: icmp_seq=2 ttl=52 time=26.477 ms 64 bytes from 52.192.41.52: icmp_seq=3 ttl=52 time=23.490 ms ^C --- hatenablog.com ping statistics --- 4 packets transmitted, 3 packets received, 25.0% packet loss round-trip min/avg/max/stddev = 17.178/22.382/26.477/3.876 ms
今日思い出そうとして書いたら、SCMP(System Control Message Protocol)って書いてて、いやSystemって広すぎでしょ、と言ってました。
他には、tracerouteコマンドなどがあります。
http://www.atmarkit.co.jp/ait/articles/0108/30/news003.html
# 現在の端末から指定したホストがつながっているルータのIPや接続時間などを表示して2つの端末館のネットワーク経路の状態を示す. # 中身としてはTTLを1,2..と小さいものから設定してIPパケットを飛ばして、TTLが0になったところでICMP Time Exceededエラーが返ってくるのを利用してる $ traceroute hatenablog.com traceroute to hatenablog.com (52.192.41.52), 64 hops max, 52 byte packets 1 aterm.me (192.168.10.1) 1.339 ms 0.996 ms 1.008 ms 2 ntt.setup (192.168.1.1) 1.936 ms 2.079 ms 1.618 ms 3 * * * <= セキュリティ上の要件でICMPパケットをフィルタしていたり、ルータが対応してなかったりするときは、ICMP Time Exceededエラーが受け取れないので結果が表示されない
ARPとRARP
IPアドレス(ソフトよりの方)からMACアドレス(ハード寄りの方)を引くのがARP. 起動終了毎にIPアドレスがリセットされてしまうから都度設定する必要があるなどの理由でMACアドレスからIPアドレスを引くときに使うのがRARP.
- ハード寄りの設定としてはネットワーク寄りの全部の端末に呼びかけたいので、イーサネットヘッダの宛先MACアドレスはFF-FF-FF-FF-FF-FF.
- ソフト寄りの設定としては呼びかけたいIPアドレスが決まってないため、ARPの探索するMACアドレスは00-00-00-00-00-00
LANケーブルについて
UTP, STPは金属のより対線でUTPは非シールド。だいたい4対で、5e, 6eは4本使えばノイズが大きいけれど通信速度があげることも可能。
1000BASE-TXあたりまでが金属で、だいたい最長は100m.
それ以上は光ファイバケーブルで最大距離もぐっと伸びる。
MySQLでdate型の値から対応する年, 月, 日の数字を抜き出す
ディレクターさんが使ってたのでメモ。
以前グーグルさんに聞いたら正規表現のものが出てきていたけど、 月ごとなどでグルーピングしたいときにはこっちの方がいいかもです。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.7 日付および時間関数
// MONTH(date) mysql> SELECT MONTH('2008-02-03'); -> 2 // YEAR(date) mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0); -> 2000, 0 // DAY(date) ( DAYOFMONTH(date)のシノニム) mysql> SELECT DAY('2007-02-03'); -> 3
rbenvでrubyをバージョンアップする
rbenvでrubyをバージョンアップする場合の手順
# インストール可能なrubyのバージョンの一覧を調べる $ rbenv install -l # rbenvで新しいバージョンを管理できるようにする $ brew update # 何らかのライブラリをアップデート, インストールする前にbrew自体を取得する $ brew upgrade rbenv ruby-build # 指定したバージョンをインストールする $ rbenv install `target-version` # そのディレクトリ以下で管理するバージョンを設定する $ rbenv local `target-version` # bundlerはrubyのバージョンごとに管理されているようでエラーがでる。bundlerを新規にインストールする。 $ gem update bundler $ gem install bundler # bundlerを使ってインストールする他のgemもrubyのバージョンごとにインストールされているようで # 他のバージョンでinstallしていたgemもinstallがはじまった $ bundle install
インタフェースって実装する側より実装を利用する側にとって重要
これを読んで、またオブジェクト指向についてきちんと勉強したくなった次第。
インタフェースってどのクラスのためにあるのかモヤモヤしてたんだけど、 インタフェースって実装する側より実装を利用する側にとって重要なのはそうだよなーって思って、 なんだか感動した!!
でも、紹介されている本が高すぎて死ぬ!!!!
これらもめっちょいい。
Android StudioのバージョンとjdkとGradleのDLできるバージョンは関係があるのかもしれない
かもしれない話だからチラ裏の方でひっそり書くのですが、Android Studioを2.0から2.2にバージョンアップして、もともと1.7のjdkが入っていたところに1.8のjdkを入れました。
そうしたところ、もともと1.7のjdkでビルドしてたプロジェクトが Could not find https\://services.gradle.org/distributions/gradle-2.8.0-all.zip
といった感じのエラーメッセージでビルドできなくなった。
そのURLのgradleのzipがないならURLを変えればよくない? とgradle wrapperなどを変更したりしたが、ダメな感じだった。
もしかしたら、jdkを1.7に戻せば... と思ったのですが、Android Studio 2.2ではjdkは1.8以上にしろ、というエラーメッセージがでて、1.7のjdkのパスを設定できなかった。
最終的に、前のバージョンのAndroid Studioを起動して、そちらでjdkを1.7に戻してビルドしてみたらビルドできた。
なんていうか、え、エラー出てるのjdkじゃなくてGradleのDLじゃん、という感じなのですが、まあ、現実はそうでした。
Android Studioのほうが設定で、指定できるjdkを持っていそうだけど、それに関連してgraldeのバージョンの範囲決まってたりするのかしら。
もちろん、正しい対応は半日くらいつぶして格闘して、古い開発環境の方をどうにかすることなので、 これ以上追求しても詮無い感じなのであり、これ以上調べないのでチラ裏です。
ですが、もしあと30分くらいで古いアプリのスクショがいるんだよという奇特な同志の方がいたらその人のためにメモ。