蒋振飞的博客 - Python网络编程 (全)   
正在加载蒋振飞的博客...
V3.0
蒋振飞的博客

Python网络编程 (全)

发布时间: 2018年06月20日 发布人: 蒋振飞 热度: 598 ℃ 评论数: 0

计算机网络

1.网络分层
    ①(DoD模型):链路层(网络接口层),网络层(网际层),传输层,应用层  
    ②(OSI开放互联模型):物理层,数据链路层,网络层,传输层,会话层,表示层,应用层

2. OSI参考模型
    ①应用层:提供用户接口,特指网络应用程序,能产生网络流量的应用程序
    ②表示层:表示数据,如采用二进制或ASCII等,处理数据,如数据加密,数据压缩等
    ③会话层:会话层的作用主要是建立,维护,管理应用程序之间的会话
    ④传输层:提供可靠或不可靠的传输,能够错误纠正,纠正失败能够重传
    ⑤网络层:为网络设备提供逻辑地址,根据数据包的逻辑地址选择最佳网络路径
    ⑥数据链路层:常被称为MAC层,它管理网络设备的物理地址,所以物理地址也称为MAC地址
    ⑦物理层:主要负责二进制数据比特流在设备之间的传输

3. 数据封装
    数据在传输层添加源端口和目标端口,我们称之为数据段或消息,可靠传输称为数据段,不可靠传输称为消息.在网络层会为数据段或消息添加目标地址和源地址,称为数据包.数据包在数据链路层添加了目标MAC地址,源MAC地址和帧校验序列(FCS)数据帧.
    注意:数据包包括数据,端口,IP地址.数据帧包括数据,端口,IP地址,MAC地址

网络层的协议分析

在TCP/IP协议栈中网络层有四个协议IP,IGMP,ICMP和ARP:
    ①因特网协议(IP)
    ②因特网控制报文协议(ICMP)
    ③地址解析协议(ARP)
    ④逆地址解析协议(RARP)
    ⑤代理ARP
    ⑥组管理协议(IGMP)

1.IP数据报
    也称IP分组,是指IP层传输的数据单元及其格式,同时也是指IP层的无连接数据报传输机制和无连接服务 

2.接口层的作用(包含ARP地址解析协议,RARP逆地址解析协议)   
    ①为IP模块发送和接收IP数据报
    ②为ARP模块发送ARP请求和接收ARP应答
    ③为RARP模块发送RARP请求和接收RARP应答
    ④目前使用最广泛的链路层协议有以太网,串行接口链路等
    ⑤MAC地址:48位(6字节)的目标地址和源地址

3.ARP协议工作过程
    ①首先在自己的ARP告诉缓存中找这个IP地址与MAC地址的映射关系
    ②如果找不到,则ARP就发送一份ARP请求给以太网上的每个主机,这个过程称为ARP广播
    ③目的主机的ARP层收到了这份ARP广播后,识别出发送方在询问他的地址,于是就发送一个包含IP地址及对应物理地址的ARP应答发送给发送方
    ④收到ARP应答后,发送方就可以传IP数据报了

4. RARP协议
    ①RARP用于支持误判工作站在引导或启动时获得自身的IP地址(无盘指没有存放有引导所需操作文件的辅助存储器),经常和TFTP(简单文件传输协议)一起使用,即通过RARP获得IP地址
    ②从接口卡读取唯一的物理地址(MAC地址)
    ③发送一份RARP请求某个RARP服务器响应该无盘系统的IP地址,在网络上广播,请求响应IP地址的响应
    ④如果网络上有RARP服务器收到请求,就发送一个RARP应答,包含无盘主机分配的IP地址,通常是单播传送的
    ⑤假如网络上没有RARP服务器,无盘主机会按一定的时间间隔持续地发送RARP请求到网络上

5.ICMP协议(Internet control message protocol)
    ①ICMP可提供有关网络可连接性的信息,提供可达性,交互错误,路由错误报告及控制信息等IP不能够提供的信息,并把信息返回给发送方,是TCP/IP网络层的重要协议
    ②IP负责把数据从一个网络传送到另一个网络,而IP协议本身没有差错控制机制,如果在传递过程中出现因某种原因不能发送的IP数据,ICMP将被用来传递差错报文及其他需要注意的信息

6.IP协议(Internet protocol)
    ①IP协议(网际协议)是TCP/IP协议族中最核心的协议,所有的TCP,UDP,ICMP及IGMP数据都是IP数据报格式传输的
    ②IP层主要负责路由,即数据包选路,使通过由路由器连接的互联网络传输数据报

7.IP层的传输特点
    ①IP提供的是不可靠,无连接的数据报传送
    ②不可靠的意思是不能保证IP数据报能成功地到达目的地,IP仅提供尽力传送服务,负责数据的路由与传输,却并不处理数据报的内容
    ③无连接是IP并不维护任何关于后续数据报的状态信息,每个数据报的处理是相互独立的,这也说明,IP数据报不按顺序发送顺序接收

8.IP路由选择
    当目的主机与源主机不是直接相连或处在同一个共享网络上,那么IP数据报就不能直接送到目的主机上,而需要路由器来转发数据报,通常主机把数据报发往一个默认的路由器上,由路由器决定怎么发送数据报

9.IP选路机制
    ①搜索匹配的主机地址
    ②搜索匹配的网络地址
    ③搜索默认路由
    ④如果路由表中没有默认项,而又没有找到匹配项,这时如果数据报是由本地主机产生的,那么可能返回主机不可达差错,网络不可达差错

动态选路协议(网络层)

1.静态选路和动态选路
    ①静态选路:就是在配置接口时,以默认的方式生成路由表项,并通过ICMP报文来更新表项
    ②动态选路:管理员不需要像静态路由一样,对路由表进行手工维护,而是在每台路由器上运行一个路由表管理程序

2.动态选路特征
    ①不改变选路机制,仍是按(主机,网络,默认路由)
    ②改变选路策略:路由项目由守护程序动态增加或删除
    ③动态选路由守护程序完成

3.RIP协议(由UDP传输的动态选路协议或动态路由协议)
    ①RIP是最 广泛使用的动态选路协议,协议采用距离向量算法,即相邻的路由器之间互相交换整个路由表并进行矢量的叠加,最终获得整个网络的路由信息
    ②RIP以跳数作为路由器之间距离的度量,所有直连接口的跳数为1,每增加一个路由器,可达到的网络跳数加1,为限制路由收敛的时间,RIP规定跳数取值为0~15,大于等于16跳数表示目的不可达,某种程度上限制了网络的大小

4.OSRF协议(内部网关协议和链路状态协议)
    ①OSRF协议是除RIP之外的另一个内部网关协议,与采用距离向量的RIP不同的是,OSRF是一个链路状态协议,因而克服了RIP的所有限制,OSRF在实现上直接使用IP协议而不再使用传输层协议,如UDP
    ②链路状态包括路由器链路的端口地址,网络掩码,此链路互联的网络及网络类型等,它构成了路由器的链路状态数据库,是路由器进行路由决策主要依据

IP地址

1.什么是Ip地址
    网络地址是一个网络层概念,是互联网上的主机在网络中具有的逻辑地址,Internet上采用的IP地址表示网络地址

2.IP地址的作用
    IP地址:用来在网络中标记一台电脑的一串数字,比如192.168.1.1;在本地局域网上是惟一的

3.IP地址的分类
    ①每一个IP地址包括两部分:网络地址和主机地址
    ②A类网络号:主机数2^24-2,子网数2^22
    ③B类网络号:主机数2^16-2,子网数2^14
    ④C类网络号:主机数2^8-2,子网数2^6
    ⑤私有ip:
        在这么多网络IP中,国际规定有一部分IP地址是用于我们的局域网使用,也就是属于私网IP,不在公网中使用的,它们的范围是:
        10.0.0.0~10.255.255.255
        172.16.0.0~172.31.255.255
        192.168.0.0~192.168.255.255
        但是最大的代表广播地址,最小的代表网络号,不允许使用,也就是在局域网中,Ip地址最大是254,最小是1

4.域名
    ①由于IP地址由纯数字组成,很难让人记忆,且不能表达功能,地理位置等附加含义,所以在TCP/IP网络形成不久,标准化组织就定义了这种主机地址表达方式
    ②域名是一个应用层概念,是由一串用点分隔的名字组成的Internet上某台计算机或计算机组的名字,用于在数据传输时标志计算机的电子方位(有时也指地理位置,地理上的域名或有行政自主权的一个地方区域)
    ③域名其实就是IP地址的“面具”,熟知的有www.baidu.com

5.子网掩码
    ①子网掩码不能单独存在,它必须结合IP地址一起使用
    ②子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分子网掩码的设定必须遵循一定的规则
    ③与IP地址相同,子网掩码的长度也是32位
    ④网络掩码与ip地址相与就是网络号,假设IP地址为192.168.1.1子网掩码为255.255.255.0,那么此网络号就是192.168.1.0

6.tcp和端口
    IP地址是网络层的寻址方式,端口是传输层的寻址方式

socket(插口,套接字)简介

1.什么是socket
    ①socket(套接字)接口是应用程序与TCP/IP协议栈的接口,它定义了一组函数或例程来支持TCP/IP网络应用程序开发
    ②socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:
    ③它能实现不同主机间的进程间通信

2.创建socket
    ①在 Python 中 使用socket 模块的函数 socket 就可以完成socket.socket(AddressFamily, Type)
    ②Address Family:可以选择 AF_INET(用于 Internet 进程间通信) 或者 AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET
    ③Type:套接字类型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议)

udp介绍

1.UDP介绍
    UDP采用无连接的方式来提供通信服务,是传输层中最简单的协议

2.UDO特点
    ①UDP是一个简单的,面向数据报的传输层协议,无连接协议,简单地把TCP/IP应用层得到的消息打包到数据板中
    ②UDP没有提供任何类型的内置出错检查或重传能力来提高可靠性,这种方法称为尽最大能力努力交付
    ③由于通讯不需要连接,所以可以实现广播发送
    ④UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内
    ⑤适用情况:
        UDP是面向消息的协议,通信时不需要建立连接,数据的传输自然是不可靠的,UDP一般用于多点通信和实时的数据业务,比如:
        语音广播
        视频
        QQ
        TFTP(简单文件传送)
        SNMP(简单网络管理协议)
        RIP(路由信息协议,如报告股票市场,航空信息)
        DNS(域名解释)

3.DNS(域名系统,使用UDP协议工作)
    ①功能:每个IP地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台IP设备的IP地址,只要记住相对直观有意义的主机名就行了。这就是DNS协议的功能
    ②主机名到IP地址的映射有两种方式:
        静态映射,每台设备上都配置主机到IP地址的映射,各设备独立维护自己的映射表,而且只供本设备使用;
        动态映射,建立一套域名解析系统(DNS),只在专门的DNS服务器上配置主机到IP地址的映射,网络上需要使用主机名通信的设备,首先需要到DNS服务器查询主机所对应的IP地址。

4.DHCP协议(动态主机配置协议,使用UDP协议工作)
    动态主机配置协议(DHCP)是在TCP/IP网络上使计算机获得它所需要的所有配置信息的协议,不仅允许计算机快读动态地获取IP地址和子网掩码,还可以获取其他网络配置信息,如DSN服务器  
       DHCP采用UDP作为传输协议,DHCP服务器使用67号端口,客户机使用68号端口

5.SNMP协议(简单网络管理协议,使用UDP协议工作)
    最早提出的网络管理协议,也是最早提出的网络管理协议,其前身是简单网关监控协议,用来对通信线路进行管理
    简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个应用层协议(application layer protocol)、数据库模型(database schema)和一组资源对象。该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况

6.UDP的通信过程
Snip20160902_79.png

TFTP项目  

1.TFTP协议介绍
    ①TFTP(Trivial File Transfer Protocol,简单文件传输协议)
    ②是TCP/IP协议族中的一个用来在客户端与服务器之间进行简单文件传输的协议
    ③特点:
        简单
        占用资源小
        适合传递小文件
        适合在局域网进行
        传递端口号为69
        基于UDP实现

2.TFTP下载过程
    ①TFTP服务器默认监听69号端口
    ②当客户端发送下载请求(即读请求)时,需要向服务器的69端口发送
    ③服务器若批准此请求,则使用一个新的、临时的 端口进行数据传输
    ④当服务器找到需要现在的文件后,会立刻打开文件,把文件中的数据通过TFTP协议发送给客户端
    ⑤如果文件的总大小较大(比如3M),那么服务器分多次发送,每次会从文件中读取512个字节的数据发送过来
    ⑥因为发送的次数有可能会很多,所以为了让客户端对接收到的数据进行排序,所以在服务器发送那512个字节数据的时候,会多发2个字节的数据,用来存放序号,并且放在512个字节数据的前面,序号是从1 开始的
    ⑦因为需要从服务器上下载文件时,文件可能不存在,那么此时服务器就会发送一个错误的信息过来,为了区分服务发送的是文件内容还是错误的提示信息,所以又用了2个字节 来表示这个数据包的功能(称为操作码),并且在序号的前面
    操作码    功能
        1        读请求,即下载
        2        写请求,即上传
        3        表示数据包,即DATA
        4        确认码,即ACK
        5        错误

3.怎么完成下载
    ①创建一个空文件
    ②向里面写数据
    ③关闭

4.什么样的情况下知道了服务器发送完毕
    如果接收到的数据总长度小于516那么意味着 发送完毕

5.构造下载请求数据

cmd_buf = struct.pack("!H8sb5sb",1, "test.jpg",0,"octet",0)

    解释:!表示大端格式组织(上网),H表示占用两个字节(帮1占坑),8s占用8个字节(帮test.jpg占坑),b占用一个字节(帮0占坑)

TCP编程

1.TCP和UDP相关介绍  
    ①tcp:传输控制协议
    ②特点:稳定
        相对于udp而言,要慢一些
        web服务器都是使用的tcp
    ③通信模型:udp通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,"打电话"
    ④udp:用户数据报协议
    ⑤特点:不稳定
        适当比tcp要快一些
    ⑥通信模型:udp通信模型中,在通信开始之前,不需要建立相关的链接,只需要发送数据即可,类似于生活中,"写信"

2.tcp服务器构建流程
    ①socket创建一个套接字
    ②bind绑定ip和port
    ③listen使套接字变为可以被动链接
    ④accept等待客户端的链接
    ⑤recv/send接收发送数据
    ⑥如果接收到的客户端发送的数据长度为0,那么意味着客户端通过调用close下线

3.tcp客户端构建流程
    ①如果想要完成一个tcp客户端的功能,需要的流程如下:  
    ②socket创建一个套接字
    ③连接connect服务器
    ④send/recv接收和发送数据(不需要再填写地址了)
    ⑤关闭套接字      

4.tcp特性总结
    ①有序性:为每个数据包编排序号,使接收端能够判断先后到达的次序混乱的数据包的原本顺序
    ②正确性:tcp用一个checksum函数来检验数据是否有错误,在发送和接收时都要计算校验和,这使得接收端能够判断数据是否在传输过程中被破坏
    ③可靠性:发送端采用超时重传并有确认机制识别错误或丢失数据,进行重发
    ④可控性:接收端和发送端的网络质量通常不同,tcp采用滑动窗口协议和拥塞控制算法使数据的发送速度达到合理值

5.C/S和B/S
    ①C/S,即client/server,是当前大多数网络编程所使用的架构模型,它可以将任务合理分配到client端和server端来实现,降低了系统的通信开销,它们常常处在相距很远的两台计算机上,client程序的任务是将用户的要求提交给server程序,再将server程序返回的结果以特定的形式显示给用户,server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序
    ②B/S,即Browser/Server,是web兴起后的一种网络架构模式,B/S实验web浏览器作为客户端的应用软件,所以B/S可以看作C/S的一种特殊情况,B/S架构是伴随因特网的兴起而兴起的,是对C/S的一种改进
    ③如:Django、Tornado、和Flask均是以B/S架构为主要开发目标的框架,Twisted主要面向C/S架构系统

应用层协议

1.HTTP(超文本传输协议)默认使用TCP的80端口标识

2.FTP(文件传输协议)默认使用TCP的80端口标识

3.SMTP(简单邮件传输协议)默认使用TCP的25端口标识

4.POP3(邮局协议)默认使用TCP的110端口

5.HTTPS默认使用TCP的443端口

6.DNS使用UDP的53端口

7.远程桌面协议(RDP)默认使用TCP的3389端口

8.Telnet使用TCP的23号端口

9.windows访问共享资源使用TCP的445端口

网络常见问题

1.两台电脑之间能通信的前提是什么?      
    处在同一网段(网络号)内

2.多台电脑为什么不能把网线剪开链接在一起?  
    数据是通过电信号控制的,如果一起发送一起接收容易乱

3.链接多台电脑的hub(集线器)有什么作用?        
    实现多台电脑连接在一起,实现小型局域网    

4.集线器和交换机的区别?   
    集线器收到的所有数据包都是以广播的形式发送,交换机有学习的功能,如果是已经通信过的,这些时候就不是广播

5.网络协议
    ①ICMP:ping一个电脑
    ②arp:获取一个电脑上的网卡号,就是mac地址(物理地址、硬件地址,数据链路层)
    ③rarp:根据mac地址找ip

