面試總結7--計算機網絡相關問題Part1

面試中網絡方面的知識被問到的概率很大,尤其是互聯網公司,要熟悉osi七層模型,其中TCP/IP方面的知識尤其重要。如果自己平時有Socket編程的經驗對面試也是很有幫助的。網絡方面有空可以看看TCP/IP詳解卷一和UNIX網絡編程以下總結了一些面試中常問的問題:

1、TCP爲什麼需要3次握手,4次斷開?

“三次握手”的目的是“爲了防止已失效的連接請求報文段突然又傳送到了服務端,因而產生錯誤”。 client發出的第一個連接請求報文段並沒有丟失,而是在某個網絡結點長時間的滯留了,以致延誤到連接釋放以後的某個時間纔到達server。本來這是一個早已失效的報文段。但server收到此失效的連接請求報文段後,就誤認爲是client再次發出的一個新的連接請求。於是就向client發出確認報文段,同意建立連接。假設不採用“三次握手”,那麼只要server發出確認,新的連接就建立了。由於現在client並沒有發出建立連接的請求,因此不會理睬server的確認,也不會向server發送數據。但server卻以爲新的運輸連接已經建立,並一直等待client發來數據。這樣,server的很多資源就白白浪費掉了。採用“三次握手”的辦法可以防止上述現象發生。例如剛纔那種情況,client不會向server的確認發出確認。server由於收不到確認,就知道client並沒有要求建立連接。”。主要目的防止server端一直等待,浪費資源。

爲什麼4次斷開?

因爲TCP有個半關閉狀態,假設A.B要釋放連接,那麼A發送一個釋放連接報文給BB收到後發送確認,這個時候A不發數據,但是B如果發數據A還是要接受,這叫半關閉。然後B還要發給A連接釋放報文,然後A發確認,所以是4次。

在tcp連接握手時爲何ACK是和SYN一起發送,這裏ACK卻沒有和FIN一起發送呢。原因是因爲tcp是全雙工模式接收到FIN時意味將沒有數據再發來,但是還是可以繼續發送數據。

 

2、TCP和UDP有什麼區別?

TCP是傳輸控制協議,提供的是面向連接、可靠的字節流服務。通信雙方彼此交換數據前,必須先通過三次握手協議建立連接,之後才能傳輸數據。TCP提供超時重傳,丟棄重複數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另一端。UDP是用戶數據報協議,是一個簡單的面向無連接的協議。UDP不提供可靠的服務。在數據數據前不用建立連接故而傳輸速度很快。UDP主要用戶流媒體傳輸,IP電話等對數據可靠性要求不是很高的場合。

 

3、交換機與路由器有什麼區別?

①工作所處的OSI層次不一樣,交換機工作在OSI第二層數據鏈路層,路由器工作在OSI第三層網絡層

②尋址方式不同:交換機根據MAC地址尋址,路由器根據IP地址尋址

③轉發速不同:交換機的轉發速度快,路由器轉發速度相對較慢。

 

3、TCP/IP的流量控制?

利用滑動窗口實現流量控制,如果發送方把數據發送得過快,接收方可能會來不及接收,這就會造成數據的丟失。所謂流量控制就是讓發送方的發送速率不要太快,要讓接收方來得及接收。

 TCP爲每一個連接設有一個持續計時器(persistence timer)。只要TCP連接的一方收到對方的零窗口通知,就啓動持續計時器。若持續計時器設置的時間到期,就發送一個零窗口控測報文段(攜1字節的數據),那麼收到這個報文段的一方就重新設置持續計時器。

 

4、TCP擁塞控制?

防止過多的數據注入到網絡中,這樣可以使網絡中的路由器或鏈路不致過載。擁塞控制所要做的都有一個前提:網絡能夠承受現有的網絡負荷。擁塞控制是一個全局性的過程,涉及到所有的主機、路由器,以及與降低網絡傳輸性能有關的所有因素。

 擁塞控制代價:需要獲得網絡內部流量分佈的信息。在實施擁塞控制之前,還需要在結點之間交換信息和各種命令,以便選擇控制的策略和實施控制。這樣就產生了額外的開銷。擁塞控制還需要將一些資源分配給各個用戶單獨使用,使得網絡資源不能更好地實現共享。

