一、TCP及socket通信原理
1、Port number(IANA,互聯網地址授權機構規定)
TCP:傳輸控制協議,面向連接的協議;通信前需要建立虛擬鏈路,結束後拆除鏈路。
UDP:User Datagran Protocol,無連接的協議。
0-1023:衆所周知,永久的分配給固定的應用使用,特權端口(22/ssh,80/http)。
1024-41951:亦爲註冊端口,但要求並不是特別嚴格,分配給程序註冊爲某應用使用(11211/tcp,3306/tcp)
41952-65535:客戶端程序隨機使用的端口:動態端口,或私有端口;其範圍的定義在文件中:(/proc/sys/net/ipv4/ip_local_port_range)。
2、Socker:IPC的一種實現,允許位於不同主機(甚至同一主機)上不同進程之間進行通信。
Socket API(封裝了內核中的socket通信相關的系統調用)
(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():接收
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
二、httpd協議及Web基本原理
1、http:hyper text transfer protocal,超文本傳輸協議
C/S架構:客戶端-服務器,實現該協議的程序有httpd,nginx,lighttpd......
工作模式:一次httpd事務:請求<-->響應
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多用途互聯網郵件擴展,支持非文本編碼傳輸後再解碼還原
3)HTTP/1.1:增強了緩存功能
4)HTTP/2.0:借鑑spdy對1.0多方面改進,大大提升性能
SPDY是Google開發的基於TCP的應用層協議,用以最小化網絡延遲,提升網絡速度,優化用戶的網絡使用體驗。
SPDY對HTTP協議的增強。新協議的功能包括數據流的多路複用、請求優先級以及HTTP報頭壓縮。
3、Web資源:Web resources
1 2 3 4 5 6 | 靜態資源(無需服務端做出額外處理):.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):
1 2 3 4 5 6 | 單進程I /0 結構:啓動一個進程處理用戶請求,而且一次只處理一個;多個請求被串行響應; 多進程I /O 結構:並行啓動多個進程,每個進程響應一個請求; 複用I /O 結構:一個進程響應N個請求: 多線程模型:一個進程生成N個線程,每個線程響應一個用戶請求; 事件驅動:event-driven 複用的多進程I /0 結構:啓動多個(m)進程,每個進程響應n個請求; |
5、一次完整的http請求處理過程
1 2 3 4 5 6 7 8 9 10 11 | (1)、建立或處理連接:接收請求或拒絕請求; (2)、接收請求:接收來自於網絡的請求報文中對某資源的一次請求的過程; (3)、處理請求:分析請求報文的http請求報文首部進行解析,獲取客戶端請求的資源及請求方法等相關信息 請求報文首部的格式: <method><URL><VERSION> HEADERS:(name:value) <request body> (4)、訪問資源:獲取請求報文中請求的資源,默認在 /var/www/html 路徑下; (5)、構建響應報文 (6)、發送響應報文 (7)、記錄日誌 |
三、httpd服務器程序
1、httpd:apache純粹的靜態服務器
版本:1.3、2.0、2.2、2.4。centos6默認使用2.2;centos7默認使用2.4
a patchy server(一個充滿補丁的服務器)
ASF:apache software foundation(Apache軟件基金會)最早的項目,官方站點:httpd.apache.com
2、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
3、httpd的功能特性
1 2 3 4 5 6 7 | 支持虛擬主機:IP、Port、FQDN 支持CGI:Common Gateway Interface,通用網關接口; 支持反向代理 支持負載均衡 支持路徑別名 具有豐富的用戶認證機制:basic基本認證、digest摘要認證 支持第三方模塊 |
4、httpd的請求方法
1 2 3 4 5 6 7 8 | GET:請求獲取一個資源,需要服務器發送 HEAD:跟GET近似,但其不需要服務響應請求的資源,而返回響應頭部 POST:基於HTML表單向服務器提交數據,服務器通常需要存儲此數據(位置:通常爲關係型數據庫) PUT:與GET相反,向服務器發送資源;服務器通常需要存儲此資源(位置:通常爲文件系統) DELETE:刪除URL指向的資源 OPTIONS:探測服務器端對請求的URL所支持使用的請求方法 TRACE:跟一次請求中間所經過的代理服務器、防火牆或網關等 #注意:方法嚴格區分大小寫 |
5、http協議首部
1)、通用首部
1 2 3 4 | Connection:定義C /S 之間關於請求、響應的有關選項 Connection:keep-alive Cache-Control:緩存控制 Via:顯示了報文經過的中間節點 |
2)、請求首部
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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)、實體首部
1 2 3 4 5 6 7 8 9 10 11 12 13 | Location: 資源的新位置 Allow: 允許對此資源使用的請求方法 內容相關的首部: Content-Encoding: 支持編碼 Content-Language:支持語言 Content-Length:文本長度 Content-Location:資源所在位置 Content-Type:主體對象類型 Content-Range:在整個資源中此實體表示的字節範圍 緩存相關: ETag: 實體標籤 Expires: 過期期限 Last-Modified: 上次修改時間 |
4)、響應首部
1 2 3 4 5 6 7 8 9 10 11 12 13 | Date:消息產生的時間 Age: 響應持續時間 Server: 向客戶端說明自己的程序名稱和版本 ETage:不透明驗證者 Location:URL備用的位置 Content-Length:實體的長度 Content-Tyep:實體的媒體類型 協商首部: ary: 首部列表,服務器會根據列表中的內容挑一個最適用的版本發送給客戶端 Accept-Ranges: 對當前資源來講,服務器所能夠接受的範圍類型 跟安全相關: WWW-Authentication:質詢,即要求客戶提供帳號和密碼 Set-Cookie:服務器端在某客戶端第一次請求時發送令牌 |
6、http狀態碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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,服務器不支持 |