Как я могу определить сетевой и широковещательный адрес по IP-адресу и маске подсети?

Например:

  • IP-адрес: 130.45.34.36
  • Маска: 255.255.240.0

Что такое сетевой идентификатор/адрес подсети и широковещательный адрес?


Давайте запишем оба в двоичном формате:

130.45 .34.36 = 10000010.00101101.00100010.00100100

255.255.240.0 = 11111111.11111111.11110000.00000000

Побитовое И между ними даст нам сетевой адрес:

  10000010.00101101.00100010.00100100 (IP-адрес) AND11111111.11111111.11110000.00000000 (маска подсети) = 10000010.00101101.00100000.00000000  = 130.45.32.0 (результирующий сетевой адрес)  

Побитовое ИЛИ между сетевым адресом и инвертированным маска подсети даст нам широковещательный адрес:

  10000010.00101101.00100000.00000000 (сетевой адрес) OR00000000.00000000.00001111.11111111 (инвертированная маска подсети) = 10000010.00101101.00101111.11111111 = 130.45.47.255 (широковещательный  адрес)  


Давайте напишем оба в двоичном формате:

130.45.34.36 = 10000010.00101101.00100010.00100100

255.255.240.0 = 11111111.11111111.11110000.00000000

Побитовое И между ними даст нам сетевой адрес:

  10000010.00101101  .00100010.00100100 (IP-адрес) AND11111111.11111111.11110000.00000000 (маска подсети) = 10000010.00101101.00100000.00000000 = 130.45.32.0 (результирующий сетевой адрес)  

A побитовое ИЛИ между сетевым адресом и инвертированной маской подсети даст нам широковещательный адрес:

  10000010.00101101.00100000.00000000 (сетевой адрес) OR00000000  .00000000.00001111.11111111 (инвертированная маска подсети) = 10000010.00101101.00101111.11111111 = 130.45.47.255 (широковещательный адрес)  

  var network = calculateNetworkIP ("192.168.0.101", "255.255.255.0"); var broadcast = calculateBroadcastIP ("192.168.0.101", "255.255.255.0"); fu  nction calculateNetworkIP (ipAddress, maskIP) {var binaryIP = convertIPToBinaryIP (ipAddress);  var maskBinaryIP = convertIPToBinaryIP (maskIP);  var binaryNetwork = [];  for (var j = 0; j  


  var network = calculateNetworkIP ("192.168.0.101"  , "255.255.255.0"); var broadcast = calculateBroadcastIP ("192.168.0.101", "255.255.255. 0 "); function calculateNetworkIP (ipAddress, maskIP) {var binaryIP = convertIPToBinaryIP (ipAddress); var maskBinaryIP = convertIPToBinaryIP (maskIP); var binaryNetwork = []; for (var j = 0; j  

Пример кода, основанный на ответе Мальта:

   const ipadr = '130.45.34.36', subnet = '255.255.240.0', ipadrs = ipadr.split ('.'), subnets = subnet.split ('.'); let networks = [],  Broadcast = []; for (пусть i в ipadrs) {networks [i] = ipadrs [i] & subnets [i];} console.log ('netaddress:', networks.join ('.'))//сетевой адрес  : 130.45.32.0 for (пусть i в сетях) {Broadcasts [i] = networks [i] |  ~ subnets [i] + 256;} console.log ('Broadcasts.join ('. '))//широковещательный адрес: 130.45.47.255  


Пример кода на основе ответа Мальта:

  const ipadr = '130.45.34.36', subnet = '255.255.240.0', ipadrs  = ipadr.split ('.'), subnets = subnet.split ('.'); let networks = [], Broadcasts = []; for (let i in ipadrs) {networks [i] = ipadrs [i] &  подсети [i];} console.log ('netaddress:', networks.join ('.'))//сетевой адрес: 130.45.32.0for (пусть i в сетях) {Broadcasts [i] = networks [i] |  ~ subnets [i] + 256;} console.log ('широковещательный адрес:', Broadcasts.join ('.'))//широковещательный адрес: 130.45.47.255  

Другой способ сокращения широковещательного адреса после получения сетевого адреса:

  1. вычислить общее количество хостов (в данном случае это 2 ^ 12 = 4096)

  2. Разделите его на 256 (в данном случае это 16) и добавьте результат — 1 (в данном случае 15) в * соответствующем октете (в данном случае второй октет ie32 + 15 = 47) и сделать другой октет 255

* мы можем получить соответствующий октет, посмотрев на количество хостов. например, если количество хостов больше 256, мы должны добавить его ко второму октету сетевого адреса и т. д.


Еще один способ сокращения широковещательного адреса после получения сетевого адреса:

  1. вычислить общее количество хостов (в данном случае это 2 ^ 12 = 4096)

  2. Разделите его на 256 (в данном случае это 16) и добавьте результат — 1 (в данном случае 15) в * соответствующий октет (в данном случае второй октет ie32 + 15 = 47) и сделать другой октет 255

* мы можем получить соответствующий октет, посмотрев на количество хостов . е. g, если количество хостов больше 256, мы должны добавить его ко второму октету сетевого адреса и т. д.


версия машинописного текста

  function getBroadcastAddress ({адрес, маска сети}: NetworkInterfaceInfo) {const addressBytes = address.split ("."). map (Number);  const netmaskBytes = netmask.split ("."). map (Число);  const subnetBytes = netmaskBytes.map ((_, index) => addressBytes [индекс] & netmaskBytes [индекс]);  const broadcastBytes = netmaskBytes.map ((_, index) => subnetBytes [индекс] | (~ netmaskBytes [индекс] + 256));  return broadcastBytes.map (String) .join (".")}/*//тест getBroadcastAddress ({адрес: "192.168.1.93", сетевая маска: "255.255.255.0"}) == '192.168.1.255' */ 


версия машинописного текста

  function getBroadcastAddress ({address, netmask}: NetworkInterfaceInfo  ) {const addressBytes = address.split ("."). map (Число);  const netmaskBytes = netmask.split ("."). map (Число);  const subnetBytes = netmaskBytes.map ((_, index) => addressBytes [индекс] & netmaskBytes [индекс]);  const broadcastBytes = netmaskBytes.map ((_, index) => subnetBytes [индекс] | (~ netmaskBytes [индекс] + 256));  return broadcastBytes.map (String) .join (".")}/*//тест getBroadcastAddress ({адрес: "192.168.1.93", сетевая маска: "255.255.255.0"}) == '192.168.1.255' */код> 

Оцените статью
techsly.ru
Добавить комментарий