初始化套接字对象

时间:2019-10-24 21:08:05

标签: python sockets networking

设置套接字对象时,我使用:

socket.socket()

更详细地写(也是默认的)是:

socket.socket(socket.AF_INET, socket.SOCK_STREAM)

对此有一些疑问:

socket.AF_INET允许我通过以传递主机/端口,即ipv4地址。为什么习惯将其命名为AF_INET(而不是socket.IPV4。这代表什么?

什么是SOCK_STREAM?这是否仅表示将接受HTTP请求或其他请求?另外,使用SOCK_STREAMSOCK_RAW有什么区别?

2 个答案:

答案 0 :(得分:0)

名称AF_INET是从Unix复制而来的,它是“ InterNET”的缩写。该缩写是在设计IPv6之前多年创建的,当时只有一个Internet协议,因此设计者没有想到将其命名为IPV4

AF代表“地址族”,表示该协议使用Internet地址。还有PF,代表“协议族”。在设计该协议时,曾有一种想法,即可能有多个协议使用相同的寻址方式,因此它们将这些概念分开,但实际上它们是一对一的,因此区别逐渐消失了。 (所有AF_xxx常量与相应的PF_xxx常量具有相同的值)。

SOCK_STREAM表示套接字传输字节流。另一种选择是SOCK_DGRAM,它以称为“数据报”的不同单位传输消息。

答案 1 :(得分:0)

所有名称都是从[man7]: SOCKET(2)man socket)借来的。

不同的缩写代表什么?

  • AF _ -地址族
  • _INET -Internet( IPv4 -当时存在)。完整的 spec [IETF.Tools]: INTERNET PROTOCOL
  • SOCK _ -套接字
  • _DGRAM -无连接数据报(通常为 UDP 协议)
  • _STREAM -连接字节流(通常是 TCP 协议)
  • _RAW -原始(“未处理”)网络协议(或原始套接字:[man7]: RAW(7)