来来回回,反反复复,多次接触到网络地址(包括MAC地址,IP地址)。但是,却是云里雾里,不是很了解、明白,感觉就是在飘着,不踏实。
也就昨天,突然就“灵光一现”,感觉好像找到了“本质”,于是,就有了脚踏实地的感觉——踏实。(仅仅是个人浅见)
计算机中的网络编址,其实就是用一个N个字节来标示(MAC是6个字节,IP是4个字节,IPV6是128/8=16个字节)。为了可读性,所以呢在print的时候(即展示),一个一个字节来表示,这样就清楚明了了。比如IPV4的地址,就是从0-4字节一个一个进行10进制的表示(我们习惯10进制?)。(比如:192.168.1.1,本质BYTE addr[4] = {192,168,1,1})。而MAC地址,就是从0-6字节,一个一个用hex(16进制)表示。
(比如我本机MAC地址:78-DD-08-AB-B2-CE,本质BYTE mac[6] = {0x78,0xDD,0x08,0xAB,0xB2,0xCE})其中,typedef unsigned char BYTE.
同理,IPV6的地址也是一样的,16个字节来表示地址,但是就是展示的时候有点不一样(相对于IPV4):1、16进制表示(10进制表示);2、用‘:’分隔(用‘.’分隔);3、两个字节作为分隔的基本单位(一个字节作为分隔的基本单位)。比如,我本机的IPV6地址:fe80::28ea:b4c4:6012:2e9。其中,两个冒号表示连续的‘0000’分组(具体可以参考对应的IPV6文档)。
那么,我当初为何会搞不明白?就是因为ipv4地址可以用int来表示。所以,一直用int的来理解地址,最终也是云里雾里,不知何解。还有htonx、ntohx之类的,搞的自己乱七八糟的。现在,终于明了了。哈哈。。。
最后:附上inet_ntoa的源码链接,对理解地址也有一定的帮助。
http://www.oschina.net/code/explore/glibc-2.9/inet/inet_ntoa.c