1霉颠、套接字
在建立通信連接的每一端,進程間的傳輸要有兩個標志:
IP地址和端口號荆虱,合稱為套接字地址socket address 蒿偎,套接字文件定義了ip地址和端口號,用于不同進程間通信使用怀读。比如mysql服務器端的進程和客戶端的進程進行通訊诉位。
客戶機套接字地址定義了一個唯一的客戶進程
服務器套接字地址定義了一個唯一的服務器進程
- Socket:套接字,進程間通信IPC的一種實現(xiàn)菜枷,允許位于不同主機(或同一主機)上不同進程之間進行通信和數(shù)據(jù)交換苍糠。
- Socket Domain:根據(jù)其所使用的地址
AF_INET:Address Family,IPv4
AF_INET6:IPv6
AF_UNIX:同一主機上不同進程之間通信時使用 - 套接字相關的系統(tǒng)調(diào)用:
socket(): 創(chuàng)建一個套接字
bind():綁定IP和端口
listen():監(jiān)聽
accept():接收請求
connect():請求連接建立
write():發(fā)送
read():接收
close():關閉連接
2啤誊、HTTP通信過程
http: Hyper Text Transfer Protocol, 80/tcp岳瞭,超文本傳輸協(xié)議。
html: Hyper Text Markup Language 超文本標記語言蚊锹,編程語言瞳筏,是http協(xié)議傳輸?shù)囊环N文件格式。
MIME:Multipurpose Internet Mail Extensions
多用途互聯(lián)網(wǎng)郵件擴展 /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
一個網(wǎng)頁由多個資源構(gòu)成姚炕,打開一個頁面,會有多個資源展示出來丢烘,但是每個資源都要單獨請求柱宦。因此,一個“Web 頁面”通常并不是單個資源铅协,而是一組資源的集合
靜態(tài)文件:無需服務端做出額外處理
文件后綴:.jpg, .html, .txt, .js, .css, .mp3, .avi
動態(tài)文件:服務端執(zhí)行程序捷沸,返回執(zhí)行的結(jié)果
文件后綴:.asp, .php, .jsp
4、URI
URI: Uniform Resource Identifier 統(tǒng)一資源標識狐史,分為URL和URN
URN: Uniform Resource Naming痒给,統(tǒng)一資源命名
示例:P2P下載使用的磁力鏈接是URN的一種實現(xiàn)
magnet:?xt=urn:btih:660557A6890EF888666
URL: Uniform Resorce Locator,統(tǒng)一資源定位符骏全,用于描述某服務器某特定資源位置
兩者區(qū)別:URN如同一個人的名稱苍柏,而URL代表一個人的住址。換言之姜贡,URN定義某事物的身份试吁,而URL提供查找該事物的方法。URN僅用于命名,而不指定地址
URL組成
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
schame:方案熄捍,訪問服務器以獲取資源時要使用哪種協(xié)議
user:用戶烛恤,某些方案訪問資源時需要的用戶名
password:密碼,用戶對應的密碼余耽,中間用:分隔
Host:主機缚柏,資源宿主服務器的主機名或IP地址
port:端口,資源宿主服務器正在監(jiān)聽的端口號,很多方案有默認端口號
path:路徑,服務器資源的本地名碟贾,由一個/將其與前面的URL組件分隔
params:參數(shù)币喧,指定輸入的參數(shù),多個參數(shù)袱耽,用;分隔
query:查詢杀餐,傳遞參數(shù)給程序,如數(shù)據(jù)庫朱巨,用史翘?分隔,多個查詢用&分隔
frag:片段,一小片或一部分資源的名字冀续,此組件在客戶端使用恶座,用#分隔,可以在當前頁進行跳轉(zhuǎn)沥阳,跳轉(zhuǎn)至當前網(wǎng)頁的特定行,比如當前頁面篇幅比較長時自点,可以跳轉(zhuǎn)到當前頁面的指定位置桐罕。
5、網(wǎng)站訪問量
IP(獨立IP):記錄遠程客戶機IP地址的計算機訪問網(wǎng)站的次數(shù)桂敛,是衡量網(wǎng)站流量的重要指標功炮,一天內(nèi)來自相同客戶機IP地址只計算一次。
PV(訪問量):即Page View, 頁面瀏覽量或點擊量术唬,用戶每次刷新即被計算一次薪伏,PV反映的是瀏覽某網(wǎng)站的頁面數(shù),PV與來訪者的數(shù)量成正比粗仓,PV并不是頁面的來訪者數(shù)量嫁怀,而是網(wǎng)站被訪問的頁面數(shù)量
UV(獨立訪客):即Unique Visitor,訪問某網(wǎng)站的電腦的數(shù)量借浊。網(wǎng)站判斷來訪電腦的身份是通過來訪電腦的cookies實現(xiàn)的塘淑。如果更換了IP后但不清除cookies,再訪問相同網(wǎng)站蚂斤,該網(wǎng)站的統(tǒng)計中UV數(shù)是不變的存捺。
網(wǎng)站統(tǒng)計:http://www.alexa.cn/rank/
6、一次完整的http請求處理過程
1曙蒸、建立連接:接收或拒絕連接請求捌治,即三次握手的過程岗钩。
2、接收請求:接收客戶端請求報文中對某資源的一次請求的過程
Web訪問響應模型(Web I/O)
單進程I/O模型:啟動一個進程處理用戶請求肖油,而且一次只處理一個兼吓,多個請求被串行響應
多進程I/O模型:并行啟動多個進程,每個進程響應一個連接請求
復用I/O結(jié)構(gòu):啟動一個進程,同時響應N個連接請求
實現(xiàn)方法:多線程模型和事件驅(qū)動
多線程模型:一個進程生成N個線程构韵,每線程響應一個連接請求
事件驅(qū)動:一個進程處理N個請求
復用的多進程I/O模型:啟動M個進程周蹭,每一個進程開多個線程,每個線程響應多個連接請求
3疲恢、處理請求:服務器對請求報文進行解析凶朗,并獲取客戶端請求的資源及請求的方法等相關信息,根據(jù)方法显拳,資源棚愤,首部和可選的主體部分對請求進行處理
HTTP常用請求方式Method:GET、POST杂数、HEAD宛畦、PUT、DELETE揍移、TRACE次和、OPTIONS
4、訪問資源:負責向請求者提供對方請求的靜態(tài)資源那伐,或動態(tài)運行后生成的資源踏施,用戶將指令發(fā)送給內(nèi)核,內(nèi)核到磁盤上去調(diào)取客戶端要訪問的資源數(shù)據(jù)到內(nèi)核空間罕邀,再將資源發(fā)送到用戶的內(nèi)存空間畅形。
5、構(gòu)建響應報文:一旦Web服務器識別從出了資源诉探,就執(zhí)行請求方法中描述的動作日熬,封裝http的頭部信息的響應報文,并返回響應報文肾胯。響應報文中包含有響應狀態(tài)碼竖席、響應首部,如果生成了響應主體的話阳液,還包括響應主體怕敬。
1)響應實體:如果事務處理產(chǎn)生了響應主體,就將內(nèi)容放在響應報文中回送過去帘皿。響應報文中通常包括:
描述了響應主體MIME類型的Content-Type首部
描述了響應主體長度的Content-Length
實際報文的主體內(nèi)容
此命令可以查看響應報文的頭部信息
[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服務構(gòu)建的響應并非客戶端請求的資源东跪,而是資源另外一個訪問路徑
永久重定向:http://www.360buy.com ---用戶訪問這個網(wǎng)站的時候會跳轉(zhuǎn)到https://www.jd.com/這個網(wǎng)站。
臨時重定向:http://www.taobao.com
6、發(fā)送響應報文
7虽填、記錄日志
最后丁恭,當事務結(jié)束時,Web服務器會在日志文件中添加一個條目斋日,來描述已執(zhí)行的事務
7牲览、Httpd特性和MPM工作模式
- 高度模塊化:core + modules
- DSO: Dynamic Shared Object 動態(tài)加/卸載
- MPM:multi-processing module多路處理模塊
這些特性和內(nèi)核很相似。 -
MPM工作模式
①prefork:多進程I/O模型恶守,每個進程響應一個請求第献,默認模型
一個主進程:生成和回收n個子進程,創(chuàng)建套接字兔港,不響應請求
多個子進程:工作work進程庸毫,每個子進程處理一個請求;系統(tǒng)初始時衫樊,預先生成多個空閑進程飒赃,等待請求,最大不超過1024個
②worker:復用的多進程I/O模型,多進程多線程科侈,IIS使用此模型
一個主進程:生成m個子進程载佳,每個子進程負責生個n個線程,每個線程響應一個請求臀栈,并發(fā)響應請求:m*n
③event:事件驅(qū)動模型(worker模型的變種)
一個主進程:生成m個子進程蔫慧,每個進程生成n個線程來響應n個請求,有專門的服務線程來管理這些keep-alive類型的線程权薯,當有真實請求時藕漱,將請求傳遞給服務線程,執(zhí)行完畢后崭闲,又允許釋放。這樣增強了高并發(fā)場景下的請求處理能力
httpd-2.2: event測試版威蕉,centos6
httpd-2.4:event穩(wěn)定版刁俭,centos7
8、httpd的功能特性
虛擬主機
IP韧涨、Port牍戚、FQDN
一個物理服務器上可以額搭建多個web網(wǎng)站。
CGI:Common Gateway Interface虑粥,通用網(wǎng)關接口
網(wǎng)關用來解決不同網(wǎng)段如孝、不同協(xié)議之間的通信。
反向代理
假如有好幾個服務器提供相同的web服務娩贷,并且網(wǎng)站信息都是一樣的第晰,反向代理服務器的作用相當于一個調(diào)度器,將用戶發(fā)送的請求轉(zhuǎn)發(fā)給相應的服務器。
正向代理
比如用戶要訪問一個網(wǎng)站茁瘦,它先把請求發(fā)送給正向代理服務器品抽,然后代理服務器去替你去訪問這個網(wǎng)站,并且下載網(wǎng)站的資源甜熔,一份發(fā)送給你圆恤,一份保存到自己的緩存中,當有下一個用戶要訪問相同的網(wǎng)頁資源時腔稀,因為代理服務器上已經(jīng)有緩存盆昙,就直接將資源發(fā)送給用戶,節(jié)省了帶寬焊虏。
負載均衡
路徑別名
豐富的用戶認證機制
basic
digest
支持第三方模塊