計算機網絡知識整理

計算機網絡知識整理算法

五層協議體系結構瀏覽器

1.1 應用層緩存

      應用層的任務是經過應用進程間的交互來完成特定網絡應用。應用層協議定義的是應用進程(進程:主機中正在運行的程序)間的通訊和交互的規則。對於不一樣的網絡應用須要不一樣的應用層協議。在互聯網中應用層協議不少,如域名系統DNS,支持萬維網應用的HTTP協議,支持電子郵件的SMTP協議等等。咱們把應用層交互的數據單元稱爲報文。服務器

 

1.2 傳輸網絡

      傳輸層的主要任務就是負責向兩臺主機進程之間的通訊提供通用的數據傳輸服務。應用進程利用該服務傳送應用層報文。「通用的」是指並不針對某一個特定的網絡應用,而是多種應用可使用同一個傳輸層服務。因爲一臺主機可同時運行多個線程,所以傳輸層有複用和分用的功能。所謂複用就是指多個應用層進程可同時使用下面傳輸層的服務,分用和複用相反,是傳輸層把收到的信息分別交付到上面應用層中的相應進程。性能

 

1.2.1 傳輸層主要使用的協議url

      傳輸控制協議TCP:提供面向鏈接的,可靠的數據傳輸服務。spa

      用戶數據協議UDP:提供無鏈接的,盡最大努力的數據傳輸服務(不保證數據傳輸的可靠性)。計算機網絡

 

1.2.2 UDP的主要特色線程

      (1)UDP是無鏈接的;

      (2)UDP使用盡最大努力交付,即不保證可靠交付,所以主機不須要維持複雜的連接狀態;

      (3)UDP是面向報文的;

      (4)UDP沒有擁塞控制,所以網絡出現擁塞不會使源主機的發送速率下降(對實時應用頗有用,如IP電話,實時視頻會議等);

      (5)UDP支持一對1、一對多、多對一和多對多的交互通訊;

      (6)UDP的首部開銷小,只有8個字節,比TCP的20個字節的首部要短。

 

1.2.3 TCP的主要特色

      (1)TCP是面向鏈接的。(就好像打電話同樣,通話前須要先撥號創建鏈接,通話結束後要掛機釋放鏈接);

      (2)每一條TCP鏈接只能有兩個端點,每一條TCP鏈接只能是點對點(一對一);

      (3)TCP提供可靠交付的服務。經過TCP鏈接傳送的數據,無差錯、不丟失、不重複、而且按序到達;

      (4)TCP提供全雙工通訊。TCP容許通訊雙方的應用進程在任什麼時候候都能發送數據。TCP鏈接的兩端都設有發送緩存和接收緩存,用來臨時存放雙方通訊的數據;

      (5)面向字節流。TCP中的「流」指的是流入進程或從進程流出的字節序列。「面向字節流」的含義是:雖然應用程序和TCP的交互是一次一個數據塊,但TCP把應用程序交下來的數據僅僅當作是一連串的無結構的字節流。

 

1.3 網絡層

      網絡層負責爲分組交換網上的不一樣主機提供通訊服務。在發送數據時,網絡層把運輸層產生的報文段或用戶數據報封裝成分組和包進行傳送。在TCP/IP體系結構中,因爲網絡層使用IP協議,所以分組也叫IP數據報,簡稱數據報

      網絡層的另外一個任務就是選擇合適的路由,使源主機運輸層所傳下來的分組,能經過網絡層中的路由器找到目的主機。

      互聯網是由大量的異構網絡經過路由器相互鏈接起來的。互聯網使用的網絡層協議是無鏈接的網際協議和許多路由選擇協議,所以網絡層也叫作網際層IP層

 

