Mengapa semua nol di bagian host dari alamat IP tidak dapat digunakan untuk host?


21

Saya tahu bahwa jika saya memiliki jaringan 83.23.159.0/24maka saya memiliki 254 alamat IP host yang dapat digunakan karena:

83.23.159.0      (in binary: host portion all zeros) is the subnet address
83.23.159.1-254  are host addresses
83.23.159.255    (in binary: host portion all ones) is the broadcast address

Saya mengerti penggunaan untuk alamat broadcast, tapi saya tidak mengerti untuk apa alamat subnet itu digunakan. Saya tidak dapat melihat alasan bahwa alamat tujuan paket IP akan ditetapkan ke alamat subnet, jadi mengapa subnet itu sendiri memerlukan alamat jika tidak akan pernah menjadi titik akhir untuk aliran IP AN? Bagi saya sepertinya sia-sia untuk tidak membiarkan alamat ini digunakan sebagai alamat host.

Untuk meringkas, pertanyaan saya adalah:

  1. Apakah tujuan paket IP pernah ditetapkan ke alamat IP subnet?
  2. Jika ya, dalam kasus apa dan mengapa?
  3. Jika tidak, mengapa tidak membebaskan alamat itu untuk digunakan oleh host?

2
ifconfigtidak mengeluh ketika Anda menetapkan alamat host 24-net ke 0 atau 255. Coba saja gunakan.
ott--

2
Aku melakukannya. Tampaknya berfungsi untuk 0,0. Tetapi mungkin merusak perangkat lunak yang lebih lama. .255 juga akan berfungsi jika Anda tidak menggunakan protokol apa pun yang memerlukan siaran. Saya kira Anda dapat mengaturnya jika Anda secara manual mengkonfigurasi tabel ARP dengan alamat permanen di semua komputer, tetapi yuk!
Hennes


1
Saya tidak setuju dengan John itu. Saya memeriksanya kembali dan tidak menjawab pertanyaan spesifik yang diajukan. Yang merupakan kasus tepi.
Hennes

1
Pertanyaan ini sekarang juga ditanyakan pada situs rekayasa jaringan baru. Jawaban-jawaban itu (di http://networkengineering.stackexchange.com/questions/11200/what-is-the-purpose-of-network-address-aka-subnet-address ) memiliki informasi yang belum ada di pos Server Fault . .
Hennes

Jawaban:


12

Apakah tujuan paket IP pernah ditetapkan ke alamat IP subnet?

Iya nih. Ini adalah IP yang valid sehingga dapat digunakan.

Jika ya, dalam kasus apa dan mengapa?

Ini hanyalah salah satu dari 255 IP yang dapat digunakan dalam / 24

Jika tidak, mengapa tidak membebaskan alamat itu untuk digunakan oleh host?

Jika Anda memiliki perangkat keras kuno maka Anda perlu memeriksa apakah ia menggunakan alamat pertama atau terakhir sebagai alamat jaringan. (.0 atau .255 untuk jaringan dengan mask FF.FF.FF.00)

Ini membuatnya menjadi kebiasaan yang baik untuk melewati IP itu. Dan kebiasaan yang dipelajari sejak lama sulit untuk diabaikan.

Dan orang-orang yang tidak tahu latar belakang tidak menggunakannya 'karena orang lain tidak menggunakannya juga, jadi pasti salah menggunakannya' atau karena mereka tidak menyadari bahwa '0' dapat menjadi angka pertama .

[Sunting] Grezzo hanya mengujinya pada Windows XP di mana jaringan windows GUI 'membantu' mencegah pengaturan ini. Windows 7 memiliki perilaku yang sama. Saya kemudian mencobanya pada host non-windows di mana ia bekerja. Jika Anda menggunakan windows maka Anda mungkin harus mengkonfigurasi jaringan Anda secara manual melalui IPconfig untuk mengaturnya ke semua nol.

192.168.1.0_on_win7 192.168.1.0_on_FreeBSD

[Sunting 2]

Semakin lama saya bekerja dengan ini semakin saya bingung.

Rfc4632 - Routing Antar-domain Tanpa Kelas sepertinya tidak melarangnya, tetapi keduanya tidak mengizinkannya secara eksplisit.

Posting ServerFault ini menyebutkan: "Karena alasan historis banyak OS memperlakukan alamat pertama sebagai siaran. Misalnya, melakukan ping xxx0 dari OS X, Linux, dan Solaris di jaringan lokal saya (/ 24) mendapat tanggapan. Windows tidak membiarkan Anda melakukan ping alamat pertama secara default, tetapi Anda mungkin dapat mengaktifkannya menggunakan metode SetIPUseZeroBroadcast WMI. Saya ingin tahu apakah Anda bisa lolos menggunakan .0 sebagai alamat host pada jaringan semua-Windows. " .

Itu adalah pertanyaan yang sama, tetapi bukan jawaban.

Alamat jaringan juga digunakan dalam tabel routing. Tapi saya gagal melihat mengapa itu tidak berhasil karena itu. Notasi yang sama dalam tabel routing akan merutekan ke jaringan yang tepat. Begitu berada di jaringan yang benar, ia akan tiba di PC dengan IP 0.

(Semua ini untuk 192.168.1 / 24.
Jika Anda menggunakan 192.168.0 / 23 maka 192.168.1.0 akan menjadi nilai yang valid dan aman di tengah kisaran)

[Edit 3]

Satu link lebih ke pertanyaan yang sama. Tampaknya agak populer di bursa stack:

/superuser/379451/why-can-a-network-address-not-be-a-valid-host-address

Dan satu berpikir:

Destination_IP mungkin DAN ed dengan tiang jaringan (operasi cepat dalam perangkat keras) sebelum dibandingkan dengan entri dalam tabel routing. Tapi:

(IP semi-acak) 192.168.0.42 DAN 255.255.255.0 akan menghasilkan 192.168.0.0
Tapi 192.168.0.0 DAN 255.255.255.0 juga akan menghasilkan 192.168.0.0


[Sunting 4 - Lama setelah jawaban ini ditulis - Saya mungkin perlu menulis ulang seluruh posting karena informasi baru ini ]

RFC923 menyatakan pada halaman 3 bahwa:

  In certain contexts, it is useful to have fixed addresses with
  functional significance rather than as identifiers of specific
  hosts.  When such usage is called for, the address zero is to be
  interpreted as meaning "this", as in "this network".  The address
  of all ones are to be interpreted as meaning "all", as in "all
  hosts".  For example, the address 128.9.255.255 could be
  interpreted as meaning all hosts on the network 128.9.  Or, the
  address 0.0.0.37 could be interpreted as meaning host 37 on this
  network.

Mengutip @ylearn di situs networkengineering kami

Saya percaya dokumentasi pertama yang berasal dari RFC950 yang merujuk RFC943 (yang usang RFC923 di atas tetapi menggunakan bahasa yang sama untuk alamat khusus):

     It is useful to preserve and extend the interpretation of these
     special addresses in subnetted networks.  This means the values
     of all zeros and all ones in the subnet field should not be
     assigned to actual (physical) subnets.

Jadi untuk memperjelas, apakah Anda mengatakan bahwa xxx0 / 24 adalah alamat IP yang valid untuk sebuah host? Jika demikian, lalu mengapa (ketika saya mencoba mengatur alamat IP saya ke 192.168.1.0 dengan netmask 255.255.255.0) apakah windows XP mengatakan " Kombinasi alamat IP dan subnet mask tidak valid. Semua bit dalam bagian alamat host dari alamat IP diatur ke 0. Silakan masukkan kombinasi yang valid dari alamat IP dan subnet mask. "
Grezzo

3
Windows salah. (Atau dikatakan dengan kekuatan yang kurang: windows terlalu berhati-hati untuk bekerja dengan kombinasi sistem apa pun). Saya baru saja mencoba ini pada sistem windows 7 saya dan saya mendapat kesalahan yang sama seperti yang Anda lakukan. Saya menginstal sistem FreeBSD yang bersih dan mengujinya di mana ia berfungsi. (Saya akan menambahkannya ke posting)
Hennes

Terima kasih, Anda sangat membantu. Hanya ingin menambahkan bahwa GUI di OS X tidak akan membiarkan Anda melakukannya juga, tapi saya yakin ifconfig akan melakukannya. Saya tidak mengerti mengapa jawaban m0ntassar mendapat lebih banyak suara - bahkan tidak mencoba menjawab pertanyaan saya. Satu hal lagi; ketika Anda mengatakan " Jika Anda memiliki perangkat keras kuno maka Anda perlu memeriksa apakah itu menggunakan alamat pertama atau terakhir sebagai alamat jaringan. " Maksud Anda alamat siaran .
Grezzo

Ya, saya maksudkan alamat siaran. Sial, di mana tombol "edit komentar lebih dari 5 menit".
Hennes

Manis, saya baru saja mencoba melakukan ping .0 dan .255, kedua kali PS3 saya menjawab (yang lainnya nirkabel jadi saya kira itu sebabnya masuk terlebih dahulu) dari .65 sehingga menegaskan bahwa di jaringan saya keduanya digunakan untuk siaran yang mengapa (biasanya) kita tidak boleh menggunakan salah satu untuk alamat host nyata.
Grezzo

15

Alamat dengan bagian host semua nol mengacu pada jaringan itu sendiri, bukan ke host tertentu.

Secara historis, alamat host nol ini telah berfungsi sebagai alamat broadcast alternatif, dan perangkat masih merespons seperti itu.

Jadi, saya harus tidak setuju dengan beberapa jawaban lain: tidak, nol bukanlah alamat host yang dapat digunakan dengan sempurna. Jika Anda membutuhkan lebih dari 254 alamat, Anda harus membuat subnet yang lebih besar.

Lihat, router Linksys saya, yang alamatnya .1menanggapi ping .0. (Netmasknya adalah 255.255.255.0, jadi oktet terakhir sesuai dengan nomor host.)

webserver:~# ping  192.168.1.0
Do you want to ping broadcast? Then -b
webserver:~# ping -b 192.168.1.0
WARNING: pinging broadcast address
PING 192.168.1.0 (192.168.1.0) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.46 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.812 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.819 ms

Jika saya menetapkan .0alamat tersebut ke beberapa host, saya tidak akan bisa melakukan ping tanpa router membunyikan responsnya juga. Dan seperti yang Anda lihat, beberapa alat seperti itu pingmemperlakukan versi router 0sebagai siaran.

Anda dapat membengkokkan aturan, jika Anda bersedia untuk menambal semua tumpukan protokol dan perangkat lunak lain yang dipengaruhi oleh pembengkokan tersebut. Jika tidak, patuhi aturan.

Inti masalah.

Saya bekerja di sebuah perusahaan yang mendesain simpul jaringan yang dibangun pada sasis 14 slot, menjalankan banyak gambar OS independen pada beberapa jenis kartu, semuanya berkomunikasi melalui backplane. Ada pengaturan jaringan di atas backplane dengan konvensi yang 127.X.0.Ymerupakan alamat IP internal node Y di slot X, semua bernomor dari 1.

Kami pada dasarnya melakukan subnett ke alamat loopback untuk tujuan kami sendiri. Untuk membuatnya bekerja, kami harus menambal kernel Linux di sana-sini, dan IIRC, sedikit ruang pengguna.

Karena jaringan itu hanya digunakan di dalam kotak, dan sebagian besar program yang membutuhkan loopback menggunakan 127.0.*jaringan (dan bahkan alamat spesifik 127.0.0.1) yang terus bekerja secara normal, semuanya keren.


7

sebenarnya itu tergantung pada netmask, misalnya, untuk jaringan 83.23.159.0/23, 83.23.159.0 adalah alamat ip yang dapat digunakan dengan sempurna


3
+1 - 83.23.158.255 juga akan menjadi alamat host yang valid. Orang-orang terpaku pada aturan no 0 dan no 255 tanpa mempertimbangkan subnet mask.
joeqwerty

1
Saya menyadari bahwa alamat xxx0 valid dengan netmask kurang dari / 24, tetapi perhatikan bahwa dalam pertanyaan saya saya tentukan netmask / 24, jadi Anda belum menjawab pertanyaan saya. Saya tidak berbicara tentang semua 0s atau 255s di kuartet / byte terakhir, saya katakan semua 0s atau 255s di dalam "bagian host" dari alamat IP. Ini memperhitungkan netmask.
Grezzo

2
@Grezzo jawaban singkat: non-CIDR dan peninggalan hal-hal lama dengan .0, MS hanya menolaknya sepenuhnya. Tapi IPv6 sudah dekat jadi mengapa repot-repot khawatir? ;)
Sammitch

2
Ini bukan jawaban karena pertanyaannya bukan tentang notasi titik notasi tetapi tentang status / arti dari alamat 0 host di setiap subnet lebar.
Kaz

2
Saya tidak mengerti mengapa jawaban ini memiliki begitu banyak suara. 83.23.159.0/23 bukan "secara teknis" jaringan yang valid. 83.23.159.0 dengan 23 mask sebenarnya adalah sebuah ip tepat di tengah-tengah jaringan 83.23.158.0/23. Pertanyaannya bukan "mengapa saya tidak bisa memiliki 0,0 di akhir ip", itu "mengapa saya tidak bisa menggunakan alamat dengan host part all zero". Dalam contoh Anda, alamat "semua host nol" akan menjadi 83.23.158.0. Seperti disebutkan dalam jawaban lain, ini secara historis merupakan alamat yang tidak dapat digunakan ("alamat jaringan") dan walaupun dapat bekerja pada beberapa OS, tidak disarankan untuk mencoba dan menggunakannya.
USD Matt

3

Kedengarannya ada sedikit kebingungan di sini dengan jaringan dasar.

'Perangkat keras kuno' yang dimaksud dalam salah satu respons tidak akan menggunakan IP Subnet Zero - menggunakan alamat ip xxx0 dengan jaringan yang diatur untuk / 24 CIDR atau 255.255.255.0 subnet mask adalah masalah yang sama sekali berbeda.

