前端基本網絡協議知識整合

一、ICMP協議

 ICMP協議(Internet Control Message Protocol)的全稱是“Internet控制消息協議”,它是IPv4協議族中的一個子協議,用於IP主機、路由器之間傳遞控制消息。控制消息是在網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然不傳輸用戶數據,但是對於用戶數據的傳遞起着重要的作用。 
ICMP協議與ARP協議不同,ICMP靠IP協議來完成任務,所以ICMP報文中要封裝IP頭部。它與傳輸層協議(如TCP和UDP)的目的不同,一般不用來在端系統之間傳送數據,不被用戶網絡程序直接使用,除了像Ping和Tracert這樣的診斷程序。

Ping方式測試是否能夠連通目標主機的響應成功結果如圖所示:

二、ARP協議

 ARP(Address Resolution Protocol,地位解析協議)的基本功能是負責將一個已知的IP地址解析成MAC地址,以便在交換機上通過MAC地址進行通信。

例如:

1、PC1發送數據給PC2,需要先知道PC2的IP地址所對應的MAC地址是什麼,這時就需要ARP請求廣播實現

2、主機PC1想發送數據給主機PC2,它檢查自己的ARP緩存表。ARP緩存表是主機存儲在內存中的一個IP地址和MAC地址—對應的表,經查看PC1的ARP緩存表中沒有PC2的MAC地址

3、這時,PC1會初始化ARP請求過程(發送一個ARP請求廣播),用於發現目的地的MAC地址,ARP請求是目的地址爲MAC廣播地址(FF-FF-FF-FF-FF-FF)的廣播幀,從而保證所有的設備都能收到該請求

4、主機接收到數據幀後,進行IP地址的比較,如果目標IP地址與自己的IP地址不同,則會丟棄這個數據包,只有PC2這臺主機會在自己的ARP表中緩存PC1的IP地址和MAC地址的對應關係,同時發送一個ARP應答,來告訴PC1自己的MAC地址(這個數據幀是單播)

5、PC1在接收到這個迴應的數據幀後,在自己的ARP表中添加PC2的IP地址和MAC地址的對應關係,之後PC1就可以發送數據給PC2了

三、TCP協議

TCP把連接作爲最基本的對象,每一條TCP連接都有兩個端點,這種斷點我們叫作套接字(socket),它的定義爲端口號拼接到IP地址即構成了套接字,例如,若IP地址爲192.3.4.16 而端口號爲80,那麼得到的套接字爲192.3.4.16:80。

 TCP 協議爲了更容易傳送大數據把數據進行分割, 而且 TCP 協議能夠確認數據最終是否送達到對方。所以,TCP連接相當於兩根管道(一個用於服務器到客戶端,一個用於客戶端到服務器),管道里面數據傳輸是通過字節碼傳輸,傳輸是有序的,每個字節都是一個一個來傳輸。

1.三次握手:握手過程中使用了 TCP 的標誌(flag) —— SYN(synchronize) 和ACK(acknowledgement) 。

  • 第一次握手:建立連接時,客戶端A發送SYN包(SYN=j)到服務器B,並進入SYN_SEND狀態,等待服務器B確認。
  • 第二次握手:服務器B收到SYN包,必須確認客戶A的SYN(ACK=j+1),同時自己也發送一個SYN包(SYN=k),即SYN+ACK包,此時服務器B進入SYN_RECV狀態。
  • 第三次握手:客戶端A收到服務器B的SYN+ACK包,向服務器B發送確認包ACK(ACK=k+1),此包發送完畢,完成三次握手。

 

 若在握手過程中某個階段莫名中斷, TCP 協議會再次以相同的順序發送相同的數據包。

2.四次揮手:由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的連接。收到一個 FIN只意味着這一方向上沒有數據流動,一個TCP連接在收到一個FIN後仍能發送數據。先進行關閉的一方將執行主動關閉,而另一方被動關閉。

  • 客戶端A發送一個FIN,用來關閉客戶A到服務器B的數據傳送。
  • 服務器B收到這個FIN,它發回一個ACK,確認序號爲收到的序號加1。
  • 服務器B關閉與客戶端A的連接,發送一個FIN給客戶端A。
  • 客戶端A發回ACK報文確認,並將確認序號設置爲收到序號加1。

 

 三次握手和四次揮手:在TCP連接中,服務器端的SYN和ACK向客戶端發送是一次性發送的,而在斷開連接的過程中, B端向A
端發送的ACK和FIN是分兩次發送的。因爲在B端接收到A端的FIN後, B端可能還有數據要傳輸,所以先發送ACK,等B端處理完自己的事情後就可以發送FIN斷開連接了。

3.TCP連接的深入理解:由於TCP是全雙工的,因此在每一個方向都必須單獨關閉。這原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的連接。收到一個FIN只意味着這個方向上沒有數據流動,一個TCP連接在接收到一個FIN後仍能發送數據。 首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。
TCP協議的連接是全雙工連接,一個TCP連接存在雙向的讀寫通道。簡單來說,是“先關讀,再關寫” ,總共需要4個階段。以客戶機發起關閉連接爲例:1.服務器讀通道關閉;2.客戶端寫通道關閉;3.客戶端讀通道關閉;4.服務器寫通道關閉。
關閉行爲是在發起方數據發送完畢之後,給對方發出一個FIN(finish)數據段,直到接收到對方發送的FIN,且對方收到了接收確認的ACK之後,雙方的數據通信完全結束,過程中每次都需要返回確認數據段ACK。

