@mrz1
2018-02-01T12:56:14.000000Z
字数 9078
阅读 1309
笔记



套接字相关的系统调用:
| 名字 | 含义 | 名字 | 含义 |
|---|---|---|---|
| socket() | 创建一个套接字 | bind() | 绑定IP和端口 |
| listen() | 监听 | accept() | 接收请求 |
| connect() | 请求连接建立 | write() | 发送 |
| read() | 接收 | close() | 关闭连接 |
服务器端tcpserver.py
#!/usr/bin/pythonimport socketHOST='172.18.2.232'PORT=9527BUFFER=4096sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)sock.bind((HOST,PORT))sock.listen(3)print('tcpServer listen at: %s:%s\n\r' %(HOST,PORT))while True:client_sock,client_addr=sock.accept()print('%s:%s connect' %client_addr)while True:recv=client_sock.recv(BUFFER)if not recv:client_sock.close()breakprint('[Client %s:%s said]:%s' %(client_addr[0],client_addr[1],recv))client_sock.send('tcpServer has received your message')sock.close()
服务器端tcpclient.py
#!/usr/bin/pythonimport socketHOST='172.18.2.232'PORT=9527BUFFER=4096sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)sock.connect((HOST,PORT))sock.send('hello, tcpServer!')recv=sock.recv(BUFFER)print('[tcpServer said]: %s' % recv)sock.close()



http: Hyper Text Transfer Protocol, 80/tcpMIME:Multipurpose Internet Mail Extensions多用途互联网邮件扩展 /etc/mime.types格式:major/minor text/plain text/html text/css image/jpeg image/png video/mp4 application/javascriptlinux ↓[root@centos7 ~]$rpm -ql mailcap/etc/mailcap/etc/mime.types //文件有MIME格式/usr/share/doc/mailcap-2.1.41/usr/share/doc/mailcap-2.1.41/COPYING/usr/share/doc/mailcap-2.1.41/NEWS/usr/share/man/man4/mailcap.4.gz
工作机制:http请求:http requesthttp响应:http response一次http事务:请求<-->响应Web资源:web resource一个网页由多个资源构成,打开一个页面,会有多个资源展示出来,但是每个资源都要单独请求。因此,一个"Web 页面"通常并不是单个资源,而是一组资源的集合静态文件:无需服务端做出额外处理文件后缀:.jpg, .html, .txt, .js, .css, .mp3, .avi动态文件:服务端执行程序,返回执行的结果文件后缀:.asp, .php, .jsp提高HTTP连接性能并行连接:通过多条TCP连接发起并发的HTTP请求持久连接:keep-alive,长连接,重用TCP连接,以消除连接和关闭的时延,以事务个数和时间来决定是否关闭连接管道化连接:通过共享TCP连接发起并发的HTTP请求复用的连接:交替传送请求和响应报文(实验阶段)



<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag> 甲乙丙三人在同一台通过ADSL上网的电脑上(中间没有断网),分别访问www.chuyuni.cn网站,并且每人各浏览了2个页面。
那么网站的流量统计是:IP:1 PV:6 UV:1若三人都是ADSL重新拨号后,各浏览了2个页面,则IP:3 PV:6 UV:1

一次完整的http请求处理过程
1、建立连接:接收或拒绝连接请求2、接收请求:接收客户端请求报文中对某资源的一次请求的过程3、处理请求:服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理元数据:请求报文首部<method> <URL> <VERSION>HEADERS格式name:value<request body>示例:Host: www.chuyuni.cn 请求的主机名称Server: Apache/2.4.7HTTP常用请求方式,MethodGET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS4、访问资源:服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源资源放置于本地文件系统特定的路径:DocRootDocRoot → /var/www/html/var/www/html/images/logo.jpghttp://www.magedu.com/images/logo.jpgweb服务器资源路径映射方式:(a) docroot (b) alias(c) 虚拟主机docroot(d) 用户家目录docroot5、构建响应报文:一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体1)响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:描述了响应主体MIME类型的Content-Type首部描述了响应主体长度的Content-Length实际报文的主体内容2)URL重定向:web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径永久重定向:http://www.360buy.com临时重定向:http://www.taobao.com3)MIME类型:Web服务器要负责确定响应主体的MIME类型。多种配置服务器的方法可将MIME类型与资源管理起来魔法分类:Apache web服务器可以扫描每个资源的内容,并将其与一个已知模式表(被称为魔法文件)进行匹配,以决定每个文件的MIME类型。这样做可能比较慢,但很方便,尤其是文件没有标准扩展名时显式分类:可以对Web服务器进行配置,使其不考虑文件的扩展名或内容,强制特定文件或目录内容拥有某个MIME类型类型协商:有些Web服务器经过配置,可以以多种文档格式来存储资源。在这种情况下,可以配置Web服务器,使其可以通过与用户的协商来决定使用哪种格式(及相关的MIME类型)"最好"6、发送响应报文:Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束了7、记录日志:最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务
单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应