1.4 數據鏈路層

      數據鏈路層一般簡稱爲鏈路層。兩臺主機之間的數據傳輸,老是在一段一段的鏈路上傳送的,這就須要使用專門的鏈路層的協議。在兩個相鄰節點之間傳送數據時,數據鏈路層將網絡層交下來的IP數據報組裝成幀,在兩個相鄰節點間的鏈路上傳送幀。每一幀包括數據和必要的控制信息(如同步信息,地址信息,差錯控制等)。

      在接收數據時,控制信息使接收端可以知道一個幀從哪一個比特開始和到哪一個比特結束。這樣,數據鏈路層在收到一個幀後,就可從中提出數據部分,上交給網絡層。

      控制信息還使接收端可以檢測到所收到的幀中有無差錯。若是發現差錯,數據鏈路層就簡單地丟棄這個出了差錯的幀,以免繼續在網絡中傳送下去白白浪費網絡資源。若是須要改正數據在鏈路層傳輸時出現差錯(這就是說,數據鏈路層不只要檢錯,並且還要糾錯),那麼就要採用可靠性傳輸協議來糾正出現的差錯。這種方法會使鏈路層的協議複雜些。

 

1.5 物理層

      在物理層上所傳送的數據單位是比特。物理層的做用是實現相鄰計算機節點之間比特流的透明傳送,儘量屏蔽掉具體傳輸介質和物理設備的差別。使其上面的數據鏈路層沒必要考慮網絡的具體傳輸介質是什麼。「透明傳送比特流」表示經實際電路傳送後的比特流沒有發生變化,對傳送的比特流來講,這個電路好像是看不見的。

 

2 TCP三次握手和四次揮手

2.1 三次握手

      爲了準確無誤的把數據送達目標處,TCP協議採用了三次握手策略。

2.1.1 三次握手簡單示意圖

 

      客戶端-發送帶有SYN標誌的數據包-一次握手-服務端

      服務端-發送帶有SYN/ACK標誌的數據包-二次握手-客戶端

      客戶端-發送帶有ACK標誌的數據包-三次握手-服務端

 

2.1.2 爲何要三次握手

      三次握手的目的是創建可靠的通訊信道,說到通信,簡單來講就是數據的發送與接收,而三次握手最主要的目的就是雙方確認本身與對方的發送與接收是正常的

      第一次握手:Client什麼都不能確認;Server確認了對方發送正常

      第二次握手:Client確認了本身發送、接收正常,對方發送、接收正常;Server確認了本身接收正常,對方發送正常

      第三次握手:Client確認了本身發送、接收正常,對方發送、接收正常;Server確認了本身發送、接收正常,對方發送接收正常

      因此三次握手就能確認雙方收發功能都正常,缺一不可。

2.1.3 爲何要傳回SYN

      接收端傳回發送端所發送的SYN是爲了告訴發送端,我接收到的信息確實就是你所發送的信號了。

 

2.1.4 傳了SYN,爲啥還要傳ACK

      雙方通訊無誤必須是二者互相發送信息都無誤。傳了SYN,證實發送方到接收方的通訊沒有問題,可是接收方到發送方的通訊還須要ACK信號來進行驗證。

 

2.2 四次揮手

2.2.1 四次揮手簡單示意圖

 

 

      斷開一個TCP鏈接須要「四次揮手」:

      客戶端-發送一個FIN,用來關閉客戶端到服務器的數據傳送

      服務器-收到這個FIN,它發回來一個ACK,確認序列號爲收到的序號加1。和SYN同樣,一個FIN將佔有一個序列

      服務器-關閉與客戶端的鏈接,發送一個FIN給客戶端

      客戶端-發回ACK報文確認,並將確認序號設置爲收到序號加1

2.2.2 爲何要四次揮手

      任何一方均可以在數據傳送結束後發出鏈接釋放的通知,待對方確認後進入半關閉狀態。當另外一方也沒有數據在發送的時候,則發出鏈接釋放通知,對方確認後就徹底關閉了TCP鏈接。

 

3 TCP、UDP協議的區別

      UDP在傳送數據以前不須要先創建鏈接,遠的主機在收到UDP報文後,不須要給出任何確認。雖然UDP不提供可靠交付,但在某些狀況下倒是一種頗有效的工做方式(通常用於即時通訊),好比:QQ語音、QQ視頻、直播等。

      TCP提供面向鏈接的服務。在傳送數據以前必須先創建鏈接,數據傳送結束後要釋放鏈接。TCP不提供廣播或多播服務。因爲TCP要提供可靠的,面向鏈接的運輸服務(TCP的可靠體如今TCP在傳遞數據以前,會有三次握手來創建鏈接,並且在數據傳遞時,有確認、窗口、重傳、擁塞控制機制,在數據傳完後,還會斷開鏈接來節約系統資源),這樣難以免增長了許多開銷,如確認,流量控制,計時器以及鏈接管理等。這不只使協議數據單元的首部增大不少,還要佔用許多處理機資源。TCP通常用於文件傳輸、發送和接收郵件、遠程登陸等場景。

 

