Address,翻譯為「地址」,是計算機網路中用於標識通信體的一個重要概念。
一、Address的概念
Address,可以理解為一種聯繫方式,用於唯一識別通信實體。在計算機網路中,短語「Address」通常用於表示網路層和傳輸層協議,包括IPv4和IPv6協議中的IP地址和MAC地址。Address可以直接讓計算機識別和定位設備,是計算機網路通信的基礎。
二、Address的分類
Address按照其在計算機網路中的作用和表現形式,可以分為兩大類,即:
1、網路層地址:用於在全球範圍內唯一標識一個網路節點,在Internet中常指IPv4和IPv6的地址。
2、數據鏈路層地址:用於在同一物理網路的節點之間唯一標識一個設備,也稱MAC地址。
因為兩者的標識範圍不同,所以也具有不同的編寫方式。
三、Address的IPv4編寫
IPv4(Internet Protocol version 4,即Internet協議第四版)是目前仍在廣泛使用的網路層協議,其地址表示為32位二進位數,通常以點分十進位的方式表現。
例如:192.168.10.10
其中,192.168.10.是網路部分(Netowrk ID),10是主機部分(Host ID)。
//IPv4 Address示例代碼 - C++ #include #include int main() { struct in_addr s; //IPv4地址結構體 inet_pton(AF_INET, "192.168.10.10", &s); //將點分十進位地址轉換為二進位形式 printf("Network ID: %u\n", ntohl(s.s_addr)); //輸出網路部分 printf("Host ID: %u\n", ntohl(s.s_addr) & 0x000000ff); //輸出主機部分 return 0; }
四、Address的IPv6編寫
IPv6(Internet Protocol version 6,即Internet協議第六版)是未來趨勢,地址有128位,採用冒號十六進位的方式表示,因為IPv6地址的位數太多,所以它的組成方式與整個網路的組成吻合是必須的。IPv6地址由三部分組成,即路由前綴、子網標識和介面標識。
例如:2001:da8:1057:900:b45f:3c3d:f50b:8347
其中,2001:da8:1057:900為路由前綴,b45f:3c3d:f50b:8347為介面標識。
//IPv6 Address示例代碼 - C++ #include #include int main() { struct in6_addr s; //IPv6地址結構體 inet_pton(AF_INET6, "2001:da8:1057:900:b45f:3c3d:f50b:8347", &s); //將冒號十六進位地址轉換為二進位形式 int i; printf("IPv6 Address: "); for (i = 0; i < 16; i++) { printf("%02x", s.s6_addr[i]); //逐位輸出16進位數 if (i % 2 == 1 && i < 15) { printf(":"); //每2位輸出一個冒號,不包括最後一位 } } return 0; }
五、Address的MAC地址編寫
MAC(Media Access Control)地址,也稱物理地址,由硬體製造商設定,每個網路介面都有一個獨特的MAC地址,用於在同一個區域網中尋找設備。
例如:76:AB:CD:FE:34:A9
//MAC Address示例代碼 - C++ #include #include #include #include int main() { struct ifaddrs *ifap, *ifa; struct sockaddr_dl *sdl; u_char *ptr; char mac[64]; //存放MAC地址的字元串 if (getifaddrs(&ifap) == -1) { return 1; //獲取網卡列表失敗 } for (ifa = ifap; ifa; ifa = ifa->ifa_next) { if ((ifa->ifa_flags & IFF_UP) == 0 || (ifa->ifa_flags & IFF_LOOPBACK) != 0) { continue; //只處理已啟用且非環回網卡 } if ((sdl = (struct sockaddr_dl *)ifa->ifa_addr) != NULL && sdl->sdl_family == AF_LINK && sdl->sdl_type == IFT_ETHER) { ptr = (u_char *)LLADDR(sdl); //獲取MAC地址二進位形式 snprintf(mac, sizeof(mac), "%02x:%02x:%02x:%02x:%02x:%02x", *ptr, *(ptr + 1), *(ptr + 2), *(ptr + 3), *(ptr + 4), *(ptr + 5)); //轉換為十六進位字元串形式 printf("MAC Address: %s\n", mac); //輸出MAC地址 break; //已找到符合條件的網卡,退出循環 } } freeifaddrs(ifap); //釋放網卡列表 return 0; }
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/289212.html