計算機與網絡設備要相互通訊,雙方就必須基於相同的方法。好比如何探到通訊目標,由哪一邊先發起通訊,會用什麼語言進行通訊,怎樣結束等等,規則事先都須要肯定下來,不一樣的硬件和操做系統之間的通訊都須要這樣一種規則,而這種規則稱爲協議。web
分層管理:應用層、傳輸層、網絡層、數據鏈路層瀏覽器
應用層:安全
決定了向用戶提供應用服務時通訊的活動,好比:FTP(File Transfer Protocol 文件傳輸協議)和 DNS(Domain Name System 域名系統)和 HTTP(Hyper Text Transfer Protocol 超文本傳輸協議)。服務器
傳輸層:用於提供處於網絡鏈接中的兩臺計算機之間的數據傳輸,在傳輸層中有兩個性質不一樣的協議,TCP(Transmission Control Protocol 傳輸控制協議)和 UDP(User Data Protocol 用戶數據報協議)。網絡
網絡層:在衆多的選項內選擇一條傳輸路線,用來處理在網上流動的數據包,數據包是網絡傳輸的最小數據單位,該層規定了怎樣的路徑到達對方的計算機,並把數據包傳送給對方。tcp
數據鏈路層:又名網絡接口層,用來處理鏈接網絡的硬件部分,包括控制操做系統,硬件的設備驅動、NIC(Network Interface Card 網絡適配器或者網卡),硬件上的範疇均在鏈路層的做用範圍內。post
TCP/IP:是互聯網相關的各種協議的總稱。編碼
TCP位於傳輸層,提供可靠的字節流服務,可以把數據準確的傳送給對方,它採用了三次握手的策略,tcp把數據發送出去以後,會向對方肯定是否發送成功。握手過程當中使用了tcp標誌(flag)——SYN(synchronize)和ACK(acknowledgement)。發送端首先發送一個帶SYN標誌的數據包給對方,接收端接收後,回傳一個帶有SYN/ACK 標誌的數據包以示傳達確認信息,最後,發送端再回傳一個ACK標誌的數據包,表明握手結束。加密
使用ARP(Address Resolution Protocol)協議憑藉MAC地址進行通訊spa
IP(Internet Protocol 網際協議)位於網絡層,IP協議的做用就是把數據包發送給對方,要保證是否發送到對方那裏,須要知足兩個重要的條件,IP地址和MAC(Media Access Control Address)地址。IP地址指明瞭節點被分配到的地址,MAC地址是網卡所屬的固定地址,IP地址和MAC地址進行配對,IP地址可變換,MAC地址基本上不會更改.IP間的通訊依賴MAC地址,一般是通過多臺計算機和網絡設備中轉才能發送給對方,在中轉的過程當中會利用下一站中轉設備的MAC地址來搜索下一個中轉目標,這時會採用ARP(Address Resolution Protocol 解析地址協議),根據通訊方的IP地址就能夠反查出對應的MAC地址。
負責域名解析的DNS(Domain Name System)服務
DNS服務和HTTP協議同樣位於應用層,它提供域名到IP地址之間的解析服務,經過域名查找IP地址,或逆向從IP地址反查域名的服務。
HTTP協議,用於客戶端和服務端之間的通訊
請求訪問文本和圖像等資源爲:客戶端
提供資源響應的爲:服務端
兩臺計算機之間使用HTTP協議進行通訊時,在一條通訊線上一定有一端爲客戶端,一端爲服務端,HTTP協議規定,先從客戶端創建通訊服務端在沒有接收到請求以前是不會發送響應的。
1)客戶端請求:由客戶端發送來觸發一個服務器上的動做;
請求報文:請求方法、請求URL、協議版本、請求首部字段、內容實體;
Http請求的起始行
包含三個要素:
* 一個Http方法,一個動詞像(Get、Put、或者post)或者一個名詞像(Head、options),描述要執行的動做;
* 請求目標(Request target),一般是一個URL ,或者是協議、端口和域名的絕對路徑,一般以請求的環境爲特徵;
* Http 版本(Http version),定義了剩餘報文的結構,做爲對指望的響應版本的指示符;
Http請求的Headers
在超文本傳輸協議( Hypertext Transfer Protocol ,HTTP)的請求和響應消息中,協議頭部分的那些組件。HTTP消息頭用來準確描述正在獲取的資源、服務器或者客戶端的行爲,定義了HTTP事務中的具體操做參數。HTTP消息頭
,以明文字符串格式傳送,是以冒號分隔的鍵/值對,如:
Accept 可接受的內容類型
Accept-Language 語言
Connection鏈接狀態
Host 請求的域名(這裏我設置的是請求本地,固然,關於域名,就是所謂的URL)
User-Agent 瀏覽器端瀏覽器型號和版本
Accept-Encoding 可接受的壓縮類型 gzip,deflate
請求的Body
不是全部的請求都有一個body,例如獲取資源的請求。Get、Head、Delete、Options,一般它們不須要Body。
請求正文中能夠包含客戶提交的查詢字符串信息:
username=jinqiao&password=1234
2)服務端對請求作出的迴應;
響應報文:協議版本、狀態碼、解釋狀態碼緣由短語、可選的響應首部字段、實體主體;
響應的狀態行:
* 協議版本,一般爲:Http/1.1
* 狀態碼(status code),表示請求成功或是失敗
* 狀態文本,描述狀態碼
第一個數字有五種可能的取值:
- 1xx: 指示信息—表示請求已接收,繼續處理。
- 2xx: 成功—表示請求已經被成功接收、理解、接受。
- 3xx: 重定向—要完成請求必須進行更進一步的操做。
- 4xx: 客戶端錯誤—請求有語法錯誤或請求沒法實現。
- 5xx: 服務器端錯誤—服務器未能實現合法的請求。
狀態代碼 狀態描述
200 OK
說明:客戶端請求成功
400 Bad Request
說明:因爲客戶端請求有語法錯誤,不能被服務器所理解。
401 Unauthonzed
說明:請求未經受權。這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用
403 Forbidden
說明:服務器收到請求,可是拒絕提供服務。服務器一般會在響應正文中給出不提供服務的緣由
404 Not Found
說明:請求的資源不存在,例如,輸入了錯誤的URL。
500 Internal Server Error
說明:服務器發生不可預期的錯誤,致使沒法完成客戶端的請求。
503 Service Unavailable
說明:服務器當前不可以處理客戶端的請求,在一段時間以後,服務器可能會恢復正常。
響應的Headers
Location:響應報頭域用於重定向接受者到一個新的位置。
Server:響應報頭域包含了服務器用來處理請求的軟件信息。它和User-Agent請求報頭域是相對應的,前者發送服務器端軟件的信息,後者發送客戶 端軟件(瀏覽器)和操做系統的信息。
Content-Encoding:實體報頭域被使用做媒體類型的修飾符,它的值指示了已經被應用到實體正文的附加內容編碼,於是要得到Content- Type報頭域中所引用的媒體類型,必須採用相應的解碼機制。
Content-Language:實體報頭域描述了資源所用的天然語言。Content-Language容許用戶遵守自身的首選語言來識別和區分實體。
Content-Length:實體報頭域用於指明正文的長度,以字節方式存儲的十進制數字來表示,也就是一個數字字符佔一個字節,用其對應的ASCII碼存儲傳輸。要注意的是:這個長度僅僅是表示實體正文的長度,沒有包括實體報頭的長度。
Content-Type:實體報頭域用語指發送給接收者的實體正文的媒體類型。
Last-Modified:實體報頭域用於指示資源最後的修改日期及時間。
Expires:實體報頭域給出響應過時的日期和時間。必須是RFC 1123中的日期格式,例如:Expires: Thu, 15 Sep 2005 16:00:00 GMT
響應的Body
響應體就是響應的消息體,若是是純數據就是返回純數據,若是請求的是HTML頁面,那麼返回的就是HTML代碼,若是是JS就是JS代碼
URI (Uniform Resource Identifier)定位資源
HTTP 協議使用URL定位互聯網上的資源,由於URI 的特定功能,在互聯網上任意位置的資源都能訪問到。當客戶端請求訪問資源而發送請求時,URI須要將做爲請求報文中的請求URI包含在內,指定請求URI的方式有不少;若是不是訪問特定的資源而是對服務器自己發起請求,能夠用一個*來代替請求URI。
GET:獲取資源
GET方法用來請求訪問已被URI識別的資源,指定的資源經服務端解析後返回響應內容,若是請求的的資源是文本,那就保持原樣返回;若是是想CGL(Common Gateway Interface 通用網關接口)那樣的程序,則返回通過執行後的輸出結果。
POST:傳輸實體主體
雖然共GET也能夠傳輸實體主體,點通常不會用GET方法進行傳輸,而是用POST方法,Post與get 類似,可是POST的主要目的並非獲取響應的主體內容。
PUT:傳輸文件
PUT用來傳輸文件,就像FTP協議的文件上傳同樣,要求在請求報文的主體中包含文件內容,而後保存在請求URI指定的位置。PUT方法自身不帶驗證機制,任何人均可以上傳文件,存在安全性問題,通常不多用到PUT方法。
HEAD:得到報文首部
HEAD方法和DET方法同樣,只是不反悔報文主體部分,用於確認URI的有效性及資源更新的日期時間等。
DELETE:刪除文件
與PUT相反的方法,DELETE方法 按請求URI刪除指定的資源,DELETE方法自己和PUT方法同樣不帶驗證機制,通常不多人使用。
OPTIONS:詢問支持的方法
用來查詢針對請求URI指定的資源支持的方法。
TRACE:追蹤路徑
TRACE方法是讓web服務端將以前的請求通訊還回給客戶端的方法。發送請求時,在MAX-Forwarrds 首部字段中填入數值,每通過一個服務端就將該數字-1,當數值當好減到0時,就中止繼續傳輸,最後接受的請求的服務器端則返回狀態碼200 ok的響應。客戶端經過TRACE方法能夠查詢發送出去的請求是怎樣被加工修改/篡改的,請求想要連接到源目標服務器可能會經過代理中轉,TRACE方法就是用來確認鏈接過程當中發生的一系列操做,通常不怎麼經常使用,由於它容易引起(Cross-Site Tracing 跨站追蹤)攻擊,因此不經常使用。
CONNECT:要求用隧道協議鏈接代理
在與代理服務器通訊時創建隧道,實現隧道協議進行TCP通訊,主要使用:SSL(Secure Sockets Layer 安全套接層)和 TLS(Transport Layer Security 傳輸層安全)協議把通訊內容加密後通過網絡隧道傳輸