20道計算機網絡面試題

網絡分層

1、說說OSI 七層、TCP/IP 四層的關系和區別?

OSI 七層從下往上依次是:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。一張圖給你整明白:

在這里插入圖片描述
TCP/IP 四層從下往上依次是:網絡接口層網絡層傳輸層應用層。與 OSI 七層的映射關系如下:

在這里插入圖片描述

特點:

  • 層與層之間相互獨立又相互依靠
  • 上層依賴于下層,下層為上層提供服務

敲黑板:TCP/IP 四層是 OSI 七層的簡化版,已經成為實事國際標準。

TCP/IP

2、說說TCP 與 UDP 的區別?

先上一張對比圖:

在這里插入圖片描述

總結

  • TCP 向上層提供面向連接的可靠服務 ,UDP 向上層提供無連接不可靠服務。
  • UDP 沒有 TCP 傳輸可靠,但是可以在實時性要求搞的地方有所作為。
  • 對數據準確性要求高,速度可以相對較慢的,可以選用TCP。

3、TCP 是如何實現數據的可靠性?

一句話:通過校驗和序列號確認應答超時重傳連接管理流量控制擁塞控制等機制來保證可靠性。

(1)校驗和

在數據傳輸過程中,將發送的數據段都當做一個16位的整數,將這些整數加起來,并且前面的進位不能丟棄,補在最后,然后取反,得到校驗和。

發送方:在發送數據之前計算校驗和,并進行校驗和的填充。接收方:收到數據后,對數據以同樣的方式進行計算,求出校驗和,與發送方進行比較。

(2)序列號

TCP 傳輸時將每個字節的數據都進行了編號,這就是序列號。序列號的作用不僅僅是應答作用,有了序列號能夠將接收到的數據根據序列號進行排序,并且去掉重復的數據。

(3)確認應答

TCP 傳輸過程中,每次接收方接收到數據后,都會對傳輸方進行確認應答,也就是發送 ACK 報文,這個 ACK 報文中帶有對應的確認序列號,告訴發送方,接收了哪些數據,下一次數據從哪里傳。

(4)超時重傳

在進行 TCP 傳輸時,由于存在確認應答與序列號機制,也就是說發送方發送一部分數據后,都會等待接收方發送的 ACK 報文,并解析 ACK 報文,判斷數據是否傳輸成功。如果發送方發送完數據后,遲遲都沒有接收到接收方傳來的 ACK 報文,那么就對剛剛發送的數據進行重發。

(5)連接管理

就是指三次握手、四次揮手的過程。

(6)流量控制

如果發送方的發送速度太快,會導致接收方的接收緩沖區填充滿了,這時候繼續傳輸數據,就會造成大量丟包,進而引起丟包重傳等等一系列問題。TCP 支持根據接收端的處理能力來決定發送端的發送速度,這就是流量控制機制。

具體實現方式:接收端將自己的接收緩沖區大小放入 TCP 首部的『窗口大小』字段中,通過 ACK 通知發送端。

(7)擁塞控制

TCP 傳輸過程中一開始就發送大量數據,如果當時網絡非常擁堵,可能會造成擁堵加劇。所以 TCP 引入了慢啟動機制,在開始發送數據的時候,先發少量的數據探探路。

4、說說 TCP 協議如何提高傳輸效率?

一句話:TCP 協議提高效率的方式有滑動窗口快重傳延遲應答捎帶應答等。

(1)滑動窗口

如果每一個發送的數據段,都要收到 ACK 應答之后再發送下一個數據段,這樣的話我們效率很低,大部分時間都用在了等待 ACK 應答上了。

為了提高效率我們可以一次發送多條數據,這樣就能使等待時間大大減少,從而提高性能。窗口大小指的是無需等待確認應答而可以繼續發送數據的最大值。

(2)快重傳

快重傳也叫高速重發控制。

那么如果出現了丟包,需要進行重傳。一般分為兩種情況:

情況一:數據包已經抵達,ACK被丟了。這種情況下,部分ACK丟了并不影響,因為可以通過后續的ACK進行確認;

情況二:數據包直接丟了。發送端會連續收到多個相同的 ACK 確認,發送端立即將對應丟失的數據重傳。

(3)延遲應答

如果接收數據的主機立刻返回ACK應答,這時候返回的窗口大小可能比較小。