幾種擁塞控制方法:

慢開始(slow-start )、擁塞避免(congestion avoidance )、快重傳( fastretransmit )和快恢復( fastrecovery )。

慢開始和擁塞避免

發送方維持一個擁塞窗口cwnd ( congestion window )的狀態變量。擁塞窗口的大小取決於網絡的擁塞程度,並且動態地在變化。發送方讓自己的發送窗口等於擁塞。
    發送方控制擁塞窗口的原則是:只要網絡沒有出現擁塞,擁塞窗口就再增大一些,以便把更多的分組發送出去。但只要網絡出現擁塞,擁塞窗口就減小一些,以減少注入到網絡中的分組數。
    慢開始算法:當主機開始發送數據時,如果立即把大量數據字節注入到網絡,那麼就有可能引起網絡擁塞,因爲現在並不清楚網絡的負荷情況。因此,較好的方法是先探測一下,即由小到大逐漸增大發送窗口,也就是說,由小到大逐漸增大擁塞窗口數值。通常在剛剛開始發送報文段時,先把擁塞窗口 cwnd 設置爲一個最大報文段MSS的數值。而在每收到一個對新的報文段的確認後,把擁塞窗口增加至多一個MSS的數值。用這樣的方法逐步增大發送方的擁塞窗口 cwnd ,可以使分組注入到網絡的速率更加合理。

每經過一個傳輸輪次,擁塞窗口 cwnd 就加倍。一個傳輸輪次所經歷的時間其實就是往返時間RTT。不過“傳輸輪次”更加強調:把擁塞窗口cwnd所允許發送的報文段都連續發送出去,並收到了對已發送的最後一個字節的確認。
另,慢開始的“慢”並不是指cwnd的增長速率慢,而是指在TCP開始發送報文段時先設置cwnd=1,使得發送方在開始時只發送一個報文段(目的是試探一下網絡的擁塞情況),然後再逐漸增大cwnd。
    爲了防止擁塞窗口cwnd增長過大引起網絡擁塞,還需要設置一個慢開始門限ssthresh狀態變量(如何設置ssthresh)。慢開始門限ssthresh的用法如下:
    當 cwnd < ssthresh 時,使用上述的慢開始算法。
    當 cwnd > ssthresh 時,停止使用慢開始算法而改用擁塞避免算法。
    當 cwnd = ssthresh 時,既可使用慢開始算法,也可使用擁塞控制避免算法。
擁塞避免算法:讓擁塞窗口cwnd緩慢地增大,即每經過一個往返時間RTT就把發送方的擁塞窗口cwnd加1,而不是加倍。這樣擁塞窗口cwnd按線性規律緩慢增長,比慢開始算法的擁塞窗口增長速率緩慢得多。
    無論在慢開始階段還是在擁塞避免階段,只要發送方判斷網絡出現擁塞(其根據就是沒有收到確認),就要把慢開始門限ssthresh設置爲出現擁塞時的發送方窗口值的一半(但不能小於2)。然後把擁塞窗口cwnd重新設置爲1,執行慢開始算法。這樣做的目的就是要迅速減少主機發送到網絡中的分組數,使得發生擁塞的路由器有足夠時間把隊列中積壓的分組處理完畢。過程圖如下:


快速重傳:

那就是收到3個相同的ACK。TCP在收到亂序到達包時就會立即發送ACK,TCP利用3個相同的ACK來判定數據包的丟失,此時進行快速重傳,快速重傳做的事情有:

1.     把ssthresh設置爲cwnd的一半

2.     把cwnd再設置爲ssthresh的值(具體實現有些爲ssthresh+3)

3.重新進入擁塞避免階段。

快速恢復:

1.  當收到3個重複ACK時,把ssthresh設置爲cwnd的一半,把cwnd設置爲ssthresh的值加3,然後重傳丟失的報文段,加3的原因是因爲收到3

2.  再收到重複的ACK時,擁塞窗口增加1。

