WireSharkで学ぶネットワークの基礎

# 初めに
---
## ネットワークを勉強しよう
- アプリ～ミドルウェアはよく話題に出る
- ただ、ネットワークは良く分からない...と言う人が多い
- 社内勉強会でネットワークやったのでその資料を基にQiitaで記事にしました!
---
# WireSharkをインストールしよう
---
## Wiresharkの使い方 - ネットワーク入門サイト より
https://beginners-network.com/wireshark.html

---
## キャプチャしたデータを見てみよう
- 16進数が表示しているエリアで右クリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/2e97ad53-49ca-71fb-8672-5f592b1332a4.png)
- 「ビット列として...」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/f755d31d-8369-04c4-c8ca-8b380dbe0b2e.png)
- なんじゃこりゃ!? 
---
## そもそもデータってなに?
- ネットワーク上を流れているデータは、実はモールス信号に近い

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/ccae85a6-5ee2-67a3-2ccd-1a4efcaa4d02.png)

https://www.benricho.org/symbol/morse.html#group1-2

- さっきの0と1は電気信号のON/OFFを表している
---
## 画像も全部0と1

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/e59c94c5-5345-8ec3-636e-9757c895d4b4.png)

https://article.photo-cafeteria.com/DotAndPixel.html
- 画像の色は3原色(赤青緑)で様々な色を表現できる
- Red/Green/Blueとそれぞれの濃淡(0~255)で表現
- この1ドットを組み合わせることで画像を表現
---
## もっとWireSharkのデータを見てみよう
- これはHTTPSをキャプチャしたデータ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/56a96625-0b77-fe70-8b77-e5afea671ebe.png)
- なんか「Ethernet」とか「Internet Protocol」とか書いてある
- データには様々な区分分けがあって、これらは層で出来ている 
- この層ごとに役割がことなり、記載されている情報にはすべて意味がある
---
## OSI参照モデルとTCP/IP階層モデル
WireSharkで表示されていた層は、TCP/IP階層モデルがベースになっている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/924ea12e-c2ec-3ff6-7fc2-5bd5081b66a6.png)

https://www.itmanage.co.jp/column/osi-reference-model/

---
## OSI参照モデルとTCP/IP階層モデル
- これはHTTPをキャプチャしたデータ。http://google.com/ 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/52640627-8c8c-4fe7-cecc-fcc1a76d2b15.png)
- これを OSI参照モデルとTCP/IP階層モデルで表現すると以下の区分け
    - Ethernet：データリンク層/ネットワークインターフェース層
    - Internet Protocol：ネットワーク層
    - Transmission Control Protocol：トランスポート層
    - Hypertext Transfer Protocol：セッション層以上/アプリケーション層
---
## 各層の説明はこのサイトを参照しました

https://www.infraexpert.com/study/networking3.html

https://www.infraexpert.com/study/networking4.html

