1、套接字
在建立通信連接的每一端,進(jìn)程間的傳輸要有兩個(gè)標(biāo)志:
IP地址和端口號(hào),合稱為套接字地址socket address ,套接字文件定義了ip地址和端口號(hào),用于不同進(jìn)程間通信使用。比如mysql服務(wù)器端的進(jìn)程和客戶端的進(jìn)程進(jìn)行通訊。
客戶機(jī)套接字地址定義了一個(gè)唯一的客戶進(jìn)程
服務(wù)器套接字地址定義了一個(gè)唯一的服務(wù)器進(jìn)程
- Socket:套接字,進(jìn)程間通信IPC的一種實(shí)現(xiàn),允許位于不同主機(jī)(或同一主機(jī))上不同進(jìn)程之間進(jìn)行通信和數(shù)據(jù)交換。
- Socket Domain:根據(jù)其所使用的地址
AF_INET:Address Family,IPv4
AF_INET6:IPv6
AF_UNIX:同一主機(jī)上不同進(jìn)程之間通信時(shí)使用 - 套接字相關(guān)的系統(tǒng)調(diào)用:
socket(): 創(chuàng)建一個(gè)套接字
bind():綁定IP和端口
listen():監(jiān)聽
accept():接收請(qǐng)求
connect():請(qǐng)求連接建立
write():發(fā)送
read():接收
close():關(guān)閉連接
2、HTTP通信過(guò)程
http: Hyper Text Transfer Protocol, 80/tcp,超文本傳輸協(xié)議。
html: Hyper Text Markup Language 超文本標(biāo)記語(yǔ)言,編程語(yǔ)言,是http協(xié)議傳輸?shù)囊环N文件格式。


