一、Web
Service基礎
1.Port number(IANA,網際網路位址授權機構規定)
tcp:傳輸控制協定,面向連接配接的協定;通信前需要建立虛拟鍊路;結束後拆除鍊路;0-65535
udp:User
Datagram Protocol,無連接配接的協定;0-65535
0-1023:永久的配置設定給固定的應用使用,特權端口,如22/tcp(ssh), 80/tcp(http), 443/tcp(https)
1024-41951:注冊端口,配置設定給程式注冊為某應用使用,如11211/tcp, 11211/udp (memcached), 3306/tcp(mysql)
41952+:用戶端程式随機使用的端口;動态端口或私有端口;其範圍的義:/proc/sys/net/ipv4/ip_local_port_range
2.BSD Socket: IPC(程序間通信)的一種實作,允許位于不同主機上不同程序之間進行通信
Socket API(封裝了核心中的socket通信相關的系統調用)
(1)根據傳輸成協定分類:
SOCK_STREAM:tcp套接字
SOCK_DGRAM:udp套接字
SOCK_RAW::裸(raw)套接字
(2)根據套接字所使用的位址格式,Socket
Domain:
AF_INET:Address Family,IPv4的位址
AF_INET6:IPv6的位址
AF_UNIX:同一主機上不同程序之間通信時使用;
(3)套接字相關的系統調用:
socket():
建立一個套接字;
bind():綁定
listen():監聽
accept():接收請求
connect():請求連接配接建立
write():發送
read():接收
3.TCP協定的特性- 建立連接配接:三次握手
- 将資料打包成段:校驗和(CRC-32)
- 确認、重傳以及逾時:
- 排序:基于邏輯序号實作
- 流量控制:滑動視窗算法
- 擁塞控制:慢啟動和擁塞避免算法
4.TCP FSM:TCP Finite State Machine ,有限狀态機
CLOSED、LISTEN、SYN_SENT、SYN_RECV、ESTABLISHED、FIN_WAIT1、 CLOSE_WAIT、FIN_WAIT2、 LAST_ACK、TIMEWAIT、CLOSED
二、HTTP協定
1.http:
hyper text transfer protocol,超文本傳輸協定,應用層協定 80/tcp
C/S架構:浏覽器 - 伺服器 ,實作該協定的程式有httpd、nginx、lighttpd… ...
工作模式:一次http事務:請求<-->響應
http請求封包:http request
http響應封包: http response
2.http協定版本:
1) HTTP/0.9:原型版本隻能傳輸文本檔案,僅有get方法傳輸資料到用戶端
2) HTTP/1.0:第一個廣泛使用的版本,支援MIME機制、cache支援、method(請求方法)
MIME: Multipurpose
Internet Mail Extesion多用途網際網路郵件擴充,支援非文本編碼傳輸後再解碼還原
method:請求方法,GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS… ...
3) HTTP/1.1:
增強了緩存功能
4) HTTP/2.0:借鑒spdy對1.0多方面改進,大大提升性能
SPDY是Google開發的基于TCP的應用層協定,用以最小化網絡延遲,提升網絡速度,優化使用者的網絡使用體驗。
SPDY對HTTP協定的增強。新協定的功能包括資料流的多路複用、請求優先級以及HTTP報頭壓縮。
3.Web資源:web resource
靜态資源(無須服務端做出額外處理):
.jpg, .png, .gif, .html, txt, .js, .css, .mp3, .avi
動态資源(服務端需要通過執行程式做出處理,發送給用戶端的是程式的運作結果):
.php, .jsp
注意:一個頁面中展示的資源可能有多個;每個資源都需要單獨請求;
資源的辨別機制:URL,Uniform
Resource Locator:用于描述伺服器某特定資源的位置;
Scheme://Server[:Port][/PATH/TO/SOME_RESOURCE]-------> 協定://服務[:端口]/資源路徑
沒有給資源路徑打開的是預設頁面,即首頁,http預設端口為80
4.并發通路響應模型(Web I/O):
單程序I/O結構:啟動一個程序處理使用者請求,而且一次隻處理一個;多個請求被串行響應;
多程序I/O結構:并行啟動多個程序,每個程序響應一個請求;
複用I/O結構:一個程序響應n個請求;
多線程模型:一個程序生成N個線程,每個線程響應一個使用者請求;對于Linux而言程序和線程響應量級相似
事件驅動:event-driven,一個程序直接響應N個請求
複用的多程序I/O結構:啟動多個(m)程序,每個程序響應n個請求;響應的請求數量m*n
5.一次完整的http請求處理過程
(1)建立或處理連接配接:接收請求或拒絕請求
(2)接收請求:接收來自于網絡上的主機請求封包中對某特定資源的一次請求的過程;
(3)處理請求:分析請求封包的http請求封包首部進行解析,擷取用戶端請求的資源及請求方法等相關資訊
請求封包首部的格式:
<method> <URL> <VERSION>
HEADERS: (name: value)
<request body>
(4)通路資源:擷取請求封包中請求的資源,預設在/var/www/html/路徑下
web伺服器(存放了web資源的主機)負責向請求者提供對方請求的靜态資源,或動态資源運作生成的結果;
DocRoot:這些資源通常應該放置于本地檔案系統某路徑下;此路徑稱為;
web伺服器資源路徑映射方式:
(a) docroot路徑映射
(b) alias别名
(c)
虛拟主機docroot
(d)
使用者家目錄docroot
(5)建構響應封包
(6)發送響應封包
(7)記錄日志
三、httpd伺服器程式
1.httpd:
apache 純粹的靜态伺服器
版本:1.3、2.0、2.2 、2.4。CentOS 6 預設2.2、CentOS 7 預設2.4
a
patchy server (一個充滿更新檔的伺服器)=
apache
ASF: apache software foundation(Apache軟體基金會)最早的項目,官方網站:httpd.apache.org
2.httpd特性
(1)高度子產品化:core + modules
(2)DSO:
Dynamic Shared Object,動态共享子產品
(3)MPM:Multipath-Processing Modules,多路處理子產品
a) prefork:多程序模型,每個程序響應一個請求
一個主程序:負責生成子程序及回收子程序;負責建立套接字;負責接收請求,并将其派發給某子程序處理;
n個子程序:每個子程序處理一個請求;
工作模型:會預先生成幾個空閑程序,随時等待用于響應使用者請求;最大空閑和最小空閑;
b) worker:多程序多線程模型,每線程處理一個使用者請求
一個主程序:負責生成子程序;負責建立套接字;負責接收請求,并将其派發給某子程序進行處理;
多個子程序:每個子程序負責生成多個線程;
每個線程:負責響應使用者請求;
并發響應數量:m*n(m:子程序數量、n:每個子程序所能建立的最大線程數量)
c) event:事件驅動模型,多程序模型,每個程序響應多個請求
一個主程序 :負責生成子程序;負責建立套接字;負責接收請求,并将其派發給某子程序進行處理;
子程序:基于事件驅動機制直接響應多個請求;
注意:httpd-2.2:
event為測試使用模型;httpd-2.4event可生産環境中使用;
3.httpd的功能特性:
支援虛拟主機:IP、Port、FQDN
支援CGI:Common
Gateway Interface,通用網關接口;
支援反向代理
支援負載均衡
支援路徑别名