2009-10-20 162 views
130

所以我开始使用套接字编程,并且我一直看到这AF_INET。但是,我从来没有见过其他用途。我的讲师不是那么有帮助,只是说“你只需要它”。所以我的问题:什么是AF_INET,为什么我需要它?

  • AF_INET的目的是什么?
  • 是否有其他的东西用来代替它?
    • 如果不是,那为什么呢?对于未来可能的变化?
    • 如果是这样,为什么?

回答

163

AF_INET是一个地址族,用于指定您的套接字可以与之通信的地址类型(在本例中为Internet协议v4地址)。当你创建一个套接字时,你必须指定它的地址系列,然后你只能在套接字中使用那种类型的地址。例如,Linux内核支持29个其他地址系列,如UNIX(AF_UNIX)套接字和IPX(AF_IPX),以及与IRDA和蓝牙(AF_IRDAAF_BLUETOOTH)的通信,但是如果使用这样的低水平)。

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

希望这有助于,

35

AF_INET的主要目的是为了允许其它可能的网络协议或地址族(AF为地址族; PF_INET是对于(IPv4)的因特网协议家族)。例如,可能还有几个Netware SPX/IPX网络仍在使用;还有其他网络系统,如DECNet,StarLAN和SNA,更不用说不恰当的ISO OSI(开放系统互连)了,它们不一定使用现在无处不在的IP地址来识别网络连接中的对等主机。

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

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

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

+0

感谢您的答复 - 我推断出你的答案,我的第一个问题是,它的目的是确定使用什么网络协议?但是,您能否更具体地谈谈其他问题? – Smashery 2009-10-20 11:43:53

+0

关于AF_INET6的好处;其他地址系列在某些操作系统上受支持。 – MarkR 2009-10-20 12:14:04

11

插座由它们的域,类型和传输协议表征。常见的域名是:

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

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

(有可用于实际上许多其他选项这里为特殊目的)。通常我们使用AF_INET套接字编程

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

13

你需要一个像AF_UNIX AF_INET或处理参数,你会使用来实现IPC套接字通信指定插座的哪种类型。 AF代表地址系列。

如BSD标准插座(在Python插座模块通过)地址被表示为如下:

  1. 单个串用于AF_UNIX/AF_LOCAL地址族。该选项用于不需要IP地址的本地机器上的IPC。

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

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也可能有用。

相关问题