MIME:Multipurpose Internet Mail Extensions
多用途互聯(lián)網(wǎng)郵件擴(kuò)展 /etc/mime.types
格式:major/minor
text/plain
text/html ---也就是傳輸?shù)奈募牟煌袷?br> text/css
image/jpeg
image/png
video/mp4
application/javascript
參考:http://www.w3school.com.cn/media/media_mimeref.asp
3、Web資源:web resource
一個(gè)網(wǎng)頁(yè)由多個(gè)資源構(gòu)成,打開一個(gè)頁(yè)面,會(huì)有多個(gè)資源展示出來(lái),但是每個(gè)資源都要單獨(dú)請(qǐng)求。因此,一個(gè)“Web 頁(yè)面”通常并不是單個(gè)資源,而是一組資源的集合
靜態(tài)文件:無(wú)需服務(wù)端做出額外處理
文件后綴:.jpg, .html, .txt, .js, .css, .mp3, .avi
動(dòng)態(tài)文件:服務(wù)端執(zhí)行程序,返回執(zhí)行的結(jié)果
文件后綴:.asp, .php, .jsp
4、URI
URI: Uniform Resource Identifier 統(tǒng)一資源標(biāo)識(shí),分為URL和URN
URN: Uniform Resource Naming,統(tǒng)一資源命名
示例:P2P下載使用的磁力鏈接是URN的一種實(shí)現(xiàn)
magnet:?xt=urn:btih:660557A6890EF888666
URL: Uniform Resorce Locator,統(tǒng)一資源定位符,用于描述某服務(wù)器某特定資源位置
兩者區(qū)別:URN如同一個(gè)人的名稱,而URL代表一個(gè)人的住址。換言之,URN定義某事物的身份,而URL提供查找該事物的方法。URN僅用于命名,而不指定地址
URL組成
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
schame:方案,訪問服務(wù)器以獲取資源時(shí)要使用哪種協(xié)議
user:用戶,某些方案訪問資源時(shí)需要的用戶名
password:密碼,用戶對(duì)應(yīng)的密碼,中間用:分隔
Host:主機(jī),資源宿主服務(wù)器的主機(jī)名或IP地址
port:端口,資源宿主服務(wù)器正在監(jiān)聽的端口號(hào),很多方案有默認(rèn)端口號(hào)
path:路徑,服務(wù)器資源的本地名,由一個(gè)/將其與前面的URL組件分隔
params:參數(shù),指定輸入的參數(shù),多個(gè)參數(shù),用;分隔
query:查詢,傳遞參數(shù)給程序,如數(shù)據(jù)庫(kù),用?分隔,多個(gè)查詢用&分隔
frag:片段,一小片或一部分資源的名字,此組件在客戶端使用,用#分隔,可以在當(dāng)前頁(yè)進(jìn)行跳轉(zhuǎn),跳轉(zhuǎn)至當(dāng)前網(wǎng)頁(yè)的特定行,比如當(dāng)前頁(yè)面篇幅比較長(zhǎng)時(shí),可以跳轉(zhuǎn)到當(dāng)前頁(yè)面的指定位置。
5、網(wǎng)站訪問量
IP(獨(dú)立IP):記錄遠(yuǎn)程客戶機(jī)IP地址的計(jì)算機(jī)訪問網(wǎng)站的次數(shù),是衡量網(wǎng)站流量的重要指標(biāo),一天內(nèi)來(lái)自相同客戶機(jī)IP地址只計(jì)算一次。
PV(訪問量):即Page View, 頁(yè)面瀏覽量或點(diǎn)擊量,用戶每次刷新即被計(jì)算一次,PV反映的是瀏覽某網(wǎng)站的頁(yè)面數(shù),PV與來(lái)訪者的數(shù)量成正比,PV并不是頁(yè)面的來(lái)訪者數(shù)量,而是網(wǎng)站被訪問的頁(yè)面數(shù)量
UV(獨(dú)立訪客):即Unique Visitor,訪問某網(wǎng)站的電腦的數(shù)量。網(wǎng)站判斷來(lái)訪電腦的身份是通過(guò)來(lái)訪電腦的cookies實(shí)現(xiàn)的。如果更換了IP后但不清除cookies,再訪問相同網(wǎng)站,該網(wǎng)站的統(tǒng)計(jì)中UV數(shù)是不變的。
網(wǎng)站統(tǒng)計(jì):http://www.alexa.cn/rank/
6、一次完整的http請(qǐng)求處理過(guò)程
1、建立連接:接收或拒絕連接請(qǐng)求,即三次握手的過(guò)程。
2、接收請(qǐng)求:接收客戶端請(qǐng)求報(bào)文中對(duì)某資源的一次請(qǐng)求的過(guò)程
Web訪問響應(yīng)模型(Web I/O)
單進(jìn)程I/O模型:?jiǎn)?dòng)一個(gè)進(jìn)程處理用戶請(qǐng)求,而且一次只處理一個(gè),多個(gè)請(qǐng)求被串行響應(yīng)
多進(jìn)程I/O模型:并行啟動(dòng)多個(gè)進(jìn)程,每個(gè)進(jìn)程響應(yīng)一個(gè)連接請(qǐng)求
復(fù)用I/O結(jié)構(gòu):?jiǎn)?dòng)一個(gè)進(jìn)程,同時(shí)響應(yīng)N個(gè)連接請(qǐng)求
實(shí)現(xiàn)方法:多線程模型和事件驅(qū)動(dòng)
多線程模型:一個(gè)進(jìn)程生成N個(gè)線程,每線程響應(yīng)一個(gè)連接請(qǐng)求
事件驅(qū)動(dòng):一個(gè)進(jìn)程處理N個(gè)請(qǐng)求
復(fù)用的多進(jìn)程I/O模型:?jiǎn)?dòng)M個(gè)進(jìn)程,每一個(gè)進(jìn)程開多個(gè)線程,每個(gè)線程響應(yīng)多個(gè)連接請(qǐng)求
3、處理請(qǐng)求:服務(wù)器對(duì)請(qǐng)求報(bào)文進(jìn)行解析,并獲取客戶端請(qǐng)求的資源及請(qǐng)求的方法等相關(guān)信息,根據(jù)方法,資源,首部和可選的主體部分對(duì)請(qǐng)求進(jìn)行處理
HTTP常用請(qǐng)求方式Method:GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS
4、訪問資源:負(fù)責(zé)向請(qǐng)求者提供對(duì)方請(qǐng)求的靜態(tài)資源,或動(dòng)態(tài)運(yùn)行后生成的資源,用戶將指令發(fā)送給內(nèi)核,內(nèi)核到磁盤上去調(diào)取客戶端要訪問的資源數(shù)據(jù)到內(nèi)核空間,再將資源發(fā)送到用戶的內(nèi)存空間。
5、構(gòu)建響應(yīng)報(bào)文:一旦Web服務(wù)器識(shí)別從出了資源,就執(zhí)行請(qǐng)求方法中描述的動(dòng)作,封裝http的頭部信息的響應(yīng)報(bào)文,并返回響應(yīng)報(bào)文。響應(yīng)報(bào)文中包含有響應(yīng)狀態(tài)碼、響應(yīng)首部,如果生成了響應(yīng)主體的話,還包括響應(yīng)主體。
1)響應(yīng)實(shí)體:如果事務(wù)處理產(chǎn)生了響應(yīng)主體,就將內(nèi)容放在響應(yīng)報(bào)文中回送過(guò)去。響應(yīng)報(bào)文中通常包括:
描述了響應(yīng)主體MIME類型的Content-Type首部
描述了響應(yīng)主體長(zhǎng)度的Content-Length
實(shí)際報(bào)文的主體內(nèi)容
此命令可以查看響應(yīng)報(bào)文的頭部信息
[root@centos6 network-scripts]#curl -I www.qq.com
HTTP/1.1 200 OK
Server: squid/3.5.20
Content-Type: text/html; charset=GB2312
Cache-Control: max-age=60
Expires: Tue, 26 Sep 2017 12:34:04 GMT
Date: Tue, 26 Sep 2017 12:33:04 GMT
Connection: keep-alive
2)URL重定向:web服務(wù)構(gòu)建的響應(yīng)并非客戶端請(qǐng)求的資源,而是資源另外一個(gè)訪問路徑
永久重定向:http://www.360buy.com ---用戶訪問這個(gè)網(wǎng)站的時(shí)候會(huì)跳轉(zhuǎn)到https://www.jd.com/這個(gè)網(wǎng)站。
臨時(shí)重定向:http://www.taobao.com
6、發(fā)送響應(yīng)報(bào)文
7、記錄日志
最后,當(dāng)事務(wù)結(jié)束時(shí),Web服務(wù)器會(huì)在日志文件中添加一個(gè)條目,來(lái)描述已執(zhí)行的事務(wù)
7、Httpd特性和MPM工作模式
- 高度模塊化:core + modules
- DSO: Dynamic Shared Object 動(dòng)態(tài)加/卸載
- MPM:multi-processing module多路處理模塊
這些特性和內(nèi)核很相似。 -
MPM工作模式
①prefork:多進(jìn)程I/O模型,每個(gè)進(jìn)程響應(yīng)一個(gè)請(qǐng)求,默認(rèn)模型
一個(gè)主進(jìn)程:生成和回收n個(gè)子進(jìn)程,創(chuàng)建套接字,不響應(yīng)請(qǐng)求
多個(gè)子進(jìn)程:工作work進(jìn)程,每個(gè)子進(jìn)程處理一個(gè)請(qǐng)求;系統(tǒng)初始時(shí),預(yù)先生成多個(gè)空閑進(jìn)程,等待請(qǐng)求,最大不超過(guò)1024個(gè)
②worker:復(fù)用的多進(jìn)程I/O模型,多進(jìn)程多線程,IIS使用此模型
一個(gè)主進(jìn)程:生成m個(gè)子進(jìn)程,每個(gè)子進(jìn)程負(fù)責(zé)生個(gè)n個(gè)線程,每個(gè)線程響應(yīng)一個(gè)請(qǐng)求,并發(fā)響應(yīng)請(qǐng)求:m*n
③event:事件驅(qū)動(dòng)模型(worker模型的變種)
一個(gè)主進(jìn)程:生成m個(gè)子進(jìn)程,每個(gè)進(jìn)程生成n個(gè)線程來(lái)響應(yīng)n個(gè)請(qǐng)求,有專門的服務(wù)線程來(lái)管理這些keep-alive類型的線程,當(dāng)有真實(shí)請(qǐng)求時(shí),將請(qǐng)求傳遞給服務(wù)線程,執(zhí)行完畢后,又允許釋放。這樣增強(qiáng)了高并發(fā)場(chǎng)景下的請(qǐng)求處理能力
httpd-2.2: event測(cè)試版,centos6
httpd-2.4:event穩(wěn)定版,centos7
image.png
image.png
image.png
8、httpd的功能特性
虛擬主機(jī)
IP、Port、FQDN
一個(gè)物理服務(wù)器上可以額搭建多個(gè)web網(wǎng)站。
CGI:Common Gateway Interface,通用網(wǎng)關(guān)接口
網(wǎng)關(guān)用來(lái)解決不同網(wǎng)段、不同協(xié)議之間的通信。
反向代理
假如有好幾個(gè)服務(wù)器提供相同的web服務(wù),并且網(wǎng)站信息都是一樣的,反向代理服務(wù)器的作用相當(dāng)于一個(gè)調(diào)度器,將用戶發(fā)送的請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的服務(wù)器。
正向代理
比如用戶要訪問一個(gè)網(wǎng)站,它先把請(qǐng)求發(fā)送給正向代理服務(wù)器,然后代理服務(wù)器去替你去訪問這個(gè)網(wǎng)站,并且下載網(wǎng)站的資源,一份發(fā)送給你,一份保存到自己的緩存中,當(dāng)有下一個(gè)用戶要訪問相同的網(wǎng)頁(yè)資源時(shí),因?yàn)榇矸?wù)器上已經(jīng)有緩存,就直接將資源發(fā)送給用戶,節(jié)省了帶寬。
負(fù)載均衡
路徑別名
豐富的用戶認(rèn)證機(jī)制
basic
digest
支持第三方模塊