假設接收端緩沖區為1M,一次收到了512K的數據;如果立刻應答,返回的窗口就是512K;
但實際上可能處理端處理速度很快,10ms之內就把512K的數據從緩存區消費掉了;
在這種情況下,接收端處理還遠沒有達到自己的極限,即使窗口再放大一些,也能處理過來;
如果接收端稍微等一會在應答,比如等待200ms再應答,那么這個時候返回的窗口大小就是1M;
窗口越大,網絡吞吐量就越大,傳輸效率就越高;我們的目標是在保證網絡不擁塞的情況下盡量提高傳輸效率。

(4)捎帶應答

在延遲應答的基礎上,很多情況下,客戶端服務器在應用層也是一發一收的。這時候常常采用捎帶應答的方式來提高效率,而ACK響應常常伴隨著數據報文共同傳輸。如:三次握手。

5、你知道 TCP 如何處理擁塞嗎?

網絡擁塞現象是指到達通信網絡中某一部分的分組數量過多,使得該部分網絡來不及處理,以致引起這部分乃至整個網絡性能下降的現象,嚴重時甚至會導致網絡通信業務陷入停頓,即出現死鎖現象。擁塞控制是處理網絡擁塞現象的一種機制。

擁塞控制的四個階段:

慢啟動
擁塞避免
快速重傳
快速恢復

6、講一下三次握手和四次揮手全過程

在這里插入圖片描述

在這里插入圖片描述

7、為什么 TCP 鏈接需要三次握手,兩次不可以么,為什么?

兩次握手只能保證單向連接是暢通的

第一步,客戶端給服務端發送一條消息:你好,服務端。第二步,服務端收到消息,同時給客戶端回復一條消息:收到!你好客戶端。

這樣的兩次握手過程, 客戶端給服務端打招呼,服務端收到了,說明客戶端可以正常給服務端發送數據。但是服務端給客戶端打招呼,服務端沒有收到反饋,也就不能確保服務端是否能正常給客戶端發送消息。

只有經過第三次握手,才能確保雙向都可以接收到對方的發送的數據 第三步,客戶端收到服務端發送的消息,回復:收到!這樣就證明了客戶端能正常收到服務端的消息。

8、IP地址是怎樣分類的,你知道嗎?

先說一下 IP 的基本特點:

  • IP地址由四段組成,每個字段是一個字節,8位,最大值是255。
  • IP地址由兩部分組成,即網絡地址和主機地址。網絡地址表示其屬于互聯網的哪一個網絡,主機地址表示其屬于該網絡中的哪一臺主機。

IP 地址主要分為A、B、C三類及特殊地址D、E這五類,甩一張圖:

在這里插入圖片描述
A類:(1.0.0.0-126.0.0.0)一般用于大型網絡。

B類:(128.0.0.0-191.255.0.0)一般用于中等規模網絡。

C類:(192.0.0.0-223.255.255.0)一般用于小型網絡。

D類:是多播地址,地址的網絡號取值于224~239之間,一般用于多路廣播用戶。

E類:是保留地址。地址的網絡號取值于240~255之間。

HTTP協議

9、講一下 http1.1 和 http2 有什么區別?

  • HTTP1.1

持久連接
請求管道化
增加緩存處理(新的字段如cache-control)
增加 Host 字段、支持斷點傳輸等

  • HTTP2.0

二進制分幀
多路復用(或連接共享)
頭部壓縮
服務器推送

10、說說 HTTP 和HTTPS 的區別?

(1)HTTPS 協議需要到 CA 申請證書,一般免費證書較少,因而需要一定費用。
(2)HTTP 是超文本傳輸協議,信息是明文傳輸,HTTPS 則是具有安全性的 SSL 加密傳輸協議。
(3)HTTP 和 HTTPS 使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
(4)HTTP 的連接很簡單,是無狀態的;HTTPS 協議是由 SSL+HTTP 協議構建的可進行加密傳輸、身份認證的網絡協議,比 HTTP 協議安全。

11、你知道對稱加密和非對稱加密的區別和原理嗎?

對稱密鑰加密是指加密和解密使用同一個密鑰的方式,這種方式存在的最大問題就是密鑰發送問題,即如何安全地將密鑰發給對方;

而非對稱加密是指使用一對非對稱密鑰,即公鑰和私鑰,公鑰可以隨意發布,但私鑰只有自己知道。發送密文的一方使用對方的公鑰進行加密處理,對方接收到加密信息后,使用自己的私鑰進行解密。

