Python 网络编程 (全)

计算机网络html

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

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

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

网络层的协议分析 算法

在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数据报了windows

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请求,重复步骤一、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字符集也用在其余的网络应用中

相关文章
相关标签/搜索