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


200

我正在开始进行套接字编程,并且不断看到这一点AF_INET

但是,我从未见过其他替代品。我的讲师没有那么大的帮助,只是说“您只需要它”。

所以我的问题是:

  • 目的是AF_INET什么?
  • 还有其他替代方法吗?
    • 如果没有,为什么会在那儿?将来可能会发生变化吗?
    • 如果是这样,为什么?为什么?

Answers:


268

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

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

希望这可以帮助,


43

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

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

您可能会看到其他一些值-但它们很不寻常。在那里可以考虑其他选择和未来的方向。套接字接口实际上确实是非常通用的-这是它在其他网络接口已经枯竭的情况下蓬勃发展的原因之一。

生活(大部分)变得更加简单-感恩。


感谢您的答复-我推断您对第一个问题的回答是,它的目的是定义要使用的网络协议?不过,您能否更详细地说明其他问题?
Smashery

关于AF_INET6的要点;在某些操作系统上支持其他地址系列。
MarkR

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在进程之间进行通信。

AF_UNIX,AF_INET6,AF_NETLINK,AF_TIPC,AF_CAN,AF_BLUETOOTH,AF_PACKET,AF_RDS是其他选项,可以代替AF_INET使用

对AF_INET和PF_INET之间的差异线也可能是有用的。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.