Dlaczego adresy IPv4 są 32-bitowe?

33

Wiele księżyców temu, kiedy był tylko wee bairn rozpoczynających karierę, miałem kwalifikacyjnej do roli dewelopera niskim poziomie. Po tym, jak właśnie dowiedziałem się, jak zaimplementowano CIDR, chciałem pochwalić się swoją wiedzą.

Niestety ta taktyka nie wyszła mi zbyt dobrze. Pamiętam, że pierwsze pytanie, które mi zadano, całkowicie mnie przeraziło (a potem potargałem, wszystko poszło w dół). Pytanie brzmiało:

Dlaczego adresy IPv4 są 32-bitowe?

I łatwo przyznać, że nie wiem, odpowiedź, ale ja nie wiem, że pierwotny projekt protokołu dzieli przestrzeń adresową pod numerem sieciowego 8-bitowy i 24-bitowy identyfikator hosta, więc starałem się zracjonalizować go na tej podstawie, że projektanci protokołów wyobrazić internetowy z kilku sieci (mimo wszystko, był pierwotnie przeznaczony do połączenia razem specyficzne kilka) z których każdy zawiera wiele hostów, a dla uproszczenia programowania, utrzymane wszystko wyrównane do granic bajtów.

Pamiętam, że ankieter był niezadowolony z mojej odpowiedzi i zasugerował mi, że prawdziwym powodem jest to, że z pewnością mieści się long intw C, więc upraszcza szczegóły implementacji. Będąc wtedy młody i zielony, zaakceptowałem to jako rozsądną odpowiedź i (przed dniem dzisiejszym) już o tym nie myślałem.

Z jakiegoś powodu ta rozmowa właśnie do mnie wróciła, a teraz, gdy się nad nią zastanawiam, nie wydaje się to całkowicie prawdopodobne:

  1. Zgodnie z pierwotnym schematem adresowania obejmującym pola sieci i hosta o stałej wielkości, mało prawdopodobne jest, aby deweloper chciał przypisać konkatenację dwóch pól do jednej zmiennej (nie mam dostępu do żadnych wczesnych implementacji IP, aby zweryfikować, co one faktycznie zrobił w praktyce); i

  2. W momencie, gdy zaczęły działać TCP / IP, C nie było ani standaryzowane, ani de facto „lingua franca” rozwoju oprogramowania niskiego poziomu, jakim stało się dzisiaj.

Czy sugestia ankietera była faktycznie uzasadniona? Jeśli nie, to jakie były prawdziwe powody, dla których projektanci protokołów wybrali adresowanie 32-bitowe?

Eggyal
źródło
3
Ten sam powód, dla którego 640 kB ought to be enough for anybody.nikt nie oczekiwał, że tostery i lodówki będą miały dostęp do Internetu.
1
@afwe: Hm. Pytanie nie brzmiało: dlaczego nie wybrali większej liczby na początek? alias dlaczego tylko 32-bitowe? (co jest tak naprawdę tym, że doskonałe adresy odpowiedzi \ @Jens), ale co takiego szczególnego było w 32-bitach (zamiast, powiedzmy, 16-bitowych, 24-bitowych lub 48-bitowych)?
eggyal
@Downvoter: Chcesz komentować?
eggyal

Odpowiedzi:

23

Oto link do Hangouta z Vintem Cerfem (kwiecień 2014), w którym wyjaśnia, jak myślał, że ten internet miał być tylko eksperymentem:

Ponieważ myśleliśmy o Internecie (myśląc dobrze, będzie to pewna dowolna liczba połączonych ze sobą sieci - nie wiemy, ile i nie wiemy, w jaki sposób będą one połączone), ale sieci na skalę krajową pomyślał „ no cóż, może będą dwa na kraj ” (ponieważ było drogie: w tym momencie wynaleziono Ethernet, ale nie rozprzestrzeniał się wszędzie, tak jak kilka lat później).

Potem powiedzieliśmy „ ile jest krajów? ” (Dwie sieci na kraj, ile sieci?) I nie mieliśmy Google zapytać, więc zgadliśmy, że 128, a to byłoby 2 razy 128 to 256 sieci (to 8 bitów), a następnie powiedzieliśmy „ ile komputerów będzie w każdej sieci? ” i powiedzieliśmy „ jak około 16 milionów? ” (to kolejne 24 bity), więc mieliśmy 32-bitowy adres, który pozwalał na 4,3 miliarda zakończeń - co ja myślałem, że w 1974/3 wystarczyło do eksperymentu!

Opublikowałem to już jako komentarz do odpowiedzi Jensa Link, ale czułem, że nieco bardziej się pojawi.

Daniel F.
źródło
Uważam, że bardziej niż „wynurza się trochę więcej”, to odpowiada na rzeczywiste pytanie bardziej bezpośrednio niż odpowiedź Jensa.
eggyal
34

