はじめに
自分は9月からプログラマとして転職することができた新米です。嬉しいことに会社に時間を作ってもらってネットワーク研修行けることになりました。そこで学んだことをまとめようと思い書いています。
僕はコードを書くことばかりに興味が行きがちですが、ネットワークのことをほんとうに全くわかっていなくて迷惑をかけてきました。今回を機に詳しく勉強していきたいと思います。
対象
エンジニアを目指して学習中の方。
ネットワーク周辺のことはおろそかにしがちな方。
ネットワークの勉強をしたいけど何を勉強すればいいかわからない方。
ゴール
IPアドレスの調べ方と読み方がわかる。
通信の全体のイメージが掴めるようになる。
ネットワークの概要
ネットワークって何?
僕は誰かに「ネットワークって何?」ときかれると言葉に迷ってしまいます。
教科書的に書くと「コンピュータ間取り扱う情報の伝達網」という感じになるようです。
ネットワークと言う言葉は地域のネットワークのような使い方もされるのでコンピュータ間だけの話ではないような気もします。
この記事では「情報が伝達できる範囲、またはその構成」
をネットワークとして書きたいと思います。
ネットワークはもともと単独で使用していたPC同士を接続し、情報伝達を行うために生まれたという背景があるようです。PC同士をつなぐ範囲が世界中に広がったものがインターネットとよばれます。
インターネットとイントラネット
世界中に広がったネットワークをインターネットと呼ぶのに対し、範囲を制限するネットワークをイントラネットと呼びます。ネットワークエンジアの方たちは主にこのイントラネットをどのような構成で構築して保守するのかなどの業務をされているのかと思います。
端末接続(LANとWAN)
イントラネットの中にも分類があります。LANとWANです。
Local Area Network
自社の敷地や自宅に構築されたネットワークの事を指します。
すべて自己管理の範囲となるので管理者が設計する事になります。
自宅であれば通信事業者から送られてきたONUとルーターを置くだけで完結していると思います。
Wide Area Network
こちらは拠点間をつなぐネットワークなのでキャリアから提供されているサービスなどを使用します。
会社でいうと関西支社と関東支社をつなぐような使い方になるかと思います。
ネットワーク技術の全体像
「ブラウザを使用して情報が表示されるまで」を例として説明していきたいと思います。
例えばgoogle chromeを使って希望する記事を読みたい等の流れはいくつかのステップを踏んで実現できてます。そのステップを説明するときによく出てくるのがOSI参照モデル
です。
インターネットが世界に広がる前は小さなネットワークがいくつかありました。それぞれの通信規格がばらばらでは問題があるため国際標準規格
ができたようです。通信規格のことはプロトコル(ルール)
と呼ばれています。
OSI参照モデル
OSI参照モデルは全部で7階層に別れています。アプリケーションからPCにどのように情報が伝達されるかを定義した指針になっています。順を追って説明されるときはこのモデルが利用されるそうです。ただこのモデルは非実装型といって実際は次に出てくるTCP/IPを使用しています。
画像引用:https://www.itmanage.co.jp/column/osi-reference-model/
TCP/IP
僕たちが普段使用している通信はこのTCP/IPという規格を使用しています。
階層構造は4層になっています。ほとんどのPCなどの通信機器に実装されているそうです。
画像引用:https://www.itmanage.co.jp/column/osi-reference-model/
-
アプリケーション層
HTTPなどでサーバーに対して情報を送るのか要求するのかなどの情報の通信
-
トランスポート層
使用しているアプリケーションをポート番号を使って通信を識別したりできる階層
-
インターネット層
ネットワーク機器の住所情報をセットします。IPアドレスを扱うことで返却されるべき場所に情報が返ってきます。
-
ネットワーク・インターフェース層
Ethernetや無線LANなどでハードウェア同士が通信する層になっています。この層は実際にLANケーブルでつながっているかなどの話なのでわかりやすいと思います。ハードウェアにはMACアドレスと言う情報がついていますが、この記事ではあまり詳しく書きません。
ここからは僕が実際に実務に入ってわからなかったことと、なるほど!!と思った事について触れていきます。
トランスポート層
トランスポート層でアプリケーションごとのプロトコルを制御することで通信の多重化が実現できているそうです。使用しているアプリケーションごとにポート番号が割り当てられて通信をしています。
またウェルノウンポート
と呼ばれるあらかじめ決められているポート番号もあります。HTTPは80番などが代表だと思います。0~1023
まで。
逆に自由に使えるポートをクライアントポート
いいます。これはクライアントが利用しているアプリケーションのプロトコルが重複しない様にランダムに割り当てられるそうです。フレームワークだとどこを使うか設定されていてRailsだと3000番 Laravelだと8000番になっています。クライアントポートは自分で決めて使えるようです。windowsのOSだとたしか40000台のポートが割り当てられていたような気がします。・・・
ここの学習でわかったこと。
- Rails の開発をしているとlocalhost:3000はすでに使われていますよ!といったエラーに当たることがあります。これは同じポート番号をつかえないよ!と言われているのでトランスポート層のエラーなのか!と気づくことができました。
- ウェルノウンポートは攻撃の対象になることもあるのであえて違うポート番号を使用してセキュリティ対策をすることもあるそう。
インターネット層
インターネット層は端末識別をしている層になっています。識別には主にIPアドレス
が使用されています。業務では「IPアドレス何番?」など効かれることがありますが、これは住所を教えて!と聞いているのと一緒かとおもいます。
ちょうど住所の話が出たのでパケット
の話をします。
情報のやり取りはパケットと呼ばれるデータの塊で行われています。データの先頭のことをヘッダ
と呼びます。各階層ごとにポート番号は何番。IPアドレスは何番とヘッダ保存されていきそれを付加もしくは削除することで目的地までたどり着くようになっています。
IPアドレスの読み方について
IPアドレスは32bit
で構成されていて43億ほどの端末を識別できる様になっています。
このアドレスについては自由に使えてしまうと世界で枯渇してしまうのでしっかり管理されているそうです。個人がスマホやPCを複数台使うのは普通になっていて、そう考えると確かにあっという間になくなりますね。
また、管理されているのはIPアドレスの中でもインターネットで使用されるグローバルアドレス
と言うものでLANの中では自由に設定できるようになっています。
32bitのアドレスの構成はドット記法で書かれることが多いです。
例 192.168.10.1
IPアドレスはどこで区切るかでLANの中の端末識別数が変わってきます。区切り方のルールにアドレスクラス
と言うものがあります。クラスABCに分かれておりAから大中小規模のネットワークということになります。
Aだと1600万台登録できることになります。僕が経験ないだけかもしれませんがだいたいクラスCで構成されているはずです。
アドレスクラス | 使用するアドレス |
---|---|
クラスA | 10.0.0.0 ~ 10.255.255.255 |
クラスB | 172.16.0.0 ~ 172.31.255.255 |
クラスC | 192.168.0.0 ~ 192.168.255.255 |
あとIPアドレスを読むときに参考になるのがサブネットマスク
です。
例:255.255.255.0
macだとifconfig
windowsだとipconfig
とたたくとネットワーク情報を確認することができます。スラッシュ記法で/24と書かれているときもあります。
これは先程のIPアドレスのどこからどこまでがネットワーク領域かを示しています。
IPアドレス :192.168.0.xxx
サブネットマスク:255.255.255.0
この場合だと192.168.0までは同じネットワークの中では固定のアドレスになります。通信機器ごとにxxxのところだけが変わるので読むときに下三桁を覚えるだけで済みます。
僕はこれを知らなくて一生懸命全桁覚えたり保存したりしてしまってました。笑
ネットワーク情報をコマンドで見てもにたような数字がたくさん出てしまうのでどれを見たらいいのか焦ったのを覚えています。
ここの学習でわかったこと
- IPアドレスは端末の識別もそうだが、ネットワークを識別する住所になっている。
- IPアドレスは小さなネットワークではある程度使用できる番号が決まっているので読むときは下三桁だけで良い。
- URLはIPアドレスを読めるようにしたものでIPアドレスに変換されて通信している。
- IPアドレスはDHCPサーバーが自動的に配布してくれているので接続し直すたびに動的に変わってしまう。固定にする場合は設定が必要。
あとがき
名前解決やルーティング、インターフェース層も学習しましたが、長くなるので一旦切りたいと思います。二日間研修させていただきましたが、ネットワークの勉強は実際にキャプチャソフトを使ったり自分で構成図を書いたりしないと頭に入ってこないなぁと感じます。
とはいえ技術の話をしているときに今どの階層のことを言われているのかや、デバッグするときにどこで問題が起きていそうなど自分でも考えられるようになったのが嬉しく思っています。検索すれば出て来るのとは思いますが、どう検索すれば良いかわからなかったのが改善しました。
3ヶ月という期間ですが、わからない内容に直面していたおかげで学習にも身が入りました。いいタイミングだったのかなぁと思います。
課題として自社のネットワーク構成などは説明できるように学習していきたいと思います。
以上です。読んで頂いてありがとうございました。
もし指摘していただける箇所があれば修正しますのでよろしくおねがいします!!