Networking 计算子网掩码?

Networking 计算子网掩码?,networking,network-programming,tcp,Networking,Network Programming,Tcp,如何计算ip地址为128.2.19.4且属于子网128.2.19.0/25的子网掩码。请给我详细的过程。我想学习计算。以下是算法和示例: 子网掩码仅表示子网地址的“/25”部分 在IPv4中,地址的长度为32位,其中前25位为: 1111 1111 1111 1111 1111 1111 1000 0000 地址以八位字节表示,每个字节8位: octet 1 . octet 2 . octet 3 . octet 4 0000 0000 0000 0000

如何计算ip地址为128.2.19.4且属于子网128.2.19.0/25的子网掩码。请给我详细的过程。我想学习计算。

以下是算法和示例:

子网掩码仅表示子网地址的“/25”部分

在IPv4中,地址的长度为32位,其中前25位为:

1111 1111 1111 1111 1111 1111 1000 0000  
地址以八位字节表示,每个字节8位:

octet 1  .    octet 2  .    octet 3  .    octet 4
0000 0000     0000 0000     0000 0000     0000 0000 
1111 1111     1111 1111     1111 1111     1000 0000
因此,每个八位字节的十进制表示为:

255      .    255      .    255      .    128       
这意味着您的子网掩码将是:


255.255.255.128

以下是算法和示例:

子网掩码仅表示子网地址的“/25”部分

在IPv4中,地址的长度为32位,其中前25位为:

1111 1111 1111 1111 1111 1111 1000 0000  
地址以八位字节表示,每个字节8位:

octet 1  .    octet 2  .    octet 3  .    octet 4
0000 0000     0000 0000     0000 0000     0000 0000 
1111 1111     1111 1111     1111 1111     1000 0000
因此,每个八位字节的十进制表示为:

255      .    255      .    255      .    128       
这意味着您的子网掩码将是:


255.255.255.128

子网掩码是位掩码。25表示32位中的25位(从顶部开始)用于网络,其余用于主机

In bytes:    128.2.19.0
In binary    10000000 00000010 00010011 00000000
The bitmask: 11111111 11111111 11111111 10000000
Ergo:        ------- network ------------  host

最后7位用于主机。字节的位掩码是255.255.255.128。

子网掩码是位掩码。25表示32位中的25位(从顶部开始)用于网络,其余用于主机

In bytes:    128.2.19.0
In binary    10000000 00000010 00010011 00000000
The bitmask: 11111111 11111111 11111111 10000000
Ergo:        ------- network ------------  host

最后7位用于主机。位掩码的字节数为255.255.255.128。

以下是在C语言中执行此操作的方法:

#include <stdio.h>
#include <arpa/inet.h>

uint32_t cidr_to_netmask(uint8_t cidr)
{
  uint8_t unset_bits = 32 - cidr;
  return ntohl(0xffffffff << unset_bits);
}

int main(void)
{
    uint8_t cidr = 25;

    uint32_t _netmask = cidr_to_netmask(cidr);
    struct in_addr _netmask_addr = { _netmask };

    char netmask[16];
    if (inet_ntop(AF_INET, (struct in_addr *)&_netmask_addr, (char *)&netmask, sizeof(netmask)) == NULL) { 
      fprintf(stderr, "error.\n"); 
      return 1; 
    }

    printf("%d = %s\n", cidr, netmask);

    return 0;
}

以下是如何在C中实现此功能:

#include <stdio.h>
#include <arpa/inet.h>

uint32_t cidr_to_netmask(uint8_t cidr)
{
  uint8_t unset_bits = 32 - cidr;
  return ntohl(0xffffffff << unset_bits);
}

int main(void)
{
    uint8_t cidr = 25;

    uint32_t _netmask = cidr_to_netmask(cidr);
    struct in_addr _netmask_addr = { _netmask };

    char netmask[16];
    if (inet_ntop(AF_INET, (struct in_addr *)&_netmask_addr, (char *)&netmask, sizeof(netmask)) == NULL) { 
      fprintf(stderr, "error.\n"); 
      return 1; 
    }

    printf("%d = %s\n", cidr, netmask);

    return 0;
}

算什么?/25是您的子网掩码。这意味着25 1s后7 0s形成4字节长的掩码(或点十进制表示法中的255.255.255.128)解释了这一切。计算什么?/25是您的子网掩码。这意味着25 1s后7 0s形成4字节长的掩码(或点十进制表示法中的255.255.255.128)解释了这一切。