Jetsonでdockerizationしてネットワーク接続を試していた時、"address already in use"と言われてしまった。
どのプログラムがそのport を使っているのかなー、と知りたくなりました。
調べることができたので、メモしておきます。
方法:netstat -anp
それだけです。以下メモ。
準備
netstat は net-tools のインストールで入った。
$ sudo apt install net-tools
探してみる
とりあえずnetstat -anp
でみる。ポート番号を指定したければ、pipe でつないで grep するのが楽。
$ netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:2101 0.0.0.0:* LISTEN 6/./bin/ntripcaster
tcp 0 0 0.0.0.0:59999 0.0.0.0:* LISTEN 7/str2str
tcp 0 0 127.0.0.1:48232 127.0.0.1:2101 CLOSE_WAIT 11/str2str
tcp 0 0 127.0.0.1:51384 127.0.0.1:59999 ESTABLISHED 11/str2str
tcp 0 0 127.0.0.1:2101 127.0.0.1:48232 FIN_WAIT2 -
tcp 0 0 127.0.0.1:2101 127.0.0.1:48228 TIME_WAIT -
tcp 0 0 127.0.0.1:2101 127.0.0.1:48224 TIME_WAIT -
tcp 0 0 127.0.0.1:59999 127.0.0.1:51384 ESTABLISHED 7/str2str
tcp 0 0 127.0.0.1:2101 127.0.0.1:48226 TIME_WAIT -
$ netstat -anp | grep :2101
tcp 0 0 0.0.0.0:2101 0.0.0.0:* LISTEN 6/./bin/ntripcaster
tcp 0 0 127.0.0.1:2101 127.0.0.1:48250 TIME_WAIT -
tcp 0 0 127.0.0.1:2101 127.0.0.1:48248 TIME_WAIT -
tcp 0 0 127.0.0.1:2101 127.0.0.1:48246 TIME_WAIT -
なお、netstat のオプションの意味は(--helpで簡単にわかるが)、
- -n, --numeric don't resolve names
- -p, --programs display PID/Program name for sockets
- -a, --all display all sockets (default: connected)
とのこと。
ほかの方法
- 他に
lsof
を使う方法もネットであったが、良く分からなかった。
基礎知識
そもそも TIME_WAITとかよく分からない。(泣)
いくつかメモをここに:
まとめ
とりあえず"address already in use"のプログラムを見つけて止めることはできた。しかし、どのような状態なのか、netstat の結果の読み方が分からない。
今後の課題として
- TCPの状態遷移の理解する
- 実際にその遷移や状態をプログラムがどのように実現しているか説明できるようになる
があります。ふー。
(2020/10/26)