ad

《零基础Python 从入门到精通》_让你学得轻松_16.2 Python底层网络模块

admin 141 2023-10-25

【摘要】 本书摘自《零基础Python 从入门到精通》一书中第16章,第2节,编者是壹零快学。

16.2 Python底层网络模块

上一节介绍了计算机网络的基本概念,后面的小节将会介绍网络编程。Python的标准库中提供 了很多网络相关的模块,有底层的socket模块,也有和HTTP相关的模块,前面章节介绍的电子邮件也算是标准库中与网络相关的模块。

16.2.1 Socket简介

计算机网络编程都离不开一个基本的组件:套接字(Socket)。

操作系统通常会为应用程序提供一组应用程序接口(API),也称为套接字接口(Socket API)。应用程序可以通过套接字接口来使用网络套接字,以进行数据交换。最早的套接字接口来自于4.2 BSD,现代常见的套接字接口大多源自Berkeley套接字(Berkeley Sockets)标准。

套接字接口以IP地址及通信端口组成套接字地址(Socket Address)。远程的套接字地址和本 地的套接字地址完成连线后,再加上使用的协议(Protocol),这个五元组(Five-element Tuple, 来源IP、目的IP、来源端口、目的端口和协议)作为套接字对(Socket Pairs)就可以彼此交换数据 了。例如,在同一台计算机上,TCP协议与UDP协议可以同时使用相同的port而互不干扰。操作系 统可以根据套接字地址决定应该将数据送达的特定的进程或线程。这就像是电话系统中, 以电话 号码加上分机号码来决定通话对象一般。

《零基础Python 从入门到精通》_让你学得轻松_16.2 Python底层网络模块

详细的网络接口有以下特征:

(1)本地接口地址,由本地IP地址和(包括TCP、UDP)端口号组成。

(2)传输协议,如TCP、UDP、Raw IP协议,如果只是指定IP地址,那么TCP 53与UDP 53不是 一个接口。

套接字本质上是操作系统提供的一种进程间通信机制,使主机间或者一台计算机上的进程间 可以通信。在Python中,大多数网络模块都隐藏了socket模块的基本细节,用户在调用网络库的时 候可以不直接和套接字交互。但是Python官方库还是提供了socket模块来允许用户操作许多底层的 套接字接口。

16.2.2 socket模块

标准库中的socket模块提供了对底层BSD套接字样式网络的访问。使用socket模块可以实现客户 机和服务器之间的套接字。在Python中使用socket模块包含的函数和类定义可以生成通过网络通信 的程序。

套接字格式:socket(family, type [,protocal])。使用给定的套接族、套接字类型、协议编号(默认 为0)来创建套接字。

family参数指定调用者期待返回的套接字接口地址结构的类型。常见的可以使用的是AF_ UNIX、AF_INET、AF_INET6和AF_UNSPEC。AF_UNIX用于同一台机器上的进程通信(Windows不 支持)。AF_INET表示使用IPv4通信,不能返回任何IPv6相关的信息。AF_INET6表示使用IPv6通 信,不能返回任何IPv4相关的信息。AF_UNSPEC表示函数返回的是适用于指定主机名和服务名并且适合任何协议族的地址,可能是IPv4也可能是IPv6,依赖于通信的时候使用的是何种IP地址协议。

type参数指定套接字类型。常见的有SOCK_STREAM、SOCK_DGRAM和SOCK_RAW。可以根据 是面向连接还是非连接分为SOCK_STREAM(对应TCP协议)或SOCK_DGRAM(对应UDP协议), 或者使用原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以。 SOCK_RAW可以处理特殊的IPv4报文。此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《基于Kubernetes的容器云平台实战》_了解最新技术前沿_3.3.2 Dockerfile 优化实例
下一篇:阅读《时空大数据与云平台 理论篇》_走进云的世界_4.2.2 时空大数据中心架构
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×