はじめに
Linux のルートテーブルは netstat -rn
や route -n
で確認できます。Destination、Gateway、Genmask あたりはよく見るのですが、それ以降の情報はあまり見る機会がありませんでした。気になったので調べてまとめてみました。
環境
$ cat /etc/*-release NAME="Amazon Linux" VERSION="2" ID="amzn" ID_LIKE="centos rhel fedora" VERSION_ID="2" PRETTY_NAME="Amazon Linux 2" ANSI_COLOR="0;33" CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2" HOME_URL="https://amazonlinux.com/" Amazon Linux release 2 (Karoo)
netstat
も route
も net-tools
に含まれ、バージョンは以下のとおりです。
$ netstat --version net-tools 2.10-alpha Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others +NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX AF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH HW: +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64
ルートテーブルの確認
netstat -r
コマンドでルートテーブルを確認できます。
$ netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 10.255.1.1 0.0.0.0 UG 0 0 0 eth0 10.255.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.169.254 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
route -n
コマンドでも似た内容が表示されます。
$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.255.1.1 0.0.0.0 UG 0 0 0 eth0 10.255.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.169.254 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
Destination(netstat/route)
宛先のIPアドレスが書かれています。
0.0.0.0 は特殊なアドレスで、デフォルトゲートウェイのアドレスを指します。
Gateway(netstat/route)
0.0.0.0 は特殊なアドレスで、デフォルトゲートウェイを指します。
Genmask(netstat/route)
サブネットマスクのことです。
Genmask の由来は "general" と "netmask" をあわせたものだと言われています。
💬:networking - Difference between "genmask" and "netmask"? - Server Fault
Flags(netstat/route)
- U:送信経路がリンクアップしていることを示しています。
- G:送信経路がゲートウェイ宛であることを示しています。
- H:宛先がネットワークではなく、完全指定のホストアドレス(/32)であることを示しています。
他にもフラグがあるようですが、このくらい知っておけば大丈夫だと思います。
💬:Understanding Routing Table - nixCraft
MSS(netstat)
Maximum Segment Size を表します。
"0" という値が何を意味するのかよく分からなかったので誰か知っていたら教えて下さい。
Window(netstat)
TCP window size を表します。
ここも "0" という値が何を意味するのかよく分からなかったので誰か知っていたら教えて下さい。
irtt(route)
Initial Round Trip Time を表します。
Initial RTT は TCP Three Way Handshake を見て決定される往復時間のことで、TCP window size の計算に使われるそうです。OS の TCP スタックで処理される Three Way Handshake を見ることで、アプリケーションの影響を受けない純粋な RTT を計測できるとされています。
Iface(netstat/route)
ルーティングインターフェースを表します。
Metric(route)
ネクストホップまでの距離 (通常はホップ数でカウント)を表します。最近のカーネルでは使われていません。
Ref(route)
ルートの参照数を表しますが、Linux カーネルでは使われないそうです。
Use(route)
ルートの検索回数を表します。
参考資料
📰:https://docs.oracle.com/cd/E19504-01/805-1756/troubleshoot6-19973/index.html
📰:networking - Difference between "genmask" and "netmask"? - Server Fault
📰:【 netstat 】 ネットワーク関連の統計情報を表示する | 日経クロステック(xTECH)
📰:Determining TCP Initial Round Trip Time | Packet-Foo | Network Packet Capture and Analysis
📰:Understanding Routing Table - nixCraft
以上