首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

Beej 網絡編程指南第 6 部分:IP 地址轉換與私有網絡

     編輯:關於C

現代地址轉換 API

廢棄 inet_addr()/inet_ntoa(),統一使用雙棧函數:

文本 → 二進制:inet_pton()

struct sockaddr_in sa4;
struct sockaddr_in6 sa6;

inet_pton(AF_INET, "192.0.2.1", &(sa4.sin_addr));       // IPv4
inet_pton(AF_INET6, "2001:db8:63b3:1::3490", &(sa6.sin6_addr)); // IPv6
  • 返回 1 成功,0 格式錯誤,-1 系統錯誤(需檢查 errno)

二進制 → 文本:inet_ntop()

char ip4[INET_ADDRSTRLEN];
char ip6[INET6_ADDRSTRLEN];

inet_ntop(AF_INET, &(sa4.sin_addr), ip4, INET_ADDRSTRLEN);
inet_ntop(AF_INET6, &(sa6.sin6_addr), ip6, INET6_ADDRSTRLEN);
  • 需提供足夠大緩衝區,宏 INET_ADDRSTRLEN (16) / INET6_ADDRSTRLEN (46) 給出最大長度

私有網絡與 NAT

RFC 1918 定義三塊私有地址塊:

類別範圍掩碼
A10.0.0.0 – 10.255.255.255255.0.0.0
B172.16.0.0 – 172.31.255.255255.255.0.0
C192.168.0.0 – 192.168.255.255255.255.255.0

NAT 將私有 IP 映射為公網 IP,應用層無感知。防火牆後的多設備共享少量公網 IP 即依賴此機制。

子網掩碼本質

  • 32 位二進制,左側連續 1 標識網絡位,右側連續 0 標識主機位
  • IP 與掩碼 AND 運算得網絡地址
  • 主機位全 0 = 網絡號,全 1 = 廣播地址,不可分配給主機

摘自 xiaobin_HLJ80 的專欄

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved