Почему IPv4-адреса 32-битные?

33

Много лун назад, когда я был просто крошечное дитя , начином своей карьеры, у меня был собеседование на роль разработчиков низкого уровня. Только что узнав, как внедряется CIDR, я стремился показать свои знания.

К сожалению, эта тактика не сработала для меня. Я вспоминаю, что был полностью обескуражен самым первым заданным вопросом (и затем взволнованным, все пошло под гору). Вопрос был:

Почему IPv4-адреса 32-битные?

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

Я вспоминаю, что интервьюер был недоволен моим ответом и предположил, что настоящая причина в том, что он гарантированно помещается long intв C, поэтому упрощает детали реализации. Будучи молодым и зеленым в то время, я принял это как разумный ответ и (до сегодняшнего дня) больше не думал об этом.

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

  1. При исходной схеме адресации, включающей в себя поля сети фиксированного размера и поля хоста, маловероятно, что разработчик хотел бы присвоить объединение двух полей одной переменной (у меня нет доступа к каким-либо ранним реализациям IP, чтобы проверить, что они на самом деле делал на практике); а также

  2. В то время, когда началась работа над TCP / IP, C не был ни стандартизирован, ни де-факто «языковым стандартом» разработки программного обеспечения низкого уровня, каким он стал сегодня.

Действительно ли предложение интервьюера было обосновано? Если нет, то были реальные причины , по которым разработчики протокола выбрали 32-битную адресацию?

eggyal
источник
3
По той же причине 640 kB ought to be enough for anybody.никто не ожидал, что у тостеров и холодильников будет доступ в Интернет.
1
@afwe: Хм. Вопрос не в том, почему они не выбрали для начала большее число? ака почему только 32-битные? (что на самом деле означает превосходный адрес ответа \ @Jens), но что еще было особенного в 32-битных (скажем, 16-битных, 24-битных или 48-битных)?
eggyal
@Downvoter: Хотите прокомментировать?
eggyal

Ответы:

23

Вот ссылка на видеовстречу с Винтом Серфом (апрель 2014 г.), где он объясняет, как он думал, что этот интернет должен был быть только экспериментом:

Когда мы думали об Интернете (думая хорошо, это будет произвольное количество сетей, которые все взаимосвязаны - мы не знаем, сколько и мы не знаем, как они будут подключены), но сети национального масштаба мы подумал: « Ну, может быть, их будет две на страну » (потому что это было дорого: в этот момент был изобретен Ethernet, но он не распространялся повсеместно, как это было несколько лет спустя).

Затем мы сказали « сколько стран существует? » (Две сети на страну, сколько сетей?), И у нас не было Google, чтобы спросить, поэтому мы предположили 128, и это будет 2 раза 128 - 256 сетей (это 8 битов), а затем мы сказали « сколько компьютеров будет в каждой сети? » и сказали « как насчет 16 миллионов? » (это еще 24 бита), поэтому у нас был 32-битный адрес, который позволял 4,3 миллиарда терминалов - что я думал, что в 1974/3 было достаточно, чтобы сделать эксперимент!

Я уже опубликовал это в качестве комментария к ответу Дженса Линка, но я почувствовал, что он немного всплыл.

Даниэль Ф
источник
Я думаю, что это больше, чем «немного больше поверхности», что отвечает на реальный вопрос более прямо, чем ответ Йенса.
eggyal
34

Простой ответ: потому что так решил Винт Серф . Он подумал, что разрабатывает экспериментальный протокол, и считает, что 32-разрядных данных более чем достаточно для этой цели; он не ожидал, что IPv4 будет использоваться в производственных системах, и поэтому больше не задумывался о размере адресного пространства.

На конференции Google IPv6 2008 он провел панельную дискуссию под названием « Как будет выглядеть Интернет IPv6? во время которого он рассказал :

Решение разместить 32-битное адресное пространство было результатом годовой битвы среди группы инженеров, которые не могли определиться с 32, 128 или переменной длиной. И после года борьбы я сказал - я сейчас в ARPA, я управляю программой, я плачу за эти вещи и использую американские налоговые доллары - и я хотел некоторого прогресса, потому что мы не знали, если это идти на работу. Поэтому я сказал, что 32 бита - это достаточно для эксперимента, это 4,3 млрд. Терминаций - даже министерству обороны не нужно 4,3 млрд. Чего-либо, и он не может позволить себе купить 4,3 млрд. Периферийных устройств для проведения теста. В то время я думал, что мы проводим эксперимент, чтобы доказать технологию, и что если она сработает, у нас будет возможность сделать ее производственную версию. Хорошо - [смех] - это просто сбежало!

Стенограмма от Питера Э. Мюррей .

Дженс Линк
источник
7
Ах, как глупо с моей стороны! Бритва Оккама снова наносит удар. По крайней мере, вы дали мне самодовольное удовлетворение, узнав, что интервьюер был неправ.
eggyal
2
@ user5025: Да, это возможно (в общем случае). Но если Винт говорит, что именно поэтому он выбрал 32-битную версию для IPv4, трудно утверждать, что у него были и другие.
eggyal
5
@ user5025: Хорошо, это справедливо. Действительно, он упоминает, что инженеры ссорились из-за того, какой должна быть длина, а некоторые выступали за 32-битную. Итак, я полагаю, что вопрос заключается в том, каковы были их мотивы для защиты 32-разрядных (то есть, что сделало его приемлемым для Винт)?
eggyal
2
@eggyal: Моя точка зрения заключается не в том, что 32-разрядные целые числа были «определенно» мотивирующим фактором, а скорее в том, чтобы предположить, что я считаю весьма вероятным, что достаточное количество инженеров, полагающих, что размер мог бы посчитать этот фактор отсутствующим свидетельством напротив, я не думаю, что это может быть исключено как фактор возможного выбора.
суперкат
2
@eggyal: Вы спросили, что могло побудить инженеров выбрать 32 бита. Я хотел ответить на этот конкретный вопрос. Я написал стек TCP / IP на «голом железе» и мне приходилось иметь дело с адресами в разных случаях, но я никогда не интересовался их разбором - только для определения их соответствия [этот конкретный стек обрабатывал только входящие соединения TCP / IP, так что пришлось иметь дело с ARP, а не со шлюзами].
суперкат
0

Размер слова Они писали программное обеспечение, а не проектировали компьютерное оборудование - хотя я уверен, что они имели в виду производительность и портативность. В то время 32 бит был word, longwordили, intили longIntили как угодно. См. Выбор размера слова .

Они написали это программное обеспечение «в течение первых десятилетий 32-битных архитектур (с 1960-х по 1980-е годы)». - Википедия

Рон Ройстон
источник
3
Если вы не предполагаете, что архитекторы TCP / IP имели в виду конкретную архитектуру машины, я не уверен, куда вы идете с этим аргументом ... есть ли у вас какие-либо доказательства того, что они использовали / проектировали для 32- битовые архитектуры или даже то, что размер слова соответствовал длине, выбранной для сетевого адреса?
eggyal
@eggyal: Языки для 8-битных и 16-битных машин часто включали 32-битный целочисленный тип данных, но для языков на 32-битных машинах было гораздо реже иметь многозначные целочисленные типы данных. По крайней мере, на уровне исходного кода работа с 32-битными значениями, по сути, так же удобна, как и работа с 16-битными значениями, и, безусловно, более удобна, чем работа с большими типами. Кроме того, для устройств, которые имеют ограниченные потребности в связи, 32-разрядная адресация могла бы быть вполне приемлемой, если бы они взаимодействовали через более сложные шлюзы.
суперкат