Socket
最近用Python语言做服务端开发,看了一下 socket类的 init函数,发现有3个参数,分别是 famil,type,proto。对famial 和 type 参数 感到有些陌生,于是重新查询了一下Socket 方面的资料,在这里做一下记录。
wiki上面的socket解释
Network Socket 是电脑网络中 进程中数据流的断定。在操作系统中,会提供为应用程序提供一组 应用程序接口(API),称为 socket API。应用程序可以通过 socket API来使用 Network socket 以进行 数据交换
简单的描述,就是 socket 是实现进程间数据交换的一种方式。
socket 起源于20世纪70年代,是加利福尼亚大学的伯克利版本UNIX的一部分。socket 最初是为同一主机上的应用程序锁创建,使得主机上的一个程序和另一个程序进行通行(进程间通信),。
Family(协议族)
Family 代表着 socket的类型,包括 AF_INET、AF_INET6、AF_UNIX、AF_ROUTE, 协议族定义了 socket 的地址类型,两个进程要通信,总得有唯一的标识能够让对方能够找到, AF_INET、AF_INET6,其实就是常见的IPv4、IPv6地址,AF_UNIX 是 unix 系统上 用于 本机进程间通信的方式,它是基于文件的,这种方式在 unix系统上很常见。在网络编程中 比较常用的 当然是 AF_INET了。
type
type 就是 socket 的类型,常用的socket类型有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等。流式Socket(SOCK_STREAM)是一种面向连接的Socket,针对于面向连接的TCP服务应用。数据报式Socket(SOCK_DGRAM)是一种无连接的Socket,对应于无连接的UDP服务应用
protocol
socket协议。常用协议有IPPROTO_TCP、IPPROTO_UDP、IPPROTO_STCP、IPPROTO_TIPC等,分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。
简单说udp tcp ip
经常见到 TCP/IP UDP/IP 这样的关键词组合,tcp,udp 决定了数据的传输方式,而 IP 标识了 传输的地址,即你的数据包到底要输出给 互联网上的哪一台主机上。