ネットワーク障害の際に最初にやる事(tracertとnetstat)

# end-to-end
エンドトゥーエンドとはシステムやプロセスが始まりから終わりまで全体を通して一貫に実行されること

> 何か問題が起きた時ネットワークの通信経路に問題があるのではないかと疑われることが多い

# tracert（トレサート）
障害発生時にPowerShellでこのコマンドを最初に打って調べる。これは「ネットワークの通信経路」を調べるコマンド。特定のサーバーやホストにアクセスする際、パケットが通過する中継ルーターを一覧表示し、その段階で遅延やエラーが発生しているのかを特定するのに役に立つ

## 用途
- 通信経路の確認
クライアントからサーバーまでの経路を詳細に追跡する
- ネットワーク障害の特定
どの地点で通信が失敗しているのかを特定できる
- 遅延の場所を特定
どの中継地点（ルーターやホスト）で遅延が発生しているのかを把握する

## 使い方
コマンドプロンプトまたはPowerShell

## 出力結果の読み方
> 1列目

通過した経路の順番（ホップ数）

> 2〜4列目

各経路での応答時間（ミリ秒単位）

> 右端

通路地点のIPアドレスまたはホスト

:::note warn
- ***：応答が返ってこない場合、ファイアウォールやルーターの設定でICMPパケットがブロックされている可能性がある
- 応答時間が大幅に増加している場所があれば、そこが遅延の原因となっている可能性がある
:::
＊**ICMPプロトコル**＊
ネットワークにおける通信の診断エラー報告のために使用されるプロトコル。主にネットワーク層（L3）で動作しデータ通信の状況を確認するために重要な役割を果たす。
攻撃者がICMPを利用してネットワークスキャンやDDoS攻撃を仕掛ける可能性があるため一部ネットワークではICMPパケット（pingなど）がブロックされている、なので正常に動作しないことがある

pingなどでネットワーク内稼働中ホストを特定、ICMPトラフィックをフィルタリングしているかどうかを確認（ネットワークスキャン）その後、pingなどを用いて送信元を偽造し大量に送るなどし負荷を起こさせる（DDoS攻撃）
ICMPはネットワーク診断のために設計されているが
「軽量であり送信が容易」
「一部のネットワークではICMPトラフィックを制限していない」
「通信状態の確認のため常に有効になっていることが多い」
といった特徴からよく使われる

## 対処法
> ①通信が途絶している場合

応答が途中で止まる（***）場合、特定のルーターやホストで問題が発生している可能性がある。そのIPアドレスやホストを確認し担当者へ連絡する

> ②遅延が発生している場合

高い応答時間（ms）が継続している経路があれば該当のネットワークやホストが混雑している可能性がある

> ③ファイアウォールの影響

ファイアウォールによるICMPパケットのブロックで結果が返らない場合もある。この場合は他の方法（ping、mtr）で追加調査を行う

## 注意点
- tracertはデフォルトでICMPプロトコルを使用する。一部のネットワークやサーバーはICMPをブロックしているため結果が正確に出ないことがある
- 長い通信経路や高負荷のネットワークでは全てのルーターから正確な応答が得られるわけではない


# netstat（ネットスタット）
ネットワークの状態や統計情報を表示するためのコマンドラインツール。主にコンピューター上で動作しているネットワーク接続や通信状態、ポートの使用状況などを確認するために使用される。ネットワークトラブルの調査やセキュリティ対策に役に立つ。

## 用途
- アクティブなネットワーク接続の確認
現在のTCP/IPやUDPの通信状況を表示する
- 開いているポートの確認
サーバーやアプリケーションが使用しているポートを調査する
- 接続元/接続先の情報を確認
外部IPやリモートホストとの通信状態を確認できる
- 通信状態のトラブルシューティング
接続が確立されてない、あるいは不要な接続がある場合の調査に役に立つ

## 主な機能・表示することができる情報
- アクティブなネットワーク接続（TCP/UDP）
- リスニング状態のポート（開いているポート）
- 接続元と接続先のIPアドレス
- プロトコル（TCP/UDP）
- パケット送受信の統計情報

## 使い方
> ①基本コマンド

netstat：現在のネットワーク接続を表示

> ②よく使うオプション

netstat -a：全ての接続とリスニングポートを表示
netstat -n：アドレスをホスト名ではなくIPアドレスで表示
netstat -o：各接続に関連付けられたプロセスID（PID）を表示
netstat -b：接続を使用しているプログラムを表示（管理者権限必須）
※プロセスID：システム上の各プロセスを識別するための番号。つまりパソコンやサーバーで動いているプログラム（プロセス）を区別するために割り当てられる番号。この番号を使えば、どのプログラムが何をしているのか特定することができる。タスクマネージャからも調べれる。IDは動的に割り当て再利用されるため固定ではない。（Chromeブラウザ：PID1234、メールソフト：PID5678など）

## 出力結果の読み方
> Proto

使用しているプロトコル（TCPまたはUDP）
TCP→接続指向の通信プロトコル（例：HTTP、HTTPS、FTPなど）
UDP→接続を確立せずにデータを送信するプロトコル（例：DNS、VoIPなど）

>Local Address