http服务器程序httpd apache nginx lighttpd应用程序服务器IIS .asp tomcat .jspjetty 开源的servlet容器,基于Java的web容器Resin CAUCHO公司,支持servlets和jsp的引擎webshpere(IBM), weblogic(BEA), jboss,oc4j(Oracle)
httpd20世纪90年代初,国家超级计算机应用中心NCSA开发1995年开源社区发布apache(a patchy server)ASF: apache software foundationFSF:Free Software Foundation特性:高度模块化:core + modulesDSO: Dynamic Shared Object 动态加/卸载MPM:multi-processing module多路处理模块

prefork:多进程I/O模型,每个进程响应一个请求,默认模型一个主进程:生成和回收n个子进程,创建套接字,不响应请求多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个

worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n

event:事件驱动模型(worker模型的变种)一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求:m*n,有专门的线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力httpd-2.2: event测试版,centos6默认httpd-2.4:event稳定版,centos7默认
进程角色

httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。
虚拟主机 IP、Port、FQDNCGI:Common Gateway Interface,通用网关接口反向代理负载均衡路径别名丰富的用户认证机制basicdigest支持第三方模块
版本:CentOS6: 2.2CentOS 7: 2.4安装方式:rpm:centos发行版,稳定,建议使用编译:定制或特殊需求CentOS 6程序环境:httpd-2.2配置文件:/etc/httpd/conf/httpd.conf/etc/httpd/conf.d/*.conf检查配置语法:httpd–tservice httpd configtest
服务脚本:/etc/rc.d/init.d/httpd脚本配置文件:/etc/sysconfig/httpd服务控制和启动:chkconfig httpd on|offservice {start|stop|restart|status|configtest|reload} httpd站点网页文档根目录:/var/www/html模块文件路径:/etc/httpd/modules/usr/lib64/httpd/modules主程序文件:/usr/sbin/httpd/usr/sbin/httpd.worker/usr/sbin/httpd.event主进程文件:/etc/httpd/run/httpd.pid日志文件目录:/var/log/httpdaccess_log: 访问日志error_log:错误日志帮助文档包:httpd-manual172.18.0.1/manual
httpd配置文件的组成:# grep "Section" /etc/httpd/conf/httpd.conf### Section 1: Global Environment 全局设置### Section 2: 'Main' server configuration 主服务器### Section 3: Virtual Hosts 虚拟主机配置格式:directive valuedirective: 不区分字符大小写value: 为路径时,是否区分大小写,取决于文件系统1、显示服务器版本信息ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|FullServerTokens Prod[uctOnly] :Server: ApacheServerTokens Major: Server: Apache/2ServerTokens Minor: Server: Apache/2.0ServerTokens Min[imal]: Server: Apache/2.0.41ServerTokens OS: Server: Apache/2.0.41 (Unix)ServerTokens Full (or not specified): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2This setting applies to the entire server and cannot be enabled or disabled on a virtualhost-by-virtualhost basis.After version 2.0.44, this directive also controls the information presented by the ServerSignaturedirective.建议使用:ServerTokens OS 改为 ServerTokens Prod2、修改监听的IP和PortListen [IP:]PORT(1) 省略IP表示为本机所有IP(2) Listen指令至少一个,可重复出现多次Listen 80Listen 8080示例:Listen 192.168.1.100:8080Lsten803、持久连接Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接断开条件:数量限制:100时间限制:以秒为单位,httpd-2.4 支持毫秒级副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应折衷:使用较短的持久连接时间设置:KeepAlive On|OffKeepAliveTimeout 15MaxKeepAliveRequests 100测试:telnet WEB_SERVER_IP PORTGET /URL HTTP/1.1Host: WEB_SERVER_IP4、MPM(Multi-Processing Module)多路处理模块prefork, worker, event(试验阶段)httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持确认方法:psaux | grep httpd默认为/usr/sbin/httpd, 即prefork模式查看模块列表查看静态编译的模块httpd -l查看静态编译及动态装载的模块httpd –M动态模块加载:不需重启即生效动态模块路径 /usr/lib64/httpd/modules/