Я стикаюся з проблемою, що деякі пакети, відправлені в Інтернет з мережі, відсутні. Шаблон, який ми використовуємо, такий:
Client A ←→ Switch A ← Router A:NAT ← .. Network ..
→ Router B:NAT → Switch B ←→ Server B
Щоб відстежити проблему, потрібно зробити два кроки нижче:
- Захоплення пакетів, які є з клієнта A на маршрутизаторі B.
- Перевірте таблицю перекладу маршрутизатора B.
Чи можливі обидві дії?
Більше інформації:
- Клієнт A працює на Windows XP
- Сервер B працює на Linux (саме Fedora).
- Маршрутизатор B використовує статичний порт і таблицю перекладу адреси, що означає вхідні пакети
до конкретного порту буде переслано на сервер B. - І Routera, і Routerb є продуктами TP Link WR340 +.
- Як маршрутизатор A, так і маршрутизатор B мають повноконусний NAT.
- Перемикач A - це DLink DES-1024R, а комутатор B - DLink DES-1016D.
Причина, чому я хочу виконати дві дії, полягає в тому, що знайдені пакети були відправлені з мережевого інтерфейсу ClientA, але через невідому причину ядро TCP клієнтської машини ніколи не отримує будь-який пакет ACK з іншої кінцевої точки, таким чином він вводить дані передачі до тайм-ауту. І з боку сервера, також використовуючи інструмент WireShark, ми виявили, що мережевий інтерфейс машини B сервера ніколи не отримує пакет, надісланий від клієнта A. Я думаю, що пакети були відкинуті маршрутизатором B, так що мені цікаво, чи можна захопити пакети на маршрутизаторі. B.
Насправді проблема виникає тільки тоді, коли у нас є два клієнти, кажучи, що це клієнт A і клієнт C. Клієнт A і клієнт C не спілкуються безпосередньо один з одним, а спілкуються з сервером B замість нього.
Проблема виникла, коли ми відключили мережний кабель від апарата Client A і на іншому комп'ютері, увійшовши в Client A приблизно за 30 секунд, клієнт A на новій машині почне TCP зв'язок з сервером B, перші багато команд - OK, але після більше не може отримувати жодних команд від клієнта.