---
# 物理層
物理的なネットーワーク接続(接続口の規格や伝送方式)を取り扱うよ。(電気/光信号など)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/4a8754af-288d-7e00-f0f6-f61e3cd5b13b.png)
[OSI参照モデル - その2 | ネットワークエンジニアとして](https://www.infraexpert.com/study/networking4.html) 「OSI参照モデル：物理層」より

---
# 物理層の技術
- 端末の「0」「1」のビット列を電気信号等に変換し、ネットワークへの伝搬を行う
- 分かりやすいものはケーブル規格
    - Ethernetケーブル：電気信号
    - 光ケーブル：光信号
    - 無線：電波

---
# データリンク層
隣接する端末同士の通信に関することを取り扱うよ。(イーサネットフレームなど)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/9defc4c7-9acf-011d-22f8-e45040629dfb.png)
[OSI参照モデル - その2 | ネットワークエンジニアとして](https://www.infraexpert.com/study/networking4.html) 「OSI参照モデル：データリンク層」より

---
# データリンク層の技術
- Ethernet：一般的なLAN/WANネットワークで利用されるプロトコル
    - MACアドレス：NICや機器ごとに割り当てられる48ビットの識別子、物理アドレスとも呼ばれる
        - 上位24ビットはベンダー毎にコードが割り当てられている
        - 下位24ビットは製品番号となる

---
# ネットワーク層
端末間の終点と起点の通信を取り扱うよ。(インターネットプロトコルなど)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/9e9d9b8e-1a22-b9df-b763-7465730776f4.png)
[OSI参照モデル - その2 | ネットワークエンジニアとして](https://www.infraexpert.com/study/networking4.html) 「OSI参照モデル：ネットワーク層」より

---
# ネットワーク層の技術
- Internet Protocol(IP)：ネットワーク間の通信を行うためのプロトコル
    - IPアドレス：基本は一つの機器に割り当てられる(IPv4だと) 32ビットの識別子
        - ローカルエリアネットワーク(LAN)で使えるのがプライベートIPアドレス
            - 192.168.0.0/16   172.16.0.0/12   10.0.0.0/8など
        - ワイドエリアネットワーク(WAN)で使えるのがグローバルIPアドレス

---
# トランスポート層
端末間のデータ転送における通信の信頼性を取り扱うよ。(TCP/IPなど)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/7f568725-e167-59f0-151d-b8242a1fcb44.png)
[OSI参照モデル - その2 | ネットワークエンジニアとして](https://www.infraexpert.com/study/networking4.html) 「OSI参照モデル：ネットワーク層」より

---
# トランスポート層の技術
- TCP：コネクション型の通信を提供するプロトコル
    - 信頼性の高い通信に使用される
- UDP：コネクションレス型の通信を提供するプロトコル
    - 信頼性が低いが高速な通信に使用される
- ポート番号：アプリケーションを特定するための番号、TCP/UDPで使用
    - ウェルノウンポート番号： IANA で管理されている 0~1023のポート番号
    - 22:SSH / 25:SMTP / 80:HTTP / 110:POP3 / 143:IMAP4

---
# セッション層以上について
- OSI参照モデルでは分かれているが、TCP/IPモデルだと一緒の部分
- プロトコル的にはこの辺は厳密には分かれていないものが多い

## セッション層
- 端末間の通信の確立、維持、終了を取り扱う
- Webサーバだとログイン/ログアウトなどが想定

## プレゼンテーション層
- データの表現形式を取り扱う
- 文字コード、ファイル形式、暗号化/圧縮など

## アプリケーション層
- アプリケーション固有の規定を取り扱う
- HTTP / SSH / DNSなど
---
# カプセル化
送られるデータは各層のデータでカプセル化された状態で送られる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/f75b5668-6244-06f5-5861-348354cf0bec.png)
WireSharkでキャプチャしてたデータもカプセル化されている。

https://www.infraexpert.com/study/tcpip1.html

---
## プロトコルって結局なに？
- データの規格でもあるし、データを取り扱う手続きでもある
    - 分かりやすいのはWireSharkで取得したデータ
    - でもデータ単体だけでは、特に意味はない (0と1の羅列)
    - このデータを各機器が読み取り、適切な手順で処理、実行することで意味が出てくる
---
## 誰がプロトコルを決めてるの?
- これらのプロトコルはRFC(Request For Comments)で定義されている
- インターネット技術標準化を行うIETF(Internet Engineering Task Force)が発行
- 各ベンダーはRFCを元に製品開発を行っている
- つまりRFCに準拠しない動きをする~~ベンダーはクソ~~のは基本的に良くない
---
## RFCで規定されているデータ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/feb30f1a-d65d-391a-ccd4-b8805f7bea2b.png)

https://www.rfc-editor.org/rfc/rfc793

---
## Q：この情報って実務で役に立つの？
A：知っているのと、知らないのではかなり差が出ます。例えばトラブルーシューティングなどが良い例です。

---
## Ping(ICMP)を用いた疎通確認
- Pingが通る：L3レベルまでの疎通はOK
    - もし疎通できない場合、L4以上に問題があり
    - サーバ側のデーモン/ミドルウェア等に問題がある
- Pingが通らない：L3以下のレベルの疎通がまずNG
    - 物理的に疎通が取れていない(ネットワークの寸断、機器の故障)
    - ネットワークの設定的に問題がある(L2/L3のネットワーク設定)

---
# まとめ
---
## ネットワークの基礎を説明
- WireSharkで確認できる通信データを調べると、ネットワークの基礎を学ぶことができる
- 通信データはTCP/IP階層モデルとして定義されているため、各層を理解すると通信データの内容がわかる
- これらの情報を知っていると、トラブルシューティングなどに役立てることができる