ローカルアドレス、自分のコンピュータのIPアドレスとポート番号を示す。
・形式：＜IPアドレス＞:＜ポート番号＞
・例：192.168.1.10:49215
『自分のデバイス（192.168.1.10）のポート49215を使用』

> Foreign Address

外部アドレス。接続先のデバイスのIPアドレスとポート番号を示す。
・形式：＜IPアドレス＞:＜ポート番号＞
・例：93.184.216.34:443
『接続先のデバイス（93.184.216.34:443）のポート443（HTTPS）』

[その他]
**proxy-sv:8086**
proxy-sv：プロキシサーバーのホスト名、またはドメイン名。内部ネットワーク（LAN）で利用されるホスト名である可能性が高い。実際のIPアドレスに名前解決される場合もある。
8086：サーバーがリッスン（待機）しているポート番号。ポート番号8086は一般的にカスタム用途で設定されることが多い。特定のプロトコルやアプリケーションで使用されるポートの可能性もある。
つまり**クライアント（ユーザー）がプロキシサーバー（proxy-sv）に接続し通信をポート8086経由で行う設定**
※プロキシサーバー：クライアントとインターネット（または他のネットワーク）との間に位置し通信を中断・管理するサーバー

**ホスト名:epmap**
epmap：エンドポイントマッパーはDCE/RPCを利用するアプリケーションが通信を開始する際にサービスの具体的なポート番号を問い合わせるためのサービス。ポートは135。
主にWindows環境でActiveDirectoryやRPCサービスが動作する際に使用される（ファイル共有（SMB）やリモート管理ツールなど）

>State

接続の現在の状態を示す。
| 状態          | 説明                                                                 |
|---------------|----------------------------------------------------------------------|
| **ESTABLISHED** | 接続が確立され、データの送受信が可能な状態。                           |
| **LISTENING**   | サーバーがポートを開き、接続を待機している状態（受信専用）。            |
| **SYN_SENT**    | 接続要求（SYNパケット）を送信し、応答を待っている状態。                |
| **SYN_RECEIVED**| 接続要求を受信し、確認応答を送信している状態。                        |
| **CLOSE_WAIT**  | 接続相手が切断要求を送信し、自分が切断待ちの状態。                     |
| **TIME_WAIT**   | 接続が切断され、一定時間接続を保持している状態（再送パケット対策）。    |
| **CLOSED**      | 接続が完全に切断された状態。                                         |

## 注意点
- 管理者権限が必要な場合がある
一部のみ管理者権限が必要
- セキュリティリスク
公開されたポートを適切に管理しないと不正アクセスのリスクがある

# tracertとnetstartの違い・使い分け
## 概要と違い
| **項目**              | **tracert**                                           | **netstat**                                   |
|-----------------------|------------------------------------------------------|----------------------------------------------|
| **目的**              | 通信経路を確認する                                    | ネットワーク接続やポートの状態を確認          |
| **役割**              | パケットがどのルーターを通過して目的地に到達するかを追跡 | 現在の通信状況や開いているポートを確認        |
| **対象**              | リモートホスト（外部サーバーなど）                     | ローカルマシン（自分のPC）のネットワーク情報  |
| **主な使用プロトコル** | ICMP（またはUDP/TCP）                                 | TCP、UDP、ICMP など                           |
| **結果**              | 通信経路に含まれるルーターやホストのリストを表示       | 接続の詳細（プロトコル、アドレス、ポートなど）を表示 |
| **使用例**            | 通信が途中で遅延・失敗している箇所を特定する            | 開いているポート、不審な通信を確認する         |

## 使い分け
| **シチュエーション**                            | **使うべきコマンド** | **理由**                                                                 |
|-------------------------------------------------|----------------------|--------------------------------------------------------------------------|
| リモートサーバーにアクセスできない原因を調べたい  | `tracert`            | 通信経路を調べ、どのポイントで問題が発生しているか確認できる。               |
| 自分のPCのネットワーク接続状況を確認したい        | `netstat`            | 開いているポートや通信相手のIPを確認できる。                                |
| 遅延やパケットロスが発生している箇所を特定したい   | `tracert`            | 各ルーターごとの応答時間を確認できる。                                      |
| 不審な通信や不要なポートを調べたい                | `netstat`            | アクティブな通信を確認し、不審な接続先やプロセスを特定できる。                |
| 特定のアプリケーションがどのポートを使っているか知りたい | `netstat -ano`       | プロセスID（PID）を表示して、アプリケーションとの関連を確認できる。            |

## まとめ
> tracert

- **ネットワークのトラブルシューティング**
通信が途切れるポイントを特定（例：ファイアウォールやルーターの障害）
遅延が発生している箇所を確認
- **通信経路の確認**
通信がどのルートを通って目的地に到達しているかを確認

**リモートホストまでの通信経路を調べたいときに使う。通信がどこで詰まっているか、遅延しているかを特定できる**

> netstat

- **通信の監視**
ローカルPCで開いているポートを確認（不審なポートや通信がないかチェック）
現在進行中の通信を監視
- **トラブルシューティング**
アプリケーションやプロセスが使用しているネットワークポートを特定
不要な通信やセキュリティリスクの確認

**ローカルマシンのネットワーク接続を監視したい時に使う。不審な接続や開いているポートを確認できる**