文章目录
一、Socket(套接字)的概念
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
详细介绍参考:[译]Python 中的 Socket 编程(指南)
二、Socket 是如何进行通信
参考博文: Socket技术详解
网络中进程是三元组【ip地址,协议,端口】进行网络间通信了,socket就是利用三元组解决网络通信的一个中间件工具,就目前而言,几乎所有的应用程序都是采用socket,如UNIX BSD的套接字(socket)和UNIX System V的TLI(已经被淘汰)。
Socket通信的数据传输方式,常用的有两种:
SOCK_STREAM:表示面向连接的数据传输方式。数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送,但效率相对较慢。常见的 http 协议就使用 SOCK_STREAM 传输数据,因为要确保数据的正确性,否则网页不能正常解析。
SOCK_DGRAM:表示无连接的数据传输方式。计算机只管传输数据,不作数据校验,如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的。也就是说,数据错了就错了,无法重传。因为 SOCK_DGRAM 所做的校验工作少,所以效率比 SOCK_STREAM 高。
三、socket的分类
模块名 | 功能简介 |
---|---|
socket | 提供了标准的 BSD Sockets API ,也叫伯克利套接字,BSD Socket的应用编程接口已经是网络套接字的抽象标准,所有的操作系统都实现伯克利套接字接口,它也是连接互联网的标准接口 |
socketserver | 是基于socket而来的模块,它是在socket的基础上进行了一层封装,并且实现并发等功能,它提供了服务器中心类,可以简化网络服务器的开发 |
四、Socket 的类型
1、socket格式:
socket(family,type[,protocal]) 使用给定的地址族、套接字类型、协议编号(默认为0)来创建套接字。
类型 | 描述 |
---|---|
socket.AF_UNIX | 只能够用于单一的Unix系统进程间通信 |
socket. AF_INET | 服务器之间网络通信 |
socket.AF_INET6 | 基于IPv6协议通信 |
socket.SOCK_STREAM | 流式socket , for TCP |
==socket.SOCK_DGRAM == | 数据报式socket , for UDP |
socket.SOCK_RAW | 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头 |
socket.SOCK_SEQPACKET | 可靠的连续数据包服务 |