4 TCP協議如何保證可靠傳輸

      1.應用數據被分割成TCP認爲最適合發送的數據塊。

      2.超時重傳:當TCP發出一個段後,它啓動一個定時器,等待目的端確認收到這個報文段。若是不能及時收到一個確認,將重發這個報文段。

      3.TCP給發送的每個包進行編號,接收方對數據包進行排序,把有序數據傳送給應用層。

      4.校驗和:TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程當中的任何變化。若是收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段。

      5.TCP的接收端會丟棄重複的數據。

      6.流量控制:TCP鏈接的每一方都有固定大小的緩衝空間,TCP的接收端只容許發送端發送接收端緩衝區能接納的數據。當接收方來不及處理髮送方的數據,能提示發送方下降發送的速率,防止包丟失。TCP使用的流量控制協議是可變大小的滑動窗口協議。(TCP利用滑動窗口實現流量控制)

      7.擁塞控制:當網絡擁塞時,減小數據的發送。

      8.中止等待ARQ協議也是爲了實現可靠傳輸的,它的基本原理就是每發完一個分組就中止發送,等待對方確認。在收到確認後再發下一個分組。

 

4.1 超時重傳

      中止等待協議中超時重傳是指只要超過一段時間仍然沒有收到確認,就重傳前面發送過的分組(認爲剛纔發送過的分組丟失了)。所以每發送完一個分組須要設置一個超時計時器,其重傳時間應比數據在分組傳輸的平均往返時間更長一些。這種自動重傳方式常稱爲自動重傳請求ARQ。另外在中止等待協議中若收到重複分組,就丟棄該分組,但同時還要發送確認。連續ARQ協議可提升信道利用率。發送維持一個發送窗口,凡位於發送窗口內的分組可連續發送出去,而不須要等待對方確認。接收方通常採用累積確認,對按需到達的最後一個分組發送確認,代表到這個分組位置的全部分組都已經正確收到了。

 

4.2 中止等待協議

      中止等待協議是爲了實現可靠傳輸的,它的基本原理就是每發完一個分組就中止發送,等待對方確認。在收到確認後再發下一個分組。

      爲了提升傳輸效率,發送方能夠不使用低效率的中止等待協議,而是採用流水線傳輸。流水線傳輸就是發送方可連續發送多個分組,沒必要每發完一個分組就停下來等待對方確認。這樣可以使信道上一直有數據不間斷的在傳送。這種傳輸方式能夠明顯提升信道利用率。

 

4.3 滑動窗口

      TCP利用滑動窗口實現流量控制的機制。

      發送窗口裏面的序號表示容許發送的序號。發送窗口後沿的後面部分表示已發送且已收到確認,而發送窗口前沿的前面部分表示不容許發送。發送窗口後沿的變化狀況有兩種可能,即不動(沒有收到新的確認)和前移(收到了新的確認)。發送窗口的前沿一般是不斷向前移動的。通常來講,咱們老是但願數據傳輸更快一些。但若是發送方把數據發送得過快,接收方就可能來不及接收,這就會形成數據的丟失。所謂流量控制就是讓發送方的發送速率不要太快,要讓接收方來得及接收。

 

4.4 流量控制

      流量控制是爲了控制發送方發送速率,保證接收方來得及接收。

      接收方發送的確認報文中的窗口字段能夠用來控制發送方窗口大小,從而影響發送方的發送速率。將窗口字段設置爲0,則發送方不能發送數據。

 