Łatwa odpowiedź: ponieważ tak zdecydował Vint Cerf . Myślał, że projektuje protokół eksperymentalny i uznał 32-bitowe za wystarczające do tego celu; nie spodziewał się, że IPv4 będzie stosowany w systemach produkcyjnych, dlatego nie poświęcono więcej uwagi rozmiarowi przestrzeni adresowej.

Na konferencji Google IPv6 2008 poprowadził dyskusję panelową zatytułowaną Jak będzie wyglądał Internet IPv6? podczas którego opowiedział :

Decyzja o umieszczeniu 32-bitowej przestrzeni adresowej była wynikiem rocznej bitwy między grupą inżynierów, którzy nie mogli się zdecydować na długość 32, 128 lub zmienną. I po roku walki powiedziałem - jestem teraz w ARPA, prowadzę program, płacę za to i używam amerykańskich dolarów podatkowych - i chciałem trochę postępu, ponieważ nie wiedzieliśmy, czy to jest iść do pracy. Więc powiedziałem 32 bity, to wystarczy na eksperyment, to 4,3 miliarda zakończeń - nawet Departament Obrony nie potrzebuje 4,3 miliarda czegokolwiek i nie mógł sobie pozwolić na zakup 4,3 miliarda urządzeń brzegowych do przeprowadzenia testu. W tamtym czasie myślałem, że przeprowadzamy eksperyment, aby udowodnić technologię, i jeśli zadziałałoby, mielibyśmy okazję zrobić jej wersję produkcyjną. Cóż - [śmiech] - właśnie uciekł!

Transkrypcja : Peter E. Murray .

Jens Link
źródło
7
Ach, jakie głupie ze mnie! Brzytwa Ockhama znów uderza. Przynajmniej dałeś mi satysfakcję, wiedząc, że osoba przeprowadzająca wywiad była w błędzie.
eggyal
2
@ user5025: Tak, jest to możliwe (w ogólnym przypadku). Ale jeśli Vint twierdzi, że to były powody, dla których wybrał 32-bitowe IPv4, trudno argumentować, że miał też inne.
eggyal
5
@ user5025: Dobra, to słuszna uwaga. Rzeczywiście, wspomina, że ​​inżynierowie kłócą się o to, jaka powinna być długość, a niektórzy opowiadają się za wersją 32-bitową. Więc przypuszczam, że pytanie brzmi: jakie były ich motywacje do popierania wersji 32-bitowej (tj. Co sprawiło, że Vint ją zaakceptował)?
eggyal
2
@eggyal: Nie chodzi mi o to, że 32-bitowe liczby całkowite były „zdecydowanie” czynnikiem motywującym, ale raczej sugerowanie, że uważam za wysoce prawdopodobne, że wystarczająca liczba inżynierów sugerujących tę wielkość mogła uznać ten czynnik za nieobecny dowód wręcz przeciwnie, nie sądzę, że można by to wykluczyć jako czynnik przy ostatecznym wyborze.
supercat
2
@eggyal: Pytałeś, co mogło zmotywować inżynierów do wybrania 32 bitów. Miałem zamiar odpowiedzieć na to konkretne pytanie. Napisałem stos TCP / IP na „goły metal” i musiałem radzić sobie z adresami przy różnych okazjach, ale nigdy nie byłem zainteresowany analizowaniem ich - tylko w celu ustalenia, czy pasują do siebie [ten konkretny stos obsługiwał tylko połączenia przychodzące TCP / IP, więc musiał poradzić sobie z ARP, ale nie bramami].
supercat
0

Rozmiar słowa Piszą oprogramowanie, a nie projektują sprzęt komputerowy - choć jestem pewien, że mieli na myśli wydajność i przenośność. W tym czasie, 32 bit był wordThe longwordalbo intalbo longIntalbo cokolwiek. Zobacz Wybór rozmiaru słowa .

Napisali to oprogramowanie „w ciągu pierwszych dziesięcioleci architektury 32-bitowej (od 1960 do 1980)”. - Wikipedia

Ron Royston
źródło
3
O ile nie sugerujesz, że architekci TCP / IP mieli na myśli konkretną architekturę maszyny, nie jestem pewien, dokąd zmierzasz z tym argumentem ... czy masz jakieś dowody, że używali / projektowali dla 32- architektury bitów, a nawet to, czy rozmiar słowa był istotny dla długości, którą wybrali dla adresu sieciowego?
eggyal
@eggyal: Języki dla maszyn 8-bitowych i 16-bitowych często zawierały 32-bitową liczbę całkowitą typu danych, ale języki na maszynach 32-bitowych były znacznie rzadziej używane z wieloma słowami liczb całkowitych. Przynajmniej na poziomie kodu źródłowego praca z wartościami 32-bitowymi jest zasadniczo tak wygodna jak praca z wartościami 16-bitowymi i zdecydowanie wygodniejsza niż praca z większymi typami. Ponadto w przypadku urządzeń, które mają ograniczone potrzeby komunikacyjne, adresowanie 32-bitowe może być w porządku, jeśli komunikują się przez bardziej wyrafinowane bramy.
supercat