由于非對稱加密的方式不需要發送用來解密的私鑰,所以可以保證安全性;但是和對稱加密比起來,它比較慢,所以我們還是要用對稱加密來傳送消息,但對稱加密所使用的密鑰我們可以通過非對稱加密的方式發送出去。

12、常見的狀態碼有哪些?

1×× : 請求處理中,請求已被接受,正在處理

2×× : 請求成功,請求被成功處理 200 OK

3×× : 重定向,要完成請求必須進行進一步處理 301 : 永久性轉移 302 :暫時性轉移 304 :已緩存

4×× : 客戶端錯誤,請求不合法 400:Bad Request,請求有語法問題 403:拒絕請求 404:客戶端所訪問的頁面不存在

5×× : 服務器端錯誤,服務器不能處理合法請求 500 :服務器內部錯誤 503 :服務不可用,稍等

13、http中常見的header字段有哪些?

cookie,請求時傳遞給服務端的cookie信息 set-cookie,響應報文首部設置要傳遞給客戶端的cookie信息 allow,支持什么HTTP方法 last-modified,資源的最后修改時間 expires,設置資源緩存的失敗日期 content-language,實體的資源語言 content-encoding,實體的編碼格式 content-length,實體主體部分的大小單位是字節 content-range,返回的實體的哪些范圍 content-type,哪些類型 accept-ranges,處理的范圍請求 age,告訴客戶端服務器在多久前創建了響應 vary,代理服務器的緩存信息 location,用于指定重定向后的URI If-Match,值是資源的唯一標識 User-Agent,將創建請求的瀏覽器和用戶代理名稱等信息傳遞給服務器 Transfer-Encoding,傳輸報文的主體編碼方式 connection,管理持久連接,keep-alive , close Cache-Control,控制瀏覽器的強緩存

14、Get與POST的區別

(1)GET 一般用來從服務器上獲取資源,POST 一般用來創建資源;

(2)GET 是冪等的,即讀取同一個資源,總是得到相同的數據,而 POST 不是冪等的。GET 不會改變服務器上的資源,而 POST 會對服務器資源進行改變;

(3)從請求參數形式上看,GET 請求的數據會附在URL之后;而 POST 請求會把提交的數據則放置在是HTTP請求報文的請求體中。

(4)POST 的安全性要比 GET 的安全性高,因為 GET 請求提交的數據將明文出現在 URL 上,而 POST 請求參數則被包裝到請求體中,相對更安全。

(5)GET 請求的長度受限于瀏覽器或服務器對URL長度的限制,允許發送的數據量比較小,而POST請求則是沒有大小限制的。

15、DNS 的尋址過程你知道嗎?

(1)在瀏覽器中輸入www.baidu.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服務器地址(baidu.com)給本地 DNS 服務器。當本地 DNS 服務器收到這個地址后,就會找 baidu.com 域服務器,重復上面的動作,進行查詢,直至找到 www.baidu.com 主機。

(6)如果用的是轉發模式,此 DNS 服務器就會把請求轉發至上一級 DNS 服務器,由上一級服務器進行解析,上一級服務器如果不能解析,或找根 DNS 或把轉請求轉至上上級,以此循環。不管是本地 DNS 服務器用是是轉發,還是根提示,最后都是把結果返回給本地 DNS 服務器,由此 DNS 服務器再返回給客戶機。

16、在瀏覽器中輸入一個www.baidu.com后執行的全部過程?

總體流程

域名解析 -> 建立TCP連接(三次握手)-> 發起http請求 -> 服務器響應http請求,瀏覽器得到html代碼 -> 瀏覽器解析html代碼,并請求html代碼中的資源(如 js、css、圖片等)-> 瀏覽器對頁面進行渲染呈獻給用戶。

17、Session、Cookie 的區別

  • session 在服務器端,cookie 在客戶端(瀏覽器)
  • session 默認被存儲在服務器的一個文件里(不是內存)
  • session 的運行依賴 session id,而 session id 是存在 cookie 中的,也就是說,如果瀏覽器禁用了 cookie ,同時 session 也會失效(但是可以通過其它方式實現,比如在 url 中傳遞 session_id)
  • session 可以放在 文件、數據庫、或內存中都可以。
    用戶驗證這種場合一般會用 session

18、有哪些 web 性能優化技術?