四、UDP協議

 (1) UDP是一個非連接的協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據,並儘可能快地把它扔到網絡上。在發送端,UDP傳送數據的速度僅僅是受應用程序生成數據的速度、計算機的能力和傳輸帶寬的限制;在接收端,UDP把每個消息段放在隊列中,應用程序每次從隊列中讀一個消息段。
(2) 由於傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收發狀態等,因此一臺服務機可同時向多個客戶機傳輸相同的消息。
(3) UDP信息包的標題很短,只有8個字節,相對於TCP的20個字節信息包的額外開銷很小。
(4) 吞吐量不受擁擠控制算法的調節,只受應用軟件生成數據的速率、傳輸帶寬、源端和終端主機性能的限制。
(5)UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的鏈接狀態表(這裏面有許多參數)。
(6)UDP是面向報文的。發送方的UDP對應用程序交下來的報文,在添加首部後就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,因此,應用程序需要選擇合適的報文大小。
我們經常使用“ping”命令來測試兩臺主機之間TCP/IP通信是否正常,其實“ping”命令的原理就是向對方主機發送UDP數據包,然後對方主機確認收到數據包,如果數據包是否到達的消息及時反饋回來,那麼網絡就是通的。

TCP與UDP的區別:

1.基於連接與無連接;
2.對系統資源的要求(TCP較多,UDP少);
3.UDP程序結構較簡單;
4.流模式與數據報模式 ;
5.TCP保證數據正確性,UDP可能丟包,TCP保證數據順序,UDP不保證。

五、DNS協議

 如果說ARP協議是用來將IP地址轉換爲MAC地址,那麼DNS協議則是用來將域名轉換爲IP地址(也可以將IP地址轉換爲相應的域名地址)。DNS 是一個應用層協議,域名系統 (DNS) 的作用是將人類可讀的域名 (如,www.example.com) 轉換爲機器可讀的 IP 地址 (如,192.0.2.44)。DNS 協議建立在 UDP 或 TCP 協議之上,默認使用 53 號端口。客戶端默認通過 UDP 協議進行通訊,但是由於廣域網中不適合傳輸過大的 UDP 數據包,因此規定當報文長度超過了 512 字節時,應轉換爲使用 TCP 協議進行數據傳輸。

IP地址是面向主機的,而域名則是面向用戶的。
域名和IP的對應關係保存在一個叫hosts文件中。
最初,通過互聯網信息中心來管理這個文件,如果有一個新的計算機想接入網絡,或者某個計算IP變更都需要到信息中心申請變更hosts文件。其他計算機也需要定期更新,才能上網。
但是這樣太麻煩了,就出現了DNS系統。 

DNS系統:

  1. 一個組織的系統管理機構, 維護系統內的每個主機的IP和主機名的對應關係
  2. 如果新計算機接入網絡,將這個信息註冊到數據庫中
  3. 用戶輸入域名的時候,會自動查詢DNS服務器,由DNS服務器檢索數據庫,得到對應的IP地址

DNS域名層級結構如下:

 

六、HTTP協議

HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。

HTTP是一個基於TCP/IP通信協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。

HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分佈式超媒體信息系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的規範化工作正在進行之中,而且HTTP-NG(Next Generation of HTTP)的建議已經提出。

HTTP協議工作於客戶端-服務端架構爲上。瀏覽器作爲HTTP客戶端通過URL向HTTP服務端即WEB服務器發送所有請求。Web服務器根據接收到的請求後,向客戶端發送響應信息。

HTTP請求GET請求與POST請求的區別:

1.url可見性:
     get,參數url可見
     post,url參數不可見

2.傳輸數據的大小:
    get一般傳輸數據大小不超過2k-4k
    post請求傳輸數據量更大

3.數據傳輸上:
    get通過拼接url進行傳遞參數
    post通過body體傳輸參數

4.後退頁面的反應:
    get請求頁面後退時,不產生影響
    post請求頁面後退時,會重新提交請求

5.緩存性:
    get請求是可以緩存的
    post請求不可以緩存

6.安全性:
    都不安全(因爲HTTP均爲明文傳輸),原則上post肯定要比get安全,畢竟傳輸參數時url不可見

7.GET請求只能進行url編碼,而POST支持多種編碼方式

8.GET請求參數會被完整保留在瀏覽器歷史記錄裏,而POST中的參數不會被保留

 HTTP狀態碼

狀態代碼有三位數字組成,第一個數字定義了響應的類別,共分五種類別:

1xx:指示信息--表示請求已接收,繼續處理

2xx:成功--表示請求已被成功接收、理解、接受

3xx:重定向--要完成請求必須進行更進一步的操作

4xx:客戶端錯誤--請求有語法錯誤或請求無法實現

5xx:服務器端錯誤--服務器未能實現合法的請求

常見狀態碼包括:

    1.  
      200 OK //客戶端請求成功
    2.  
      400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解
    3.  
      401 Unauthorized //請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用
    4.  
      403 Forbidden //服務器收到請求,但是拒絕提供服務
    5.  
      404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
    6.  
      500 Internal Server Error //服務器發生不可預期的錯誤
    7.  
      503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章