1. 程式人生 > >2018年秋招運維崗常見計算機網路基礎知識點總結

2018年秋招運維崗常見計算機網路基礎知識點總結

靜態變數和非靜態變數的區別:

靜態變數被所有的物件所共享,在記憶體中只有一個副本,當且僅當類在初次載入會被初始化。
非靜態常量是物件所擁有的,在建立物件的時候被初始化存在多個副本,static在不同例項中地址一樣,存在全域性區。

殭屍程序和孤兒程序:

殭屍程序:一個子程序在其父程序還沒有呼叫wait或waitpid()情況下退出。
孤兒程序:一個父程序在子程序執行時退出,孤兒程序將被init程序所收養。
殭屍程序會導致浪費資源,孤兒程序不會。

TCP的三次握手和四次揮手:

三次握手過程:

這塊容易忽略一種監聽狀態,也就是LISTEN狀態。
1.建立連線時,客戶端傳送SYN包到伺服器,並進入SYN_SEND狀態,等待伺服器確認。
2.伺服器收到SYN包,必須確認客戶端的SYN,同時自己也傳送一個SYN+ACK包,此時伺服器進入SYN-RECV狀態。
3.客戶端收到ACK+SYN包,向伺服器傳送確認包ACK,此包傳送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。

四次揮手過程:

A傳送釋放請求:
TCP連線的釋放一共需要四步,因此稱為『四次揮手』.我們知道,TCP連線是雙向的,因此在四次揮手中,
前兩次揮手用於斷開一個方向的連線,後兩次揮手用於斷開另一方向的連線.
第一次揮手:
若A認為資料傳送完成,則它需要向B傳送連線釋放請求.該請求只有報文頭,頭中攜帶的主要引數為:
FIN=1,seq=u.此時,A將進入FIN-WAIT-1狀態.
FIN=1表示該報文段是一個連線釋放請求.
seq=u,u-1是A向B傳送的最後一個位元組的序號.

B迴應釋放的應答,A到B連線已經斷掉:
第二次揮手:
B收到連線釋放請求後,會通知相應的應用程式,告訴它A向B這個方向的連線已經釋放.
此時B進入CLOSE-WAIT狀態,並向A傳送連線釋放的應答,其報文頭包含: ACK=1,seq=v,ack=u+1.
ACK=1:除TCP連線請求報文段以外,TCP通訊過程中所有資料報的ACK都為1,表示應答.
seq=v,v-1是B向A傳送的最後一個位元組的序號.
ack=u+1表示希望收到從第u+1個位元組開始的報文段,並且已經成功接收了前u個位元組.A收到該應答,
進入FIN-WAIT-2狀態,等待B傳送連線釋放請求.

B傳送釋放請求:
第二次揮手完成後,A到B方向的連線已經釋放,B不會再接收資料,A也不會再發送資料。
但B到A方向的連線仍然存在,B可以繼續向A傳送資料。
第三次揮手:
當B向A發完所有資料後,向A傳送連線釋放請求,請求頭中包含:
FIN=1,ACK=1,seq=w,ack=u+1.隨後B進入LAST-ACK狀態.

A迴應釋放的應答,B到A連線已經斷掉:
第四次揮手:
A收到釋放請求後,向B傳送確認應答,此時A進入TIME-WAIT狀態.該狀態會持續2MSL時間,
若該時間段內沒有B的重發請求的話,就進入CLOSED狀態,撤銷TCB.當B收到確認應答後,也便進入CLOSED狀態,撤銷TCB.

在第四次揮手時,為什麼A要先進入TiME-WAIT狀態,等待2MSL時間才進入closed狀態?

為了保證B能收到A的確認應答,若A傳送完應答直接進入CLOSED狀態,如果該應答丟失,B等待超時後會重新發送釋放請求,
但此時A已經關閉,不會有任何響應,因此B永遠無法正常關閉。

TCP連線的11種狀態:

1)、LISTEN:首先服務端需要開啟一個socket進行監聽,狀態為LISTEN
2)、SYN_SENT:客戶端通過應用程式呼叫connect進行active open.於是客戶端tcp傳送一個SYN以請求建立
一個連線.之後狀態置為SYN_SENT
3)、SYN_RECV:服務端應發出ACK確認客戶端的SYN,同時自己向客戶端傳送一個SYN. 之後狀態置為SYN_RECV
4)、ESTABLISHED: 代表一個開啟的連線,雙方可以進行或已經在資料互動了。

5)、FIN_WAIT1:主動關閉(active close)端應用程式呼叫close,於是其TCP發出FIN請求主動關閉連線,之後
進入FIN_WAIT1狀態
6)、CLOSE_WAIT:被動關閉(passive close)端TCP接到FIN後,就發出ACK以迴應FIN請求,並進入CLOSE_WAIT. 
7)、FIN_WAIT2:主動關閉端接到ACK後,就進入了FIN-WAIT-2
8) 、LAST_ACK:被動關閉端一段時間後,接收到檔案結束符的應用程式將呼叫CLOSE關閉連線。這導致它的TCP
也傳送一個 FIN,等待對方的ACK.就進入了LAST-ACK
9)、TIME_WAIT:在主動關閉端接收到FIN後,TCP就傳送ACK包,並進入TIME-WAIT狀態。等待足夠的時間以確
保遠端TCP接收到連線中斷請求的確認。
10)、CLOSING: 比較少見等待遠端TCP對連線中斷的確認
11)、CLOSED: 被動關閉端在接受到ACK包後,就進入了closed的狀態。

