IANA:互联网地址分配机构
0-1023:众所周知,永久地分配给固定的应用使用,特权端口;
1024-41951:亦为注册端口,但要求不是特别严格,分配给程序注册为某应用使用;3306/tcp, 11211/tcp;
41952+:客户端程序随机使用的端口,动态端口,或私有端口;其范围定义在
/proc/sys/net/ipv4/ip_local_port_range;
BSD Socket:IPC的一种实现,允许位于不同主机(也可以是同一主机)上的进程之间进行通信;
Socket API(封装了内核中的socket通信相关的系统调用)
SOCK_STREAM: tcp套接字
SOCK_DGRAM: UDP套接字
SOCK_RAW:raw套按字
根据套按字所使用的地址格式,Socket Domain:
AF_INET:Address Family,IPv4
AF_INET6:ipv6
AF_UNIX:同一主机上的不同进程间基于socket套接字通信使用的一种地址;Unix_SOCK
TCP FSM: CLOSED, LISTEN,SYN_SENT, SYN_RECV, ESTABLISHED, FIN_WAIT1, CLOSE_WAIT, FIN_WAIT2, LAST_ACK, TIMEWAIT, CLOSED
TCP协议的特性:
建立连接:三次握手;
将数据打包成段:校验和(CRC32)
确认、重传及超时;
排序:逻辑序号;
流量控制:滑动窗口算法;
拥塞控制:慢启动和拥塞避免算法;
http:hyper text transfer protocol超文本传输协议,是一种应用层协议, 端口是80/tcp, 文本协议
[扩展]
html:hyper text mark language, 编程语言,超文本标记语言;
<html> <head> <title>TITLE</title> </head> <body> <h1></h1> <p> blabla... <a href="http://www.magedu.com/download.html"> bla... </a> </p> <h2>...</h2> </body> </html>
css: Cascading Style Sheet
js:JavaScript, 客户端脚本;
http协议版本:
http/0.9:原型版本,功能简陋
http/1.0: cache, MIME, method,
MIME:Multipurpose Internet Mail Extesion
method:GET, POST, HEAD,PUT, DELETE,TRACE, OPTIONS
http/1.1:增强了缓存功能;
spdy
http/2.0:
rfc
工作模式:
http请求报文:http request
http响应报文: http response
一次http事务:请求<-->响应
web资源:web resource
静态资源(无须服务端做出额外处理): .jpg, .png, .gif, .html, txt, .js, .css, .mp3, .avi
动态资源(服务端需要通过执行程序做出处理,发送给客户端的是程序的运行结果): .php, .jsp
注意:一个页面中展示的资源可能有多个;每个资源都需要单独请求;
资源的标识机制:URL
Uniform Resource Locator统一资源定位符:用于描述服务器某特定资源的位置;
例如: http://www.sina.com.cn/index.html
Scheme://Server[:Port][/PATH/TO/SOME_RESOURCE]
一次完整的http请求处理过程:
(1) 建立或处理连接:接收请求或拒绝请求;
(2) 接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程;
(3) 处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息;
(4) 访问资源:获取请求报文中请求的资源;
(5) 构建响应报文:
(6) 发送响应报文:
(7) 记录日志:
接收请求的模型:
并发访问响应模型:
单进程I/O模型:启动一个进程处理用户请求;这意味着,一次只能处理一个请求,多个请求被串行响应;
多进程I/O结构:并行启动多个进程,每个进程响应一个请求;
复用的I/O结构:一个进程响应n个请求;
多线程模式:一个进程生成n个线程,一个线程处理一个请求;
事件驱动(event-driven):一个进程直接n个请求;
复用的多进程I/O结构:启动多个(m)个进程,每个进程生成(n)个线程;
响应的请求的数量:m*n
处理请求:分析请求报文的http请求报文首部
http协议:
http请求报文首部
http响应报文首部
请求报文首部的格式:
<method> <URL> <VERSION>
HEADERS: (name: value)
<request body>
访问资源:获取请求报文中请求的资源
web服务器,即存放了web资源的主机,负责向请求者提供对方请求的静态资源,或动态资源运行生成的结果;这些资源通常应该放置于本地文件系统某路径下;此路径称为DocRoot;
/var/www/html/:
web服务器的资源路径映射方式:
(a) docroot
(b) alias
(c) 虚拟主机的docroot
(d) 用户家目录的docroot
http请求处理中的连接模式:
保持连接(长连接):keep-alive
时间:
数量:
非保持连接(短连接):
http服务器程序:
httpd (apache)
nginx
lighttpd(轻量级)
应用程序服务器:
IIS: .Net 都是微软的
tomcat: .jsp
httpd的安装和使用:
ASF: apache software foundation(apache软件基金会)
httpd:apache
a patchy server = apache
httpd
httpd的特性:
高度模块化: core + modules
DSO:dynamic shared object
MPM:Multipath processing Modules (多路处理模块)
prefork:多进程模型,每个进程响应一个请求;
一个主进程:负责生成子进程及回收子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;
n个子进程:每个子进程处理一个请求;
工作模型:会预先生成几个空闲进程,随时等待用于响应用户请求;最大空闲和最小空闲;
worker:多进程多线程模型,每线程处理一个用户请求;
一个主进程:负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;
多个子进程:每个子进程负责生成多个线程;
每个线程:负责响应用户请求;
并发响应数量:m*n
m:子进程数量
n:每个子进程所能创建的最大线程数量;
event:事件驱动模型,多进程模型,每个进程响应多个请求;
一个主进程 :负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;
子进程:基于事件驱动机制直接响应多个请求;
httpd-2.2: 仍为测试使用模型;
httpd-2.4:event可生产环境中使用;
httpd的功能特性:
- CGI:Common Gateway Interface公共网管接口
- 虚拟主机:IP,PORT, FQDN
- 反向代理
- 负载均衡
- 路径别名
丰富的用户认证机制
-
- basic
- digest
- 支持第三方模块
安装httpd:
rpm包:CentOS 发行版中直接提供;
[[email protected] ~]# yum info httpd Loaded plugins: fastestmirror, refresh-packagekit Loading mirror speeds from cached hostfile * base: mirrors.pubyun.com * extras: mirrors.btte.net * updates: mirrors.neusoft.edu.cn Installed Packages Name : httpd Arch : x86_64 Version : 2.2.15 Release : 5.el6.centos Size : 2.9 M Repo : installed From repo : anaconda-CentOS-201106060106.x86_64 Summary : Apache HTTP Server URL : http://httpd.apache.org/ License : ASL 2.0 Description: The Apache HTTP Server is a powerful, efficient, and extensible : web server.
编译安装:定制新功能,或其它原因;
CentOS 6:httpd-2.2
[[email protected] ~]# rpm -ql httpd | less /etc/httpd /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.d/README /etc/httpd/conf.d/welcome.conf /etc/httpd/conf/httpd.conf /etc/httpd/conf/magic /etc/httpd/logs /etc/httpd/modules /etc/httpd/run /etc/logrotate.d/httpd /etc/rc.d/init.d/httpd /etc/sysconfig/httpd /usr/lib64/httpd /usr/lib64/httpd/modules /usr/lib64/httpd/modules/mod_actions.so /usr/lib64/httpd/modules/mod_alias.so /usr/lib64/httpd/modules/mod_asis.so /usr/lib64/httpd/modules/mod_auth_basic.so /usr/lib64/httpd/modules/mod_auth_digest.so /usr/lib64/httpd/modules/mod_authn_alias.so /usr/lib64/httpd/modules/mod_authn_anon.so /usr/lib64/httpd/modules/mod_authn_dbd.so /usr/lib64/httpd/modules/mod_authn_dbm.so /usr/lib64/httpd/modules/mod_authn_default.so /usr/lib64/httpd/modules/mod_authn_file.so /usr/lib64/httpd/modules/mod_authnz_ldap.so /usr/lib64/httpd/modules/mod_authz_dbm.so /usr/lib64/httpd/modules/mod_authz_default.so /usr/lib64/httpd/modules/mod_authz_groupfile.so /usr/lib64/httpd/modules/mod_authz_host.so /usr/lib64/httpd/modules/mod_authz_owner.so /usr/lib64/httpd/modules/mod_authz_user.so /usr/lib64/httpd/modules/mod_autoindex.so /usr/lib64/httpd/modules/mod_cache.so /usr/lib64/httpd/modules/mod_cern_meta.so /usr/lib64/httpd/modules/mod_cgi.so /usr/lib64/httpd/modules/mod_cgid.so /usr/lib64/httpd/modules/mod_dav.so /usr/lib64/httpd/modules/mod_dav_fs.so /usr/lib64/httpd/modules/mod_dbd.so
程序环境:
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
服务脚本:
/etc/rc.d/init.d/httpd
脚本配置文件:/etc/sysconfig/httpd
主程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
日志文件:
/var/log/httpd:
access_log:访问日志
error_log:错误日志
站点文档:
/var/www/html
模块文件路径:
/usr/lib64/httpd/modules
服务控制和启动:
chkconfig httpd on|off
service {start|stop|restart|status|configtest|reload} httpd
CentOS 7:httpd-2.4
[[email protected] named]# yum info httpd Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: * extras: mirrors.aliyun.com Available Packages Name : httpd Arch : x86_64 Version : 2.4.6 Release : 40.el7.centos Size : 2.7 M Repo : base/7/x86_64 Summary : Apache HTTP Server URL : http://httpd.apache.org/ License : ASL 2.0 Description : The Apache HTTP Server is a powerful, efficient, and extensible : web server.
程序环境:
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
模块相关的配置文件:/etc/httpd/conf.modules.d/*.conf
systemd unit file:
/usr/lib/systemd/system/httpd.service
主程序文件:
/usr/sbin/httpd
httpd-2.4支持MPM的动态切换;
日志文件:
/var/log/httpd:
access_log:访问日志
error_log:错误日志
站点文档:
/var/www/html
模块文件路径:
/usr/lib64/httpd/modules
服务控制:
systemctl enable|disable httpd.service
systemctl {start|stop|restart|status} httpd.service