IP Subnet Zero

  • Perangkat keras yang lebih lama tidak akan menggunakan IP Subnet Zero - artinya mereka tidak akan menggunakan subnet pertama pada sistem jaringan multi-subnet. Jadi pada jaringan / 23 atau 255.255.254.0 subnet XXX0 dan semua alamatnya tidak akan digunakan. Router modern tidak memiliki batasan ini tetapi dapat dikonfigurasi untuk menggunakan model lama ini yaitu IE tidak menggunakan subnet nol, jika diinginkan.

Alamat IP host yang dapat digunakan pada subnet

  • Jaringan dasar:
    • Dengan / 24 yaitu subnet mask dari 255.255.255.0
    • xxx0 dicadangkan sebagai alamat jaringan. Router dan protokol perutean (EIGRP, RIP2, dll.) Menggunakan alamat jaringan untuk menentukan segmen jaringan untuk memindahkan paket di dalam dan melintasi batas-batas jaringan jaringan.
    • xxx255 dicadangkan untuk alamat siaran
    • Ini adalah praktik umum untuk menggunakan alamat .1 atau .254 pada router sehingga menyisakan 253 nomor IP yang dapat digunakan.

Baik alamat jaringan dan alamat siaran dicadangkan dan tidak dapat (berdasarkan standar jaringan saat ini dan sebelumnya) ditetapkan ke perangkat. Menggunakan xxx0 untuk alamat host pada sistem / 24 salah. Bahkan jika Linux memungkinkan Anda menggunakannya bukan berarti itu benar, itu hanya berarti bahwa Linux berpikir bahwa Anda tahu apa yang Anda lakukan.