DNS查詢優化
客戶端緩存
優化TCP連接
避免重定向
網絡邊緣的緩存
條件緩存
壓縮和代碼極簡化
圖片優化

網絡安全

19、什么是 XSS 攻擊?

XSS 即(Cross Site Scripting)中文名稱為:跨站腳本攻擊。XSS的重點不在于跨站點,而在于腳本的執行。

XSS的原理是:

惡意攻擊者在web頁面中會插入一些惡意的script代碼。當用戶瀏覽該頁面的時候,那么嵌入到web頁面中script代碼會執行,因此會達到惡意攻擊用戶的目的。

XSS攻擊最主要有如下分類:反射型、存儲型、及 DOM-based型。反射性和DOM-baseed型可以歸類為非持久性XSS攻擊。存儲型可以歸類為持久性XSS攻擊。

20、什么是跨站攻擊CSRF?

CSRF(Cross Site Request Forgery,跨站域請求偽造)是一種網絡的攻擊方式,它在 2007 年曾被列為互聯網 20 大安全隱患之一,也被稱為『One Click Attack』或者 『Session Riding』,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用。

聽起來像跨站腳本(XSS),但它與XSS非常不同,并且攻擊方式幾乎相左。

XSS利用站點內的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進行防范的資源也相當稀少)和難以防范,所以被認為比XSS更具危險性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211610.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211610.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211610.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MATLAB - 評估擬合優度、評價擬合效果

系列文章目錄 文章目錄 系列文章目錄前言一、如何評估擬合優度二、擬合優度統計2.1 SSE - 誤差引起的平方和2.2 R 平方2.3 自由度調整 R 平方2.4 均方根誤差 三、MATLAB - 評估曲線擬合度3.1 加載數據并擬合多項式曲線3.2 繪制擬合方程、數據、殘差和預測范圍圖3.3 評估指定點3…

java--Object

1.Object類的作用 Object類是java中所有類的祖宗類,因此,java中所有類的對象都可以直接使用Object類中提供一些方法 2.Object類的常見方法 ①toString存在的意義:toString()方法存在的意義就是為了被子類重寫,以便返回對象具體的…

【Python實戰系列】一文徹底搞懂異常捕獲及處理(理論+源碼)

一、問題 異常處理是Python中一種用于處理程序運行時錯誤的機制。在編寫代碼時,可能會出現各種不可預測的情況,例如除零錯誤、文件不存在、網絡連接問題等等。為了確保程序能夠在出現錯誤時正常運行,您可以使用異常處理機制來捕獲和處理這些異…

K8S學習指南(5)-k8s核心對象namespace

文章目錄 前言什么是Namespace?Namespace的類型創建Namespace使用kubectl創建Namespace示例 切換Namespace查看Namespace在Namespace中部署應用程序使用Namespace進行資源隔離Namespace的權限控制刪除Namespace總結 前言 Kubernetes(簡稱K8s&#xff09…

前端知識(十六)——js獲取時間戳方法

1、獲取當前時間 let date new Date() 2、將字符串或者對象直接轉化成時間戳 方法:Date.parse() 注意:不推薦這種方法,毫秒級別的數值被轉化為000 3、通過valueOf()函數返回指定的原始值獲得精準的時間戳值 方法:valueOf()…

git自動更新功能

確認權限 因為一般Linux系統網頁用的www 或 www-data用戶和用戶組,所以要實現自動來去,首先要在www用戶權限下生成ssh密鑰,不然沒有權限,其次就是,要把用root用戶拉去的代碼,批量改成www用戶 1. 給www權限 vi /etc/sudoers www ALL=(ALL) NOPASSWD:/bin/chow…

memset的用法

語法 1.引用所需頭文件 #include<string.h> 2.聲明 void * memset ( void * ptr, int value, size_t num ); ptr 表示要設置的數據的起始地址。如果是要設置整個數組的數據&#xff0c;那ptr就是數組名&#xff08;數組首元素的地址&#xff09; value 表示要設置的值…

【學習筆記】lyndon分解

摘抄自quack的ppt。 這部分和 s a sa sa的關聯比較大&#xff0c;可以加深對 s a sa sa的理解。 Part 1 如果字符串 s s s的字典序在 s s s以及 s s s的所有后綴中是最小的&#xff0c;則稱 s s s是一個 lyndon \text{lyndon} lyndon串。 lyndon \text{lyndon} lyndon分解&a…

c++ 類和對象-封裝意義一

屬性和行為作為整體 示例一&#xff1a;設計一個圓類&#xff0c;求圓的周長 #include<iostream> using namespace std; //圓周率 const double PI 3.14; //設計一個圓類&#xff0c;求圓的周長 //圓求周長的公式&#xff1a;2*PI*半徑 //class代表設計一個類&#xf…

熔池處理Tecplot 360 和CFD-Post做出一樣的效果

熔池處理Tecplot 360 和CFD-Post做出一樣的效果 效果展示詳細講述Tecplot 360實現過程分析實現過程第一步實現過程第二步界面美化注意點效果展示 詳細講述Tecplot 360實現過程 分析 這里主要是將體積分數大于0.5的區域抽取出來,然后顯示溫度場,所以這里主要考慮下面連個思考…

PCL 三維點云中求解圓的三維方程

一、概述 在給出的三維點云中求解擬合圓的三維方程 二、代碼示例 #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/sample_consensus/ransac.h> #include <pcl/sample_consensus/sac_model_circle3D.h> // 擬

【貪心算法】 Opponents

這道題寫偽代碼就好了&#xff01; Description Arya has n opponents in the school. Each day he will fight with all opponents who are present this day. His opponents have some fighting plan that guarantees they will win, but implementing this plan requires pr…

【開源】基于Vue+SpringBoot的固始鵝塊銷售系統

項目編號&#xff1a; S 060 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S060&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S060&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 數據中心模塊2.2 鵝塊類型模塊2.3 固…

Mybatis-plus中wrapper的區別

在MyBatis-Plus框架中,LambdaQueryWrapper 和 QueryWrapper 是用于構建查詢條件的兩個主要類。它們都是查詢條件構造器,用于在查詢中生成 WHERE 子句的條件。 QueryWrapper QueryWrapper 是 MyBatis-Plus 3.x 中引入的條件構造器。它的主要特點是使用字符串作為字段名,并支…

python 數字保留小數位數 結果是字符串

precision 2 f{px :.{precision}f} # 自定義動態 f{x:.2f} 數字 轉 字符串 保留dot后面的位數 結果 字符串

從關鍵新聞和最新技術看AI行業發展(2023.11.20-12.3第十一期) |【WeThinkIn老實人報】

Rocky Ding 公眾號&#xff1a;WeThinkIn 寫在前面 【WeThinkIn老實人報】旨在整理&挖掘AI行業的關鍵新聞和最新技術&#xff0c;同時Rocky會對這些關鍵信息進行解讀&#xff0c;力求讓讀者們能從容跟隨AI科技潮流。也歡迎大家提出寶貴的優化建議&#xff0c;一起交流學習&…

MySQL概述-安裝與啟動

數據庫相關概念 MySQL數據庫 下載地址 MySQL :: Download MySQL Installer (Archived Versions) 啟動方法 啟動密令&#xff1a;net start mysql80 停止密令&#xff1a;net stop mysql80 客戶端鏈接方法 注意用系統自帶的命令行工具執行指令需要設置環境在高級系統設置中…

解決使用pnpm安裝時Sharp模塊報錯的方法

在使用pnpm進行項目依賴安裝的過程中&#xff0c;有時候會遇到Sharp模塊報錯的情況。Sharp是一個用于處理圖像的Node.js模塊&#xff0c;但它的安裝可能會因為各種原因而失敗&#xff0c;導致項目無法正常啟動。本文將介紹這個問題的方法。 問題描述 解決方法 在命令行分別輸…

Linux-幫助命令的使用和練習(type、man、help、info詳解)

目錄 5.3.1 type-判斷是否為內部命令 5.3.2 man-查看詳細文檔 5.3.3 help-查看shell內部命令的幫助信息 5.3.4 --help-查看系統外部命令幫助信息 5.3.5 info-查看info格式的幫助指令 5.3.6 /usr/share/doc-存儲軟件包的文檔信息 平時我們看到的命令大多數都可以查看幫助文…

NTP反射放大攻擊

文章目錄 什么是NTPNTP反射放大攻擊解決方案搭建NTP服務器部署服務器端windows NTP命令行本機測試 部署客戶端ntpdatechrony 實驗Python利用腳本 什么是NTP 基于UDP協議的NTP&#xff08;網絡時間協議&#xff09;&#xff1a;使網絡中各個計算機時間同步的一種協議 用途&…