TCP和UDP的區別:

TCP--傳輸控制協議,面向連線,可靠的位元組流服務,在客戶端和伺服器交換資料前,必須在雙方建立一個TCP連線才
可以傳輸資料,TCP提供超時重發,丟棄重複資料,檢驗資料,流量控制,保證資料從一端到另外一端。
UDP---使用者資料報協議,面向無連線的,是一個簡單的面向資料報的傳輸協議,UDP不提供可靠性,只是把應用程式
傳遞給IP層的資料報傳送出去,並不可保證是否到達,UDP傳輸不需要建立連線,且沒有超時重發等機制,傳輸速度快。
TCP		 ------   UDP
打電話  ------     發簡訊

TCP和UDP的應用場景:

	若通訊資料完整性需讓位於通訊實時性,則應該選擇TCP協議。(文字傳輸,重要狀態的更新等),反之則使用
	UDP協議(如視訊傳輸,實時通訊等)
	
	TCP協議適用於對效率要求相對低,但對準確性要求相對高的場景下,或者是有一種連線概念的場景下;而UDP
	協議適用於對效率要求相對高,對準確性要求相對低的場景。
	
	TCP一般用於檔案傳輸(FTP HTTP 對資料準確性要求高,速度可以相對慢)遠端登入(TELNET SSH 對資料
	準確性有一定要求,有連線的概念)等等;UDP一般用於即時通訊(QQ聊天 對資料準確性和丟包要求比較低,
	但速度必須快),線上視訊(RTSP 速度一定要快,保證視訊連續,但是偶爾花了一個影象幀,人們還是能接受
	的),網路語音電話(VoIP 語音資料包一般比較小,需要高速傳送,偶爾斷音或串音也沒有問題)等等。
	
	比如,TCP可以用於網路資料庫,分散式高精度計算系統的資料傳輸;UDP可以用於服務系統內部之間的
	資料傳輸,因為資料可能比較多,內部系統區域網內的丟包錯包率又很低,即便丟包,頂多是操作無效,
	這種情況下,UDP經常被使用。

TCP的流量控制:

	如果傳送方傳送資料過快,接收方來不及接受不造成資料的丟失。
	TCP的流量控制利用滑動視窗機制來實現的,接收方在返回的ACK包中會包含自己的接受視窗大小,以控制傳送方的資料傳送。
問題:當ACK報文丟失,出現A等待B確認,B等待A傳送資料的死鎖狀態。
	利用rwnd值實現接收方對傳送方的流量控制。
	當A收到rwnd=0時,啟用持續計時器,時間到了則傳送一個探測報文,詢問B是否很忙或者ACK丟失,B迴應自身接受視窗大小
	,若返回仍為0,則重複步驟。

TCP的擁塞控制:

網路的需求超過自己的工作極限出現擁塞,擁塞控制是為了防止過多的資料注入到網路中,可以使網路中的路由器或者鏈路不過載。
1.慢開始和擁塞避免結合。
慢開始是指傳送資料開始,並不清楚網路中的負荷情況,會先發送一個位元組試探報文,以指數類推。
小於門檻值,使用慢開始演算法加倍。
大於門檻值使用擁塞避免演算法緩慢加1。

快重傳和快恢復演算法:

快重傳和快恢復演算法旨在快速恢復丟失的資料包。快重傳當接受方發現M3丟失,則立即傳送對M2的重複確認,一旦傳送方
接連收到三個M2的重複確認,立即重傳M3,也就是傳送方收到第四個確認時。
快恢復演算法:
當傳送方在cmnd=24連續收到三確認,把慢開始門限值減半為12.
用擁塞避免演算法替換慢開始演算法使擁塞視窗緩慢放大。

SYN攻擊以及解決辦法:

SYN攻擊就是利用TCP協議的缺陷,來導致系統伺服器停止正常的響應。
SYN攻擊原理:
TCP在傳送資料前需要經過三次握手,SYN攻擊的原理就是向伺服器傳送SYN資料包,並偽造源IP地址,在伺服器收到SYN包
時,會將連線加入backlog佇列,並向源IP傳送SYN-ACK資料包並等待ACK,以完成三次連線。由於源IP地址是偽造的不存在的
主機IP,所以伺服器無法收到ACK包並不斷重發,同時backlog佇列會被不斷攻擊的SYN連線佔滿,導致無法處理正常的連線。
SYN攻擊處理:
1.減少ACK包的重發次數。
2.使用SYN cookie技術,返回SYN-ACK包時,不分配專門的資料包,根據SYN包計算出一個cookie值,在伺服器收到SYN-ACK
包時,利用cookie值檢測是否合法,若合法再分配資料包。
3.增加backlog佇列(預設為1024)
4.限制SYN併發數。

