套接字
–»通信端点
–»伯克利套接字
–»BSD套接字
在任何类型的通信开始之前, 网络应用必须创建套接字
可以奖他们比作电话插孔
套接字的起源 –> 20实际70年代 –» 加利佛尼亚的伯克利版本的UNIX(BSD UNIX)
套接字
最初是为同一主机上的应用程序所建, 使进程间进行通信(IPC Inter Process Communication)
套接字类型
- 基于文件的套接字
AF_UNIX
(AF_LOCAL
)
UNIX 套接字, 家族名称: AF_UNIX
又名AF_LOCAL
, 在POSIXI.g
标准中
- 基于网络的套接字
AF_INET
地址家族:
`因特网`
`AF_INET6` 用于第6版因特网协议(IPv6)寻址
在所有的地址家族中 AF_INET
是使用最广泛的
- 其他套接字类型
AF_NETLINK
使用BSD套接字接口进行 用户级别
和 内核级别代码
的IPC
AF_TIPC
支持透明的进程的通信协议(TIPC), TIPC允许计算机集群之中的机器互相通讯, 无需基于IP的寻址方式
python
只支持AF_UNIX, AF_NETLINK, AF_TIPC, AF_INET
套接字地址 主机-端口对
套接字 电话插孔 (允许通信的基础设施)
主机 端口 区号 电话号码
有效的端口范围 0~65535 (< 1024的端口号留给了系统)
可以在POSIX兼容系统中(LINUX, MAC OS X等), /etc/services文件中找到预留的端口号列表
面向连接的套接字
和 无连接的套接字
-
面向连接的套接字 (通信前先建立连接)
例如使用电话系统给别人打电话
也称为虚拟电路
或者流套接字
面向连接的通信 –» 可序列化, 可靠的, 不重复的 数据交付 –» 没有记录边界
数据可以拆分成多段 —» 确保每段都可以送到目的地 –» 按顺序组合 –» 奖完整的信息传递给应用程序
实现这种连接的主要协议是: 传输控制协议(TCP)
为了创建TCP套接字, 必须使用 SOCK_STREAM 作为套接字类型
- 无连接的套接字 (数据报型)
消息是整体发送的
类似邮政服务 不能保证顺序 与 送达, 甚至会重复
但是开销小,效率高
实现这种连接的协议是: 用户数据报协议(UDP)
为了创建UDP套接字, 必须使用 SOCK_DGRAM 作为套接字类型