Ядро Linux: структура skbuff - информация о маршрутизации. - PullRequest
1 голос
/ 03 октября 2011

У меня есть сомнения, пожалуйста, уточните.Предположим, у меня есть система, подключенная, как показано ниже:

A -> B -> C -> D

Мне нужно отправить пакет из A в D, поэтому, когда пакет выходит изA, он должен обновить информацию о маршрутизации где-нибудь в пакете или в skbuff так, чтобы пакет правильно маршрутизировался через B, чтобы он достиг места назначения.

Pls, дайте мне знать, где он обновляется в пакете означаеткакой заголовок или какой параметр в skbuff ..

Заранее спасибо ..

Ответы [ 3 ]

1 голос
/ 03 октября 2011

По вашему мнению, вам нужен только целевой адрес D и первый шлюз (или маршрутизатор) B. Вы не вносите никаких изменений в пакет, это делается в маршрутизаторе (ах).C или любые другие маршрутизаторы на пути к D прозрачны для вас.

0 голосов
/ 04 октября 2011

Когда пакет отправляется от A к D в этой сети, A -> B -> C -> D, приложение на A имеет сокет к приложению на D. IP на A должен найти следующий переход через маршрутизация, которая была бы B в этом случае. Эта информация может также кэшироваться в сокет (как в некоторых версиях Linux, в поле socket-> sock-> dst_cache). IP-датаграмма всегда имеет IP-адрес назначения в качестве IP-адреса D. Таким образом, B перенаправляет его в C на основе таблицы маршрутизации и аналогично C в D.

Это отвечает на ваш вопрос?

0 голосов
/ 03 октября 2011

Обычно это происходит путем обновления MAC-адреса источника и назначения пакета. Это можно найти в заголовке Ethernet пакета (при условии, что он путешествует по сети Ethernet). При обычной маршрутизации UDP или TCP вы можете сделать это полностью в пространстве пользователя, изменив таблицы маршрутизации.

Реализуете ли вы собственный интернет-протокол? В противном случае маловероятно, что для этого подойдет пользовательский модуль / патч ядра.

...