後退n幀協議和選擇重傳協議:

後退n幀協議:
傳送視窗的大小為n,接收的大小仍為1,這裡假設n=9,傳送方一次傳送10個幀,前兩個幀已經正確返回,後面的幀出現錯誤,
傳送方要重新發送2-8,接收方也必須丟失之前接受的3-8這幾個幀。
選擇重傳協議:
為了解決後退n幀協議的總要重發該幀之後的所有幀,會導致進一步惡化網路,接收方首先快取所有收到的幀,某個幀出現錯誤時
只重傳該幀,只有當某個序號之後所有幀正確收到後,才一起提交給高層應用,缺點在於需要更多的快取。

對稱加密和非對稱加密:

對稱加密是指加密和解密用的是同一種金鑰。
非對稱加密指的是:加密和解密使用不同的金鑰,一把作為公鑰,一把作為私鑰。

多執行緒和多程序的區別:

多程序可以輕鬆的實現併發,多程序相對於多執行緒更加獨立,可以不在同一臺機器執行不同的程式碼,保持執行緒同步需要執行緒鎖。

ARP欺騙:

核心思想就是向目標主機發送偽造的ARP應答,並使目標主機接受應答中偽造的IP地址與mac地址之間的對映對,
從此更新目標主機的ARP快取。

BGP和OSPF的區別:

BGP:用來處理不同網路之間的協議。
OSPF:用來處理同一網路內部的鏈路協議。

什麼是IPV4和IPV6?

IPV4指的是地址位數是32位,最多有2的32次方位主機可以連線到Internat。
IPV6採用128位地址空間,幾乎不受限制的提供地址。

路由器和交換機有什麼區別:

1.路由器可以給你的區域網自動分配IP,虛擬撥號,交換機只是用來分配網路資料的。
2.路由器在網路層,根據IP定址,路由器可以處理TCP/IP協議,交換機不可以,交換機
在中繼層,根據MAC定址。
3.路由器可以把一個IP分配給很多主機使用,這些主機對外只表現出一個IP,交換機可以
把很多主機連線起來,這些主機對外表現不同IP。
4.路由器可以提供防火牆,交換機不提供該功能。

程序和執行緒的區別:

1.程序是資源的分配和排程的一個獨立單元,而執行緒是CPU排程的基本單元。
2.同一個程序可以包含多個執行緒,並且執行緒共享整個程序的所有資源,一個程序至少包含一個執行緒。
3.程序結束後所有執行緒都會銷燬,而執行緒的結束不會影響程序中其他執行緒的約束。
4.執行緒是輕兩級的程序,他的建立和銷燬所需時間比程序小很多。
5.執行緒的執行一般都需要進行同步和互斥,因為他們共享同一個程序的所有資源。

阻塞,非阻塞,同步,非同步:

阻塞:使用者程序訪問資料時,如果未完成IO,等待IO操作完成或者進行系統呼叫來判斷IO是否完成。
非阻塞:使用者程序訪問資料時,會馬上返回一個狀態值,無論是否完成。
同步:使用者程序發起IO(就緒判斷後),輪詢核心狀態。
非同步:使用者程序發起IO後,可以做其他事情等待核心通知。

死鎖的概念以及產生原理

概念:多個併發程序因爭奪資源而產生相互等待的現象。發生死鎖的程序進行不下去,所持有資源無法釋放,導致
CPU吞吐量下降會浪費系統資源影響CPU效能。
原理:當一組程序中的每個程序都在等待某個事件發生,而只有這組程序中的其他程序才能觸發該事件,產生死鎖。
本質原因:
1.系統資源有限
2.程序推送順序不合理
死鎖產生的4個必要條件:
1.互斥:某種資源只允許一個程序訪問,其他程序不可訪問。
2.佔有且等待:一個程序本身佔有資源,同時還有資源未滿足等待其他程序釋放資源。
3.不可搶佔:別人已經佔有了某項資源。
4.迴圈等待:存在一種程序鏈,使得每個程序佔有下一個程序所需的至少一種資源。
避免死鎖的方法:
1.死鎖的預防----確保系統不會進入死鎖
由於互斥是非共享必須的,破壞其他的三個條件。
2.避免死鎖-----在使用前進行判斷,只允許不會產生死鎖的程序申請資源。
3.死鎖的檢測與解除-----在檢測到執行系統進入死鎖進行恢復。

作業系統常見的程序排程演算法:

1.先來先服務(FCFS)
2.最短作業優先,時間短的程序優先分派(SJF)
3.最高響應比優先法(HRRN)
4.時間片輪轉演算法(RR)
5.多級反饋排程演算法

分頁和分段有什麼區別:

1.頁是資訊的物理單位,分頁是為了實現離散分配方式,分段的目的是為了更好地滿足使用者需要。
2.頁的大小固定,段的長度不固定。
3.分頁是單一的線性空間,分段是二維的作業地址。

OSI四層模型:

應用層
傳輸層
網路互連層
網際層

OSI七層模型以及各層對應服務:
在這裡插入圖片描述