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

Socket 編程:Internet 命名空間與地址格式詳解

     編輯:關於C語言

協議族與地址格式

  • IPv4:32 位地址,協議族 PF_INET。
  • IPv6:128 位地址,協議族 PF_INET6。
#include <sys/socket.h>
int PF_INET;   // IPv4
int PF_INET6;  // IPv6

Socket 地址結構

Internet 命名空間下地址包含兩部分:機器地址 + 端口號,均須遵循網絡字節序(大端序)。

IPv4:sockaddr_in

#include <netinet/in.h>
struct sockaddr_in {
    sa_family_t sin_family;   // AF_INET
    struct in_addr sin_addr;  // IP 地址
    uint16_t sin_port;        // 端口號
};
struct in_addr { uint32_t s_addr; };

IPv6:sockaddr_in6

struct sockaddr_in6 {
    sa_family_t sin6_family;   // AF_INET6
    struct in6_addr sin6_addr; // 128 位地址
    uint32_t sin6_flowinfo;    // 流信息(未廣泛實現)
    uint16_t sin6_port;        // 端口
};

主機地址表示

  • 數值地址:IPv4 如 128.52.46.32,用 uint32_t 或 struct in_addr;IPv6 如 5f03:1200:836f:c100::1,用 struct in6_addr。
  • 主機名:如 www.gnu.org,需經 DNS 解析。

特殊地址常量

// IPv4
INADDR_LOOPBACK   // 127.0.0.1
INADDR_ANY        // 0.0.0.0 任意地址
INADDR_BROADCAST  // 255.255.255.255 廣播
INADDR_NONE       // 錯誤標記

// IPv6
in6addr_loopback / IN6ADDR_LOOPBACK_INIT  // ::1
in6addr_any     / IN6ADDR_ANY_INIT        // ::

端口號範圍

#include <netinet/in.h>
IPPORT_RESERVED      // 1024,保留給特權服務
IPPORT_USERRESERVED  // 5000,用戶顯式使用,系統不自動分配
  • < IPPORT_RESERVED:需 root 權限綁定。
  • > IPPORT_USERRESERVED:安全範圍,供普通應用顯式綁定。
  • 未指定端口時,系統自動分配兩者之間的臨時端口。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved