2009-11-06 2 views
0

Я работаю над встроенным стеком TCP/IP4 и HTTP/SNMP/SMTP. Это функционально работает, но я хочу, чтобы он работал быстрее в локальной сети. Из-за алгоритма Нагле и задержанного TCP-ACK, Приложение HTTP работает медленно даже в локальной сети.Частная сеть (как в IPv4) вопрос

Как можно видеть на http://en.wikipedia.org/wiki/IPv4#Private_networks, Существуют 3 разные частные сети с различными значениями битовых блоков.

Что я буду делать то, что:

  1. Я первым буду уверен, что я являюсь членом локальной сети, глядя на моем собственном IP
  2. Я буду смотреть на dst_ip и проверить, если он принадлежит к та же ЛС, что и у меня

Достаточно ли этого, чтобы доказать, что я и другая сторона принадлежат к одной локальной сети?

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

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

+0

Хотя ответы, которые предполагают измерение задержки, являются очень перспективными; для этой конкретной системы это невозможно (очень низкая встроенная система практически не работает). Спасибо за ваши ответы ... – Malkocoglu

ответ

2

Вам нужно проверить маску подсети, чтобы узнать, находится ли целевой IPv4-адрес в той же сети, что и вы. Только адреса с одним и тем же префиксом будут разделять одну и ту же сеть.

Например, если ваш IP-адрес 10.2.3.87, а ваша маска подсети равна/26, это означает, что адреса между 10.2.3.64 и 10.2.3.127 находятся в той же подсети, что и вы, поскольку все они будут использовать один и тот же префикс 10.2 .3.64. Маска подсети/26 - 255.255.255.192.

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

В двоичном:

10.2.3.87  00001010 00000010 00000011 01010111 
10.2.3.64  00001010 00000010 00000011 01000000 
255.255.255.192 11111111 11111111 11111111 11000000 

Как вы можете видеть, и маска имеет 26 бит (один/26) и, следовательно, два IP адрес один и тот же префикс, когда применяются маска подсети.

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

+0

Спасибо, используя subnet_mask выглядит лучше ... – Malkocoglu

0

Эти адреса используются во внутренних сетях (бизнеса и дома). они не могут использоваться в общедоступном Интернете.

Думаю, все будет хорошо.

+0

Фактически адреса RFC 1918 можно использовать в общедоступном Интернете и использовать в общедоступном Интернете. Разумеется, их не должно быть, но единственное, что не позволяет им использовать, - фильтры трафика в каждой сети, которая их использует. Похоже, что многие сети не фильтруют трафик и не проникают в Интернет. См. Этот URL-адрес для примера некоторых сетей, протекающих по этому так называемому марсианскому трафику: http://www.ris.ripe.net/historic-reports/martians/2009/01/20090101.html –

+0

@ Майкл Диллон: Это это первый раз, когда я слышу этот «Марсианский трафик». Я думаю, что это вызвано некачественными adsl-модемами. Никакой большой администратор сети не допустил бы такой ошибки, не так ли? – Malkocoglu

1

До тех пор, пока вы уверены, что никто не использует VPN-соединения, вы, вероятно, достаточно безопасны. Однако компьютер, подключенный через VPN-соединение, будет (по крайней мере, обычно) иметь локальный для вашей сети IP-адрес, даже если их соединение может иметь довольно (или даже чрезвычайно) высокую задержку.

+0

Спасибо за дополнительную информацию ... – Malkocoglu

1

Возможно, было более надежным обнаруживать соединения с низкой задержкой, а не «соединения LAN».

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

1

Вы, вероятно, лучше измеряете задержку, чем глядя на IP-адреса. Просто потому, что два IP-адреса не живут в одной подсети, НЕ означает, что они имеют высокую задержку между ними.

Просто потому, что два IP-адреса живут в одном и том же диапазоне IP-адресов, это не значит, что они имеют низкую задержку (рассмотрите два сегмента Ethernet, связанные мостом WAN по линии 64 кбит/с, возможно, маловероятны в этот день и в возрасте, но Я, безусловно, работал с сетями, где такие ссылки были обычными).

Однако проверка того, что два IP-адреса находятся в одной и той же подсети, безусловно, является хорошим приближением.