什么是AF_INET,为什么需要它?

时间:2009-10-20 11:28:43

标签: sockets

我开始使用套接字编程,我一直看到这个AF_INET

然而,我从来没有见过任何其他用途。我的讲师没那么有用,只是说“你只需要它”。

所以我的问题:

  • AF_INET的目的是什么?
  • 还有其他用途吗?
    • 如果没有,为什么会这样?对于未来可能发生的变化?
    • 如果是,那又是什么?

6 个答案:

答案 0 :(得分:220)

AF_INET是一个地址系列,用于指定套接字可以与之通信的地址类型(在本例中为Internet协议v4地址)。创建套接字时,必须指定其地址族,然后只能使用该类型的地址与套接字。例如,Linux内核支持其他29个地址系列,例如UNIX(AF_UNIX)套接字和IPX(AF_IPX),以及与IRDA和蓝牙(AF_IRDA和{{1}的通信但是,你会怀疑你会在如此低的水平上使用它们。)

在大多数情况下,坚持使用AF_BLUETOOTH进行网络套接字编程是最安全的选择。 Internet协议v6地址也有AF_INET

希望这有帮助,

答案 1 :(得分:42)

AF_INET的主要目的是允许其他可能的网络协议或地址系列(AF用于地址族; PF_INET用于(IPv4)互联网协议族)。例如,可能还有一些Netware SPX / IPX网络;还有其他网络系统,如DECNet,StarLAN和SNA,更不用说恶意的ISO OSI(开放系统互连),这些并不一定使用现在无处不在的IP地址来识别网络连接中的对等主机。

AF_INET的无处不在的替代品(回想起来应该被命名为AF_INET4)是AF_INET6,用于IPv6地址族。 IPv4使用32位地址; IPv6使用128位地址。

您可能会看到一些其他值 - 但它们并不常见。它允许替代方案和未来方向。套接字接口实际上非常普遍 - 这是其他网络接口枯萎的原因之一。

生活(大部分)变得更简单 - 不胜感激。

答案 2 :(得分:15)

您需要AF_UNIX或AF_INET之类的参数来指定您将使用哪种类型的套接字寻址来实现IPC套接字通信。 AF代表地址族。

与BSD标准一样,Socket(在Python套接字模块中采用)地址表示如下:

  1. 单个字符串用于AF_UNIX / AF_LOCAL地址系列。此选项用于不需要IP地址的本地计算机上的IPC。

  2. 一对(主机,端口)用于AF_INET地址系列,其中host是一个字符串,表示Internet域符号中的主机名,如'daring.cwi.nl'或IPv4地址,如'100.50。 200.5',port是一个整数。用于通过Internet在进程之间进行通信。

  3. AF_UNIX,AF_INET6,AF_NETLINK,AF_TIPC,AF_CAN,AF_BLUETOOTH,AF_PACKET,AF_RDS 是可以用来代替 AF_INET 的其他选项。

    thread about the differences between AF_INET and PF_INET也可能有用。

答案 3 :(得分:12)

套接字的特征在于它们的域,类型和传输协议。常见域名是:

  1. AF_UNIX:地址格式为UNIX路径名

  2. AF_INET:地址格式为主机和端口号

  3. (实际上有许多其他选项可用于专门用途)。通常我们使用AF_INET进行套接字编程

    参考:http://www.cs.uic.edu/~troy/fall99/eecs471/sockets.html

答案 4 :(得分:2)

它定义了协议地址族。这决定了创建的套接字的类型。 掌上电脑支持AF_INET。

以下页面中的内容相当不错 http://etutorials.org/Programming/Pocket+pc+network+programming/Chapter+1.+Winsock/Streaming+TCP+Sockets/

答案 5 :(得分:0)

“什么是 AF_INET,我为什么需要它?”

表示使用IPv4协议。与 IPv6 或其他一些协议相反。