6.把域名解析成ip地址的步骤,以百度为例
    ①先要解析出baidu.com对应的ip地址
        先知道默认网关的mac,使用arp获取默认网关的mac地址
        组织数据发送给默认网关(ip还是dns服务器的ip,但是mac地址是默认网关的mac地址)
        默认网关具有转发数据的能力,让数据转发给路由器
        路由器根据自己的路由协议,来选择一个合适的较快的路径转发给目的网关
        目的网关(dns服务器所在的网关),把数据转发给dns服务器
    ②得到了baidu.com对应的ip地址后,会发送tcp的三次握手,进行连接
    ③使用http协议发送请求数据给web服务器
    ④web服务器收到数据请求之后,通过查询自己的服务器得到相应的结果,原路返回给浏览器
    ⑤浏览器接收到数据后通过浏览器的自己的渲染功能来显示这个网页
    ⑥浏览器关闭tcp连接,即4次挥手完成整个访问过程

Tcp常见问题

1.tcp三次握手
    ①三次握手协议指的是在发送数据的准备阶段,服务器端和客户端之间需要进行三次交互
    ②第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认
    ③第二次握手:服务器收到syn包,必须确认客户的syn(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
    ④第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

2.tcp四次挥手        
    ①TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
    ②服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
    ③服务器关闭客户端的连接,发送一个FIN给客户端。
    ④客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

3.tcp和udp的区别
    在tcp中,如果有一方收到了方的数据,一定会发送ack确认包给发送方,而在udp中,没有这个过程,因此导致了tcp稳定,udp不稳定

4.tcp长连接和短连接
    TCP短连接:
        ①client 向 server 发起连接请求
        ②server 接到请求,双方建立连接
        ③client 向 server 发送消息
        ④server 回应 client
    TCP长连接:
        ①client 向 server 发起连接
        ②server 接到请求,双方建立连接
        ③client 向 server 发送消息
        ④server 回应 client
        ⑤一次读写完成,连接不关闭
        ⑥后续读写操作...
        ⑦长时间操作之后client发起关闭请求   
    TCP长/短连接的优点和缺点:
        ①长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接。
        ②client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致server端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,这样可以完全避免某个蛋疼的客户端连累后端服务。
        ③短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制。
        ④但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。

5. tcp的十种状态
三次握手、四次挥手.png

HTTP协议介绍

1.使用谷歌/火狐浏览器分析  
    在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来
    HTML是一种用来定义网页的文本,会HTML,就可以编写网页
    HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信

2.HTTP的请求方式
    GET(获取数据)
    POST(修改数据)
    PUT(保存数据)
    DELETE(删除)
    OPTION(询问服务器的某种支持特性
    HEAD(返回报文头)

3.浏览器解析过程
    当浏览器读取到新浪首页的HTML源码后,它会解析HTML,显示页面,然后,根据HTML里面的各种链接,再发送HTTP请求给新浪服务器,拿到相应的图片、视频、Flash、JavaScript脚本、CSS等各种资源,最终显示出一个完整的页面。所以我们在Network下面能看到很多额外的HTTP请求

4. HTTP请求
    步骤1:浏览器首先向服务器发送HTTP请求,请求包括:
        ①方法:GET还是POST,GET仅请求资源,POST会附带用户数据;
        ②路径:/full/url/path;
        ③域名:由Host头指定:Host: www.sina.com以及其他相关的Header;
        ④如果是POST,那么请求还包括一个Body,包含用户数据
    步骤2:服务器向浏览器返回HTTP响应,响应包括:
        ①响应代码:200表示成功,3xx表示重定向,4xx表示客户端发送的请求有错误,5xx表示    服务器端处理时发生了错误;
        ②响应类型:由Content-Type指定;
        ③以及其他相关的Header;
        ④通常服务器的HTTP响应会携带内容,也就是有一个Body,包含响应的内容,网页的HTML ,源码就在Body中。
    步骤3:如果浏览器还需要继续向服务器请求其他资源,如图片,就再次发出HTTP请求,重复步骤1、2
        Web采用的HTTP协议采用了非常简单的请求-响应模式,从而大大简化了开发。当我们编写一个页面时,我们只需要在HTTP请求中把HTML发送出去,不需要考虑如何附带图片、视频等,浏览器如果需要请求图片和视频,它会发送另一个HTTP请求,因此,一个HTTP请求只处理一个资源(此时就可以理解为TCP协议中的短连接,每个链接只获取一个资源,如需要多个就需要建立多个链接)
        为了分散服务器的压力,所以一个网站往往有多台服务器,比如一台存放图片,一台存放视频等

5.http格式
    每个HTTP请求和响应都遵循相同的格式,一个HTTP包含Header和Body两部分,其中Body是可选的。
    HTTP协议是超文本传输文本协议,所以,它的格式也非常简单
    ①HTTP GET请求的格式

GET /path HTTP/1.1
Header1: Value1
Header2: Value2
Header3: Value3

    每个Header一行一个,换行符是\r\n。

    ②HTTP POST请求的格式

POST /path HTTP/1.1
Header1: Value1
Header2: Value2
Header3: Value3
body data goes here...

    当遇到连续两个\r\n时,Header部分结束,后面的数据全部是Body
    ③HTTP响应的格式

200 OK
Header1: Value1
Header2: Value2
Header3: Value3
body data goes here...

    HTTP响应如果包含body,也是通过\r\n\r\n来分隔的。
    ④Body的数据类型由Content-Type头来确定,如果是网页,Body就是文本,如果是图片,Body就是图片的二进制数据

6.服务器动态资源请求
    WSGI
        ①怎么可以不修改服务器和架构代码而确保可以在多个架构下运行web服务器呢?答案就是 Python Web Server Gateway Interface (或简称 WSGI,读作wizgy)
        ②WSGI允许开发者将选择web框架和web服务器分开。可以混合匹配web服务器和web框架,选择一个适合的配对。比如,可以在Gunicorn 或者 Nginx/uWSGI 或者 Waitress上运行 Django, Flask, 或 Pyramid。真正的混合匹配,得益于WSGI同时支持服务器和架构
        ③web服务器必须具备WSGI接口,所有的现代Python Web框架都已具备WSGI接口,它让你不对代码作修改就能使服务器和特点的web框架协同工作。
        ④WSGI由web服务器支持,而web框架允许你选择适合自己的配对,但它同样对于服务器和框架开发者提供便利使他们可以专注于自己偏爱的领域和专长而不至于相互牵制。其他语言也有类似接口:java有Servlet API,Ruby 有 Rack
    定义WSGI接口
        WSGI接口定义非常简单,它只要求Web开发者实现一个函数,就可以响应HTTP请求。我们来看一个最简单的Web版本的Hello World!

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return 'Hello World!'

    上面的application()函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数:
        ①environ:一个包含所有HTTP请求信息的dict对象;
        ②start_response:一个发送HTTP响应的函数
        整个application()函数本身没有涉及到任何解析HTTP的部分,也就是说,把底层web服务器解析部分和应用程序逻辑部分进行了分离,这样开发者就可以专心做一个领域了
        application()函数必须由WSGI服务器来调用。有很多符合WSGI规范的服务器。而我们此时的web服务器项目的目的就是做一个极可能解析静态网页还可以解析动态网页的服务器,两个参数environ和start_response我们没法提供,返回的str也没法发给浏览器

FTP协议

1.文本传输协议FTP  
    提供在网络上的主机之间共享计算机程序或数据,向用户屏蔽不同主机中各文件存储系统的细节,以基于TCP采用面向连接的方式在客户和服务器之间提供可靠和高效的数据传输

2.FTP协议的工作原理
    ①FTP工作在TCP/IP模型的应用层,采用TCP面向连接为文件数据的传输提供了可靠的报保证
    ②FTP采用客户机-服务器模式,客户端需要安装FTP客户程序,服务器端需要启用FTP服务
    ③FTP客户与服务器之间要建立双重连接,一是控制连接,使用TCP端口21,用来传输控制信息,一个是数据连接,使用TCP端口20,用于传递文件数据。FTP建立双重连接的原因在于FTP是一个交互式会话系统,客户端每次调用FTP,便于与服务器建立一个会话,会话以控制连接来维持,控制连接负责传输控制信息
    ④Telnet程序是Internet上常用的远程登录工具,使用TCP端口23,其协议工作过程采用了选项协商的方式,Telnet采用的NVT ASCII字符集也用在其他的网络应用中

打赏 蒋振飞

取消

感谢您的支持,我会继续努力的!

扫码支持
一分也是爱     一块不嫌多

点击 支付宝 或 微信 打赏蒋振飞

打开支付宝扫一扫,即可进行扫码打赏哦

评论列表