面試中必備的網絡相關知識

廢話不說,直接上乾貨。

1.協議的概念和做用

爲了能讓計算機之間可以通訊,計算機須要定義通訊規則,這些規則就是協議。規則有多種,協議也有多種。協議就是數據封裝格式+傳輸。

2.OSI七層模型

應用層:提供網絡服務和最終用戶軟件之間的接口服務。
表示層:數據的表示、安全、壓縮。
會話層:創建、管理、停止會話。
傳輸層:定義傳輸數據的協議端口號,以及流控和差錯校驗。
網絡層:進行邏輯地址尋址,實現不一樣網絡之間的路徑選擇。
數據鏈路層:創建邏輯鏈接、進行硬件地址尋址、差錯檢驗等功能。
物理層:網線、同軸電纜等。

3.TCP/IP參考模型

經常使用的協議:
TCP/IP協議被稱爲傳輸控制協議/互聯網協議,又稱網絡通信協議,是由網絡層的IP協議和傳輸層的TCP協議組成的,是一個很大的協議集合。
物理層和數據鏈路層沒有定義任何特定協議,支持全部的標準和專用的協議。
網絡層定義了網絡互連,也就是IP協議:
(1) 網際協議(IP):負責主機和網絡之間尋址和路由數據包。
(2) 地址解析協議(ARP):得到同一物理網絡中的硬件主機MAC地址。
(3) 網際控制消息協議(ICMP):發送消息,並報告有關數據包的傳送錯誤。
(4) 互聯網管理協議(IGMP):IP主機向本地多路廣播路由器報告主機組成員。
傳輸層定義了TCP(傳輸控制協議)和UDP(用戶數據報協議)。
應用層定義了HTTP(超文本傳輸協議)、FTP(文件傳輸協議)、DNS(域名系統)等協議。
下面詳細說明一下,以上層的用途:
(1) 物理層和數據鏈路層,這兩個層共同組成了網絡接口層,它是TCP/IP的最底層,此層沒有特定的協議,它負責接收上一層交來的數據報,並將數據報經過底層的物理網絡發送出去。
(2) 網絡層,位於傳輸層和數據鏈路層之間,用於把數據從源主機通過若干節點傳送到目標主機,並向傳輸層提供最基本的數據傳輸服務,它要提供路由和選址的工做。網絡層只管傳遞數據,成功與否並不關心。
在可以選擇的多條道路之間,選擇一條最短的路徑就是路由的工做。在網絡中,每臺計算機都有一個惟一的地址,方便別人找到它,這個地址就是IP地址。
(3) 傳輸層,位於網絡層和應用層之間,是面向鏈接的、可靠的進程到進程的通訊協議,TCP提供全雙工服務,即數據可在同一時間雙向傳播,TCP將若干個字節構成一個分組,此分組稱爲報文段。
TCP(傳輸控制協議),它是可靠的、面向鏈接的協議,可是傳輸效率低。
UDP(用戶數據報協議),它是不可靠的、無鏈接的服務,可是傳輸效率高。
TCP的功能是將數據進行分段打包傳輸,對每一個數據包編號控制順序,運輸中丟失、重發和丟棄處理,流量控制避免擁塞。
TCP數據包封裝,示意圖:

        源端口號和目標端口號,計算機經過端口號識別訪問哪一個服務,好比http服務或ftp服務,發送方端口號是進行隨機端口,目標端口決定了接收方哪一個程序來接收。
        32位序列號,TCP用序列號對數據包進行標記,以便在到達目的地以後從新組裝,假設當前的序列號爲s,發送數據長度是l,那麼下次發送數據時的序列號是s+l。在創建鏈接時,一般由計算機生成一個隨機數做爲序列號的初始值。
        確認應答,它等於下一次應該接收到的數據的序列號。假設發送端的序列號是s,發送數據的長度是l,那麼接收端返回的確認應答號也是s+l。發送端接收到這個確認應答後,能夠認爲這個位置之前全部的數據都已被正常接收。
        首部長度,TCP首部長度,單位是4個字節。
        控制位,對TCP的鏈接、傳輸和斷開進行指揮:
            PSH 緩存區將滿,馬上傳輸速度
            RST 鏈接斷了,從新鏈接
            URG 緊急信號
            ACK 爲1表示確認號
            SYN TCP創建鏈接時,要將這個值設爲1
            FIN 發送端完成位,提出斷開鏈接的一方把FIN置爲1,表示要斷開鏈接
        緊急指針,僅在URG控制位爲1時有效。表示緊急數據的末尾在TCP數據部分中的位置。一般在暫時中斷通訊時使用(例如:ctrl + c)
        窗口值,說明本地可接收數據段的數目,這個值是可變的。當網絡一般時,將這個窗口值變大加快傳輸速度;當網絡不穩定時,減小這個值能夠保證網絡數據的可靠傳輸。它是在TCP傳輸中進行流量控制的。
        窗口大小,用於表示從應答開始可以接收多少個8位字節。若是窗口大小爲0,能夠發送窗口探測。
        校驗和,TCP校驗和的計算包括TCP首部、數據和其它填充字節。在發送TCP數據段時,由發送端計算校驗和,當到達目的地時,又計算一次檢驗和。若是兩次的校驗和一致,說明數據是正確的,不然將認爲數據被破壞,接收端將丟棄該數據。

