1、web service:
运行在用户空间
应用层协议:http、https
传输层协议:tcp、udp、sctp
2、传输层端口划分:
0-1023:特权端口,众所周知的,永久的分配给固定的应用使用。
1024-41951:亦为注册端口,但要求不是特别严格,分配给程序注册为某应用程序使用;如mysql:tcp3306
41952+:客户端程序随机使用的端口,动态端口,或私有端口。其范围定义在//proc/sys/net/ipv4/ip_local_port_range;
3、BSD socket:IPC的一种实现,允许位于不同主机(也可以是同一主机)上的进程之间进行通信,
socket API:封装了内核中的socket通讯相关的系统调用。
3.1、socket类型:
根据传输层协议划分
socket_stream:tcp套接字
socket_dgram:udp套接字
socket_raw:裸套接字
根据套接字所使用的地址格式(socket domain)划分:
AF_INET:address family,ipv4
AF_INET6:address family,ipv6
AF_unix:同一主机上的不同进程间,基于socket套接字通讯使用的一种地址;unix_sock(不进行向tcp下层封装,而是将进程放在内存中作为一个文件,供其他进程访问通讯)
4、TCP FSM:有限状态机
closed:关闭
listen:监听
SYN_SENT:
SYN_RECV
establish
FIN_WAIT1 :分手等待阶段1
CLOSE_WAIT
FIN_WAIT2
LAST_WAIT
TIME_WAIT
CLOSED
5、tcp协议的特性:
①、建立连接:三次握手
②、将数据打包成段,检验和(crc32)
③、有确认、重传、超时机制
④、排序:基于逻辑号控制
⑤、流量控制:滑动窗口算法
⑥、拥塞控制:慢启动和拥塞避免算法
6、http:hyper text transfer protocol:应用层协议,是一种文本协议,使用tcp:80端口,
html:hyper text mark language:超文本标记语言,它是一种编程语言。
css:cascading style sheet :定义网页样式
js:javascript;脚本开发语言,客户端脚本(在客户端运行),源超文本文件下载到客户端引擎上运行;和java没有关系;
7、wen服务有两种开发技术:
客户端技术:JavaScript
服务端技术:php、jsp (服务端脚本,在服务端运行)
8、http:
文本协议,意味着传输时需要将html转换成ASCII码传送,图片是二进制存储的,早期是不能用http传输的。
协议版本:
http/0.9 :原型版本,功能少且不足、简陋
http/1.0 :引入了cache、mime、method
mime:multipurpose internet mail extension:多用途互联网邮件拓展协议;它能够传输非文本信息,对不同格式文件进行编码
method:GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS...等等
http/1.1:增强了缓存功能
http/2.0:
http协议工作模式:
http请求报文:http request
http响应报文:http response
注意:一次http事物:由一个http request和对应的一次http response组成的事件。
一次http请求报文和一次http响应报文,请求和响应的报文内容是一个web资源。
web资源:web resource,web由(很多)资源组成。
静态资源:图片、jpg、png、text、js、css、mp3、
静态资源无需服务器做出额外处理,客户端请求,服务端直接发送资源
动态资源:服务端需要通过执行程序做出处理,发送给客户端的是程序的运行的结果,如 .php、.jsp
注意:一个页面展示的资源可能有多个;每个资源都需要单独请求。
web资源的标识机制:URL,uniform resource locator:统一资源定位符,用于描述服务器某特定资源的位置。
URL格式:scheme://server[:port]/PATH/TO/SOMESOURCE
URL格式示例:http://www.sina.com.cn/index.html
scheme:指明协议,http、ftp等
server[:port] :www.sina.com.cn //默认80端口
文件路径 :index.html;可省略,默认路径(主页面)
9、一次完整的http请求处理过程(服务器端)
①、建立或处理连接:接受请求或拒绝请求
②、接收请求:接收来自于网络上的主机请求报文中对某些特定资源的一次请求的过程,经过三次握手和四次断开。
③、处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息
④、访问资源:获取请求报文中请求的资源(一般是到硬盘上查找资源,需要磁盘I/O,一般是文档根路径)
⑤、构建响应报文
⑥、发送响应报文
⑦、记录日志:用于分析用户行文
9.2、接收请求的模型:
并发访问响应模型
单进程I/O模型:启动一个进程处理用户请求,这意味着,一次只能处理一个请求,多个请求被串行响应。
多进程I/O模型结构:并行启动多个进程,每个进程响应一个请求;c10k:达到1万个请求就会有瓶颈。
复用的I/O模型结构:一个进程响应n个请求;
多线程模式:一个进程生成n个线程,一个线程处理一个请求,一个进程生成的线程是有限的
事件驱动(event-driven):一个进程直接响应n个请求,而不用借助于线程
复用的多进程I/O模型结构:启动多个(m)个进程,每个进程生成(n)个线程;因此,响应的请求数量为:m*n
注意:此处I/O模型是网络I/O,而不是磁盘的I/O
9.3、处理请求:分析请求报文的http请求报文首部
http协议:
http请求报文首部
http响应报文首部
请求报文首部的格式:
HEADERS //请求的头部,由(name:value)组成
(如图,摘自百度)
httpd请求处理中的连接模式:
长连接:保持连接,keep-alive
短连接:非保持连接:
保持连接:通过时间或数量进行限制,已达到访问平衡。
9.4、访问资源:获取请求报文中请求的资源。
web服务器:即存放了web资源的主机,负责向请求者提供对方请求的静态资源或动态资源运行生成的结果,这些资源通常应该放置于本地文件系统某路径下:此路径为DOCROOT,DOCROOT会映射为url请求的根。
示例:定义:/var/www/html为DOCROOT,在其下放置:image/logo.jpg
则访问的url为:http://www.magedu.com/image/logo.spg
web服务器的资源路径映射方式:
a、docroot
b、alias:路径别名
c、虚拟主机的docroot
d、用户家目录的docroot
-------------------------------------------------------------------------------
10、http服务器程序,http(协议实现的工具程序)
处理静态内容的程序:
httpd(apache)
nginx
lighttpd
应用程序服务器:
IIS:可以处理静态、动态内容
tomcat:处理.jsp页面程序
11、httpd的安装和使用 (httpd.apache.org)
ASF:apache software foundation
apache:a patchy server
11.1、httpd的特性
高度模块化:core+modules;核心只提供最基本的功能,通过添加模块引入更多内容
模块基于DSO机制:dynamic shared object,支持动态装载、卸载目录主体
MPM:multipath processing modules,多路处理模块;有三种:prefork、worker、event
prefork:多进程模型;每个进程响应一个请求。
一个主进程:负责生成子进程以及回收子进程、负责创建套接字、负责接收请求并将其派发给子进程进行处理。
n个子进程:每个子进程处理一个请求,但不负责接收请求
prefork工作模型:会预先生成n个空闲进程,随时等待用于响应用户请求,定义最大空闲和最小空闲。
worker:多进程多线程模型,每个线程处理一个用户请求
一个主进程:负责生成子进程以及回收子进程、负责创建套接字、负责接收请求并将其派发给某子进程进行处理。
多个子进程:每个子进程负责生成多个线程
每个线程:负责响应用户请求
并发响应数量:m*n,其中m表示子进程数量,n表示每个子进程所能创建的最大线程数量。
event:事件驱动模型,多进程模型,每个进程响应多个请求。
一个主进程:负责生成子进程以及回收子进程、负责创建套接字、负责接收请求并将其派发给某子进程进程处理。
子进程:基于事件驱动机制,直接响应多个请求。
需要注意的是:httpd2.2对于event仍为测试模型,httpd2.4对于event可用于生产环境中。
11.2、httpd的功能特性:
支持CGI(common gateway interface)
支持虚拟主机:ip、port、FQDN
支持反向代理
支持负载均衡
支持路径别名
支持丰富的用户认证机制:basic认证、digest消息摘要
支持第三方模块
等等...
11.3、httpd的程序版本:
httpd1.3:官方以停止维护
httpd2.0:
httpd2.2:centos6默认安装版本
httpd2.4:目前最新稳定版
11.4、安装httpd程序包
安装方式:
rpm包:centos发行版中直接提供,建议采用rpm包安装。
编译安装:定制新功能,或其他原因,采用编译安装。
11.5、centos6、centos7安装后相应文件对比
centos6 | centos7 | 备注 | |
配置文件 |
/etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf |
/etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf |
|
服务脚本 | /etc/rc.d/init.d/httpd |
/usr/lib/systemd/system/httpd.service | |
脚本配置文件 | /etc/sysconfig/httpd | ||
主程序文件 | /usr/sbin/httpd /usr/sbin/httpd.event /usr/sbin/httpd.worker |
/usr/sbin/httpd |
httpd2.4支持pmp动态切换 |
日志文件 | /var/log/httpd{acces_log,error_log} | /var/log/httpd{acces_log,error_log} | |
模块文件路径 |
/usr/lib64/httpd/modules/ | /etc/httpd/conf.modules.d/*.conf |
|
站点文档 |
/var/www/html |
/var/www/html | |
服务控制 |
service {stats |stop|restart|status|reload|configtest} httpd |
systemctl httpd {stats |stop|restart|status} |
|
开机启动 |
chkconfig httpd on | systemctl enable httpd.service |
}