Jika sistem Anda membiarkan Anda menetapkan xxx0 sebagai alamat IP4 ke host dan tampaknya berfungsi - kemungkinan host tersebut menerima SEMUA lalu lintas yang ditargetkan ke perangkat APAPUN di jaringan itu sehingga jaringannya mungkin tidak berfungsi secara optimal.


1
Anda mengatakan " xxx0 dicadangkan sebagai alamat jaringan (anggap saja sebagai alamat global atau penunjuk ke seluruh subnet) " tetapi tidak dijelaskan untuk apa sebenarnya itu digunakan, dan karena itu tidak dijelaskan mengapa itu tidak dapat digunakan untuk sebuah host
Grezzo

2
Memperbarui pos saya. Intinya adalah bahwa menetapkan alamat jaringan ke perangkat bertentangan dengan spesifikasi dan saat Anda mungkin menggunakannya dengan jaringan rintisan kecil Anda masih menghadapi risiko bahwa jika router Anda mendapatkan pembaruan perangkat lunak (atau jika Anda mengganti router) ) bahwa perangkat atau seluruh jaringan Anda dapat berhenti berfungsi dengan benar.
TheSteven

3

RFC 1122 ("Persyaratan untuk Host Internet - Lapisan Komunikasi") melarangnya:

Alamat IP tidak diizinkan memiliki nilai 0 atau -1 untuk bidang <Host-number>, <Network-number>, atau <Subnet- number> apa pun


1
Benar sejauh ini. Tetapi jika Anda benar-benar pergi ke bagian 3.3.6 seperti yang disarankan, Anda akan mendapatkan penjelasan lengkap.
Michael Hampton

@MichaelHampton Karena BSD 4.2 menggunakan 0 sebagai siaran?
Grezzo

3
@Grezzo Cukup banyak. Anda terjebak dengan ini karena 80-an tidak akan mati.
Michael Hampton

0

Sebenarnya jawabannya adalah dasar dari subnetting. IP "semua nol" dari subnet Anda dikombinasikan dengan id jaringan digunakan untuk menghitung ke mana paket harus dikirim.

Dalam contoh Anda, Anda memiliki subnet 255.255.255.0. Perangkat apa pun yang mengetahui protokol TCP / IP akan menggunakan netmask yang dikombinasikan dengan alamat IP untuk menghitung apakah paket tersebut ditujukan untuk jaringan lokal (dengan melakukan operasi DAN logis) atau harus dikirim melalui gateway / router.

Jadi saya kira alasan bahwa IP tidak dapat digunakan adalah karena sudah digunakan untuk "mendefinisikan" batas-batas jaringan bersama dengan netmask oleh desain.


Anda mengatakan bahwa " Perangkat apa pun yang mengetahui protokol TCP / IP akan menggunakan netmask yang dikombinasikan dengan alamat IP untuk menghitung jika paket tersebut ditujukan untuk jaringan lokal (dengan melakukan operasi DAN logis) ", tetapi ANDing 83.23.159.0 dengan 255.255 .255.0 dan ANDing 83.23.159.1 dengan 255.255.255.0 menghasilkan hasil yang sama (83.23.159.0) sehingga menggunakan perhitungan ini untuk mencari tahu apakah itu ditakdirkan untuk jaringan atau router masih berfungsi bahkan ketika sebuah host memiliki alamat .0
Grezzo

0

Diminta agar saya mengirim ulang jawaban saya dari NetworkEngineering , jadi saya akan melakukannya dengan beberapa modifikasi untuk situs ini.

Dalam RFC919 , itu membuat referensi penerimaan umum alamat jaringan:

However, as a notational convention, we refer to
networks (as opposed to hosts) by using addresses with zero fields.
For example, 36.0.0.0 means "network number 36"