3.地球人都知道的TCP三次握手

TCP是面向鏈接的協議,它在源點和終點之間創建虛擬鏈接,而不是物理鏈接。在數據通訊以前,發送端與接收端要先創建鏈接,等數據發送結束後,雙方再斷開鏈接。TCP鏈接的每一方都是由一個IP地址和一個端口組成。

爲了方便,咱們將主動發起請求的172.16.50.72:65076主機稱爲客戶端,將返回數據的主機172.16.17.94:8080稱爲服務端。
第一次握手:創建鏈接。客戶端發送鏈接請求,發送SYN報文,將seq設置爲0,而後,客戶端進入SYN_SEND狀態,等待服務器的確認。
第二次握手:服務器接收到客戶端的SYN報文段。須要對這個SYN報文段進行確認,發送ACK報文,將ack設置爲1。同時,本身還要發送SYN請求信息,將seq設置爲0。服務器端將上述全部信息一併發送給客戶端,此時服務器進入SYN_RECV狀態。
第三次握手:客戶端收到服務器的ACK和SYN報文後,進行確認,而後,將ack=1,seq設置爲1,向服務器發送ACK報文段,這個報文段發送完畢以後,客戶端和服務器都進入了ESTABLISHED狀態,完成了TCP的三次握手。

4.地球人都不知道的TCP四次揮手

第一次揮手:客戶端向服務器發送一個FIN報文段,將seq設置爲160,ack設置爲112;此時,客戶端進入FIN_WAIT_1狀態,這表示客戶端沒有數據要發送服務器了,請求關閉鏈接。
第二次揮手:服務器收到了客戶端發送的FIN報文後,會向客戶端返回一個ACK報文段,ack設置爲1,seq設置爲112;服務器進入了CLOSE_WAIT狀態,客戶端收到服務器返回的ACK報文後,進入FIN_WAIT_2狀態。
第三次揮手:服務器會觀察本身是否還有數據要發送給客戶端,若是有,先把數據發送給客戶端,再發送FIN報文;若是沒有,那麼服務器直接發送FIN報文給客戶端。請求關閉鏈接,同時服務器進入LAST_ACK狀態。
第四次揮手:客戶端收到服務器發送的FIN報文段,向服務器發送ACK報文段,將seq設置爲161,ack設置爲113,而後客戶端進入TIME_WAIT狀態;服務器收到客戶端的ACK報文段之後,就關閉鏈接,此時,客戶端等待2MSL後,依然沒有收到回覆,則證實服務器已正常關閉,客戶端也能夠關閉鏈接了。

(1)爲何須要三次握手?

爲了確保雙發收發都是正常的。

(2)爲何須要四次揮手?

雙方數據發送完畢,都認爲能夠斷開。

(3)爲何須要等待?

A向B發的FIN可能丟失。

(4)爲何握手是3次,而揮手是4次吶?

當服務器端收到FIN報文時,極可能並不會當即關閉SOCKET。

5.從輸入網址到網頁顯示內容,整個過程經歷了什麼?

    (1) 在客戶端瀏覽器輸入網址URL;
    (2) 發送到DNS(域名服務器)得到域名對應的web服務器的IP地址;
    (3) 客戶端瀏覽器與web服務器創建TCP(傳輸控制協議)鏈接;
    (4) 客戶端瀏覽器向對應的IP地址的web服務器發送相應的HTTP或HTTPS請求;
    (5) web服務器響應請求,返回指定的URL數據或錯誤信息,若是設置重定向,則重定向到新的URL地址;
    (6) 客戶端瀏覽器下載數據,解析HTML源文件,解析過程當中實現對頁面的排版,解析完成後,在瀏覽器中顯示基礎的頁面。
相關文章
相關標籤/搜索