計算機網絡的一些知識整理

一本書裏知識太多了,也不能全部記住…就自己總結一些大概的東西,好讓以後的自己也可以回看一下曾經是怎麼學習的。

計算機網絡的性能指標

速率

數據的傳送速率,單位bit/s

帶寬

網絡中某通道傳送數據的能力,在單位時間內網絡中的某信道所能通過的‘最高數據率’。相當於就是馬路的寬度,數據就是在馬路上的車。
(小時候家裏辦網的時候老是聽電信公司說帶寬幾十M啥的,真以爲有幾十M/s速度…

吞吐量

對網絡、設備、端口、虛電路或其他設施,單位時間內成功地傳送數據的數量。
網絡的實際速率。他和帶寬是不同的,帶寬是指理論上,而吞吐量就比較實際了。

時延

數據從網絡的一端傳送到另一端所需的時間。時延分爲發送時延(主機或者路由器發送數據幀所需的時間)、傳播時延(電磁波在信道中傳播一定的距離所花費的時間)、處理時延(主機或者路由器在收到數據時需要花費一定時間處理)、排隊時延(數據經過路由器後,要在輸入隊列中排隊等待進行處理,等待就產生了排隊時延)。

時延帶寬積

時延帶寬積 = 傳播時延 * 帶寬。顧名思義,一個是時間單位,一個是數據量每秒多少bit的單位,它們的積就是在傳播時延的時間內傳輸的數據量。

往返時間RTT

互聯網中一方發送信息給另一方,另一方也發送信息回來,這之間的總時間便是RTT。

利用率

網絡當前時延 = 網絡空閒時的時延 / (1 - 利用率)
利用率越低,空閒就會越多,吞吐量越高。信道或者網絡的利用率過高會產生非常大的時延
 

計算機網絡中五層協議的體系結構(由下往上)

一、物理層

物理層中傳輸的數據單位是比特。在體系結構中作用是將數據轉換爲比特流。

信道中的三種通信方式。

1.單工通信:只有一個方向的通信。比如只能我給你東西,而你卻不能給我任何東西。
2.半雙工通信:通信雙方都可以發送信息。就是我可以給你東西,你也可以給我東西,但是我們兩不能同時給,在一個時間內只能有一方給另一方東西。
3.全雙工通信:通信雙方可以同時發送和接受信息。
單工通信只需要一條信道,而半雙工和全雙工通信都需要兩條信道(我給你和你給我東西這兩種方式各需要一條信道)。
 

二、數據鏈路層

數據鏈路層傳送的是。在體系結構中作用是相鄰結點間傳送幀。
鏈路的概念:一個結點到相鄰結點的一段物理線路,中間無其他任何的交換結點。
數據鏈路的概念:物理線路+協議的軟硬件產品。大白話說來就是在鏈路上傳輸數據還需要一些協議的支持來更好地傳輸數據。
數據鏈路層把上一層(網絡層)交下來的數據構成幀發送給鏈路上、以及把收到的幀中的數據部分取出來交給網絡層。
數據鏈路層需要考慮的三個問題:1.封裝成幀 2.透明傳輸 3.差錯檢測

1.封裝成幀

就是將網絡層交下來的數據前後分別添加首部和尾部,就構成了一個幀。首部和尾部其中一個重要作用是進行幀定界,就是確定幀的界限,首部和尾部中還包括許多控制信息。鏈路層協議規定幀的數據部分是有長度上限的,即MTU(最大傳送單元)

2.透明傳輸

首部和尾部中有幀開始符(SOH)和幀結束符(EOT),就可以非常方便的進行區分哪些是需要傳輸的數據部分了,透明傳輸則是擔心在數據部分中有像SOH或者EOT這樣的幀定界控制字符,從而導致錯誤,故需要一些策略來讓任何字符都可以安全的傳輸。實現透明的方法則是在數據部分中SOH或者EOT字符前填充ESC字符,以此來判斷這不是幀定界符,還是數據部分中的符號。

3.差錯檢測

因爲在物理層中比特傳輸也許會產生差錯,本來該是0但卻變成了1,故需要一些檢測,數據鏈路層用了循環冗餘檢測CRC來檢測。
 

使用信道的兩種主要類型

1.點對點信道(PPP協議)

是爲在同等單元之間傳輸數據包這樣的簡單鏈路設計的鏈路層協議,提供全雙工操作。

2.廣播信道(CSMA協議)

也叫載波監聽多點接入/碰撞檢測。CSMA不能進行全雙工通信,只能進行半雙工通信。
許多計算機以多點接入的方式連接在一根總線上,且每個計算機不管在發送前還是發送中都會不停地檢測信道,如果檢測到有碰撞(即A發送給B,B也在發東西給A,A還沒發送完,收到了B的東西,A和B發送的信息就碰撞了),則執行退避算法來消掉碰撞。

CSMA中發送的最短有效幀長是64字節,是爲了防止發生了碰撞而由於幀太短檢測不到碰撞,故設定最小幀長64字節。
 

MAC幀

MAC地址就是物理地址,每個網卡都會有一個唯一的MAC地址。MAC幀是在數據鏈路層封裝的。
 

三、網絡層

網絡層定址主機,實現主機間的通信,將報文封裝爲分組進行傳送。
網絡層向上只提供簡單靈活的、無連接的、盡最大努力交付的IP數據報服務。即網絡層不提供服務質量的承諾。

1.IP地址(IPv4)

IPv4顧名思義就是IP的第四個版本。
兩級的IP地址一般可以記爲 {<網絡號, 主機號>}

常用的四類地址

A類地址: 前8位表示網絡號,且第一位爲0,後24位表示主機號。例如0111 1111 . 0000 0000 . 0000 0000 . 0000 0001,即127.0.0.1。
B類地址:前16位表示網絡號,且第一位和第二位爲10,後16位表示主機號。
C類地址:前24位表示網絡號,且第一位、第二位和第三位爲100,後8位表示主機號。
D類地址:前四位爲1110,這是用於多播的地址。即一對多的通信。

2.IP地址與硬件地址的區別

IP地址是邏輯地址,硬件地址是物理地址。
IP地址用於網絡層及以上層,物理地址用於數據鏈路層和物理層。

3.地址解析協議ARP

是爲了將從網絡層使用的IP地址解析出在數據鏈路層使用的硬件地址。
具體實現是在主機裏的ARP高速緩存中設一個IP地址到硬件地址的映射表,並動態更新,故在通信時則能解析出物理地址。
ARP高速緩存中的映射地址都設有生存時間的,以防其他主機的硬件地址改變了而找不到的問題。
還有一個RARP協議,作用是和ARP反過來的,是隻知道自己的硬件地址,能通過RARP找出其IP地址。

4.IP數據報

IP數據報首部是由20字節的固定部分和可變部分組成的。
固定部分中包括:版本、首部長度、區分服務、總長度(數據鏈路層中的數據字段最大長度爲1500字節)、標識、標誌、片偏移、生存時間、協議、首部校驗和。
有時候一個數據報的數據部分可能太長,故需要分片,數據報首部中的標誌字段有MF和DF,MF和DF都有兩種可能,一種是0一種是1,MF爲1表示在這個數據報的後面還有分片的數據報,DF爲1表示這個數據報還能再進行分片。片偏移則是用來標誌分片到總數據報的哪個位置。生存時間設置了數據報可以經過的最多路由器數,每當經過一個路由就會減一,減到0後就會被丟棄,併發送ICMP報文段通知源主機。

5.子網掩碼

子網掩碼作用是用來區分IP地址中哪些是網絡地址哪些是主機地址。
例如255.255.255.0的子網掩碼,就表示前24位都作爲網絡號,後8位作爲主機號。

6.地址塊的聚合

聚合就是子網彙總。聚合後的地址包含了聚合前的地址。
例如47.107.84.0/24 、47.107.85.0/24 、47.107.86.0/24 、47.107.88.0/24
可以聚合成47.107.84.0/22
 

四、運輸層

定址進程號,進行進程間的通信,傳送報文。2個重要的協議(UDP和TCP)。
在運輸層看來通信就像是進程與進程間的通信。

1.用戶數據報協議UDP

UDP是無連接的,即發送數據前無需建立連接,故減少了開銷和發送前的時延。
UDP是盡最大努力交付的,即不保證可靠交付。
UDP是面向報文的,即UDP對於應用層交下來的報文不合並也不拆分。
UDP是無擁塞控制的,即允許網絡發生擁塞時丟失一些數據。
UDP 支持一對一、一對多、多對一、多對多的交互通信
UDP的首部開銷小,只有8個字節。

UDP首部格式

在這裏插入圖片描述
由四個字段組成,每個字段兩字節。即源端口、目的端口、長度、校驗和
UDP的僞首部包含32位源IP地址,32位目的IP地址,8位協議,16位UDP長度。通過僞首部的校驗,UDP可以確定該數據報是不是發給本機的,通過首部協議字段可以判斷有沒有誤傳。

2.傳輸控制協議TCP

TCP是面向連接的,即發送前要進行連接,發送結束後要釋放連接。
TCP是提供可靠服務的,即通過TCP連接的數據無差錯、不丟失、不重複且按序到達。
TCP提供全雙工通信的。
TCP是面向字節流的。即TCP對於應用層交下來的數據僅看成無結構的字節流。

TCP的連接

TCP連接的端點叫套接字。套接字 = (IP地址:端口號)即平時看到的類似於47.107.83.200:80這樣的。
每一條TCP連接被連接兩邊的兩個套接字所確定。TCP連接 = {(IP地址1:端口號1), (IP地址2:端口號2)}。

TCP首部格式

在這裏插入圖片描述

1.源端口與目的端口:分別佔2字節,用於找到發送端和接收端的應用進程。
2.序號:佔4字節,標識當前報文段中第一個字節在發送的總的字節流中的編號。
3.確認號:佔4字節,表示期望收到對方下一個報文段的第一個數據字節的序號。
4.數據偏移:佔1字節,表示TCP報文段的數據起始處距離TCP報文段的起始處有多遠。
5.保留,佔6位,保留爲今後用的。
6.緊急URG:當URG=1時表示此報文段中有緊急數據,應儘快傳送。(高優先級的數據)
7.確認ACK:當ACK=1時,確認號字段纔有效。一般在建立連接後所有傳送的報文段ACK都會置1。
8.推送PSH:當接收端收到PSH=1的報文段時,會盡快的交付給應用進程,而不是等待緩存填滿後再往上交付。
9.復位RST:當RST=1時,表明TCP連接中出現嚴重差錯,需要釋放連接,然後再重新建立運輸連接。RST=1還可表示拒絕一個非法報文段或者拒絕打開連接。
10.同步SYN:在連接建立時用於同步序號,例如SYN=1,ACK=0時表示一個連接請求報文段,若同意連接後,則響應報文段中是SYN=1,ACK=1。
11.終止FIN:用於釋放一個連接,當FIN=1時,表示此報文段的發送方的數據發送完畢,要求釋放連接。
12.窗口:佔2個字節,窗口值作爲接收方讓發送方設置其發送窗口的依據。
13.校驗和:佔2個字節,校驗和字段檢驗的範圍包括首部和數據兩部分,且需要加上僞首部。
14.緊急指針:佔2個字節,在URG=1時纔有意義,表示報文段中緊急數據的字節數。

 

TCP的可靠傳輸

由於IP層只是盡最大努力交付,故是不可靠的,需要TCP採取措施來使得運輸層變得可靠。
假設現在有2個主機A、B在進行通信,主機A發送一組數據給主機B後,會等待主機B的確認後A纔會繼續發送。若在其中發現有錯誤的話,主機A收不到確認信息,就會重傳上次的數據。爲了提高傳輸效率,發送方可以採用流水線傳輸,即發送方連續發送多個分組。
流水線傳輸就會使用到ARQ協議。

ARQ協議

即以字節爲單位的滑動窗口,例如主機A發送窗口裏數據字節編號爲31~50,若主機B確認只收到了32和34的字節編號,則主機A不能繼續發送後面的,必須等待B確認31之後才能繼續發送。若主機B按序確認收到31到41的字節編號,A的發送窗口就會往前滑動8個字節單位,A的可用窗口爲滑動窗口-發送窗口。其中在A等待B的確認時,可以利用報文段的往返時間RTT來進行一些策略得出超時重傳時間RTO來進行動態的選擇。

TCP的流量控制

流量控制主要是爲了讓發送方的發送速率不要過快,要讓接收方來得及接收。
TCP是採用滑動窗口進行流量控制的,滑動窗口的大小單位是字節。發送窗口的大小是建立連接時就協商好的,但是在傳輸數據過程中接收端可動態調整發送端的發送窗口大小。
滑動窗口的作用:如果是發一個數據等待一個數據的確認的話,就會非常慢,則可利用滑動窗口,可以在數據一等待確認的時候發送數據二,或者發送更多數據,待數據一確認後滑動窗口再向前滑動,則可更高效率的發送數據。
窗口一般有三種:
1.接收端窗口(rwnd):接收端緩衝區的大小,接收端把接收端窗口放在TCP報文段中的窗口字段發送給發送端。
2.擁塞窗口(cwnd):發送端緩衝區的大小。
3.發送窗口(swnd):發送窗口 = min {擁塞窗口,接收窗口}。
在這裏插入圖片描述
這裏解讀下書上的栗子…
首先由A發送給B的第一個箭頭和第二個箭頭可知,A的發送窗口在連接時協商爲400字節。在第三次發送起始序列號爲201的數據時,丟失了這段數據,之後B發送了確認收到信息,確認序列號爲201,表示序號201之前的都收到了,接收端窗口爲300字節,之後A繼續發送了301到400字節和401到500自己的數據,但是A遲遲沒收到確認信息,故重傳201到300字節的數據,B收到201到500的數據後,發送給A確認序列號爲501,表示501之前的都收到了,且接收端窗口爲100,這時候A才能繼續發送100字節的數據,從501到600發送給B。B再發送序列號爲601,表示601之前的都收到了,且接收端窗口爲0。

TCP的擁塞控制

共有四種方法:慢開始、擁塞避免、快重傳、快恢復。
在這裏插入圖片描述
慢開始和擁塞避免:由於剛開始時不知道網絡的負荷情況,故需要將大量字節注入網絡中,則會引起網絡發生阻塞。那麼就可以設擁塞窗口閾值ssthresh爲16,設擁塞窗口的值爲一個最大報文段SMSS,之後發送報文段,若確認後則擁塞窗口值進行指數增長,當擁塞窗口大於閾值時,則進行擁塞避免算法進行線性增長。若發生阻塞時則更新閾值爲阻塞值的一半,再進行慢開始算法。
在這裏插入圖片描述
快重傳與快恢復:當發送方連續三次接收到對同一個報文段的重複確認時則可知有報文丟失了,就立即重傳丟失的報文而不必等待超時重傳。快恢復則是在發送方直到丟失個別報文段時就不啓動慢開始,而執行快恢復,就是發送方調整閾值ssthresh=cwnd/2,同時設擁塞窗口cwnd=ssthresh,並開始執行擁塞避免算法。
 

3.三次握手與四次揮手

TCP建立連接的過程叫握手
在這裏插入圖片描述
第一次:上圖中由客戶端發送請求,請求報文中 同步位SYN=1,seq=x,表示請求建立連接,報文序列號爲x。發送後客戶端進入同步已發送狀態。
第二次:服務端收到後,同意建立連接,向A發送確認,同步位SYN=1,確認位ACK=1,seq=y,ack=x+1,表示確認收到x+1之前的了,且當前自己的序列號爲y。發送後服務端進入同步已收到狀態。
第三次:客戶端收到服務端的確認後,還要對服務端給個確認,發送報文中 確認位ACK=1,seq=x+1,ack=y+1。表示確認收到y+1之前的了,且當前自己的序列號爲x+1。發送後客戶端進入已建立連接狀態,當服務端收到後也進入已建立連接狀態。
 
握手過程中爲什麼客戶端最後還要發送一次確認呢?
舉個栗子。假如客戶端先請求連接,但是由於在網絡結點中滯留了,客戶端沒有得到服務端的確認,這時候客戶端會重傳一次連接請求,這次建立成功了,之後斷開連接後,之前滯留的那次請求連接到達了服務端,如果沒有這次確認,這時候服務端就會成功與客戶端建立新的連接,這是不允許的。如果有這次確認,滯留的請求到達了服務端也會因爲客戶端沒有進入同步已發送狀態而不能建立連接。
 
TCP釋放連接的過程叫揮手
在這裏插入圖片描述
上圖中數據傳輸完畢後,客戶端和服務端都進入可釋放連接狀態。
第一次:客戶端的應用進程向TCP發送釋放連接報文段,並停止發送數據,主動關閉連接。發送報文段中終止號FIN=1,seq=u,表示當前自己的序列號爲u,u是客戶端上一次發送數據的最後一個序列號+1。發送後客戶端進入終止等待1狀態
第二次:服務端收到客戶端發送的釋放連接請求後,向客戶端發送確認,確認號ACK=1,seq=v,ack=u+1,表示u+1之前的都收到了,且當前自己的序列號爲v,v爲服務端上一次發送數據的最後一個序列號+1。發送後服務端進入等待關閉狀態。當客戶端收到服務端的確認後,客戶端進入了終止等待2階段。這種時候TCP連接處於半關閉狀態的,即客戶端已經沒有要發送的數據了,但服務端要發送的話,客戶端還得接收。也就是服務端到客戶端這個方向的連接並未關閉。
第三次:若服務端也沒有要發送的數據了,便向客戶端發送釋放報文段,其中 終止號FIN=1,確認號AKC=1,seq=w,ack=u+1,表示u+1之前的都收到了,且當前自己的序列號爲w,w爲服務端上一次發送數據的最後一個序列號+1,因爲服務端可能在等待關閉階段發送了數據,故w不一定等於v+1。發送後服務端進入最後確認狀態,等待客戶端的確認。
第四次:客戶端收到服務端的請求釋放連接報文段後,要發出確認,確認報文段中確認號ACK=1,seq=u+1,ack=w+1,表示w+1之前的都收到了且當前自己的序列號爲u+1。發送後客戶端還需要等待2MSL後才進入關閉狀態,當服務端收到此條確認報文後,就進入了關閉狀態。
 
爲什麼還要等待2MSL後才進入關閉狀態呢?
MSL爲最長報文段壽命。
1.爲了保證客戶端發送的第四次揮手確認報文能夠到達服務端,假如這次確認報文丟失了,服務端會超時重傳一個請求釋放報文,客戶端收到後發送確認且服務端收到確認後才能正確關閉。
2.爲了防止滯留的連接請求影響到正常關閉。
 

4.UDP和TCP的區別

UDP:無連接的         TCP:面向連接的(傳輸前要進行三次握手進行連接)
UDP:不可靠傳輸     TCP:可靠傳輸(有滑動窗口等機制保證數據可以數據無差錯、不丟失、不重複且按需到達)
UDP:面向報文的     TCP:面向字節流的
UDP:快(因爲沒有擁塞控制,一頓發就完了)        TCP:慢(用擁塞控制來保證數據)
UDP:支持一對一、一對多、多對一、多對多通信。 TCP:只支持一對一的通信
UDP:首部開銷小,只有八個字節。TCP:首部開銷大,有20固定字節。
UDP:不是可靠的通信   TCP:全雙工通信,故需要四次揮手,第一二次斷開客戶端面向服務端方向的連接,第三四次斷開服務端面向客戶端方向的連接。
UDP適用於視頻語音類的對數據不太苛刻的通信,TCP適用於文件傳送、電子郵件、HTTP之類的對數據較嚴格的通信。
 

五、應用層

物理層、數據鏈路層、網絡層以及運輸層都是爲了應用層服務的,應用層就是利用之前的通信服務來給應用進程服務的。
常用的應用層協議一般有C/S方式和P2P方式。即客戶(client)服務器(server)方式和對等通信方式。

C/S通信方式

客戶和服務器都是通信中的兩個應用進程,C/S通信方式描述的就是進程間服務與被服務的關係,而其中客戶就是請求方,服務器就是服務提供方。

P2P通信方式

P2P通信方式實質上是一種特殊的客戶服務器方式,也就是客戶端和服務端都既可做請求方也可作服務提供方。

DNS協議

DNS是爲了讓平時人們用的域名(例如:xtdlb.cn)轉換成IP地址(例如:47.107.83.200),這樣的話人們就不用記住一串數字來訪問服務器了,而是可以直接訪問域名,DNS將域名轉換爲IP地址後即是訪問IP地址。
域名也是有結構的,例如www.baidu.com 這裏com就是頂級域名,baidu是二級域名,www則是三級域名。域名只是個邏輯概念
若現在有域名爲a.bcd.com的主機想訪問w.xyz.com的主機,那麼a.bcd.com主機就需要知道w.xyz.com主機的IP地址。
故有查詢步驟:主機a.bcd.com向本地域名服務器dns.bcd.com進行遞歸查詢。本地域名服務器則利用迭代查詢,先向根域名服務器查詢,根域名服務器則會返回給本地域名服務器下次應查詢的頂級域名服務器dns.com的IP地址,之後本地域名服務器會向頂級域名服務器查詢,頂級域名服務器則會告訴本地域名服務器下次查詢的權限域名服務器dns.xyz.com的IP地址,本地域名又會向dns.xyz.com查詢,權限域名服務器纔會告訴本地域名服務器w.xyz.com的IP地址。最後本地域名服務器纔會將最終查詢到的IP地址給a.bcd. com。其中總共用到了八次UDP用戶數據報報文。
爲了優化DNS的查詢效率,在域名服務器中都會有高速緩存,之後查詢時就不用那麼多次的遞歸迭代,可以直接從緩存中獲取,增加了查詢效率。

DNS既使用了UDP也使用了TCP

DNS中TCP使用的地方:在進行區域傳輸的時候,比如一個權限域名服務器向頂級域名服務器查詢後並將權限域名服務器中的數據同步時,需要請求的數據會很大,則需要TCP的穩定性以及TCP能攜帶更多數據(TCP比UDP能攜帶更多數據,UDP報文最大長度爲512字節,而TCP報文可超過512字節)。
DNS中UDP使用的地方:主機向DNS服務器查詢域名時,返回的數據量很小,而且要求比較快速的返回,則可使用UDP。

HTTP協議

HTTP協議定義了瀏覽器怎樣向萬維網服務器請求萬維網文檔,以及服務器怎麼把文檔傳送給瀏覽器。
HTTP有兩類報文,一類是請求報文,一類是響應報文。它們的格式都是開始行、首部行、實體主體。
請求報文:
在這裏插入圖片描述
響應報文:
在這裏插入圖片描述
實際例子:
在這裏插入圖片描述
其中response headers是響應頭,request header是請求頭的內容。
status code是狀態碼。狀態碼有以下五大類。

  1. 1XX 表示通知信息,如請求收到了或者正在處理。
  2. 2XX 表示成功。
  3. 3XX 表示重定向,比如完成請求後還要繼續進一步行動。
  4. 4XX 表示客戶的差錯,比如請求了錯誤的URL。
  5. 5XX 表示服務器的差錯,比如服務器失效。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章