Python网络通信之socket模块(一)关于套接字

来源:互联网 发布:联通网络测速 编辑:程序博客网 时间:2024/04/27 16:41

关于套接字

  • long long ago,套接字诞生之初,它就带者伯克利分校的热血们对Unix的研究目的,将自己奉献给了计算机的本地通信,即进程间通讯(文件型通信:底层结构是文件系统来支持的,在同一台电脑上,文件系统的确可以被不同的进程访问)或者IPC,那么著名协议家族AF_UNIX(与AF_LOCAL在很多系统上二者等价,但最终没有被标准化,但python仍然使用AF_UNIX)。但自从出现了局域网(那时单纯的叫网络),主机之间通信也撩起了它将彪炳人类通信史的网络型通信,自此AF_INET和AF_INET6过关斩将(基于IPV6)终以闪亮登场。另外,Python2.5中加入了AF_NETLINK协议(让用户代码与内核代码之间的IPC,可以使用标准的BSD套接字接口)

  • Python支持AF_UNIX,AF_NETLINK,AF_INET家族 套接字地址:主机与端口
    合法端口号范围0~65535,其中小于1024的端口号为系统保留端口,Unix系统可以通过/etc/services获得的保留的端口号

AF_INET协议族(地址家族):是python网络编程的核心协议


无论使用那种地址家族,包括AF_INET,套接字的类型都只有两种。


一种是面向连接:

  • 在通信之前建立一条逻辑链路(“虚电路”或者“流套接字”),从而获得顺序性,可靠性,无重复的数据传输,即所发的信息将被拆分,不多不少的到达目的地,在内核层被重新并接,传给用户层的应用程序。其主要协议是Tcp传输控制协议。那么创建Tcp套接字得指定套接字类型SOCK_STREAM(STREAM表达了作为流套接字的特点)

另一种是无连接

  • 与“虚电路”“逻辑链路”完全相反的数据报型的无链接套接字,那么数据到达的顺序,可靠性,不重复性往往无法保证。数据报会保留数据边界,整个发送。但它的劣势却偏偏优胜了Tcp链接建立是带来的额外开销,时间就是Money,为某些应用场景提供更好的性能(DNS,HA的心跳等等),这种连接的主要协议就是用户数据报协议(UDP)
    在创建UDP套接字时需指定套接字类型SOCK_DGRAM(“datagram”数据报)
    这俩(TCP,UDP)传输层协议使用使用网络层协议IP(网际协议)来构成网络通信
0 0
原创粉丝点击