Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Где присутствует параметр Gateway? [D5, Win2k]


Yaro ©   (2003-12-20 12:35:00) 

Предположим, что с моей машины (у которой есть статический АйПи и указанный шлюз) отправляется TCP/IP пакет. Известно, что в IP пакете присутствуют адреса отправителя и получателя, а в TCP-пакете присутствуют порты для отправителя и связующий у получателя. Причем пакет точно доходит до шлюза (вернее он его хватает) и ретранслирует, дальше - все пучком. Внимание, вопрос: Шлюз от фонаря пакеты хватает и ретранслирует или как? Если от фонаря, тогда почему, если отключить шлюз в настройках сети, то он их не хватает. Люди, подскажите откуда шлюз знает что этот пакет ему надо ретранслировать??? Хоть убей не врублюсь, хотя вру, думаю где-то это пишется, но не знаю где :)


Verg   (2003-12-23 11:41:00) [1]

И еще. Читай про модель OSI.


Verg   (2003-12-23 11:12:00) [2]


> Yaro © (23.12.03 02:20) [10]
> panov ->
> Другими словами, можно смело на сервере ловить все пакеты,
> которые предназначемы всем адресам кроме (192.168.x.x и
> тому подобных), корректировать и передавать их по и-нетовскому
> соединению? и наоборот... короче свитчи сами разберутся
> куда пакет шуровать, я правильно понял?


Ты вообще представляешь как происходит передача датаграм в сети, допустим, ethernet?

Про передачу пакетов TCP/IP по ethernet"у рассказывается в RFC894

Ethernet"овское железо обеспечивает сырую передачу пакетов.
Контроллер сам считает и проверяет контрольную сумму, умеет из
приходящего потока отсеивать только пакеты, предназначенные ему или
broadcast"ы, борется с коллизиями на сети. Прежде, чем отдать
пакет контроллеру, следует заполнить поля в заголовке. При приеме
контроллер сам анализирует поле адреса получателя и отбрасывает
пакеты, не имеющие к нам отношения. Обработка контрольной суммы
и коллизий пользователю не видна.

Пакет состоит из ethernet-овского заголовков, прямо за которым следуют
данные. Формат заголовка следующий:

typedef struct
{
uchar dest[6];
uchar source[6];
ushort type;
}
eth_header;

dest и source - адреса отправителя и получателя пакета, соответственно.
type - тип пакета. Нас интересует только два типа:

#define ETHER_TYPE_IP 0x800 // Пакеты IP
#define ETHER_TYPE_ARP 0x806 // Пакеты ARP

type передается, естественно, в сетевом порядке байт.

Сразу за заголовком идет блок данных - IP или ARP пакет.

Ethernet-адреса (MAC - адреса) - это некоторые 6-байтовые числа, от которых требуется уникальность. Уникальность обеспечивается производителями контроллеров.
Адрес, состоящий из одний единиц (ff:ff:ff:ff:ff:ff) - это бродкаст.
Бывают еще мультикасты, пакеты, предназначенные группе машин на сети. Для этого конктроллеру можно скормить сполдюжины адресов, на которые он будет откликаться дополнительно к его собственному адресу и бродкасту.


Yaro   (2003-12-23 02:20:00) [3]

panov ->
Другими словами, можно смело на сервере ловить все пакеты, которые предназначемы всем адресам кроме (192.168.x.x и тому подобных), корректировать и передавать их по и-нетовскому соединению? и наоборот... короче свитчи сами разберутся куда пакет шуровать, я правильно понял?
Multiplayer ->
Я не против, даже за, только где статейка-то?


Multiplayer   (2003-12-22 18:59:00) [4]

Yaro, я тебе щас скину на мыло статейку, OK?


panov   (2003-12-22 12:01:00) [5]

И вообще понятие Gateway(маршрутизатор) присутствует в списках маршрутизации хоста, но никак не в пакетах.


panov   (2003-12-22 12:00:00) [6]

Какой, блин, еще системы? Здесь есть только кабель, хабы и пакеты? Или это на уровне МАС организовывается, если так, то объясните каким образом...

А пакет-то где изначально формируется?
Ведь не на хабе и ни сам по себе появляется.

Вот на том хосте, где он формируется, и существует таблица маршрутизации.
Операционная система определяет по сформированному адресу получателя, куда ей отправлять этот пакет - либо определенному хосту в локальную сеть, либо одному из маршрутизаторов, адреса которых известны и определены.


Yaro   (2003-12-22 00:48:00) [7]

panov:
Какой, блин, еще системы? Здесь есть только кабель, хабы и пакеты? Или это на уровне МАС организовывается, если так, то объясните каким образом...


panov   (2003-12-21 14:13:00) [8]

Причем здесь пакет?

Тебе же ясно написали, что этим занимается ядро системы.


Yaro   (2003-12-21 04:00:00) [9]

Verg, подожди, что-то я не догнал... вот структура IP-пакета:
4 бита: версия протокола IP
4 бита: количество ДВордов в заголовке IP-пакета (Size of header).
8 бит: Type of Service - назначение сего мне не совсем понятно.
16 бит: общая длинна пакета (насколько я знаю - в байтах).
16 бит: идентификация, пакеты, которые являются частью одного ПАКЕТА имеют одинаковый идентификатор (есть некоторые вопросы).
3 бита: флаги фрагментации (только два - один для обозначения фрагментированного пакета, другой - для обозначения последнего пакета, третий зарезервирован).
13 бит: смещение фрагмента (есть вопросы).
8 бит: TTL, вроде все понятно, но есть вопросы.
8 бит: Протокол верхнего уровня.
16 бит: Контрольная сумма (сумма чего? едениц в заголовке пакета или как? Если так, то входит ли сюда значения самого этого поля?).
32 бита: Ип отправителя.
32 бита: Ип получателя (конечного).
(n mod 32)=0: Опции и заполнение (вот, это-то меня и интересует больше всего!).
TotalLen-4*HeadLen: Data (правильно?)
-----
И где тут указание шлюза? Может это указано в поле Опции? или как? Если можешь - разъясни некоторые моменты по IP-пакету: моменты связаны с фрагментацией. Насколько я понял - данные могут быть раздроблены на пакеты равной длинны (кроме последнего или нет?) и параметр смещение фрагмента определяет какой кусок надо ложить первым (0), какой вторым (1), а какой третим (1). Тоесть пакеты могут передаваться через разные маршруты одному пункту назначения, тем самым обеспечивая "больше скорость", и пакеты могут приходить не только последовательно, но и вразнобой, так или нет?

И еще, функция recv возвращает колическтов принятых байт, причем один прием - один IP-пакет (фрагмент еще не готового БОЛЬШОГО пакета или он сначала компонуется полностью, а потом передается в recv?), я прав?

Да и еще, если я на сервере буду задерживать принимаемые пакеты, и тем самым добьюсь ограничения по скорости, нужно ли мне изменять поле TTL на н-секунд, а если я не буду задерживать, то мне изменять поле TTL на одну секунду в меньшую сторону или нет?

Пожалуйста, просвятите неграмоного, буду очень благодарен.
Заранее спасибо!


Verg   (2003-12-20 12:52:00) [10]

Т.е. Шлюз не "хватает" пакеты. Ip датаграммы передаются ему целенаправленоканальным уровнем.


Verg   (2003-12-20 12:47:00) [11]

Когда нужно отправить IP пакет (а TCP пакет на данном этапе - это просто поле данных IP пакета), ядро по адресу назначения (ip_dst) получает по локальной таблице маршрутизации подходящий маршрут, т.е. интерфейс (if) через который надо отправить этот пакет и IP адрес nexthop-а (gateway). Если этот gateway == if_address (т.нз. Directly Connected Route), то пакет передается канальным уровнем этого интерфейса прямо адресату . В противном случае, пакет передается канальным уровнем этого интерфейса gateway-ю.


Yaro   (2003-12-20 12:44:00) [12]

Да, и еще вот что... мне это не ради интереса, а правдо, знать надо где это пишется... и если у кого-нить есть путевая ссылка на описание структуры TCP/IP-пакетов, киньте мне, а то запарился... всю ночь сниффер писал. А вообще я NAT с ограничением по скорости писать собрался.


Наверх

Титульная страница Поиск, карта сайта Написать письмо