1口渔、套接字
在建立通信連接的每一端落午,進程間的傳輸要有兩個標志:
IP地址和端口號,合稱為套接字地址socket address 蜕便,套接字文件定義了ip地址和端口號,用于不同進程間通信使用贩幻。比如mysql服務(wù)器端的進程和客戶端的進程進行通訊轿腺。
客戶機套接字地址定義了一個唯一的客戶進程
服務(wù)器套接字地址定義了一個唯一的服務(wù)器進程
- Socket:套接字,進程間通信IPC的一種實現(xiàn)丛楚,允許位于不同主機(或同一主機)上不同進程之間進行通信和數(shù)據(jù)交換族壳。
- Socket Domain:根據(jù)其所使用的地址
AF_INET:Address Family,IPv4
AF_INET6:IPv6
AF_UNIX:同一主機上不同進程之間通信時使用 - 套接字相關(guān)的系統(tǒng)調(diào)用:
socket(): 創(chuàng)建一個套接字
bind():綁定IP和端口
listen():監(jiān)聽
accept():接收請求
connect():請求連接建立
write():發(fā)送
read():接收
close():關(guān)閉連接
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)文件:無需服務(wù)端做出額外處理
文件后綴:.jpg, .html, .txt, .js, .css, .mp3, .avi
動態(tài)文件:服務(wù)端執(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)一資源定位符,用于描述某服務(wù)器某特定資源位置
兩者區(qū)別:URN如同一個人的名稱惶凝,而URL代表一個人的住址吼虎。換言之,URN定義某事物的身份苍鲜,而URL提供查找該事物的方法思灰。URN僅用于命名,而不指定地址
URL組成
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
schame:方案混滔,訪問服務(wù)器以獲取資源時要使用哪種協(xié)議
user:用戶洒疚,某些方案訪問資源時需要的用戶名
password:密碼,用戶對應(yīng)的密碼坯屿,中間用:分隔
Host:主機油湖,資源宿主服務(wù)器的主機名或IP地址
port:端口,資源宿主服務(wù)器正在監(jiān)聽的端口號,很多方案有默認端口號
path:路徑,服務(wù)器資源的本地名领跛,由一個/將其與前面的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訪問響應(yīng)模型(Web I/O)
單進程I/O模型:啟動一個進程處理用戶請求,而且一次只處理一個祸泪,多個請求被串行響應(yīng)
多進程I/O模型:并行啟動多個進程,每個進程響應(yīng)一個連接請求
復(fù)用I/O結(jié)構(gòu):啟動一個進程吗浩,同時響應(yīng)N個連接請求
實現(xiàn)方法:多線程模型和事件驅(qū)動
多線程模型:一個進程生成N個線程,每線程響應(yīng)一個連接請求
事件驅(qū)動:一個進程處理N個請求
復(fù)用的多進程I/O模型:啟動M個進程没隘,每一個進程開多個線程懂扼,每個線程響應(yīng)多個連接請求
3、處理請求:服務(wù)器對請求報文進行解析右蒲,并獲取客戶端請求的資源及請求的方法等相關(guān)信息微王,根據(jù)方法,資源品嚣,首部和可選的主體部分對請求進行處理
HTTP常用請求方式Method:GET炕倘、POST、HEAD翰撑、PUT罩旋、DELETE啊央、TRACE、OPTIONS
4涨醋、訪問資源:負責(zé)向請求者提供對方請求的靜態(tài)資源瓜饥,或動態(tài)運行后生成的資源,用戶將指令發(fā)送給內(nèi)核浴骂,內(nèi)核到磁盤上去調(diào)取客戶端要訪問的資源數(shù)據(jù)到內(nèi)核空間乓土,再將資源發(fā)送到用戶的內(nèi)存空間。
5溯警、構(gòu)建響應(yīng)報文:一旦Web服務(wù)器識別從出了資源趣苏,就執(zhí)行請求方法中描述的動作,封裝http的頭部信息的響應(yīng)報文梯轻,并返回響應(yīng)報文食磕。響應(yīng)報文中包含有響應(yīng)狀態(tài)碼、響應(yīng)首部喳挑,如果生成了響應(yīng)主體的話彬伦,還包括響應(yīng)主體。
1)響應(yīng)實體:如果事務(wù)處理產(chǎn)生了響應(yīng)主體伊诵,就將內(nèi)容放在響應(yīng)報文中回送過去单绑。響應(yīng)報文中通常包括:
描述了響應(yīng)主體MIME類型的Content-Type首部
描述了響應(yīng)主體長度的Content-Length
實際報文的主體內(nèi)容
此命令可以查看響應(yīng)報文的頭部信息
[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)并非客戶端請求的資源,而是資源另外一個訪問路徑
永久重定向:http://www.360buy.com ---用戶訪問這個網(wǎng)站的時候會跳轉(zhuǎn)到https://www.jd.com/這個網(wǎng)站曹宴。
臨時重定向:http://www.taobao.com
6询张、發(fā)送響應(yīng)報文
7、記錄日志
最后浙炼,當事務(wù)結(jié)束時份氧,Web服務(wù)器會在日志文件中添加一個條目,來描述已執(zhí)行的事務(wù)
7弯屈、Httpd特性和MPM工作模式
- 高度模塊化:core + modules
- DSO: Dynamic Shared Object 動態(tài)加/卸載
- MPM:multi-processing module多路處理模塊
這些特性和內(nèi)核很相似蜗帜。 - MPM工作模式
①prefork:多進程I/O模型,每個進程響應(yīng)一個請求资厉,默認模型
一個主進程:生成和回收n個子進程厅缺,創(chuàng)建套接字,不響應(yīng)請求
多個子進程:工作work進程宴偿,每個子進程處理一個請求湘捎;系統(tǒng)初始時,預(yù)先生成多個空閑進程窄刘,等待請求窥妇,最大不超過1024個
②worker:復(fù)用的多進程I/O模型,多進程多線程,IIS使用此模型
一個主進程:生成m個子進程娩践,每個子進程負責(zé)生個n個線程活翩,每個線程響應(yīng)一個請求烹骨,并發(fā)響應(yīng)請求:m*n
③event:事件驅(qū)動模型(worker模型的變種)
一個主進程:生成m個子進程,每個進程生成n個線程來響應(yīng)n個請求材泄,有專門的服務(wù)線程來管理這些keep-alive類型的線程沮焕,當有真實請求時,將請求傳遞給服務(wù)線程拉宗,執(zhí)行完畢后峦树,又允許釋放。這樣增強了高并發(fā)場景下的請求處理能力
httpd-2.2: event測試版旦事,centos6
httpd-2.4:event穩(wěn)定版魁巩,centos7
8、httpd的功能特性
虛擬主機
IP族檬、Port歪赢、FQDN
一個物理服務(wù)器上可以額搭建多個web網(wǎng)站化戳。
CGI:Common Gateway Interface单料,通用網(wǎng)關(guān)接口
網(wǎng)關(guān)用來解決不同網(wǎng)段、不同協(xié)議之間的通信点楼。
反向代理
假如有好幾個服務(wù)器提供相同的web服務(wù)扫尖,并且網(wǎng)站信息都是一樣的,反向代理服務(wù)器的作用相當于一個調(diào)度器掠廓,將用戶發(fā)送的請求轉(zhuǎn)發(fā)給相應(yīng)的服務(wù)器换怖。
正向代理
比如用戶要訪問一個網(wǎng)站,它先把請求發(fā)送給正向代理服務(wù)器蟀瞧,然后代理服務(wù)器去替你去訪問這個網(wǎng)站沉颂,并且下載網(wǎng)站的資源,一份發(fā)送給你悦污,一份保存到自己的緩存中铸屉,當有下一個用戶要訪問相同的網(wǎng)頁資源時,因為代理服務(wù)器上已經(jīng)有緩存切端,就直接將資源發(fā)送給用戶彻坛,節(jié)省了帶寬。
負載均衡
路徑別名
豐富的用戶認證機制
basic
digest
支持第三方模塊