1. 程式人生 > >程式設計師常見面試之 計算機網路 知識點小結

程式設計師常見面試之 計算機網路 知識點小結

前言

悉心整理校正了計算機網路的面試常用知識點,文章圖文並茂,通俗易懂,希望對大家有所幫助。

TCP提供面向連線的、可靠的資料流傳輸,而UDP提供的是非面向連線的、不可靠的資料流傳輸。

TCP傳輸單位稱為TCP報文段,UDP傳輸單位稱為使用者資料報。TCP注重資料安全性,UDP資料傳輸快,因為不需要連線等待,少了許多操作,但是其安全性卻一般。

TCP對應的協議和UDP對應的協議TCP對應的協議:(1) FTP:定義了檔案傳輸協議,使用21埠。(2) Telnet:一種用於遠端登陸的埠,使用23埠,使用者可以以自己的身份遠端連線到計算機上,可提供基於DOS模式下的通訊服務。(3) SMTP:郵件傳送協議,用於傳送郵件。伺服器開放的是25號埠。(4) POP3:它是和SMTP對應,POP3用於接收郵件。POP3協議所用的是110埠。(5)HTTP:是從Web伺服器傳輸超文字到本地瀏覽器的傳送協議。UDP對應的協議:(1) DNS:用於域名解析服務,將域名地址轉換為IP地址。DNS用的是53號埠。(2) SNMP:簡單網路管理協議,使用161號埠,是用來管理網路裝置的。由於網路裝置很多,無連線的服務就體現出其優勢。(3) TFTP(Trival File Tran敏感詞er Protocal),簡單檔案傳輸協議,該協議在熟知埠69上使用UDP服務。

TCP/IP 參考模型

分層

每一層都是獨立存在的,因此分配到各層的任務能夠獨立地執行,變更其中某層提供的方案時不影響其他層。

這也可以理解為一個鬆耦合的設計。

tcpip 模型

詳解

網路層 主要是 ip 協議,可以通過 ip 找到某個機器,但是機器上有很多應用程式,每個程式都佔用相應的埠,傳輸層 不同協議有不同的埠,通過 ip + 埠 就可以確定某個機器上的具體應用程式了。

Server A 和 Server B 直接傳輸資料,有封裝和解封裝的過程。

資料從A 的應用層往下走到物理層,會在每一層都會加上頭部資訊,進行封裝,然後再發送到B。

然後 Server B 從 最下面的物理層往上

每一層進行解封裝,最後到達應用層,得到資料。

  • 物理層:將電腦連起來,可以用光纜、電纜、雙絞線、無線電波等方式

  • 鏈路層:資料包會帶上傳送地址和接收地址,也就是MAC地址

  • 網路層:網路地址幫助我們確定計算機所在的子網路,MAC地址則將資料包送到該子網路中的目標網絡卡。
    因此,從邏輯上可以推斷,必定是先處理網路地址,然後再處理MAC地址。

  • 傳輸層:同一臺主機上有許多程式都需要用到網路,埠可以確定表示這個資料包到底供哪個程式使用。
    傳輸層建立”埠到埠”的通訊,”網路層”的功能是建立”主機到主機”的通訊。
    (ftp 21,ssh 22,dns 53,http 80)

  • 應用層 我們在傳輸資料時,可以只使用(傳輸層)TCP/IP協議,但是那樣的話,如果沒有應用層,便無法識別資料內容。
    如果想要使傳輸的資料有意義,則必須使用到應用層協議。

TCP 區別 UDP

TCP連線是由4個值來識別的: <源IP地址、源埠號、目的IP地址、目的埠號>

  • TCP是面向連線的、可靠的
    其實網路的不安全不穩定特性,無論多少次握手都不能保證連線的可靠性
    但TCP的三次握手在最低限度上(實際上也很大程度上保證了)保證了連線的可靠性

  • UDP 無連線的、不可靠
    UDP傳送資料前並不與對方建立連線,對接收到的資料也不傳送確認訊號,傳送端不知道資料是否會正確接收,當然也不用重發,

 UDP 交給上層進行差錯控制,可以程式碼對UDP的資料收發進行驗證,比如傳送方對每個資料包進行編號然後由接收方進行驗證啊什麼的

 即使是這樣,UDP因為在底層協議的封裝上沒有采用類似TCP的“三次握手”而實現了TCP所無法達到的傳輸效率

IP 協議

A 類 B 類 C 類

IP的地址欄位範圍是0~127,但是由於全0和全1的地址用作特殊用途,實際可指派的第一個欄位範圍是1~126。

A類地址範圍:0.0.0.1 —— 126.255.255.254, 預設網路掩碼為 255.0.0.0

B類地址範圍:128.0.0.1 —— 191.255.255.254,預設子網掩碼為255.255.0.0

C類地址範圍:192.0.0.1 —— 223.255.255.254,預設子網掩碼為255.255.255.0

0 到 128 相差128,128 到192相差64,後面192到224相差32。

A 類地址, 0 開頭, 128 個
B 類地址,10 開頭,16,384 個
C 類地址,110 開頭,2,097,152 個

特殊的地址

ip 地址= 網路號 + 主機號

網路號 主機號 用途
全為0 全為0 表示本主機,用作源地址,啟動時用,獲取了 IP 地址後不再使用
全為0 host-id 本地網路上主機號為 host-id 的主機,只作為源地址
全為1 全為1 有限廣播(本地網路),只作目的地址,各路由器都不轉發
net-id 全為1 定向廣播(net-id標識的網路),只作目的地址
net-id 全為0 標識一個網路
127 任意 本地軟體回送地址

B類中169.254.0.0到169.254.255.255是保留地址。如果你的IP地址是自動獲取IP地址,而你在網路上又沒有找到可用的DHCP伺服器,這時你將會從169.254.0.0到169.254.255.255中臨得獲得一個IP地址。

私有地址

私有地址包括3組
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

學校裡的區域網,因為大概有幾十萬人,所以是10開頭的區域網。

而我們買的無線路由器,也要設定區域網,一般為192開頭的,比如192.168.0.1或者192.168.199.1(比如極路由就是這個地址)

我們建企業網(單位網路)時,一般是使用私有地址來分配內部主機,小企業使用C類的192.168.0.0網路,中型企業使用172.16.0.0網路,如果還不夠用,還有10.0.0.0 網路。

子網劃分

以C類網路為例,原有8位主機位,2的8次方即256個主機地址,預設子網掩碼255.255.255.0。

借用1位主機位,產生2個子網,每個子網有126個主機地址;借用2位主機位,產生4個子網,每個子網有62個主機地址……

練習題

把子網掩碼為255.255.0.0的網路40.15.0.0分為兩個子網,假設第一個子網為40.15.0.0/17,則第二個子網為?

40.15.0.0/17 表示網段是40.15.0.0,子網掩碼是17位。

子網掩碼為:255.255.128.0,用二進位制表示為:11111111 11111111 10000000 00000000 ,斜槓後面的17表示子網掩碼前17位為1.

答案:

劃分為兩個子網的話子網掩碼應該為255.255.128.0
第一個子網是40.15.0.0/17,可用地址範圍是40.15.0.1~40.15.127.254
第二個子網是40.15.128.0/17,可用地址範圍是40.15.128.1~40.15.255.254

解析:

掩碼的前兩個八位是255,第三個八位是128,有2的一次方個子網(因為第三個八位只有一個1,後面七位都是0),所以ip 地址第三個8位是0000,0000或者1000,0000,即0或者128。

因為第3個8位是1000,0000,可以區分開頭第一個數是0還是1, 區分了兩個子網。所以這兩個子網是40.15.0.0和40.15.128.0

NAT穿透技術

NAT(Network Address Translation,網路地址轉換)是一種網路地址翻譯技術,將內部私有IP地址改變成可以在公網上使用的.

NAT

NAT三種實現方式

  • 靜態地址轉換:一個公網IP對應一個內部IP,一對一轉換

  • 動態地址轉換:N個公網IP對應M個內部Ip,不固定的一對一IP轉換關係.同一時間,有M-N個主機無法聯網.

  • 埠多路複用:對外只有一個公網IP,通過埠來區別不同內部IP主機的資料.

閘道器

  • 閘道器(gateway)能在不同協議間移動資料

  • 路由器(router)是在不同網路間移動資料
    相當於傳統所說的IP閘道器(IP gateway)

