- 1、本文档共153页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第二章Python网络编程;
2.1网络基础
;;
TCP/IP参考模型及相关协议如图2-2所示,其中各层的含义如下:
(1)应用层:向用户提供的各种应用服务协议,典型的有域名服务、网页服务等。
(2)传输层:在两个进程或者主机之间提供可靠或者不可靠的传输服务。
(3)网际层(或称网络互联层):处理来自传输层的分组发送请求。将分组装入IP数据报,填充报头,根据路由算法选择去往目的节点的路径,然后将数据包发送适当的端口。
;
(4)网络接入层:该层的功能包括IP地址与物理硬件地址的映射,将上层数据封装成帧;基于不同类型的网络接口,网络接入层定义了通信方式和物理介质;作为TCP/IP协议的最底层,负责接收从网际层传来的IP数据报,并且将IP数据报通过底层物理网络发出去,或者从底层的物理网络上接收物理帧,解封装出IP数据报,交给网络层处理。
;;
2.1.2TCP三次握手以及五元组
“三次握手”指的是发送数据前的准备阶段。服务端和客户端之间通过TCP三次交互,建立起可靠的双工连接,然后开始传送数据。
三次握手的详细流程如下:
(1)第一次握手:客户端发送SYN分组(SYN?=?1,seq?=?j)到服务端,表示客户端请求同服务端建立连接,客户端的序列号是j,然后等待服务端确认。
;
(2)第二次握手:服务端收到客户端发来的SYN分组后,响应客户的SYN分组,置ACK位,应答序列号为j?+?1(ACK?=?1,seqack?=?j+1),同时也置位SYN(SYN?=?1,seq?=?k),服务端的序列号为k,即SYN?+?ACK分组。
(3)第三次握手:客户端收到服务端的SYN?+?ACK分组,向服务端返回确认分组ACK(ACK?=?1,seqack?=?k+1),此分组发送完毕,客户端和服务端进入连接建立状态,完成三次握手。图2-3和图2-4分别给出了三次握手的工作方式以及实际抓取的数据包。
;;;
在实际通信过程中,客户端或者服务端往往有大量的网络连接,为了确保不同网络连接的数据互相之间不会串扰,比如浏览器收到的数据不会被送往邮件客户端,引入了五元组的概念用于识别每条网络连接。这个五元组为:
{源IP地址源端口目的IP地址目的端口和传输层协议}
;
例如,图2-4对应的五元组就是{9205882380TCP},其意义是,一个IP地址为9的客户机通过端口20588,利用TCP协议,和IP地址为23、端口为80的服务端建立了网络连接。
五元组在网络编程中也称为Socket(套接字)。有了套接字,就可以唯一确定一条网络连接,也就是通信双方及其通信协议。网络编程的第一步就是建立套接字。
;
2.2Socket模块
;
1.常量
在Python语言提供的Socket模块中,常量主要分为地址簇和socket类型两部分,具体参数如表2-1中所示。
;
2.?Socket函数
Socket模块中包含很多网络服务相关的函数,其中最常使用的是创建一个socket对象:
socket.socket([family[,type[,proto]]])
其中,family为地址簇;type为socket类型;proto默认为0或缺省。此外还有一些常用的函数如表2-2所示。
;;
3.?Socket对象方法
在实际编程过程中,对象方法是编程中经常会用到的,也是我们学习的重点,表2-3中给出了一些常用的Socket对象方法。
;;;
2.2.2Socket编程
1.客户端/服务端通信模型
基于Socket连接的客户端与服务端通信模型如图2-5所示,整个通信过程如下:
(1)通信模型中服务端处于被动侦听状态,随时接受客户端的连接请求,是服务提供方。
(2)通信模型中的客户端是主动连接服务端的,是服务需求方。
;
(3)通信模型中的客户端和服务端实际上都不是传统的主机或者计算机,而是进程。因此一台主机可以同时运行多个不同的客户端或者服务端。客户端和服务端可以在同一台或不同的主机上。进程根据协议的端口号识别。
(4)客户端通过connect函数调用同服务端建立连接。
(5)客户端和服务端互相传递数据。
(6)客户端和服务端关闭网络连接。
;;
2.?TCP客户端
编写TCP客户端的思路比较简单,大体上是先创建一个Socket对象,然后将其与服务端相连接并发送数据,最后等待服务端的响应并将响应结果输出。该编程的思路如图2-6所示。
;;;
3.?TCP服务端
TCP服务端与客户端的主要区别是:服务端是等待客户来连接,所以在思路上应该进行相应
文档评论(0)