Что может заставить TCP/IP отбрасывать пакеты, не отбрасывая соединение?

Если предположить, что у вас есть только 7 столбцов после first_log, то это будет суммировать общее количество входов в систему за промежуток времени, который у вас есть между столбцами. В приведенном ниже примере показано только общее время, в течение которого пользователь входил в систему в течение 2 дней.

library(tidyverse)


tibble(id=c(1:4), 
       first_log = c("18-12-01", 
                     "18-12-02", 
                     "18-12-02",
                     "18-12-05"), 
       X18_12_01 = c(NA,1,1,2), 
       X18_12_02 = c(5,2,1,1)) %>% 
  gather(key = "days", value = "times_visted", 3:length(.)) %>% 
  group_by(id) %>% 
  summarise(total_visits = sum(times_visted, na.rm = T))
#> # A tibble: 4 x 2
#>      id total_visits
#>           
#> 1     1            5
#> 2     2            3
#> 3     3            2
#> 4     4            3

Создано в 2019-03-04 при помощи пакета представитель (v0.2.1) sup>

9
задан Eddie 24 April 2009 в 20:16
поделиться

6 ответов

Вы абсолютно уверены, что сервер успешно отправил ответ клиентам, которые, по-видимому, перестали работать? Под этим я подразумеваю, что сервер отправил ответ, а клиент получил ответ обратно на сервер. Вы должны увидеть это с помощью wireshark на стороне сервера. Если вы уверены, что это произошло на стороне сервера, а клиент по-прежнему ничего не видит, вам нужно посмотреть дальше по цепочке с сервера. Существуют ли прокси / обратные прокси-серверы или NAT?

Транспорт TCP считается надежным протоколом, но он не гарантирует доставку. Стек TCP / IP вашей ОС будет очень стараться доставлять пакеты на другой конец с помощью повторных передач TCP. Вы должны увидеть это в wireshark на стороне сервера, если это происходит. Если вы видите чрезмерные повторные передачи TCP, обычно это проблема сетевой инфраструктуры - то есть плохое или неправильно настроенное оборудование / интерфейсы. Повторные передачи TCP отлично подходят для коротких прерываний сети, но плохо работают в сети с более длительным прерыванием. Это связано с тем, что стек TCP / IP будет отправлять повторные передачи только после истечения таймера. Этот таймер обычно удваивается после каждой неудачной повторной передачи. Это сделано для того, чтобы избежать переполнения и без того проблемной сети повторными передачами. Как вы можете себе представить, это обычно вызывает у приложений всевозможные проблемы с тайм-аутом.

В зависимости от топологии сети, вам также может понадобиться разместить зонды / wireshark / tcpdump в других промежуточных местах в сети. Это, вероятно, займет некоторое время, чтобы выяснить, куда ушли пакеты.

Если бы я был тобой, я бы продолжал отслеживать с помощью wireshark со всех концов, пока проблема не возникнет снова. Это, скорее всего, будет. Но, похоже, что вы в конечном итоге найдете то, что вы уже упомянули - ненадежное оборудование. Если об исправлении нестабильного оборудования не может быть и речи, вам может потребоваться просто встроить дополнительные тайм-ауты на уровне приложения и повторить попытку, чтобы попытаться решить проблему в программном обеспечении. Похоже, вы начали идти по этому пути.

8
ответ дан 4 December 2019 в 15:26
поделиться

Если забыть промыть или закрыть сокет на стороне хоста, это может периодически вызывать этот эффект для коротких ответов в зависимости от времени, которое может зависеть от наличия какого-либо механизма мониторинга.

Если забыть закрыть, то сокет будет зависать до тех пор, пока GC не найдет его и не вызовет finalize ().

2
ответ дан 4 December 2019 в 15:26
поделиться

Может ли на этих компьютерах установлен вирус / вредоносное ПО? При использовании wireshark устанавливается winpcap ( http://www.winpcap.org/ ), который может отменять изменения, внесенные вредоносной программой (или вредоносная программа может просто обнаруживать, что она отслеживается, а не предпринимать какие-либо подозрительные действия).

0
ответ дан 4 December 2019 в 15:26
поделиться

Я не видел этого как такового, но я видел подобные проблемы с большими дейтаграммами UDP, вызывающими фрагментацию IP, которая приводит к перегрузке и, в конечном итоге, к потере кадров Ethernet. Так как это TCP / IP, я не ожидал, что фрагментация IP будет большой проблемой, поскольку это потоковый протокол.

Одна вещь, которую я хочу отметить, заключается в том, что TCP не гарантирует доставку! Не может Это гарантирует то, что если вы отправите байт A , за которым следует байт B , то вы никогда не получите байт B до того, как получите байт A .

С учетом сказанного я бы подключил клиентский компьютер и компьютер мониторинга к концентратору. Запустите Wireshark на машине мониторинга, и вы сможете увидеть, что происходит. Я столкнулся с проблемами, связанными как с обработкой пробелов между HTTP-запросами, так и с неправильными размерами чанков HTTP. Обе проблемы были связаны с написанным от руки стеком HTTP, так что это проблема, только если вы используете нестабильный стек.

1
ответ дан 4 December 2019 в 15:26
поделиться

Если вы теряете данные, это, скорее всего, связано с программной ошибкой в ​​библиотеке чтения или записи.

0
ответ дан 4 December 2019 в 15:26
поделиться

Если вы используете долго выполняющиеся GET, вы должны тайм-аут на стороне клиента в два раза превышающий тайм-аут сервера, как вы обнаружили.

В TCP, где клиент отправляет сообщение и ожидает ответа, если сервер был для сбоя и перезапуска (скажем, для примера), тогда клиент все равно будет ждать сокета, чтобы получить ответ от сервера, но сервер больше не прослушивает этот сокет.

Клиент обнаружит, что сокет закрыт на стороне сервера, только когда он отправит больше данных на этот сокет, и сервер отклонит эти новые данные и закроет сокет.

Вот почему у вас должно быть время на стороне клиента. -ауты по запросам.

Но поскольку ваш сервер не дает сбоев, если сервер был многопоточным, и сокет потока для этого клиента закрыт, но в это время (продолжительность в минутах) у клиента отключено соединение, тогда конечный сокет, дрожащий рукой, я потеряю, и, поскольку вы не отправляете больше данных на сервер от клиента, ваш клиент снова остается зависшим. Это будет связано с вашим наблюдением за нестабильной связью.

2
ответ дан 4 December 2019 в 15:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: