TCP/IP协议
跨网络的主机间通讯
在建立通信连接的每一端,进程间的传输要有两个标志:
Socket套接字
- Socket:套接字,进程间通信IPC的一种实现,允许位于不同主机(或同一主机上不同进程之间进行通信和数据交换,SocketAPI出现于1983年,4.2 BSD实现
- Socket API:封装了内核中所提供的socket通信相关的系统调用
- Socket Domain:根据其所使用的地址
AF_INET:Address Family,IPv4
AF_INET6:IPv6
AF_UNIX:同一主机上不同进程之间通信时使用 - Socket Type:根据使用的传输层协议
SOCK_STREAM:流,tcp套接字,可靠地传递、面向连接
SOCK_DGRAM:数据报,udp套接字,不可靠地传递、无连接
SOCK_RAW: 裸套接字,无须tcp或udp,APP直接通过IP包通信
套接字类型:
系统调用
套接字相关的系统调用:
HTTP相关术语
http: Hyper Text Transfer Protocol, 80/tcp
超文本传输协议,应用tcp协议的应用协议
层层封装,层层拆封
各种系统对HTTP协议的依赖越来越重
html: Hyper Text Markup Language 超文本标记语言,编程语言
网页:Web Resources 众多资源组成一个网页,每个资源都要当独请求、当独标识(URI)
资源分类
MIME: Multipurpose Internet Mail Extensions 多用途互联网邮件扩展 /etc/mime.types
HTTP协议介绍
http/0.9:1991,原型版本,功能简陋,只有一个命令GET。GET/index.html ,服务器只能回应HTML格式字符串,不能回应别的格式
http/1.0: 1996年5月,支持cache, MIME, method
- 每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接
- 引入了POST命令和HEAD命令
- 头信息是 ASCII 码,后面数据可为任何格式。服务器回应时会告诉客户端,数据是什么格式,即Content-Type字段的作用。这些数据类型总称为MIME 多
用途互联网邮件扩展,每个值包括一级类型和二级类型,预定义的类型,也可自定义类型, 常见Content-Type值:text/xml image/jpeg audio/mp3
http/1.1:1997年1月
- 引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。对于同一个域名,大多数浏览器允许同时建立6个持久连接
- 引入了管道机制(pipelining),即在同一个TCP连接里,客户端可以同时发送多个请求,进一步改进了HTTP协议的效率
- 新增方法:PUT、PATCH、OPTIONS、DELETE
- 同一个TCP连接里,所有的数据通信是按次序进行的。服务器只能顺序处理回应,前面的回应慢,会有许多请求排队,造成"队头堵塞"(Head-of-line blocking)
- 为避免上述问题,两种方法:一是减少请求数,二是同时多开持久连接。网页优化技巧,如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等
- HTTP 协议不带有状态,每次请求都必须附上所有信息。请求的很多字段都是重复的,浪费带宽,影响速度
Spdy:2009年,谷歌研发,解决 HTTP/1.1 效率不高问题
http/2.0:2015年
- 头信息和数据体都是二进制,称为头信息帧和数据帧
- 复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序一一对应,避免了“队头堵塞“,此双向的实时通信称为多工(Multiplexing)
- 引入头信息压缩机制(header compression),头信息使用gzip或compress压缩后再发送;客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,不发送同样字段,只发送索引号,提高速度
- HTTP/2 允许服务器未经请求,主动向客户端发送资源,即服务器推送(server push)
HTTP工作机制
工作机制:
Web资源:web resource
一个网页由多个资源构成,打开一个页面,会有多个资源展示出来,但是每个资源都要单独请求。因此,一个“Web 页面”通常并不是单个资源,而是一组资源的集合
提高HTTP连接性能
HTTP连接请求
串行和并行连接
串行,持久连接和管道
URI
URI: Uniform Resource Identifier 统一资源标识,分为URL和URN
URN: Uniform Resource Naming,统一资源命名
URL: Uniform Resorce Locator,统一资源定位符,用于描述某服务器某特定资源位置
两者区别:URN如同一个人的名称,而URL代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。URN仅用于命名,而不指定地址
URL组成
URL示例
网站访问量
- IP(独立IP):即Internet Protocol,指独立IP数。一天内来自相同客户机IP地址只计算一次,记录远程客户机IP地址的计算机访问网站的次数,是衡量网站流量的重要指标
- PV(访问量): 即Page View, 页面浏览量或点击量,用户每次刷新即被计算一次,PV反映的是浏览某网站的页面数,PV与来访者的数量成正比,PV并不是页面的来访者数量,而是网站被访问的页面数量
- UV(独立访客):即Unique Visitor,访问网站的一台电脑为一个访客。一天内相同的客户端只被计算一次。可以理解成访问某网站的电脑的数量。网站判断来访电脑的身份是通过来访电脑的cookies实现的。如果更换了IP后但不清除cookies,再访问相同网站,该网站的统计中UV数是不变的
网站统计:http://www.alexa.cn/rank/
网站访问统计示例
示例:
甲乙丙三人在同一台通过ADSL上网的电脑上(中间没有断网),分别访问www.magedu.com网站,并且每人各浏览了2个页面,那么网站的流量统计是:IP: 1 PV:6 UV:1
若三人都是ADSL重新拨号后,各浏览了2个页面,则IP: 3 PV:6 UV:1
网站访问量
Web服务请求处理步骤
一次完整的http请求处理过程
5、构建响应报文:
一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中 包含有响应状态码、响应首部,如果生成了响应主体的话,还包 括响应主体
HTTP服务器应用
http服务器程序
应用程序服务器
市场占有率统计www.netcraft.com
Httpd介绍
d--> daemon 守护进程
20世纪90年代初,国家超级计算机应用中心NCSA开发1995年开源社区发布apache(a patchy server)
特性:
MPM工作模式
- 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功能特性
Httpd安装
安装方式:
CentOS 6程序环境:httpd-2.2
配置文件:
检查配置语法:
CentOS 6 httpd程序环境
httpd配置文件的组成:
Httpd 2.2常见配置
1、显示服务器版本信息
2、修改监听的IP和Port
3、持久连接
4、MPM( Multi-Processing Module)多路处理模块
prefork的默认配置:
worker的默认配置:
5、DSO: Dynamic Shared Object
6、定义'Main' server的文档页面路径
7、定义站点主页面
8、站点访问控制常见机制
可基于两种机制指明对哪些资源进行何种访问控制访问控制机制有两种:客户端来源地址,用户账号
9、<Directory>中“基于源地址”实现访问控制
10、日志设定
11、设定默认字符集
12、定义路径别名
13、基于用户的访问控制
basic认证配置示例:
14、实现用户家目录的http共享
15、ServerSignature On | Off | EMail
16、ServerType inetd | standalone.
17、status页面
18、虚拟主机
httpd-2.4
新特性
CentOS 7 httpd程序环境
配置应用:
(4) 虚拟主机
(4) KeepAlive on
mod_deflate模块
mod_deflate模块
https
https:http over ssl
https实现
http重定向https
将http请求转发至https的URL
HSTS
HSTS:HTTP Strict Transport Security
HSTS preload list
是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、Edge浏览器也会采用这个列表
反向代理功能
Sendfile机制
Sendfile机制
http协议
http协议:stateless 无状态
解决http协议无状态方法
http事务:一次访问的过程
http协议
报文语法格式:
http协议状态码分类
http协议
HTTP 首部字段
http协议首部
Cookie
HTTP 是一种无状态协议。协议自身不对请求和响应之间的通信状态进行保存。也就是说在 HTTP 这个级别,协议对于发送过的请求或响应都不做持久化处理。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成如此简单的。可是随着 Web 的不断发展,很多业务都需要对通信状态进行保存。于是引入了 Cookie 技术。使用 Cookie 的状态管理Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息
Set-Cookie首部字段
curl工具
curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支持HTTPS认证,并且支持HTTP的POST、PUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证, 下载文件断点续传,上载文件断点续传, http代理服务器管道( proxy tunneling),还支持IPv6,socks5代理服务器,通过http代理服务器上传文件到FTP服务器等,功能十分强大
elinks工具:
httpd自带的工具程序
httpd的压力测试工具
APR
APR(Apache portable Run-time libraries,Apache可移植运行库) 主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。在早期的Apache版本中,应用程序本身必须能够处理各种具体操作系统平台的细节,并针对不同的平台调用不同的处理函数随着Apache的进一步开发,Apache组织决定将这些通用的函数独立出来并发展成为一个新的项目。这样,APR的开发就从Apache中独立出来,Apache仅仅是使用 APR而已。目前APR主要还是由Apache使用,由于APR的较好的移植性,因此一些需要进行移植的C程序也开始使用APR,开源项目比如用于服务器压力测试的Flood loader tester,该项目不仅仅适用于Apache,
http://httpd.apache.org/test/flood
在centos6编译安装httpd-2.4
centos6 编译安装httpd-2.4方法一
centos6 编译安装httpd-2.4方法二
在centos6 编译安装httpd-2.4
转载于:https://blog.51cto.com/8031757/2311415
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/60440.html