読者です 読者をやめる 読者になる 読者になる

woshidan's loose leaf

ぼんやり勉強しています。

ネットワークの勉強に関するメモ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
    • BGP-4 ... Border Gateway Protocol 4. 自立システム間(AS: Autonomous System)間でローティングを行うためのプロトコル.主にASとIX(Internet eXchange)に接続する場合や、AS同士を接続する場合に用いられる。
      • ASなど =(だいたい) 隣接ルータとTCPコネクションを確立して各種メッセージを贈りあって、経路情報を交換するバスベクタ型のルーティングプロトコル
  • 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エラーが受け取れないので結果が表示されない

ARPRARP

IPアドレス(ソフトよりの方)からMACアドレス(ハード寄りの方)を引くのがARP. 起動終了毎にIPアドレスがリセットされてしまうから都度設定する必要があるなどの理由でMACアドレスからIPアドレスを引くときに使うのがRARP.

ARPMACアドレスを探索する場合に、

  • ハード寄りの設定としてはネットワーク寄りの全部の端末に呼びかけたいので、イーサネットヘッダの宛先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 :: 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をバージョンアップする

ruby bundler rbenv gem

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

インタフェースって実装する側より実装を利用する側にとって重要

d.hatena.ne.jp

これを読んで、またオブジェクト指向についてきちんと勉強したくなった次第。

インタフェースってどのクラスのためにあるのかモヤモヤしてたんだけど、 インタフェースって実装する側より実装を利用する側にとって重要なのはそうだよなーって思って、 なんだか感動した!!

でも、紹介されている本が高すぎて死ぬ!!!!

d.hatena.ne.jp

d.hatena.ne.jp

d.hatena.ne.jp

d.hatena.ne.jp

これらもめっちょいい。

Android StudioのバージョンとjdkとGradleのDLできるバージョンは関係があるのかもしれない

Android Studio Gradle かもしれない

かもしれない話だからチラ裏の方でひっそり書くのですが、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分くらいで古いアプリのスクショがいるんだよという奇特な同志の方がいたらその人のためにメモ。

Android Monitorで監視している端末のスクリーンショットを撮る

AndroidStudio

別の機能を確認しようと思っていたら便利そうな機能を発見したのでメモ。

Android Monitorのメニューの左側のカメラアイコンをクリックします。 f:id:woshidan:20160521181433j:plain

すると、現在Android Monitorで監視している端末のスクリーンショットを出力するためのウィンドウが起動します。 f:id:woshidan:20160521181438j:plain

このスクリーンショット出力機能、端末っぽい枠をつけられたり、反射っぽい照りかえしみたいな効果が入れられたりして便利です。 これで急にアプリ紹介ページの画像を差し替えてとマネージャーに言われても大丈夫。 f:id:woshidan:20160521181444j:plain