Как отличить первый пакет fin соединения tcp от второго с помощью tcpdump? - PullRequest
3 голосов
/ 01 января 2012

Я занимаюсь разработкой http-сервера.А теперь я хочу сделать некоторую статистику, а точнее, я хочу знать, сколько из TCP-соединений закрыто клиентом и сколько из них закрыто моим сервером.

Я отключил функцию Keep-alive на моем http-сервере, поэтому обычно мой сервер отправляет первый пакет FIN, а клиент отправляет второй, что означает, что соединение с моим сервером обычно закрывается,Если они в обратном порядке, это указывает на ненормальное закрытие, которое меня волнует.

Вот вопрос: как я могу отличить первый пакет FIN от второго с помощью tcpdump?Так как они оба установлены в битах флага FIN и ACK.

Заранее спасибо и счастливого нового года!

1 Ответ

2 голосов
/ 01 января 2012

Я туннелирую соединение через ssh с моим веб-сервером, который прослушивает 5000 / tcp.Я запустил tcpdump сеанса, и даже если вы игнорируете временные метки, все еще ясно, кто отправил что-либо с номера порта источника TCP.

05:42:06.344592 IP localhost.5000 > localhost.37924: Flags [F.], seq 243, 
    ack 419, win 529, options [nop,nop,TS val 120830308 ecr 120830308], length 0
05:42:06.381872 IP localhost.37924 > localhost.5000: Flags [.], ack 244, 
    win 513, options [nop,nop,TS val 120830318 ecr 120830308], length 0
05:42:06.382504 IP localhost.37924 > localhost.5000: Flags [F.], seq 419, 
    ack 244, win 513, options [nop,nop,TS val 120830318 ecr 120830308], length 0
05:42:06.382535 IP localhost.5000 > localhost.37924: Flags [.], ack 420, 
    win 529, options [nop,nop,TS val 120830318 ecr 120830318], length 0

На 05:42:06.344592 мой веб-сервер ACK бытот клиента и установите флаг FIN.Я знаю, что это был веб-сервер, потому что исходный порт - 5000. В реальном мире это даже проще, ваш IP-адрес отправителя выдает его.

При 05:42:06.382504 клиент отправил ACK на серверFIN.Опять же, мы знаем, потому что исходный порт не 5000.

...