Повторная передача TCP другой полезной нагрузки

#tcp

Вопрос:

Я столкнулся со странной проблемой. Когда происходит повторная передача tcp, она должна отправлять ту же полезную нагрузку с пропущенным пакетом. Но я видел, как повторная передача отправляла другую полезную нагрузку в системе Windows. Это нормально ? и любой RFC объясняет это?

пример 1:

  1. tcp.seq:605921 tcp.len:546 этот пропущен
  2. tcp.seq:605921 tcp.len:1188
  3. tcp.ack:607109

Пример 2:

  1. tcp.seq:4529820 tcp.len:419 этот пропущен
  2. tcp.seq:4530239 tcp.len:1460
  3. tcp.ack:4529820
  4. tcp.seq:4531699 tcp.len:92
  5. tcp.seq:4529820 tcp.len:1460
  6. tcp.ack:4531791

Ответ №1:

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

Комментарии:

1. @eeie9999: TCP-это протокол потока байтов, а не протокол сообщений. Упаковка производится только во время транспортировки. Если ваше приложение не может работать с различными видами упаковки (например, ожидать, что один recv файл будет точно соответствовать одному send ), то ваше приложение не работает. К сожалению, такие неправильные представления вместе с неверными ожиданиями и, как следствие, неработающими приложениями не являются редкостью.

2. спасибо, нашел тот же вопрос и ответ, osqa-ask.wireshark.org/questions/30019/…