`
he91_com
  • 浏览: 376905 次
文章分类
社区版块
存档分类
最新评论

Linux Socket Programming by Example-第三章 IP地址与子网划分

 
阅读更多
本章主要是介绍IP地址的子网划分。
公式: (HOST IP) & (NET MASK) = (NET IP)

IP地址按子网大小分为以下几类:
开始 结束 网络地址位 主机地址位
A 0.0.0.0 127.255.255.255 7 24
B 128.0.0.0 191.255.255.255 14 16
C 192.0.0.0 223.255.255.255 21 8
D 224.0.0.0 239.255.255.255 28 N/A
E 240.0.0.0 247.255.255.255 27 N/A

注意:
1. 0和255通常不用于设置IP地址。
2. 10.X.X.X是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)。
3. 127.X.X.X是保留地址,用做循环测试用的。
4. 172.16.0.0—172.31.255.255是私有地址
5. 169.254.X.X是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器。就会得到其中一个IP。
6. 92.168.X.X是私有地址
7. D类地址用于广播,通常不用于设置主机IP。
8. E类地址保留,仅作实验和开发用

我们常用的局域网默认地址192.168.0.0 属于C类地址。

接下来介绍了几个函数:
unsigned long inet_addr(const char *string);
作用:将IP地址从字符串格式转化为整数格式(网络序)
使用方法:
adr_inet.sin_addr.s_addr = inet_addr("127.0.0.95");
if ( adr_inet.sin_addr.s_addr == INADDR_NONE )
return err;

int inet_aton(const char *string, struct in_addr *addr);
作用:将IP地址从字符串格式转化为整数格式(网络序)
使用方法:
if ( !inet_aton("127.0.0.23",&adr_inet.sin_addr) )
return err;

char *inet_ntoa(struct in_addr addr);
作用:将IP地址从整数格式(网络序)转化为字符串格式
使用方法:
struct sockaddr_in addr; /* Socket Address */
printf("IP ADDR: %s\n",inet_ntoa(addr.sin_addr));

unsigned long inet_network(const char *addr);
作用:将IP地址从字符串格式转化为整数格式(本地序(也就是如果本地机器为
Big-Endian,则转化后的整数也是Big-Endian))
使用方法:
unsigned long net_addr;
net_addr = inet_network("192.168.9.1") & 0xFFFFFF00;

unsigned long inet_lnaof(struct in_addr addr);
作用:将IP地址从字符串格式转化为整数格式(本地序),并去掉子网IP
使用方法:
struct sockaddr_in addr; /* Socket Address */
unsigned long host_id; /* Host ID number */
host_id = inet_lnaof(addr.sin_addr);

unsigned long inet_netof(struct in_addr addr);
作用:将IP地址从字符串格式转化为整数格式(本地序),并去掉主机IP
使用方法:
struct sockaddr_in addr; /* Socket Address */
unsigned long net_id; /* Network ID number */
net_id = inet_netof(addr.sin_addr);

struct in_addr inet_makeaddr(int net,int host);
作用: 通过子网地址与主机地址合成一个网络地址
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics