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

Sma*_*ery 181 sockets

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

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

所以我的问题:

  • 目的是AF_INET什么?
  • 还有其他东西用来代替吗?
    • 如果没有,为什么会在那里?对于未来可能的变化?
    • 如果是这样,为什么和为什么?

小智 235

AF_INET是一个地址系列,用于指定套接字可以与之通信的地址类型(在本例中为Internet协议v4地址).创建套接字时,必须指定其地址族,然后只能使用该类型的地址与套接字.Linux内核,例如,支持29家其他地址族如UNIX( AF_UNIX)套接字和IPX( AF_IPX),也与IrDA和蓝牙通信(AF_IRDAAF_BLUETOOTH,但令人怀疑的是,你会在如此低的水平使用这些).

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

希望这可以帮助,


Jon*_*ler 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位地址.

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

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


Avi*_*wal 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之间差异的这个主题可能也很有用.


小智 13

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

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

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

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

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