Ini menyediakan konvensi yang harus menjelaskan pemahaman kita jika seseorang menyebut "10.1.2.0" sebagai jaringan dan bukan host di jaringan.

Dari sana, penggunaan "0" di alamat IP didefinisikan dalam RFC923 dan terbawa dalam RFC berturut-turut:

Special Addresses:

  In certain contexts, it is useful to have fixed addresses with
  functional significance rather than as identifiers of specific
  hosts.  When such usage is called for, the address zero is to be
  interpreted as meaning "this", as in "this network".  The address
  of all ones are to be interpreted as meaning "all", as in "all
  hosts".  For example, the address 128.9.255.255 could be
  interpreted as meaning all hosts on the network 128.9.  Or, the
  address 0.0.0.37 could be interpreted as meaning host 37 on this
  network.

Contoh ini menyediakan host tertentu di jaringan saat ini (0.0.0.37) dengan menggunakan 0 di bagian jaringan dari alamat, tetapi tidak benar-benar mengklarifikasi kasus yang berlawanan (0 di bagian host dari alamat). Namun ketika itu mendefinisikan "0" sebagai "ini."

Di RFC1060 alamat "0.0.0.0" jelas didokumentasikan sebagai "host ini di jaringan ini":

     (a)   {0, 0}

        This host on this network.  Can only be used as a source
        address (see note later).

Karena semua nol untuk bagian host dari alamat berarti "host ini," maka secara logis berikut bahwa itu tidak dapat digunakan sebagai alamat host.

Kembali ke langsung menjawab pertanyaan Anda:

  1. Apakah tujuan paket IP pernah ditetapkan ke alamat IP subnet?
  2. Jika ya, dalam kasus apa dan mengapa?
  3. Jika tidak, mengapa tidak membebaskan alamat itu untuk digunakan oleh host?

Menurut apa yang saya temukan di RFC, ini tidak boleh digunakan. Saya akui itu tidak sejelas yang saya inginkan, tapi itu semua sudah umum dalam banyak standar. Ketika standar agak kurang tegas dalam suatu hal, industri kemudian tampaknya "menetap" ke dalam interpretasi yang diterima secara umum.

Selanjutnya, berdasarkan pada konten perangkat lunak RFC dapat ditulis untuk mengasumsikan bahwa alamat ini digunakan untuk mengatasi jaringan dan bukan tuan rumah tertentu. Atau bahkan lebih secara harfiah sebagai semacam "loopback" (yaitu host ini di jaringan yang ditentukan).

Jadi mengapa beberapa OS dengan jelas mengizinkannya digunakan? Saya akan membayangkan seperti banyak hal yang berkaitan dengan waktu / sumber daya pengembang atau tidak ada yang benar-benar berpikir untuk menambahkan cek validitas. Logikanya harus sedikit lebih terlibat daripada "jika diakhiri dengan 0" karena subnet yang lebih besar (a / 23 atau lebih besar) akan berisi alamat IP yang valid dari .255 dan .0 (yaitu 10.1.2.0/23 berisi kedua IP yang valid alamat 10.1.2.255 dan 10.1.3.0). Meskipun beberapa organisasi juga menghindari penggunaan alamat yang valid di subnet yang lebih besar untuk menghindari masalah aneh dengan perangkat lunak yang tidak mendukung subnetting modern dengan benar.

Mengapa tidak membebaskan satu alamat IP itu, itu hanya turun ke biaya / manfaat. Dibutuhkan banyak waktu dan usaha untuk melakukan perubahan ini untuk mendapatkan kembali satu alamat IP per subnet dan dalam berapa banyak kasus di mana Anda memerlukan alamat IP tambahan, apakah hanya satu alamat saja yang cukup? Jauh lebih mudah untuk menambahkan subnet kedua atau memperbesar subnet saat ini, berpotensi memberi Anda banyak alamat untuk digunakan alih-alih hanya satu sementara tidak membuat perubahan besar pada perangkat lunak / perangkat keras yang ada.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.