1.应用层协议:http,https
http也是由运行在用户空间的应用程序来实现的
2.传输层协议:TCP,UDP,SCTP
3.IANA:The Internet Assigned Numbers Authority,互联网数字分配机构
分配相关端口
1.0-1023:众所周知的,永久地分配给固定的应用使用,特权端口,即管理员才能进行启动停止
2.1024-41951:注册端口,要求并不是很严格,分配给程序注册为某应用使用;3306/tcp(MySQL),11211/tcp(memcache)
3.41952+:客户端程序随机使用的端口,动态端口或私有端口;其范围定义在/proc/sys/net/ipv4/ip_local_port_range
[root@sakura ~]# cat /proc/sys/net/ipv4/ip_local_port_range
32768 60999
4.BSD Socket:IPC(Inter-Process Communication,进程间通信)的一种实现,允许位于不同主机(也可以是同一主机)上的进程之间进行通信
Socket API(封装了内核中socket通信相关的系统调用)
"根据协议类型进行分类"
1.SOCK_STREAM:TCP套接字
2.SOCK_DGRAM:UDP套接字
3.SOCK_RAW:raw套接字
"根据套接字所使用的地址格式分类,Socket Domain"
1.AF_INET:Address Family,IPV4
2.AF_INET6:IPV6
3.AF_UNIX:同一主机上的不同进程间基于socket套接字通信所使用的的一种地址;unix_SOCK,使用此方法可加快同主机进程间通信的效率,即一个进程向套接字文件写入数据,一个进程对此文件读取数据
5.TCP FSM(Finite State Machine 有限状态机):
1.CLOSED:没有任何连接的状态
2.LISTEN:监听来自其他主机的TCP端口的连接请求
3.SYN_SENT:在主动方发送通信连接后,进入的状态
4.SYN_RECEIVED:在被动方收到请求的连接后,向主动方发送确认连接信息,进入的状态
5.ESTABLISHED:代表一个已经建立的连接
6.FIN_WAIT1:主动方向被动方发送结束连接请求后,进入的状态
7.CLOSE_WAIT:被动方收到结束信息后,向主动方发送确认信息后,等待上层应用发送关闭连接指令,进入此状态
8.FIN_WAIT2:主动方收到被动方发送的确认消息后,进入此状态
9.LAST_ACK:被动方向主动方发送关闭请求后进入此状态
10.TIMEWAIT:在收到被动方发送的结束请求后进入的状态
下图TCP的相关补充在https://blog.csdn.net/Kasumi_yuki/article/details/92733694
1.建立连接:三次握手
1)客户端请求,服务端响应
2)服务端确认,客户端接收
3)客户端进行确认及进行通信
2.将数据打包成段:校验和(CRC32算法)
3.确认,重传及超时
4.排序:逻辑序号(用于恢复传送后的文件)
5.流量控制:滑动窗口算法
6.拥塞控制:慢启动和拥塞避免算法
7.四次挥手
1)客户端发送结束请求
2)服务端响应客户端结束请求,并发送确认信息
3)服务端向客户端发送结束请求
4)客服端进行确认,结束通信
1.http:hyper text transfer protocol,应用层协议,监听于80/tcp端口,文本协议
1.html:hyper text mark language,编程语言,超文本标记语言
2.HTML相关格式
<html>
<head>
<title>TITLE</title>
</head>
<body>
<h1></h1>
<p> blabla... <a href="http://www.kasumi.com/download.html"> bla... </a> </p>
<h2> </h2>
</body>
</html>
3.css:Cascading Style Sheet
4.js:JavaScript, 客户端脚本
2.协议版本
1.http/0.9:原型版本,功能简陋,仅支持html
2.http/1.0:增加了cache,MIME,method
1)MIME:Multipurpose Internet Mail Extesion(多用途网络邮件扩展功能)
2)method(客户端,服务端数据的请求方法):GET(只有服务端能接受信息), POST, HEAD,PUT, DELETE,TRACE, OPTIONS
3.http/1.1:增强了缓存功能
4.http/2.0:rfc,请求注解文档中的相关解释
3.工作模式:
1)相关工作模式
http工作模式(一次http事务:请求<-->响应)
1.http请求报文:http request
2.http响应报文:http response
2)web资源:web resource
1.静态资源(无需服务端作出额外处理):.jpg, .png, .gif, .html, txt, .js, .css, .mp3, .avi
2.动态资源(服务端需要通过执行程序做出处理,发送给客户端的是程序的运行结果):.php,.jsp
ps:一个页面中展示的资源可能有多个,每个资源都需要单独请求
3)资源的标识机制:URL
Uniform Resource Locator(统一资源定位符):用于描述服务器某特定资源的位置
1.例如: http://www.sina.com.cn/index.html
1)对应格式:Scheme(方案,协议)://Server[:Port][/PATH/TO/SOME_RESOURCE]
4.一次完成的http请求处理过程
1.建立或处理连接:接受请求或拒绝请求
2.接受请求:接受来自于网络上的主机请求报文中,对特定资源的一次请求过程
3.处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息
4.访问资源:获取请求报文中请求的资源
5.构建响应报文:构建响应报文守护,之后依次进行传输层封装,IP封装,帧封装
6.发送响应报文
7.记录相关日志
1)接收请求的模型
并发访问响应模型
1.单进程I/O模型:启动一个进程处理用户请求;这表明,一次只能处理一个客户端请求,多个请求被串行响应
2.多进程I/O结构:并行启动多个子进程,每个子进程响应一个请求
3.复用的I/O结构:一个进程响应n个请求
1)多线程模式:一个进程生个n个线程,一个线程处理一个请求(一个进程内的线程共享资源)
2)事件驱动(event-driven):一个进程直接响应n个请求(使用事件回调机制)
4.复用的多进程I/O结构:启动多个(m)进程,每个进程生成(n)个线程
1)其响应的请求数量:m*n
2)处理请求:分析请求报文的http请求报文首部
http协议
1.http请求报文首部
2.http响应报文首部
请求报文首部的格式
<method> <URL> <VERSION>
HEADERS:(name: value)
<request body>
3)访问资源:获取请求报文中请求的资源
web服务器,即存放了web资源的主机,负责向请求者提供对方请求的静态资源,或动态资源运行生成的结果;这些资源通常应该放置于本地文件系统某路径下;此路径成为DocRoot
1./var/www/html/:
1)images/logo.jpg
2.web服务器的资源路径映射方式
1)docroot
2)alias
3)虚拟主机的docroot
4)用户家目录的docroot
5.http请求处理中的连接模式
1.保持连接(长连接):keep-alive
1)时间
2)数量
2.非保持连接(短连接)
1.http服务器程序:httpd(apache);nginx;lighttpd
2.应用程序服务器
1.IIS:.Net(windows server上自带的web服务器)
2.Tomcat:.jsp
3.www.netcraft.com(数据挖掘站点)
3.httpd的安装和使用
1)ASF:apache software foundation
2) apache:a patchy server
4.httpd的特性
1)高度模块化:core + modules
DSO:dynamic shared object(动态共享对象)
MPM:Multipath processing Modules(多路处理模块)
1.prefork:多进程模型,每个进程响应一个请求
1)一个主进程:负责生成子进程及回收子进程;负责创建套接字;负责接受请求,并将其派发给某子进程进行处理
2)n个子进程:每个子进程处理一个请求
3)工作模型:会预先生成几个控线进程,随时等待用于响应用户请求;最大空闲和最小空闲
2.worker:多进程多线程模型,每个线程处理一个用户请求
1)一个主进程:负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理
2)多个子进程:每个子进程负责生成多个线程
3)多个线程:负责响应用户请求
4)并发相应数量:m(子进程数量)*n(每个子进程所能创建的最大线程数量)
3.event:事件驱动模型,多进程模型,每个进程响应多个请求
1)一个主进程:负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理
2)子进程:基于事件驱动机制直接响应多个请求
3)httpd-2.2其仍为测试使用模型;httpd-2.4 event可生产环境中使用
5.httpd的程序版本
1.httpd 1.3:官方已经停止维护
2.httpd 2.0
3.httpd 2.2
4.httpd 2.4:目前最新稳定版
6.httpd的功能特性
1.CGI:Common Gateway Interface(公共网关接口)
2.虚拟主机:IP,PORT,FQDN
3.反向代理
4.负载均衡
5.路径别名
6.丰富的用户认证机制:basic,digest
7.支持第三方模块
7.安装httpd
1)rpm包:Centos发行版中直接提供
2)编译安装:定制新功能,或其他原因
1.配置文件
1./etc/httpd/conf/httpd.conf
2./etc/httpd/conf.d/*.conf
2.服务脚本
1./etc/rc.d/init.d/httpd
2.脚本配置文件:/etc/sysconfig/httpd
3.主程序文件
1./usr/sbin/httpd
2./usr/sbin/httpd.event
3./usr/sbin/httpd.worker
4.日志文件
1./var/log/httpd:
1)access_log:访问日志
2)error_log:错误日志
5.站点文档:/var/www/html
6.模块文件路径:/usr/lib64/httpd/modules
7.服务控制和启动
1.chkconfig httpd on|off
2.service httpd {start|stop|restart|status|configtest|reload}
1.配置文件
1./etc/httpd/conf/httpd.conf
2./etc/httpd/conf.d/*.conf
3.模块相关的配置文件:/etc/httpd/conf.modules.d/*.conf
2.systemd unit file:/usr/lib/systemd/system/httpd.service
3.主程序文件:/usr/sbin/httpd (httpd-2.4支持MPM的动态切换)
4.日志文件
1./var/log/httpd:
1)access_log:访问日志
2)error_log:错误日志
5.站点文件:/var/www/html
6.模块文件路径:/usr/lib64/httpd/modules
7.服务控制
1.systemctl enable|disable httpd.service
2.systemctl {start|stop|restart|status} httpd.service
8.设置http服务监听在5162端口
[root@sakura ~]# systemctl start httpd
[root@sakura ~]# vim /etc/httpd/conf.d/test.conf
LISTEN 5162
[root@sakura ~]# systemctl restart httpd
[root@sakura ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:111 *:*
LISTEN 0 5 192.168.122.1:53 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 127.0.0.1:631 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::111 :::*
LISTEN 0 128 :::80 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 128 ::1:631 :::*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 128 ":::5162 " :::*