1、TCP及socket通讯原理
一、Port number(IANA,互联网地址受权机构规定)
php
TCP:传输控制协议,面向链接的协议;通讯前须要创建虚拟链路,结束后拆除链路。css
UDP:User Datagran Protocol,无链接的协议。html
0-1023:众所周知,永久的分配给固定的应用使用,特权端口(22/ssh,80/http)。nginx
1024-41951:亦为注册端口,但要求并非特别严格,分配给程序注册为某应用使用(11211/tcp,3306/tcp)算法
41952-65535:客户端程序随机使用的端口:动态端口,或私有端口;其范围的定义在文件中:(/proc/sys/net/ipv4/ip_local_port_range)。数据库
二、Socker:IPC的一种实现,容许位于不一样主机(甚至同一主机)上不一样进程之间进行通讯。apache
Socket API(封装了内核中的socket通讯相关的系统调用)
centos
(1)、根据传输层协议分类:缓存
SOCK_STREAM:TCP套接字安全
SOCK_DGRAN:UDP套接字
SOCK_RAW:裸(raw)套接字
(2)、根据套接字所使用的地址格式,Socket Domain:
AF_INET:Address Family,IPv4的地址
AD_INET6:IPv6的地址
AF_UNIX:同一主机上不一样进程之间通讯时使用
(3)、套接字相关的系统调用:
Socket():建立一个套接字
bind():绑定
listen():监听
accept():接受请求
connect():请求链接创建
write():发送
read():接收
三、TCP协议的特性
创建链接:三次握手
将数据打包成段:校验和(CRC-32)
确认、重传以及超时
排序:逻辑序号
流量控制:滑动窗口算法
拥塞控制:慢启动和拥塞避免算法
四、TCP FSM:TCP Finite State Machine,有限状态机
CLOSED、LISTEN、SYN_SENT、SYN_RECV、ESTABLISHED、FIN_WAIT一、 CLOSE_WAIT、FIN_WAIT二、LAST_ACK
2、httpd协议及Web基本原理
一、http:hyper text transfer protocal,超文本传输协议
C/S架构:客户端-服务器,实现该协议的程序有httpd,nginx,lighttpd......
工做模式:一次httpd事务:请求<-->响应
http请求报文:http request
http响应报文:http response
二、http协议版本
1)HTTP/0.9:原型版本只能传输文本文件,仅有GET方法传输到客户端
2)HTTP/1.0:第一个广发使用的版本,支持MIME机制、cache支持、method(请求方法)
MIME:Multipurpose Internet Mail Extesion多用途互联网邮件扩展,支持非文本编码传输后再解码还原
3)HTTP/1.1:加强了缓存功能
4)HTTP/2.0:借鉴spdy对1.0多方面改进,大大提高性能
SPDY是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提高网络速度,优化用户的网络使用体验。
SPDY对HTTP协议的加强。新协议的功能包括数据流的多路复用、请求优先级以及HTTP报头压缩。
三、Web资源:Web resources
静态资源(无需服务端作出额外处理):.jpg,.png,.gif,.html,txt,.js,.css,.mp3,avi 动态资源(服务端须要经过执行程序作出处理,发送给客户端的是程序的运行结果):.php,.jsp 注意:一个页面中展现的资源可能有多个;每一个资源都须要单独请求; 资源的标识机制:URL,Uniform Resource Locator:用于描述服务器某特定资源的位置 Scheme://Server[:Port][/PATH/TO/SOME_RESOURCE]-->协议://服务[:端口]/资源路径 没有给资源路径打开的是默认页面,即主页,http默认端口为80
四、并发访问响应模型(Web I/O):
单进程I/0结构:启动一个进程处理用户请求,并且一次只处理一个;多个请求被串行响应; 多进程I/O结构:并行启动多个进程,每一个进程响应一个请求; 复用I/O结构:一个进程响应N个请求: 多线程模型:一个进程生成N个线程,每一个线程响应一个用户请求; 事件驱动:event-driven 复用的多进程I/0结构:启动多个(m)进程,每一个进程响应n个请求;
五、一次完整的http请求处理过程
(1)、创建或处理链接:接收请求或拒绝请求; (2)、接收请求:接收来自于网络的请求报文中对某资源的一次请求的过程; (3)、处理请求:分析请求报文的http请求报文首部进行解析,获取客户端请求的资源及请求方法等相关信息 请求报文首部的格式: <method><URL><VERSION> HEADERS:(name:value) <request body> (4)、访问资源:获取请求报文中请求的资源,默认在/var/www/html路径下; (5)、构建响应报文 (6)、发送响应报文 (7)、记录日志
3、httpd服务器程序
一、httpd:apache纯粹的静态服务器
版本:1.三、2.0、2.二、2.4。centos6默认使用2.2;centos7默认使用2.4
a patchy server(一个充满补丁的服务器)
ASF:apache software foundation(Apache软件基金会)最先的项目,官方站点:httpd.apache.com
二、httpd的特性
高度模块化:core + modules
DSO:Dynamic Shared Object
MPM:Multipath Processing Modules
profork:多进程模型,每一个进程响应一个请求:
一个主线程:复制生成n个子进程,子进程也称为工做进程,每一个子进程处理一个用户请求;即使没有用户请求,也会预先生成多个空闲进程,随时等待请求到达:最大不会超过1024个。
worker:事件驱动模型,每一个线程响应n个请求;
一个主进程,生成m个子进程,每一个子进程负责生成多个线程,每一个线程响应一个请求;
m进程,n线程:m * n
event:事件驱动模型,每一个线程响应n个请求;
一个主进程,生成m个子进程,每一个子进程直接响应n个请求 m * n
三、httpd的功能特性
支持虚拟主机:IP、Port、FQDN 支持CGI:Common Gateway Interface,通用网关接口; 支持反向代理 支持负载均衡 支持路径别名 具备丰富的用户认证机制:basic基本认证、digest摘要认证 支持第三方模块
四、httpd的请求方法
GET:请求获取一个资源,须要服务器发送 HEAD:跟GET近似,但其不须要服务响应请求的资源,而返回响应头部 POST:基于HTML表单向服务器提交数据,服务器一般须要存储此数据(位置:一般为关系型数据库) PUT:与GET相反,向服务器发送资源;服务器一般须要存储此资源(位置:一般为文件系统) DELETE:删除URL指向的资源 OPTIONS:探测服务器端对请求的URL所支持使用的请求方法 TRACE:跟一次请求中间所通过的代理服务器、防火墙或网关等 #注意:方法严格区分大小写
五、http协议首部
1)、通用首部
Connection:定义C/S之间关于请求、响应的有关选项 Connection:keep-alive Cache-Control:缓存控制 Via:显示了报文通过的中间节点
2)、请求首部
Client-IP:客户端IP Host:请求的主机 Referer:指明了请求当前资源原始资源的URL User-Agent:用户代理 Accept首部: Accept:指明服务器能发送的媒体类型 Accept-Charset:支持使用的字符集 Accept-Encoding:支持使用的编码方式 Accept-Language:支持使用语言 条件是请求: Expect:告诉服务器可以发送哪些媒体类型 If-Modified-Since:是否在指定时间内修改过此资源 If-None-Match:若是提供的实体标记与当前文档的实体标记不符,就获取此文档 跟安全相关的请求: Authorization:客户端提交给服务器的认证数据,如帐号和密码 Cookie:客户端发送给服务器身份标识
3)、实体首部
Location: 资源的新位置 Allow: 容许对此资源使用的请求方法 内容相关的首部: Content-Encoding: 支持编码 Content-Language:支持语言 Content-Length:文本长度 Content-Location:资源所在位置 Content-Type:主体对象类型 Content-Range:在整个资源中此实体表示的字节范围 缓存相关: ETag: 实体标签 Expires: 过时期限 Last-Modified: 上次修改时间
4)、响应首部
Date:消息产生的时间 Age: 响应持续时间 Server: 向客户端说明本身的程序名称和版本 ETage:不透明验证者 Location:URL备用的位置 Content-Length:实体的长度 Content-Tyep:实体的媒体类型 协商首部: ary: 首部列表,服务器会根据列表中的内容挑一个最适用的版本发送给客户端 Accept-Ranges: 对当前资源来说,服务器所可以接受的范围类型 跟安全相关: WWW-Authentication:质询,即要求客户提供账号和密码 Set-Cookie:服务器端在某客户端第一次请求时发送令牌
六、http状态码
1XX:信息性状态码 2XX:成功状态码 200:OK,客户端请求成功 201:CREATED,请求已被实现 3XX:重定向类的状态码 301:Moved Permanently,永久重定向 302:Found,临时重定向,会在响应报文中使用“Location:新位置” 304:Not Modified,条件是请求中使用 4XX:客户端类错误 403:Forbidden,请求被服务器拒绝 404:Not Found,服务器没法找到请求的URL 405:Method Not Allowed,不容许使用此方法请求相应的URL 5XX:服务器类错误 500:Internal Server Error,服务器内部错误 502:Bad Gateway,代理服务器从上游服务器收到一条伪响应 503:Service Unavailbale,服务暂时不可用 505:HTTP Version Not Supported,服务器不支持