任务要求:
1、将ABCDE类IP地址的取值范围计算出来,转换成点分十进制显示。
2、简述字节序的概念,并用联合体(共用体)的方式验证计算机时大端还是小端
任务1、
假设有那么一个地址
a.b.c.d
如果a<128,那么为A类地址,网络号为a,主机号为b.c.d,范围为(0~255.255.255),
如果128<=a<192,那么为B类地址,网络号为a.b,主机号为c.d范围为(0~255.255)
如果192<=a<224,那么为C类地址,网络号为a.b.c,主机号为d范围为(0~255)
/***/其中可用的主机号!=主机号范围
/***/其中有效网络号+全是0的主机号代表所属网络地址
/***/其中有效网络号+全是1的主机号代表当前网络地址内的所有主机,如果对这个IP发送信息意味着对这个网络号的所有主机进行信息发送
有时候一家公司的每个部门只有十几台电脑,因此如果要把255个IP地址全部划分给一个部门,然后再去申请一个新的网络号给公司其他部门,难免有点浪费。加入所有部门共用一个局域网,这种时候如果某个部门想要给自己部门的所有成员发送消息,那么发送一条,其他所有部门都会收到。
例如:甲部门群传输一条“A指令”所有部门都收到“A指令“,乙部门传输一条”B指令“,所有部门又都收到”B指令“,一来二去。基本每天打开电脑就会收到一堆与自己部门不相关的信息。但是又不可能去给部门去奢侈的申请多条新的网络号的网络解决。
那该怎么提升效率?
这种时候就需要靠划分三级IP地址来解决这个问题,也就是划分子网掩码。
怎么划分?
硬性规定主机号的首地址,例如主机号为0000 0000和1000 0000,开头第一个只能为1或者0,强行分成2个不同的子网。
怎么硬性规定?
电脑连接的时候设置自己的子网掩码。子网设置是人为规定的,可以改成其他的子网掩码号去链接其他子网的网络,但是相同的IP号谁先连接到就是谁的,后面连过去只能连接失败。
子网设置成.254的格式会怎么样?(掐头0去尾255)
可以理解为你划分了128个子网,这没有任何意义。而且这128个子网断没有任何的主机号可以放,全是特殊号。
任务2代码如下、
#include<stdio.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>
int main(int argc, const char *argv[])
{
//判断虚拟机用的是大端存储还是小段存储?
int a=0x12345678;
char* p = (char*)&a;
printf("整形指针判断\n");
if( 0x78 == *p) //如果是小端存储
{
printf("小端存储\n");
}
if(0x12 == *p) //如果是大端存储
{
printf("大段存储\n");
}
union data
{
int b;
char c;
}size;
size.b=0x12345678;
printf("联合体判断\n");
//判断共用体的存储循序有大到小是12345678
//还是78563412
if(0x12 == *(char*)(&size.b))
{
printf("大端存储\n");
}
else if(0x78 == *(char*)(&size.b))
{
printf("小端存储\n");
}
else
{
printf("代码有问题\n");
}
return 0;
}
运行效果图如下: