最近ネットワーク系コマンドと仲良くなろうと必死なtomita@atuwebです。
TCP/IPについては浅い知識しかなく、接続障害の調査が難航中。

tcpdumpについて調べたことをまとめます。

ちなみにタイトルの簡単なは「簡単に使えます」ではなく「簡単にしか説明できません」ってことですw

コマンドとオプション

クライアントから持サービスのサーバへ出ていくパケットを眺める

# tcpdump dst host XXX.XXX.XXX.XXX

dstは送信先を絞り込むオプションです。

Macでtcpdmp

  • インターフェースを調べる
ifconfig
  • インターフェース指定でtcpdumpを実行する
sudo tcpdump -i en1

サーバ上で自分の送ったパケットを眺める

# tcpdump src host  XXX.XXX.XXX.XXX

srcは送信先を絞り込むオプションです。

インターフェースやポートを絞り込む場合はこんな感じで複数条件を指定します

# tcpdump -i eth0 port 8080 and src host XXX.XXX.XXX.XXX -vvv

結果の見方

通信時間      送信元IP              > 送信先IP                  フラグ     シーケンス番号  ウィンドウサイズ
16:58:46.899176 IP XXX.XXX.XXX.XXX.61372 > XXX.XXX.XXX.XXX.http-alt: Flags [S], seq 2816271339, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 33609312 ecr 0,sackOK,eol], length 0

1リクエストを追っていくと、しっかり以下の流れになっていることが分かります。

  • Sでコネクションを確立し
  • リクエストの終わりでP
  • そのまましばらくするとFが流れて接続を閉じている

フラグ

記号 状態 意味
S SYN コネクション確立要求
P PUSH バッファリングせず、即時にデータを送る要求
F FIN コネクション開放要求
R RST コネクション強制切断要求

オプション

記号 意味
mss Max-segment-size 最大セグメント長
wscale ウィンドウ・スケール
sackOK Selective ACKnowledgmenが有効かどうか
TS val ecr タイムスタンプとecho reply
nop パッディング
eol 終端記号

Selective ACKnowledgmentは略してSACKと表記されます。
これは「受信パケットに1つでも抜けがあった場合、すべてのパケット再送すると効率的ではないため、抜けているパケットだけの再送を許可する」ものです。

おわりに

オプションの意味が分からず時間がかかりましたので、まとめてみました。

私たちは当たり前のようにHTTPを使っていますが、TCP/IPをバリバリ理解しているかと問われると「ちょっとそれは、、、」という状態でしたので良いきっかけになりました。
勉強すればTCP/IPの奥深さに気づきます。

少しずつ知識を増やしていくと、きっと次につながりますよ!

参考

超絶初心者むけtcpdumpの使い方
http://qiita.com/tossh/items/4cd33693965ef231bd2a

tcpdump コマンドの使いかたをまとめてみた – sonots:blog – livedoor Blog
http://blog.livedoor.jp/sonots/archives/18239717.html

酔いどれコード – sackOK?
http://d.hatena.ne.jp/yamamucho/20090603/1244023885

ネットワーク入門サイト – TCP通信の流れ
http://beginners-network.com/tcp_tuusin.html


スポンサーリンク
ad_336
ad_336
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存