3.  收到新的數據包的ACK時,把cwnd設置爲第一步中的ssthresh的值。原因是因爲該ACK確認了新的數據,說明從重複ACK時的數據都已收到,該恢復過程已經結束,可以回到恢復之前的狀態了,也即再次進入擁塞避免狀態。

 

5、ARP是地址解析協議,簡單語言解釋一下工作原理。

(1)首先,每個主機都會在自己的ARP緩衝區中建立一個ARP列表,以表示IP地址和MAC地址之間的對應關係。

(2)當源主機要發送數據時,首先檢查ARP列表中是否有對應IP地址的目的主機的MAC地址,如果有,則直接發送數據,如果沒有,就向本網段的所有主機發送ARP數據包,該數據包包括的內容有:源主機IP地址,源主機MAC地址,目的主機的IP地址。

(3)當本網絡的所有主機收到該ARP數據包時,首先檢查數據包中的IP地址是否是自己的IP地址,如果不是,則忽略該數據包,如果是,則首先從數據包中取出源主機的IP和MAC地址寫入到ARP列表中,如果已經存在,則覆蓋,然後將自己的MAC地址寫入ARP響應包中,告訴源主機自己是它想要找的MAC地址。

(4)源主機收到ARP響應包後。將目的主機的IP和MAC地址寫入ARP列表,並利用此信息發送數據。如果源主機一直沒有收到ARP響應數據包,表示ARP查詢失敗。

廣播發送ARP請求,單播發送ARP響應。

 

6、ICMP協議?

ICMP是InternetControl Message Protocol,因特網控制報文協議。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由器是否可用等網絡本身的消息。這些控制消息雖然並不傳輸用戶數據,但是對於用戶數據的傳遞起着重要的作用。ICMP報文有兩種:差錯報告報文和詢問報文。


7、DHCP協議?

動態主機配置協議,是一種讓系統得以連接到網絡上,並獲取所需要的配置參數手段。通常被應用在大型的局域網絡環境中,主要作用是集中的管理、分配IP地址,使網絡環境中的主機動態的獲得IP地址、Gateway地址、DNS服務器地址等信息,並能夠提升地址的使用率。


8網橋的作用?

網橋是一個局域網與另一個局域網之間建立連接的橋樑

 

9、數據鏈路層協議可能提供的服務?

成幀、鏈路訪問、透明傳輸、可靠交付、流量控制、差錯檢測、差錯糾正、半雙工和全雙工。最重要的是幀定界(成幀)、透明傳輸以及差錯檢測。

 

10、網絡接口卡(網卡)的功能?

1)進行串行/並行轉換。

2)對數據進行緩存。

3)在計算機的操作系統安裝設備驅動程序。

4)實現以太網協議。

 

11、私有(保留)地址?

A類:10.0.0.0——10.255.255.255

       B類:172.16.0.0——172.31.255.255

       C類:192.168.0.0——192.168.255.255

 

12、TTL是什麼?作用是什麼?哪些工具會用到它(ping traceroute ifconfig  netstat)?

TTL是指生存時間,簡單來說,它表示了數據包在網絡中的時間,經過一個路由器後TTL就減一,這樣TTL最終會減爲0,當TTL0時,則將數據包丟棄,這樣也就是因爲兩個路由器之間可能形成環,如果沒有TTL的限制,則數據包將會在這個環上一直死轉,由於有了TTL,最終TTL0後,則將數據包丟棄。ping發送數據包裏面有TTL,但是並非是必須的,即是沒有TTL也是能正常工作的,traceroute正是因爲有了TTL才能正常工作,ifconfig是用來配置網卡信息的,不需要TTLnetstat是用來顯示路由表的,也是不需要TTL的。

 

13、路由表是做什麼用的?在Linux環境中怎麼配置一條默認路由?