三次握手

一些名詞

  • seq (Sequence Number)序列號,這是為了連線以後傳送資料用的
  • ack(Acknowledgment Number)確認序列號,是對收到的資料包的確認,值是等待接收的資料包的序列號。
  • SYN synchronous 同步訊號
  • ACK Acknowledgement 應答訊號, 當 ACK=1時候表示ack欄位有意義
  • SYN 和 ACK 也表示 TCP 的標誌位?

三次握手的步驟

三次握手

  1. 客戶端 發起握手,目的端點是 服務端 的端點 post_server
    • 生成一個隨機數作為它的初始化傳送序號 x
    • 發出一個同步報文段,SYN=1,傳送序號 seq=x
    • 並進入SYN_SEND狀態,等待伺服器確認
  2. 服務端監聽到埠 post_server 上有連線請求,響應
    • 生成一個隨機數作為它的初始傳送序號 seq = y
    • 發出同步報文欄位並對主機 A 埠1的連線請求進行確認,傳送ack=x+1
    • 即傳送 SYN+ACK 包,此時伺服器進入SYN_RECV狀態
  3. 主機 A
    • 發出對 服務端 埠 post_server 的確認,確認序號 ack=y+1,還有seq=x+1
    • 客戶端和伺服器進入ESTABLISHED狀態,完成三次握手

為什麼採用3次握手而不是2次握手?

  • 第一次握手 客戶端發,服務端 知道 客戶端 可以 發訊息
  • 第二次握手 服務端收和發,客戶端 知道 服務端 可以 接收訊息 和 發訊息
  • 第三次握手 客戶端收和發,服務端 知道 客戶端可以 接收訊息 和 發訊息

3 次是雙向通訊的最小值,也就是 SYN, SYN ACK, ACK ,兩個傳送、兩個接收 ,其中第二次把接收和傳送合在一起了

如果兩次握手的話,客戶端有可能因為網路阻塞等原因會發送多個請求報文,這時伺服器就會建立連線,浪費掉許多伺服器的資源。所以要增加第三次握手。

第3次失敗會怎麼辦?

第三次失敗,只有客戶端處於成功狀態(因為第2次伺服器返回了ACK),伺服器端沒有接收到客戶端的 ACK。

這要分幾種情況討論:

  • In other words, if the ACK is dropped but the next packet is not dropped, then everything is fine.
    也就是說客戶端發出的 ACK 丟失了,發出的 下一個資料包 沒有丟失,則服務端接收到下一個資料包(這個資料包裡也會帶上 ACK 資訊),能夠進入正常的 ESTABLISHED 狀態

  • 如果服務端和客戶端都沒有資料傳送,或者服務端想傳送資料(但是發不了,因為沒有收到客戶端的 ACK),伺服器都會有定時器傳送第二步SYN+ACK資料包,如果客戶端再次傳送ACK成功,建立連線。

    如果一直不成功,伺服器肯定會有超時設定,超時之後會給客戶端發RTS報文,進入CLOSED狀態,防止SYN洪泛攻擊。

四次握手關閉連線

四次握手

  1. 主機 A 關閉 A主機的 埠1 到 B主機的 埠2 的傳輸連線:

    • 應用程式通知 TCP 資料已經發送完畢時,關閉連線
    • TCP 向主機 B 傳送一個帶 FIN 附加標記的報文段(FIN 表示 finish),FIN=1,seq=x
  2. 主機 B 響應:

    • 收到這個 FIN 報文段之後,並不立刻用 FIN 報文段回覆主機 A,而是先向主機 A 傳送一個確認序號 ,ACK=1,ack=x+1
    • 同時通知自己相應的應用程式,主機 A 方傳輸已經結束,對方要求關閉連線(先發送 ACK 的目的是為了防止這段時間內,主機 A 重傳 FIN 報文段)

    此時 A 到 B 方向上的傳輸連線已經關閉(看第4有TIME_WAIT狀態等待2MSL,第2步的 A 到 B 並沒有徹底關閉?),但是主機 B 到 A 還可以傳送資料,連線處於半關閉的狀態。(因為原來 TCP 是全雙工的工作方式,只關閉了一端的連線)

  3. 主機 B 關閉 埠2到埠1的傳輸連線:

    • 應用程式告訴 TCP: 我要徹底地關閉連線
    • TCP 收到對最後資料的確認後,向主機 A 傳送一個 FIN 報文段。FIN=1,seq=y,y 是 B 傳送資料的最後位元組的序號加1。ACK=1,seq=x+1。
  4. 主機 A 響應:

    • 收到這個 FIN 報文段之後,向主機 B 傳送一個 ACK 表示連線徹底釋放。ACK=1,ack=y+1
    • 主機B收到主機A的ACK報文段以後,就關閉連線;此時,主機A等待2MSL (Maximum Segment Lifetime)後依然沒有收到回覆,則證明主機 B已正常關閉,那好,主機A也可以關閉連線了。

為什麼連線的時候是三次握手,關閉的時候卻是四次握手?

TCP是全雙工模式,關閉連線時,當 主機 B收到主機A的FIN報文時,僅僅表示主機 A不再發送資料了但是還能接收資料。

主機 B也未必全部資料都發送給A了,所以B可以立即close;也可以傳送一些資料給A後,再發送FIN報文給對方來表示同意現在關閉連線,因此, 主機 BACK和FIN一般都會分開發送。

參考文章

相關推薦

程式設計師常見面試 計算機網路 知識點小結

前言 悉心整理校正了計算機網路的面試常用知識點,文章圖文並茂,通俗易懂,希望對大家有所幫助。 TCP提供面向連線的、可靠的資料流傳輸,而UDP提供的是非面向連線的、不可靠的資料流傳輸。 TCP傳輸單位稱為TCP報文段,UDP傳輸單位稱為使用者資料報。T

程式設計師常見面試 資料庫 知識點小結(二)

前言 聚簇索引與非聚簇索引的區別 聚簇索引的順序就是資料的物理儲存順序 每個表中只能有一個聚集索引 聚集索引要求:“既不能絕大多數都相同,又不能只有極少數相同”的規則。 非聚簇索引的解釋是:索引順序與資料物理排列順序無關 一個表最多隻能有一個聚

程式設計師常見面試 資料庫 知識點小結(三)

前言 根據自己的專案經驗和閱讀經驗,整理了一些資料庫常見面試知識點,喜歡能幫助到大家。 常用 SQL 語句 order select a,b from list_table order by b asc 從 list_table 表中選

程式設計師應該知道的計算機網路知識

前言 作為一名程式設計師, 不可能不與網路打交道. 現在我們的手機, 電腦, 不誇張地說, 離開了網路就是一塊’廢鐵’, 它們的作用將大打折扣.. 本文的作用呢, 主要是針對不是非網路專業開發的人員準備的, 以’最短的時間, 瞭解計網最多的知識’為前提起筆. 目

Java 面試計算機網路

OSI與TCP/IP各層 TCP、HTTP TCP與HTTP的報文結構 TCP三次握手、四次揮手 TCP三次握手(建立連線) 第一次握手:客戶端向伺服器傳送SYN(seq=j)包到伺服器; 第二次握手:伺服器收到SYN包,

計算機網路 知識點小結1

【TCP/UDP定義】 TCP(Transmission Control Protocol,傳輸控制協議)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議,由IETF的RFC 793定義。 UDP (User Datagram Protocol,使

計算機網路 知識點小結2

1、TCP為什麼需要3次握手,4次斷開? “三次握手”的目的是“為了防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤”。 client發出的第一個連線請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連線釋放以後的某個時間才到達

程式設計師面試寶典隨筆記(一)----計算機網路知識點梳理

傳輸層概 作用:傳輸層為它上面的應用層提供通訊服務。 在OSI七層參考模型中,傳輸層是面向通訊的最高層,也是使用者功能的最底層。 傳輸層兩大重要的功能:複用 和 分用。 複用:在傳送端,多個應

網路規劃設計師教程知識點精講計算機網路分類

在實際應用中,計算機網路的表現形式是多種多樣的。由於人們對網路的認識角度不同,即使對於同一個網路,也會出現各種各樣的網路型別名稱。比如:某一個網路,有人把它稱為區域網,有人稱之為乙太網,還有人把它叫做校園網。計算機網路的分類方法眾多,常用的主要有三種:根據網路的覆蓋範圍分類,根據網路傳輸技術

校招面試知識點複習計算機網路

1、電路交換與分組交換 電路交換特點:資源會被預留 電路交換分為:頻分多路複用以及時分多路複用 優點:可以為一個通話保證特定數量的端到端頻寬 缺點:效率低 分組交換特點:資源不會被預留 優點:效率高 今天的因特網就是分組交換的典範!

面試複習計算機網路

計算機網路體系結構 概述 組成和分類(區域網和廣域網) 標準組織(OSI和IEEE) 體系結構 層次結構 協議、服務和介面 參考模型 OSI(7層)和TCP/IP(5層) 物理層 通訊基礎 奈奎斯特定理和夏農公式、編碼調製 電路、報文

計算機網路知識點體系結構

計算機網路定義:計算機網路就是一些互聯的、自治的計算機系統的集合 物理組成:計算機網路包括硬體、軟體、協議三大部分        硬體:主機、通訊處理機(或稱前端處理機)、通訊線路和交換裝置組成        軟體:主要包括實現資源共享的軟體和方便使用者使用的各種工具軟

校招知識點總結篇計算機網路

1.計算機網路組成、分類 物理組成:硬體——主機(host、終端裝置)、處理機(前端FEP、通訊CCP-網絡卡)、連線裝置(路由器、交換機)、通訊線路(有線、無線);軟體——協議(語義、語法、時序)、應用; 功能組成:功能——資源子網、通訊子網;工作方式——邊緣、核心部分

【本人禿頂程式設計師面試-執行緒池的成長

←←←←←←←←←←←← 我都禿頂了,還不點關注! 背景 相信大家在面試過程中遇到面試官問執行緒的很多,執行緒過後就是執行緒池了。從易到難,都是這麼個過程,還有就是確實很多人在工作中接觸執行緒池比較少,最多的也就是建立一個然後往裡面提交執行緒,對於一些經驗很豐富的面試官來說,一下就可

程式設計師程式設計面試中的十個常見錯誤,茶話匯教你如何化解!

身為程式設計師,你肯定知道和其他技術工作面試比起來,程式設計工作的面試流程略有不同。 本文就程式設計師在程式設計面試中應當避免的10個問題進行說明,同時也給出瞭如何解決這些問題的建議。 1.從未在紙上或白板上寫過程式碼 這是求職者最容易犯的大錯之一。絕大多數程式設計面試都會安排在紙上或白板上。而與電

計算機初面面試必考的計算機網路知識點梳理

傳輸層概 作用:傳輸層為它上面的應用層提供通訊服務。 在OSI七層參考模型中,傳輸層是面向通訊的最高層,也是使用者功能的最底層。 傳輸層兩大重要的功能:複用 和 分用。 複用:在傳送端,多個應用程序公用一個傳輸層; 分用:在

面試基礎知識計算機網路

一、計算機網路 基礎部分 1. TCP報頭格式 TCP協議頭最少20個位元組,包括以下的區域: TCP源埠(Source Port):16位的源埠其中包含初始化通訊的埠。源埠和源IP地址的作用是標示報問的返回地址。 TCP目的埠(Destinat

面試】JAVA程式設計師麵霸初級知識

該系列文章也是來自於一篇CSDN的gitchat,將其中的答案補全,本篇是最簡單的初級知識。 1,面向物件和麵向過程的區別和聯絡。     網上有個蓋澆飯和蛋炒飯的例子比較好。     面向過程是蛋炒飯,混在一起,一個一個炒。     面向物件是蓋澆飯,飯和菜分開,想要換掉

計算機網路知識點——8.網路RIP協議

距離向量演算法:距離向量演算法(Distance vector algorithm)是一種最短路徑演算法。基本思想如下:每個節點週期性的傳送它自己的距離向量估計(distance vector estimate)給鄰居。主要使用在RIP協議。每隔一段時間,路由器會向所有鄰居結

計算機網路知識點——7.網路路由協議

有類網中的IP路由選擇:如果目的網路為直連網路,則下一跳(next hop)為空。路由表(routing table)有時也被稱為轉發表(forwarding table)。有類網的路由選擇演算法:利用資料包中的目的地址得到目的網路號,然後查詢路由表:如果查詢的結果為直連網,