套接字与python中的网络编程

套接字–» 通信端点 –» 伯克利套接字 –» 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 作为套接字类型

python中的网络编程

Buy me a 肥仔水!