路由表是用來決定如何將一個數據包從一個子網傳送到另一個子網的,換句話說就是用來決定從一個網卡接收到的包應該送到哪一個網卡上去。路由表的每一行至少有目標網絡號、子網掩碼、到這個子網應該使用的網卡這三條信息。當路由器從一個網卡接收到一個包時,它掃描路由表的每一行,用裏面的子網掩碼與數據包中的目標IP地址做邏輯與運算(&)找出目標網絡號。如果得出的結果網絡號與這一行的網絡號相同,就將這條路由表六下來作爲備用路由。如果已經有備用路由了,就載這兩條路由裏將網絡號最長的留下來,另一條丟掉(這是用無分類編址CIDR的情況纔是匹配網絡號最長的,其他的情況是找到第一條匹配的行時就可以進行轉發了)。如此接着掃描下一行直到結束。如果掃描結束仍沒有找到任何路由,就用默認路由。確定路由後,直接將數據包送到對應的網卡上去。在具體的實現中,路由表可能包含更多的信息爲選路由算法的細節所用。

Linux上可以用“route add default gw<默認路由器 IP>”命令配置一條默認路由。

 

14、RARP?

逆地址解析協議,作用是完成硬件地址到IP地址的映射,主要用於無盤工作站,因爲給無盤工作站配置的IP地址不能保存。

 

15、運輸層協議與網絡層協議的區別?

網絡層協議負責的是提供主機間的邏輯通信

       運輸層協議負責的是提供進程間的邏輯通信

 

16、說說靜態路由和動態路由有什麼區別。

靜態路由是由管理員手工配置的,適合比較簡單的網絡或需要做路由特殊控制。而動態路由則是由動態路由協議自動維護的,不需人工干預,適合比較複雜大型的網絡。

路由器能夠自動地建立自己的路由表,並且能夠根據實際實際情況的變化適時地進行調整。動態路由機制的運作依賴路由器的兩個基本功能:對路由表的維護;路由器之間適時的路由信息交換。

 

 

17、HTTP的長連接和短連接?

HTTP的長連接和短連接本質上是TCP長連接和短連接。HTTP屬於應用層協議.

短連接:瀏覽器和服務器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接。

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

TCP短連接: clientserver發起連接請求,server接到請求,然後雙方建立連接。clientserver發送消息,server迴應client,然後一次讀寫就完成了,這時候雙方任何一個都可以發起close操作,不過一般都是client先發起 close操作.短連接一般只會在 client/server間傳遞一次讀寫操作

 TCP長連接: clientserver發起連接,server接受client連接,雙方建立連接。Clientserver完成一次讀寫之後,它們之間的連接並不會主動關閉,後續的讀寫操作會繼續使用這個連接。

 

18 IO中同步與異步,阻塞與非阻塞區別

同步和異步關注的是消息通信機制 (synchronous communication/asynchronous communication)
所謂同步,就是在發出一個*調用*時,在沒有得到結果之前,該*調用*就不返回。但是一旦調用返回,就得到返回值了。
換句話說,就是由*調用者*主動等待這個*調用*的結果。
異步則是相反,*調用*在發出之後,這個調用就直接返回了,所以沒有返回結果。換句話說,當一個異步過程調用發出後,調用者不會立刻得到結果。而是在*調用*發出後,*被調用者*通過狀態、通知來通知調用者,或通過回調函數處理這個調用。

阻塞和非阻塞關注的是程序在等待調用結果(消息,返回值)時的狀態.

阻塞調用是指調用結果返回之前,當前線程會被掛起。函數只有在得到結果之後纔會返回。

非阻塞:不能立刻得到結果之前,該函數不會阻塞當前線程,而會立刻返回。


19ip地址分段

A類網絡的IP地址範圍爲1.0.0.1127.255.255.254
B
類網絡的IP地址範圍爲:128.1.0.1191.255.255.254
C
類網絡的IP地址範圍爲:192.0.1.1223.255.255.254、


20爲什麼TIME_WAIT狀態還需要等2*MSLMax SegmentLifetime,最大分段生存期)秒之後才能返回到CLOSED狀態呢?

因爲雖然雙方都同意關閉連接了,而且握手的4個報文也都發送完畢,按理可以直接回到CLOSED狀態(就好比從SYN_SENT狀態到ESTABLISH狀態那樣),但是我們必須假想網絡是不可靠的,你無法保證你最後發送的ACK報文一定會被對方收到,就是說對方處於LAST_ACK狀態下的SOCKET可能會因爲超時未收到ACK報文,而重發FIN報文,所以這個TIME_WAIT狀態的作用就是用來重發可能丟失的ACK報文

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章