4.5 擁塞控制

      在某段時間,若對網絡中某一資源的需求超過了該資源所能提供的可用部分,網絡的性能就要變壞。這種狀況就叫擁塞。擁塞控制就是爲了防止過多的數據注入到網絡中,這樣就可使網絡中的路由器或鏈路不致過載。擁塞控制所要作的都有一個前提,就是網絡可以承受現有的網絡負荷。擁塞控制是一個全局性的過程,涉及到全部的主機,全部的路由器,以及與下降網絡傳輸性能有關的全部因素。相反,流量控制每每是點對點通訊量的控制,是個端到端的問題。流量控制所要作到的就是抑制發送端發送數據的速率,以便使接收端來得及接收。

爲了進行擁塞控制,TCP發送方要維持一個擁塞窗口的狀態變量。擁塞控制窗口的大小取決於網絡的擁塞程度,而且動態變化。發送方讓本身的發送窗口取爲擁塞窗口和接收方的接收窗口中較小的一個。

TCP的擁塞控制採用了四種算法,即慢開始、擁塞避免、快重傳和快恢復。在網絡層也可使路由器採用適當的分組丟棄策略,以減小網絡擁塞的發生。

 

4.6 慢開始

      慢開始算法的思路是當主機開始發送數據時,若是當即把大量數據字節注入到網絡,那麼可能會引發網絡阻塞,由於如今還不知道網絡的符合狀況。經驗代表,較好的方法是先探測一下,即有小到大逐漸增大發送窗口,也就是由小到大逐漸增大擁塞窗口數值。Cwnd初始值爲1,每通過一個傳播輪次,cwnd加倍。

 

  

4.7 擁塞避免

      擁塞避免算法的思路是讓擁塞窗口cwnd緩慢增大,即每通過一個往返時間RTT就把發送方的cwnd加1.

 

4.8 快重傳與快恢復

      在TCP/IP中,快速重傳和恢復是一種擁塞控制算法,它能快速恢復丟失的數據包。沒有FRR,若是數據包丟失了,TCP將會使用定時器來要求傳輸暫停。在暫停的這段時間內,沒有新的或複製的數據包被髮送。有了FRR,若是接收機接收到一個不按順序的數據段,它會當即給發送方發送一個重複確認。若是發送機接收到三個重複確認,它會假定確認件指出的數據段丟失了,並當即重傳這些丟失的數據段。有了FRR,就不會由於重傳時要求的暫停被耽誤,當有單獨的數據包丟失時,快速重傳和恢復(FRR)能最有效地工做。當有多個數據信息包在某一段很短的時間內丟失時,它則不能頗有效地工做。

  

 

在瀏覽器中輸入url地址->> 顯示主頁的過程

  

 

狀態碼

 

類別

緣由短語

1XX

Information(信息性狀態碼)

接收的請求正在處理

2XX

Success(成功狀態碼)

請求正常處理完畢

3XX

Redirection(重定向狀態碼)

須要進行附加操做以完成請求

4XX

Client Error(客戶端錯誤狀態碼)

服務器沒法處理請求

5XX

Service Error(服務器錯誤狀態碼)

服務器處理請求出錯

 

7 HTTP長鏈接、短鏈接

      在HTTP/1.0中默認使用短鏈接。也就是說,客戶端和服務器每進行一次HTTP操做,就創建一次鏈接,任務結束就中斷鏈接。當客戶端瀏覽器訪問的某個HTML或其餘類型的Web頁中包含有其餘的Web資源(如JavaScript文件、圖像文件、CSS文件等),每遇到這樣一個Web資源,瀏覽器就會從新創建一個HTTP會話。

      而從HTTP/1.1起,默認使用長鏈接,用以保持鏈接特性。使用長鏈接的HTTP協議,會在響應頭加入這行代碼:

      Connection:keep-alive

      在使用長鏈接的狀況下,當一個網頁打開完成後,客戶端和服務器之間用於傳輸HTTP數據的TCP鏈接不會關閉,客戶端再次訪問這個服務器時,會繼續使用這一條已經創建的鏈接。Keep-Alive不會永久保持鏈接,它有一個保持時間,能夠在不一樣的服務器軟件(如Apache)中設定這個時間。實現長鏈接須要客戶端和服務器端都支持長鏈接。

      HTTP協議的長鏈接和短鏈接,實質上是TCP協議的長鏈接和短鏈接。

 

各類協議與HTTP協議之間的關係

 

相關文章
相關標籤/搜索