| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Сравнение IPv4 и IPv6.
Ip - основной протокол сетевого уровня, который используется на данный
момент в Internet. Его разработка началась так же давно, как и сама
Internet. Над ним работало множество ученых, соответственно многие
проблемы, присущие другим сетевым протоколам в нем отсутствуют. Но вначале
Internet использовали только ученые и военные, а теперь он пришел в каждый
дом. В 1990 году стало понятно, что используемый протокол ipv4 не готов к
такому росту своей популярности. Адреса расходуются с огромной скоростью,
что уже через к 1996 году не было бы ни одного свободного. Вскоре был
найден выход - CIDR и NAT, с помощью которого необязательно было
перерасходывать адреса подсетей. Но с другой стороны большую проблему
представляла плохая "гибкость" IP: достаточно сложно было вставить новую
опцию в заголовок, не придумывая еще одного "верхнего" уровня. Для этого
бы потребовалось изменить весь протокол. В связи с этим были выдвинуты
основные требования к новой версии:
- Поддержка миллиардов хостов, даже если адреса будут расходоваться неразумно.
- Уменьшение таблиц маршрутизации.
- Упрощение протокола, для ускорения работы маршрутизаторов.
- Высокая безопасность (аутентификация и конфиденциальность).
- Большее внимание к типу сервиса.
- Упрощение многоадресной маршрутизации.
- Возможность изменить положение хоста без необходимости менять адрес.
- Легкое добавление новых возможностей.
- Возможность существования старого и нового протокола одновременно.
В 1993 году был выбран протокол Диринга и Френсиса, как наиболее подходящий
из остальных претендентов. В дальнейшем он был назван Ipv6. Внедрение этого
протокола еще до сих пор не завершено (и некоторые считают что не завершится
никогда), как и его разработка. Здесь вам предлагается оценить основные
различия между четвертой и шестой версий этого протокола.
Заголовок.
К заголовку подошли с новой концепцией. Если в четвертой редакции
практически все возможности были отражены в заголовке, то в шестой
версии в этом заголовке лежат только самые основные детали. Остальное
(включая фрагментацию и ip опции) воплощено в виде нижележащих заголовков,
на которые указывает поле "следующий заголовок" в пакете. Размер основного
заголовка стал фиксированным.
Заголовок ipv4:
0 4 8 16 19 24 31
+-----+-----+----------+-----+-----+-----+ --+
| ver |hlen | TOS | Полная длина | |
+-----+-----+----------+-----+-----------+ |
| Идентификатор |Флаги|Ук. Фрагм. | |
+-----+-----+----------+-----+-----------+ |
|Время жизни| Протокол |Контрольная сумма| | 20 байт
+-----+-----+----------+-----------------+ +--------
| Ip-адрес отправителя | |
+----------------------------------------+ |
| Ip-адрес получателя | |
+-------------------------+--------------+ --+
| Ip-опции(если есть) | Заполнитель |
+-------------------------+--------------+
| Данные |
+----------------------------------------+
Заголовок ipv6:
0 4 8 12 16 19 24 31
+-----+-----+-----+-----+-----+-----+-----+ --+
| ver |Приор| Метка потока. | |
+-----+-----+-----------+-----------+-----+ |
| Размер поля данных |Сл. Загол. |Hops | |
+-----+-----+-----------+-----------+-----+ |
| | |
+ Адрес отправителя. + | 40 байт
| | |--------
+-----------------------------------------+ |
| | |
+ Адрес получателя. + |
| | |
+-----------------------------------------+ --+
Адресация.
Разрядность адреса - одна из основных причин, по которым появился ipv6. И здесь
произошли очень заметные изменения. В-первых адрес из 32 битного, стал 128
битным. Это самое заметное изменение. Но дальше, больше. Если в старой
редакции протокола адреса были с тремя уровнями иерархии (адрес сети,
адрес подсети, адрес хоста), то здесь уровней иерархии может быть сколько
угодно, это сильно поможет сократить таблицы маршрутизации. В новом протоколе
отсутствует понятие хоста, вместо него введено понятие интерфейса. Хотя это
понятие было и раньше, но ipv4 адресовал хост, а не интерфейс этого хоста.
Теперь все наоборот. К тому же существует три основных новых типов адресов.
- Unicast:
Идентификатор одиночного интерфейса. Пакет, посланный по уникастному
адресу, доставляется интерфейсу, указанному в адресе.
-
Anycast:
Идентификатор набора интерфейсов (принадлежащих разным узлам). Пакет,
посланный по эникастному адресу, доставляется одному из интерфейсов,
указанному в адресе (ближайший, в соответствии с мерой, определенной
протоколом маршрутизации).
- Multicast:
Идентификатор набора интерфейсов (обычно принадлежащих разным узлам).
Пакет, посланный по мультикастинг-адресу, доставляется всем
интерфейсам, заданным этим адресом.
Отсутствуют широковещательные адреса, вместо них испольуются multicast
адреса.
TTL - hops.
В старом протоколе опция ttl могла определяться по разному - либо как
число секунд, либо как число маршрутизаторов, через которые мог пройти
пакет. Во всяком случае, когда оно становилось нулем пакет удалялся. В
ipv6 поле hops идентифицируется однозначно - максимальное число
маршрутизаторов, через которые может пройти датаграмма.
Дополнительные заголовки.
Как было сказано выше, весь потенциал нового протокола реализуется с
помощью дополнительных заголовков. Вот пример двух из них:
Фрагментация. Теперь датаграмма никогда не будет фрагментироваться на маршрутизаторе.
Это всегда будет делать хост, который выслал датаграмму. Возможно это
сделано, чтобы разгрузить маршрутизаторы. Каждый фрагментируемый пакет
уникально помечается в поле идентификация. Это поле одинаково у всех
фрагментов исходной датаграммы. К тому же имеется только 60 секунд на
сборку пакета. Т.е. все фрагменты должны придти за это время.
+----------------+--------+---------------------+--------+---+
|След. заголовок | Резерв | Указатель фрагмента | Резерв | М |
+----------------+--------+---------------------+--------+---+
| Идентификация. |
+------------------------------------------------------------+
Опции. Имеют тоже назначение, что и в ipv4. Но теперь обзавелись своим
заголовком. Пока определены два типа опций Pad1 - заполнителя не
требуется, опции hop-by-hop - набор, который просматривается каждым
маршрутизатором на пути датаграммы.
Метки потоков.
24-битовое поле метки потока в заголовке IPv6 может использоваться
отправителем для выделения пакетов, для которых требуется специальная
обработка в маршрутизаторе, такая например, как нестандартная QoS или
"real-time " сервис, также возможно будет некоторая поддержка
ориентированных на соединение сервисов (имеется в виду соединение на
уровне ip, а не tcp), которые имеют свои преимущества (маршрутизация
выполняется только один раз, нагрузка на сеть заранее планируется),
и недостатки (при выходе из строя одного маршрутизатора, все
соединения проходящие через него разрываются) но их обсуждение выходит за
рамки статьи. К тому же этот аспект IPv6 является пока
экспериментальным и может быть изменен позднее. Для ЭВМ или
маршрутизаторов, которые не поддерживают функцию пометки потоков,
это поле должно быть обнулено при формировании пакета, сохраняться без
изменения при переадресации и игнорироваться при получении.
Возможно существование нескольких потоков между отправителем и получателем.
Практическое значение меток еще не до конца определено, и
исследования в этой области еще продолжаются.
Приоретет (TOS).
Это поле аналогично флагу Tos в Ipv4. Но теперь определяется 7 видов
трафика, вместо 3 в старой версии.
Код приоритета. |
Назначение |
0 |
Нехарактеризованный трафик. |
1 |
Заполняющий трафик (например, сетевые новости) |
2 |
Несущественный информационный трафик (например, электронная почта) | |
3 |
Резерв |
4 |
Существенный трафик (напр. FTP, HTTP, NFS) |
5 |
Резерв |
6 |
Интерактивный трафик (напр. telnet, x) |
7 |
Управляющий трафик Интернет (напр., маршрутные протоколы, snmp) | |
Как вы могли заметить, с увеличением номера растет приоретет.
Защита данных.
Это очень существенная часть Ipv6 протокола. Теперь виртуальные частные
сети и аутентификация поддерживаются на уровне сетевого протокола,
что должно увеличить безопасность и надежность его работы. Но эта тема
слишком обьемна для статьи, поэтому за более подробной информацией
обращайтесь к RFC, или к книгам Шнайера.
Программирование.
Практически никаких отличий в написании программ не предвидится.
Одно из немногих - константа AF_INET6, вместо константы AF_INET. Далее
все по старому. Существенные отличие понесла многоадресная передача, так
как в новом протоколе все происходит по другому. Также с помощью SOCK_RAW вы
не сможете сформировать полностью заголовок ipv6, но практически все поля
заголовка доступны через интерфейс setsockopt(). Возможно наиболее сложно
будет писать программы, работающие независимо от протокола, но здесь нет
никаких особых трудностей и если хост поддерживает оба стека, ядро ОС во
многих случаях само заботиться о проблемах. Поэтому если захотите
соединиться с хостом, который поддерживает только 4 версию протокола,
проблем не возникнет. Уже стандартизованы несколько функций преобразования
адресов не зависящих от протокола, это ф-ции getaddrinfo() и getnameinfo().
Вот мое небольшое IMHO, а заодно и резюме:
Ipv6 является более совершенным во всех отношениях, по сравнению со своим
прешественником, он вполне решает все поставленные перед ним задачи
(см. начало статьи). Он полностью соовместим с другими протоколами, такими
как TCP, UDP, ICMP, IGMP, OSPF, DNS, BGP и другими, возможно иногда
потребуется минимальное изменение кода.
Главная проблема внедрения нового протокола, именно в том, что он новый,
пока проблема с адресами не стоит столь остро, и его внедрение может
продолжаться бесконечно долго, поскольку многие боятся что-то менять,
кому-то это просто пока не нужно. Одна из проблем состоит в
том, что для перевода сети на новый сетевой протокол потребуется не только
настройка ОС, а возможно покупка нового оборудования. Например многие
"интеллектуальные" мосты когда хотят узнать куда отправлять пакет,
заглядывают в поле данных кадра, нарушая всю модель OSI. Благодаря этой
особенности они могут работать только с Ipv4. Естественно это все не такие
большие проблемы. К тому же в ipv6 прекрасная реализация VPN (виртуальных
частных сетей). Теперь шифрование трафика абсолютно прозрачно для
транспортного (атаки типа tcp hijacking уходят в прошлое, но атаку "человек
посередине" все еще можно провести) и прикладного уровня (хотя надо заметить
что некоторая поддержка всего этого есть и в 4 версии). Да, очень удобно,
что существует совместимость этих двух протоколов (одно из требований к
нему, обьявленных еще до начала разработки) его совместимость с 4 версией.
Если ядро ОС поддерживает два стека, оно передаст данные программе работающей
с ipv6, которые были получены как из кадров ipv4, так и из кадров ipv6,
поскольку адреса 4 версии можно отобразить в адреса 6 версии.
Библиография.
У.Р. Стивенс. UNIX: разработка сетевых приложений. Спб., ПИТЕР, 2003
Э. Таненбаум. Компьютерные сети. 4-е издание, Спб., ПИТЕР, 2003
Архив сайта www.citforum.ru
RFC 2460 - 2466 (ipv6)
//oxid(Птн Фев 20 09:55:35 MSK 2004)
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |