Java面試總結——計算機網絡

1.OSI,TCP/IP,五層協議的體系結構,以及各層協議

(1)OSI七層:物理層(集線器,網卡,網線,中繼器,調制解調器),數據鏈路層(網橋,交換機),網絡層(路由器,決定使用哪條路徑通道子網),傳輸層(完成向用戶提供可靠的端到端的服務),會話層,表示層,應用層。
(2)TCP/IP協議包括兩部分:傳輸控制協議/網際協議,5個相對獨立的層次:應用層、傳輸層、互聯網層,網絡接口層和物理層。對應關係如圖所示。
在這裏插入圖片描述
(3)每一層的協議如下:
物理層:RJ45、CLOCK、IEEE802.3 (中繼器,集線器)
數據鏈路:PPP、FR、HDLC、VLAN、MAC (網橋,交換機)
網絡層:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
傳輸層:TCP、UDP、SPX
會話層:NFS、SQL、NETBIOS、RPC
表示層:JPEG、MPEG、ASII
應用層:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
(4)每一層的作用如下:
物理層:通過媒介傳輸比特,確定機械及電氣規範(比特Bit)
數據鏈路層:將比特組裝成幀和點到點的傳遞(幀Frame)
網絡層:負責數據包從源到宿的傳遞和網際互連(包PackeT)
傳輸層:提供端到端的可靠報文傳遞和錯誤恢復(段Segment)
會話層:建立、管理和終止會話(會話協議數據單元SPDU)
表示層:對數據進行翻譯、加密和壓縮(表示協議數據單元PPDU)
應用層:允許訪問OSI環境的手段(應用協議數據單元APDU)

2.IP地址的分類

A類地址:地址範圍1.0.0.0到126.255.255.255
B類地址:地址範圍128.0.0.0到191.255.255.255
C類地址:地址範圍192.0.0.0到223.255.255.255
在這裏插入圖片描述

3.ARP是地址解析協議,簡單語言解釋一下工作原理。(ip->mac)

(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響應。

4.描述RARP協議(mac->ip)

RARP是逆地址解析協議,作用是完成硬件地址到IP地址的映射,主要用於無盤工作站,因爲給無盤工作站配置的IP地址不能保存。工作流程:在網絡中配置了一臺RARP服務器,裏面保存着IP地址和MAC地址的映射關係,當無盤工作站啓動後,就封裝一個RARP數據包,裏面有其MAC地址,然後廣播到網絡上去,當服務器收到請求包後,就查找對應的MAC地址的IP地址裝入響應報文中發回給請求者。因爲需要廣播請求報文,因此RARP只能用於具有廣播能力的網絡。

5.TCP三次握手過程?爲什麼採用三次握手,若採用二次握手可以嗎?

TCP三次握手過程,如下圖所示:
(1)客戶端發送SYN(SEQ=x)報文給服務器端,進入SYN_SEND狀態。
(2)服務器端收到SYN報文,迴應一個SYN (SEQ=y)ACK(ACK=x+1)報文,進入SYN_RECV狀態。
(3)客戶端收到服務器端的SYN報文,迴應一個ACK(ACK=y+1)報文,進入Established狀態。
在這裏插入圖片描述
使用三次握手的原因如下:
是爲了防止失效的連接請求報文段傳到主機b從而產生錯誤。
感覺上面這句話過於抽象不利於理解,我贊同的答案是爲了實現可靠數據傳輸,TCP 協議的通信雙方, 都必須維護一個序列號, 以標識發送出去的數據包中, 哪些是已經被對方收到的。 三次握手的過程即是通信雙方相互告知序列號起始值, 並確認對方已經收到了序列號起始值的必經步驟。通過這三次握手保證連接是雙工的。
在敘述的同時可以對比四次握手和兩次握手。

6.TCP四次揮手的過程,爲什麼TCP需要四次揮手,客戶端發送確認後處於什麼狀態,爲什麼要等2MSL?

TCP四次揮手過程,如下圖所示:
(1) 某個應用進程首先調用close,稱該端執行“主動關閉”(active close)。該端的TCP於是發送一個FIN(M)分節,表示數據發送完畢。
(2) 接收到這個FIN的對端執行 “被動關閉”(passive close),這個FIN由TCP確認ACK(M+1)。
注意:FIN的接收也作爲一個文件結束符(end-of-file)傳遞給接收端應用進程,放在已排隊等候該應用進程接收的任何其他數據之後,因爲,FIN的接收意味着接收端應用進程在相應連接上再無額外數據可接收。
(3) 一段時間後,接收到這個文件結束符的應用進程將調用close關閉它的套接字。這導致它的TCP也發送一個FIN(N)。
(4) 接收這個最終FIN的原發送端TCP(即執行主動關閉的那一端)確認這個FIN,ACK(N+1)。

在這裏插入圖片描述
   以客戶端先揮手爲例,在客戶端發送一個FIN字節之後,客戶端處於FIN_WAIT1狀態。
  MSL是Maximum Segment LifeTime英文縮寫,中文可以譯爲“報文最大生存時間”,他是任何報文在網絡上存在的最長時間,超過這個時間報文將被丟棄。當客戶端進入TIME_WAIT狀態的時候,也就是第四次揮手的時候,設置時間爲2MSL的理由如下:
  (1)爲了保證客戶端發送的最後一個ACK報文段能夠到達服務器。因爲這個ACK有可能丟失,從而導致處在LAST-ACK狀態的服務器收不到對FIN-ACK的確認報文。服務器會超時重傳這個FIN-ACK,接着客戶端再重傳一次確認,重新啓動時間等待計時器。最後客戶端和服務器都能正常的關閉。假設客戶端不等待2MSL,而是在發送完ACK之後直接釋放關閉,一但這個ACK丟失的話,服務器就無法正常的進入關閉連接狀態。
  (2)他還可以防止已失效的報文段。客戶端在發送最後一個ACK之後,再經過經過2MSL,就可以使本鏈接持續時間內所產生的所有報文段都從網絡中消失。從保證在關閉連接後不會有還在網絡中滯留的報文段去騷擾服務器。
注意:在服務器發送了FIN-ACK之後,會立即啓動超時重傳計時器。客戶端在發送最後一個ACK之後會立即啓動時間等待計時器。

7. 四次揮手是客戶端還是服務器端先發起,爲什麼?

在調試客戶端和服務器端(使用TCP套接字)的代碼時我發現,如果先結束服務器端後結束客戶端,緊接着再重啓服務器端就會出現綁定失敗的錯誤 OSError: [Errno 98] Address already in use 等待一段時間後大概一分鐘左右就能正常重啓服務器端。
  以客戶端先揮手爲例,在TCP處於TIME_WAIT狀態時,客戶端從TIME_WAIT狀態到CLOSED狀態需要2MSL,因爲客戶端要確定服務端收到了ACK,如果服務端沒收到ACK,客戶端則一定會在2MSL時間內再收到一次FIN。而在socket編程中客戶端一般不需要綁定,而服務器端一般都要綁定,如果先結束服務器端則是服務器端先進行揮手操作,那麼服務器端從TIME_WAIT到CLOSED狀態則需要2MSL。這段時間服務器端綁定的端口號被佔用了,套接字不會釋放。所以這段時間重啓了服務器之後,會出現綁定失敗的錯誤OSError: [Errno 98] Address already in use。

8.TCP/IP三次握手和四次揮手的11種狀態。

參考鏈接:
https://blog.csdn.net/qq_38950316/article/details/81087809(這個博主總結的很清楚!)
(1)三次握手的狀態變化:
在這裏插入圖片描述
(2)四次揮手的狀態變化:
在這裏插入圖片描述
注意到不論是四次揮手還是三次握手都會傳遞序列號和確認ACK,要理解傳遞序列號的規則首先就要清楚TCP報文的格式以及各部分的含義。
在這裏插入圖片描述
(1)序列號seq:佔4個字節,用來標記數據段的順序,TCP把連接中發送的所有數據字節都編上一個序號,第一個字節的編號由本地隨機產生;給字節編上序號後,就給每一個報文段指派一個序號;序列號seq就是這個報文段中的第一個字節的數據編號
(2)確認號ack:佔4個字節,期待收到對方下一個報文段的第一個數據字節的序號;序列號表示報文段攜帶數據的第一個字節的編號;而確認號指的是期望接收到下一個字節的編號;因此當前報文段最後一個字節的編號+1即爲確認號
(3)確認ACK:佔1位,僅當ACK=1時,確認號字段纔有效。ACK=0時,確認號無效。
(4)同步SYN:連接建立時用於同步序號。當SYN=1,ACK=0時表示:這是一個連接請求報文段。若同意連接,則在響應報文段中使得SYN=1,ACK=1。因此,SYN=1表示這是一個連接請求,或連接接受報文。SYN這個標誌位只有在TCP建產連接時纔會被置1,握手完成後SYN標誌位被置0。
(5)終止FIN:用來釋放一個連接。FIN=1表示:此報文段的發送方的數據已經發送完畢,並要求釋放運輸連接
ACK、SYN和FIN這些大寫的單詞表示標誌位,其值要麼是1,要麼是0;ack、seq小寫的單詞表示序號。
在這裏插入圖片描述

LISTEN:等待從任何遠端TCP 和端口的連接請求。

SYN_SENT:發送完一個連接請求後等待一個匹配的連接請求。

SYN_RECEIVED:發送連接請求並且接收到匹配的連接請求以後等待連接請求確認。

ESTABLISHED:表示一個打開的連接,接收到的數據可以被投遞給用戶。連接的數據傳輸階段的正常狀態。

FIN_WAIT_1:等待遠端TCP 的連接終止請求,或者等待之前發送的連接終止請求的確認。

FIN_WAIT_2:等待遠端TCP 的連接終止請求。

CLOSE_WAIT:等待本地用戶的連接終止請求。

CLOSING:等待遠端TCP 的連接終止請求確認。

LAST_ACK:等待先前發送給遠端TCP 的連接終止請求的確認(包括它字節的連接終止請求的確認)

TIME_WAIT:等待足夠的時間過去以確保遠端TCP 接收到它的連接終止請求的確認。
TIME_WAIT 兩個存在的理由:
          1.可靠的實現tcp全雙工連接的終止;
          2.允許老的重複分節在網絡中消逝。

CLOSED:不在連接狀態(這是爲方便描述假想的狀態,實際不存在)
9.如果已經建立了連接,但是客戶端突然出現故障了怎麼辦?

TCP還設有一個保活計時器,顯然,客戶端如果出現故障,服務器不能一直等下去,白白浪費資源。服務器每收到一次客戶端的請求後都會重新復位這個計時器,時間通常是設置爲2小時,若兩小時還沒有收到客戶端的任何數據,服務器就會發送一個探測報文段,以後每隔75秒鐘發送一次。若一連發送10個探測報文仍然沒反應,服務器就認爲客戶端出了故障,接着就關閉連接。

10.TCP和UDP的區別

TCP(面向連接、可靠的、基於字節流的傳輸控制協議):TCP用於應用程序之間的通信。應用層向TCP層發送用於網間傳輸的、用8位字節表示的數據流,然後TCP把數據流,分成適當長度的報文段(通常受該計算機連接的網絡的數據鏈路層的最大傳輸單元MTU的限制)
可靠的
  TCP爲保證報文的傳輸的可靠,就給每個包一個序號,同時序號保證傳送到接收端實體的包的按序接收。然後接收端實體對已成功收到的字節發回一個相應的確認(ACK);如果發送端實體在合理的往返時延(RTT)內未收到確認,難麼對應的數據將會重傳。爲保證數據正確性和合法性,TCP用一個校驗和函數來檢驗數據是否有錯誤,在發送和接收時都要計算校驗和;在保證可靠性,採用超時重傳和捎帶確認機制;流量控制上,採用滑動窗口協議,未經確認的分組需要重傳。
面向連接的
三次握手、四次揮手
UDP(面向無連接的):面向無連接的用戶數據報UDP協議,UDP的傳送不保證數據不到達目的地,也不保證數據報的順序,不提供重傳機制;提供面向事務的簡單的不可靠信息傳送服務,適合於一次傳輸少量數據,UDP傳輸的可靠性由應用層負責。UDP的報頭由四個域組成,每個域各佔用2個字節,分別爲:源端口號;目標端口號;數據報長度;校驗值;應用程序訪問UDP層然後使用IP層傳送數據報;IP層的報頭指明瞭源主機和目的主機地址,而UDP層的報頭指明瞭主機上的源端口和目的端口。UDP適合包總量較少的通信,如DNS,SNMP等。
在這裏插入圖片描述
TCP與UDP區別總結:
1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接
2、TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付。
3、TCP面向字節流,實際上是TCP把數據看成一連串無結構的字節流;UDP是面向報文的。
UDP沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等)
4、每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信
5、TCP首部開銷20字節;UDP的首部開銷小,只有8個字節
6、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道。

11.DNS域名系統,簡單描述其工作原理。

DNS( Domain Name System)是“域名系統”的英文縮寫,是一種組織成域層次結構的計算機和網絡服務命名系統,它用於TCP/IP網絡,它所提供的服務是用來將主機名和域名轉換爲IP地址的工作。
  在這裏插入圖片描述
  DNS的工作原理,以www.qq.com舉例說明:
參考鏈接:
https://blog.csdn.net/zhouyongku/article/details/53694415
當 DNS 客戶機需要查詢程序中使用的名稱時,它會查詢本地DNS 服務器來解析該名稱。客戶機發送的每條查詢消息都包括3條信息,以指定服務器應回答的問題。
指定的 DNS 域名,表示爲完全合格的域名 (FQDN) 。
指定的查詢類型,它可根據類型指定資源記錄,或作爲查詢操作的專門類型。
DNS域名的指定類別
  對於DNS 服務器,它始終應指定爲 Internet 類別。例如,指定的名稱可以是計算機的完全合格的域名,如im.qq.com,並且指定的查詢類型用於通過該名稱搜索地址資源記錄。
  DNS 查詢以各種不同的方式進行解析。客戶機有時也可通過使用從以前查詢獲得的緩存信息就地應答查詢。DNS 服務器可使用其自身的資源記錄信息緩存來應答查詢,也可代表請求客戶機來查詢或聯繫其他 DNS 服務器,以完全解析該名稱,並隨後將應答返回至客戶機。這個過程稱爲遞歸。
另外,客戶機自己也可嘗試聯繫其他的 DNS 服務器來解析名稱。如果客戶機這麼做,它會使用基於服務器應答的獨立和附加的查詢,該過程稱作迭代,即DNS服務器之間的交互查詢就是迭代查詢
在這裏插入圖片描述
  1、在瀏覽器中輸入www.qq.com域名,操作系統會先檢查自己本地的hosts文件是否有這個網址映射關係,如果有,就先調用這個IP地址映射,完成域名解析。
2、如果hosts裏沒有這個域名的映射,則查找本地DNS解析器緩存,是否有這個網址映射關係,如果有,直接返回,完成域名解析。
3、如果hosts與本地DNS解析器緩存都沒有相應的網址映射關係,首先會找TCP/IP參數中設置的首選DNS服務器,在此我們叫它本地DNS服務器,此服務器收到查詢時,如果要查詢的域名,包含在本地配置區域資源中,則返回解析結果給客戶機,完成域名解析,此解析具有權威性。
4、如果要查詢的域名,不由本地DNS服務器區域解析,但該服務器已緩存了此網址映射關係,則調用這個IP地址映射,完成域名解析,此解析不具有權威性。
5、如果本地DNS服務器本地區域文件與緩存解析都失效,則根據本地DNS服務器的設置(是否設置轉發器)進行查詢,如果未用轉發模式,本地DNS就把請求發至13臺根DNS,根DNS服務器收到請求後會判斷這個域名(.com)是誰來授權管理,並會返回一個負責該頂級域名服務器的一個IP。本地DNS服務器收到IP信息後,將會聯繫負責.com域的這臺服務器。這臺負責.com域的服務器收到請求後,如果自己無法解析,它就會找一個管理.com域的下一級DNS服務器地址(qq.com)給本地DNS服務器。當本地DNS服務器收到這個地址後,就會找qq.com域服務器,重複上面的動作,進行查詢,直至找到www.qq.com主機。
6、如果用的是轉發模式,此DNS服務器就會把請求轉發至上一級DNS服務器,由上一級服務器進行解析,上一級服務器如果不能解析,或找根DNS或把轉請求轉至上上級,以此循環。不管是本地DNS服務器用是是轉發,還是根提示,最後都是把結果返回給本地DNS服務器,由此DNS服務器再返回給客戶機。
從客戶端到本地DNS服務器是屬於遞歸查詢,而DNS服務器之間就是的交互查詢就是迭代查詢。

12.在瀏覽器中輸入www.baidu.com後執行的全部過程

參考鏈接:
https://blog.csdn.net/qq_16681169/article/details/50866290
網絡模型的角度來分析問題的,主要涉及應用層:DNS,HTTP,傳輸層:TCP,網絡層:IP和路由選擇協議:RIP,OSPF(內部網關協議),BGP(外部網關協議)和數據鏈路層:ARP。
(1)應用層:客戶端瀏覽器通過DNS(應用層協議)解析到www.baidu.com的IP地址220.181.27.48通過這個IP地址找到客戶端到服務器端的路徑。客戶端瀏覽器發起一個HTTP會話到220.181.27.48,然後通過TCP進行封裝數據包,輸入到網絡層。
DNS解析ip:
在這裏插入圖片描述
HTTP訪問服務器:
在這裏插入圖片描述
(2)傳輸層:在客戶端的傳輸層,把http會話請求分成報文段,添加到源和目的端口,如服務器使用80端口監聽客戶端請求,客戶端由系統隨機選擇一個端口如5000端口,與服務器進行交換,服務器把相應的請求返回給客戶端的5000端口。然後通過IP層的IP地址查找目的端。
在這裏插入圖片描述
(3)客戶端的網絡層不用關心應用層或傳輸層的東西,主要做的是通過查找路由表確定如何到達服務器,期間可能經過多個路由器,這些都是路由器來完成的工作。
在這裏插入圖片描述
(4)客戶端的鏈路層,包通過鏈路層發送到路由器,通過鄰居協議查找給定IP地址的MAC地址,然後發送ARP請求查找目的地址,如果得到迴應後就可以使用ARP的請求應答交換的IP數據包現在就可以傳輸了,然後發送IP數據包到達服務器地址。

13.各種協議的介紹

ICMP協議(網絡層協議)控制報文協議。它是TCP/IP協議簇的一個子協議,用於在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然並不傳輸用戶數據,但是對於用戶數據的傳遞起着重要的作用。ICMP協議是一種面向無連接的協議,用於傳輸出錯報告控制信息。主要用於在主機與路由器之間傳遞控制信息,包括報告錯誤、交換受限控制和狀態信息等。(ping、tracert
內部網關協議
(1)RIP(內部網關協議)
  RIP是一種基於距離向量的路由選擇協議,RIP協議要求網絡中的每一個路由器都要維護從它自己到其他每一個目的網絡的距離記錄。距離指經過路由器的個數。
(2)OSPF(開放式最短路徑優先)
  OSPF是目前廣泛使用的一種動態路由協議,它屬於鏈路狀態路由協議。通過可靠的泛洪與自治系統AS(Autonomous System)內的其他路由器週期性交互,學習到整個自治系統的網絡拓撲結構;並通過自治系統邊界的路由器注入其他AS的路由信息。
實現過程:

  • 初始化形成端口初始信息:在路由器初始化或網絡結構發生變化(如鏈路發生變化,路由器新增或損壞)時,相關路由器會產生鏈路狀態廣播數據包LSA,該數據包裏包含路由器上所有相連鏈路,也即爲所有端口的狀態信息。
  • 2、路由器間通過泛洪(Floodingl機制交換鏈路狀態信息:各路由器一方面將其LSA數據包傳送給所有與其相鄰的OSPF路由器,另一方面接收其相鄰的OSPF路由器傳來的LSA數據包,根據其更新自己的數據庫。
  • 3、形成穩定的區域拓撲結構數據庫:OSPF路由協議通過泛洪法逐漸收斂,形成該區域拓撲結構的數據庫,這時所有的路由器均保留了該數據庫的一個副本。
  • 4、形成路由表:所有的路由器根據其區域拓撲結構數據庫副本採用最短路徑法計算形成各自的路由表
    外部網關協議
    BGP(邊界網關協議):
    BGP是不同自治系統(AS)的路由器交換路由信息的協議。邊界網關協議BGP只能是力求尋找一條能夠到達目的網絡且比較好的路由。
    BGP交換路由信息:
      一個BGP發言人與其他自治系統中的BGP發言人要交換路由信息,就要先建立TCP連接,然後在此連接上交換BGP報文以建立BGP會話(session),利用BGP會話交換路由信息。使用TCP連接能提供可靠的服務也簡化了路由選擇協議。使用TCP連接交換路由信息的兩個BGP發言人,彼此成爲對方的鄰站或對等站。
14.瞭解交換機、路由器、網關的概念,並知道各自的用途。

(1)交換機(數據鏈路層)
  它可以爲接入交換機的任意兩個網絡節點提供獨享的電信號通路,交換機內部的CPU會在每個端口成功連接時,通過將MAC地址和端口對應,形成一張MAC表。在今後的通訊中,發往該MAC地址的數據包將僅送往其對應的端口,而不是所有的端口。因此,交換機可用於劃分數據鏈路層廣播,即衝突域;但它不能劃分網絡層廣播,即廣播域。
(2)路由器(網絡層)
  路由器是一種計算機網絡設備,提供了路由與轉送兩種重要機制,可以決定數據包從來源端到目的端所經過的路由路徑(host與host之間的傳輸路徑),這個過程稱爲路由,將路由輸入端的數據包移送至適當的路由器輸出端(在路由器內部進行),稱爲轉送。
路由器的一個作用是連通不同的網絡,另一個作用是選擇信息傳送的路線。
(3)網關(網絡層)
  網關(Gateway)又稱網間連接器、協議轉換器。網關在網絡層以上實現網絡互連,是最複雜的網絡互連設備,僅用於兩個高層協議不同的網絡互連。網關既可以用於廣域網互連,也可以用於局域網互連。 網關是一種充當轉換重任的計算機系統或設備。使用在不同的通信協議、數據格式或語言,甚至體系結構完全不同的兩種系統之間,網關是一個翻譯器。

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