2W字!梳理50道經(jīng)典計(jì)算機(jī)網(wǎng)絡(luò)面試題(收藏版)
[導(dǎo)讀]前言大家好,我是唐唐。金九銀十即將來(lái)臨啦,我梳理了50道計(jì)算機(jī)網(wǎng)絡(luò)面試題,每一道題目都特別經(jīng)典,大廠也非常喜歡問。相信大家看完,會(huì)有新的收獲滴~1.說(shuō)說(shuō)HTTP常用的狀態(tài)碼及其含義?思路:?這道面試題主要考察候選人,是否掌握HTTP狀態(tài)碼這個(gè)基礎(chǔ)知識(shí)點(diǎn)。不管是不是面試需要,我們都...
前言
大家好,我是唐唐。金九銀十即將來(lái)臨啦,我梳理了50道計(jì)算機(jī)網(wǎng)絡(luò)面試題,每一道題目都特別經(jīng)典,大廠也非常喜歡問。相信大家看完,會(huì)有新的收獲滴~1. 說(shuō)說(shuō)HTTP常用的狀態(tài)碼及其含義?
思路:?這道面試題主要考察候選人,是否掌握HTTP狀態(tài)碼這個(gè)基礎(chǔ)知識(shí)點(diǎn)。2. HTTP 常用的請(qǐng)求方式,區(qū)別和用途?
思路:?這道題主要考察候選人,是否掌握HTTP請(qǐng)求方式這個(gè)基礎(chǔ)知識(shí)點(diǎn),我們用得比較多就是GET和POST啦。3. 請(qǐng)簡(jiǎn)單說(shuō)一下你了解的端口及對(duì)應(yīng)的服務(wù)?
4. 說(shuō)下計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)
思路:?這道題主要考察候選人,計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)這個(gè)基礎(chǔ)知識(shí)點(diǎn)。計(jì)算機(jī)網(wǎng)路體系結(jié)構(gòu)呢,有三層:ISO七層模型、TCP/IP四層模型、五層體系結(jié)構(gòu)。大家可以記住這個(gè)圖,如下4.1 ISO七層模型
ISO七層模型是國(guó)際標(biāo)準(zhǔn)化組織(International Organization for Standardization)制定的一個(gè)用于計(jì)算機(jī)或通信系統(tǒng)間互聯(lián)的標(biāo)準(zhǔn)體系。★”
- 應(yīng)用層:網(wǎng)絡(luò)服務(wù)與最終用戶的一個(gè)接口,常見的協(xié)議有:HTTP FTP ?SMTP SNMP DNS.
- 表示層:數(shù)據(jù)的表示、安全、壓縮。,確保一個(gè)系統(tǒng)的應(yīng)用層所發(fā)送的信息可以被另一個(gè)系統(tǒng)的應(yīng)用層讀取。
- 會(huì)話層:建立、管理、終止會(huì)話,對(duì)應(yīng)主機(jī)進(jìn)程,指本地主機(jī)與遠(yuǎn)程主機(jī)正在進(jìn)行的會(huì)話.
- 傳輸層:定義傳輸數(shù)據(jù)的協(xié)議端口號(hào),以及流控和差錯(cuò)校驗(yàn),協(xié)議有TCP UDP.
- 網(wǎng)絡(luò)層:進(jìn)行邏輯地址尋址,實(shí)現(xiàn)不同網(wǎng)絡(luò)之間的路徑選擇,協(xié)議有ICMP IGMP IP等.
- 數(shù)據(jù)鏈路層:在物理層提供比特流服務(wù)的基礎(chǔ)上,建立相鄰結(jié)點(diǎn)之間的數(shù)據(jù)鏈路。
- 物理層:建立、維護(hù)、斷開物理連接。
4.2 TCP/IP 四層模型
★”
- 應(yīng)用層:對(duì)應(yīng)于OSI參考模型的(應(yīng)用層、表示層、會(huì)話層)。
- 傳輸層: 對(duì)應(yīng)OSI的傳輸層,為應(yīng)用層實(shí)體提供端到端的通信功能,保證了數(shù)據(jù)包的順序傳送及數(shù)據(jù)的完整性。
- 網(wǎng)際層:對(duì)應(yīng)于OSI參考模型的網(wǎng)絡(luò)層,主要解決主機(jī)到主機(jī)的通信問題。
- 網(wǎng)絡(luò)接口層:與OSI參考模型的數(shù)據(jù)鏈路層、物理層對(duì)應(yīng)。
4.3 五層體系結(jié)構(gòu)
★”
- 應(yīng)用層:對(duì)應(yīng)于OSI參考模型的(應(yīng)用層、表示層、會(huì)話層)。
- 傳輸層:對(duì)應(yīng)OSI參考模型的的傳輸層
- 網(wǎng)絡(luò)層:對(duì)應(yīng)OSI參考模型的的網(wǎng)絡(luò)層
- 數(shù)據(jù)鏈路層:對(duì)應(yīng)OSI參考模型的的數(shù)據(jù)鏈路層
- 物理層:對(duì)應(yīng)OSI參考模型的的物理層。
5 如何理解HTTP協(xié)議是無(wú)狀態(tài)的
思路:?這道題主要考察候選人,是否理解Http協(xié)議,它為什么是無(wú)狀態(tài)的呢?如何使它有狀態(tài)呢?如何理解無(wú)狀態(tài)這個(gè)詞呢?★當(dāng)瀏覽器第一次發(fā)送請(qǐng)求給服務(wù)器時(shí),服務(wù)器響應(yīng)了;如果同個(gè)瀏覽器發(fā)起第二次請(qǐng)求給服務(wù)器時(shí),它還是會(huì)響應(yīng),但是呢,服務(wù)器不知道你就是剛才的那個(gè)瀏覽器。簡(jiǎn)言之,服務(wù)器不會(huì)去記住你是誰(shuí),所以是無(wú)狀態(tài)協(xié)議。”可以通過一個(gè)生活中的例子,來(lái)更好理解并記住它:有狀態(tài)場(chǎng)景:
- 小紅:今天吃啥子?
- 小明:羅非魚~
- 小紅:味道怎么樣呀?
- 小明:還不錯(cuò),好香。
- 小紅:今天吃啥子?
- 小明:羅非魚~
- 小紅:味道怎么樣呀?
- 小明:?啊?你說(shuō)啥?什么鬼?什么味道怎么樣?
- 小紅:今天吃啥子?
- 小明:羅非魚~
- 小紅:你今天吃的羅非魚,味道怎么樣呀?
- 小明:還不錯(cuò),好香。
6.從瀏覽器地址欄輸入url到顯示主頁(yè)的過程
思路:?這道題主要考察的知識(shí)點(diǎn)是HTTP的請(qǐng)求過程,DNS解析,TCP三次握手,四次揮手這幾個(gè)要點(diǎn),我們都可以講下。- DNS解析,查找域名對(duì)應(yīng)的IP地址。
- 與服務(wù)器通過三次握手,建立TCP連接
- 向服務(wù)器發(fā)送HTTP請(qǐng)求
- 服務(wù)器處理請(qǐng)求,返回網(wǎng)頁(yè)內(nèi)容
- 瀏覽器解析并渲染頁(yè)面
- TCP四次揮手,連接結(jié)束
7. 說(shuō)下HTTP/1.0,1.1,2.0的區(qū)別
思路:?這道題主要考察的知識(shí)點(diǎn)是HTTP幾個(gè)版本的區(qū)別,我們記住HTTP/1.0默認(rèn)是短連接,可以強(qiáng)制開啟,HTTP/1.1默認(rèn)長(zhǎng)連接,HTTP/2.0采用多路復(fù)用就差不多啦。HTTP/1.0- 默認(rèn)使用短連接,每次請(qǐng)求都需要建立一個(gè)TCP連接。它可以設(shè)置
Connection: keep-alive?這個(gè)字段,強(qiáng)制開啟長(zhǎng)連接。
- 引入了持久連接,即TCP連接默認(rèn)不關(guān)閉,可以被多個(gè)請(qǐng)求復(fù)用。
- 分塊傳輸編碼,即服務(wù)端沒產(chǎn)生一塊數(shù)據(jù),就發(fā)送一塊,用”流模式”取代”緩存模式”。
- 管道機(jī)制,即在同一個(gè)TCP連接里面,客戶端可以同時(shí)發(fā)送多個(gè)請(qǐng)求。
- 二進(jìn)制協(xié)議,1.1版本的頭信息是文本(ASCII編碼),數(shù)據(jù)體可以是文本或者二進(jìn)制;2.0中,頭信息和數(shù)據(jù)體都是二進(jìn)制。
- 完全多路復(fù)用,在一個(gè)連接里,客戶端和瀏覽器都可以同時(shí)發(fā)送多個(gè)請(qǐng)求或回應(yīng),而且不用按照順序一一對(duì)應(yīng)。
- 報(bào)頭壓縮,HTTP協(xié)議不帶有狀態(tài),每次請(qǐng)求都必須附上所有信息。Http/2.0引入了頭信息壓縮機(jī)制,使用gzip或compress壓縮后再發(fā)送。
- 服務(wù)端推送,允許服務(wù)器未經(jīng)請(qǐng)求,主動(dòng)向客戶端發(fā)送資源。
8. ?POST和GET有哪些區(qū)別?
思路:?這道題主要考察的知識(shí)點(diǎn)是POST和GET的區(qū)別,可以從數(shù)據(jù)包、編碼方式、請(qǐng)求參數(shù)、收藏為書簽、歷史記錄、安全性等幾方面去回答哈。9. 在交互過程中如果數(shù)據(jù)傳送完了,還不想斷開連接怎么辦,怎么維持?
這個(gè)問題記住keep-alive就好,也就是說(shuō),在HTTP中響應(yīng)體的Connection字段指定為keep-alive即可10. HTTP 如何實(shí)現(xiàn)長(zhǎng)連接?在什么時(shí)候會(huì)超時(shí)?
思路:?這道題實(shí)際上是考察TCP長(zhǎng)連接的知識(shí)點(diǎn),HTTP的長(zhǎng)連接實(shí)質(zhì)是指TCP的長(zhǎng)連接。至于什么時(shí)候超時(shí),我們記住這幾個(gè)參數(shù)如tcp_keepalive_time、tcp_keepalive_probes就好啦什么是HTTP的長(zhǎng)連接?- HTTP分為長(zhǎng)連接和短連接,本質(zhì)上說(shuō)的是TCP的長(zhǎng)短連接。TCP連接是一個(gè)雙向的通道,它是可以保持一段時(shí)間不關(guān)閉的,因此TCP連接才具有真正的長(zhǎng)連接和短連接這一說(shuō)法哈。
- TCP長(zhǎng)連接可以復(fù)用一個(gè)TCP連接,來(lái)發(fā)起多次的HTTP請(qǐng)求,這樣就可以減少資源消耗,比如一次請(qǐng)求HTML,如果是短連接的話,可能還需要請(qǐng)求后續(xù)的JS/CSS。
keep-alive,HTTP/1.0協(xié)議支持,但是是默認(rèn)關(guān)閉的,從HTTP/1.1以后,連接默認(rèn)都是長(zhǎng)連接。在什么時(shí)候會(huì)超時(shí)呢?★”
- HTTP一般會(huì)有httpd守護(hù)進(jìn)程,里面可以設(shè)置keep-alive timeout,當(dāng)tcp連接閑置超過這個(gè)時(shí)間就會(huì)關(guān)閉,也可以在HTTP的header里面設(shè)置超時(shí)時(shí)間
- TCP 的keep-alive包含三個(gè)參數(shù),支持在系統(tǒng)內(nèi)核的net.ipv4里面設(shè)置;當(dāng) TCP 連接之后,閑置了tcp_keepalive_time,則會(huì)發(fā)生偵測(cè)包,如果沒有收到對(duì)方的ACK,那么會(huì)每隔 tcp_keepalive_intvl再發(fā)一次,直到發(fā)送了tcp_keepalive_probes,就會(huì)丟棄該連接。
1.?tcp_keepalive_intvl?=?15
2.?tcp_keepalive_probes?=?5
3.?tcp_keepalive_time?=?1800
11. HTTP 與 HTTPS 的區(qū)別。
思路:?這道題實(shí)際上考察的知識(shí)點(diǎn)是HTTP與HTTPS的區(qū)別,這個(gè)知識(shí)點(diǎn)非常重要,可以從安全性、數(shù)據(jù)是否加密、默認(rèn)端口等這幾個(gè)方面去回答哈。其實(shí),當(dāng)你理解HTTPS的整個(gè)流程,就可以很好回答這個(gè)問題啦。我的答案如下:HTTP,即超文本傳輸協(xié)議,是一個(gè)基于TCP/IP通信協(xié)議來(lái)傳遞明文數(shù)據(jù)的協(xié)議。HTTP會(huì)存在這幾個(gè)問題:- 請(qǐng)求信息是明文傳輸,容易被竊聽截取。
- 沒有驗(yàn)證對(duì)方身份,存在被冒充的風(fēng)險(xiǎn)
- 數(shù)據(jù)的完整性未校驗(yàn),容易被中間人篡改
12 . Https流程是怎樣的?
思路:?這道題實(shí)際上考察的知識(shí)點(diǎn)是HTTPS的工作流程,大家需要回答這幾個(gè)要點(diǎn),公私鑰、數(shù)字證書、加密、對(duì)稱加密、非對(duì)稱加密。- HTTPS = HTTP SSL/TLS,也就是用SSL/TLS對(duì)數(shù)據(jù)進(jìn)行加密和解密,Http進(jìn)行傳輸。
- SSL,即Secure Sockets Layer(安全套接層協(xié)議),是網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議。
- TLS,即Transport Layer Security(安全傳輸層協(xié)議),它是SSL3.0的后續(xù)版本。
- 客戶端發(fā)起Https請(qǐng)求,連接到服務(wù)器的443端口。
- 服務(wù)器必須要有一套數(shù)字證書(證書內(nèi)容有公鑰、證書頒發(fā)機(jī)構(gòu)、失效日期等)。
- 服務(wù)器將自己的數(shù)字證書發(fā)送給客戶端(公鑰在證書里面,私鑰由服務(wù)器持有)。
- 客戶端收到數(shù)字證書之后,會(huì)驗(yàn)證證書的合法性。如果證書驗(yàn)證通過,就會(huì)生成一個(gè)隨機(jī)的對(duì)稱密鑰,用證書的公鑰加密。
- 客戶端將公鑰加密后的密鑰發(fā)送到服務(wù)器。
- 服務(wù)器接收到客戶端發(fā)來(lái)的密文密鑰之后,用自己之前保留的私鑰對(duì)其進(jìn)行非對(duì)稱解密,解密之后就得到客戶端的密鑰,然后用客戶端密鑰對(duì)返回?cái)?shù)據(jù)進(jìn)行對(duì)稱加密,醬紫傳輸?shù)臄?shù)據(jù)都是密文啦。
- 服務(wù)器將加密后的密文返回到客戶端。
- 客戶端收到后,用自己的密鑰對(duì)其進(jìn)行對(duì)稱解密,得到服務(wù)器返回的數(shù)據(jù)。
13. 說(shuō)說(shuō)HTTP的狀態(tài)碼,301和302的區(qū)別?
思路:?這道題考查的知識(shí)點(diǎn),也是HTTP狀態(tài)碼,302和301都有重定向的含義,但是它們也是有區(qū)別的。- 301:(永久性轉(zhuǎn)移)請(qǐng)求的網(wǎng)頁(yè)已被永久移動(dòng)到新位置。服務(wù)器返回此響應(yīng)時(shí),會(huì)自動(dòng)將請(qǐng)求者轉(zhuǎn)到新位置。
- 302:(暫時(shí)性轉(zhuǎn)移)服務(wù)器目前正從不同位置的網(wǎng)頁(yè)響應(yīng)請(qǐng)求,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來(lái)進(jìn)行以后的請(qǐng)求。此代碼與響應(yīng)GET和HEAD請(qǐng)求的301代碼類似,會(huì)自動(dòng)將請(qǐng)求者轉(zhuǎn)到不同的位置。
★當(dāng)一個(gè)網(wǎng)站或者網(wǎng)頁(yè)24—48小時(shí)內(nèi)臨時(shí)移動(dòng)到一個(gè)新的位置,這時(shí)候就要進(jìn)行302跳轉(zhuǎn),打個(gè)比方說(shuō),我有一套房子,但是最近走親戚去親戚家住了,過兩天我還回來(lái)的。而使用301跳轉(zhuǎn)的場(chǎng)景就是之前的網(wǎng)站因?yàn)槟撤N原因需要移除掉,然后要到新的地址訪問,是永久性的,就比如你的那套房子其實(shí)是租的,現(xiàn)在租期到了,你又在另一個(gè)地方找到了房子,之前租的房子不住了。”
14. 說(shuō)說(shuō)什么是數(shù)字簽名?什么是數(shù)字證書?
思路:?這道題考查的知識(shí)點(diǎn),不僅僅是數(shù)字簽名,數(shù)字證書,很可能面試官也會(huì)問你https的原理的,因?yàn)閔ttps原理跟數(shù)字證書有關(guān)的哈,大家需要掌握https原理哦。數(shù)字證書是指在互聯(lián)網(wǎng)通訊中標(biāo)志通訊各方身份信息的一個(gè)數(shù)字認(rèn)證,人們可以在網(wǎng)上用它來(lái)識(shí)別對(duì)方的身份。它的出現(xiàn),是為了避免身份被篡改冒充的。比如Https的數(shù)字證書,就是為了避免公鑰被中間人冒充篡改:數(shù)字證書構(gòu)成- 公鑰和個(gè)人等信息,經(jīng)過Hash摘要算法加密,形成消息摘要;將消息摘要拿到擁有公信力的認(rèn)證中心(CA),用它的私鑰對(duì)消息摘要加密,形成數(shù)字簽名。
- 公鑰和個(gè)人信息、數(shù)字簽名共同構(gòu)成數(shù)字證書。
15. 對(duì)稱加密與非對(duì)稱加密有什么區(qū)別
思路:?這道題考察的知識(shí)點(diǎn)是對(duì)稱加密與非對(duì)稱加密算法,什么是對(duì)稱加密,什么是非對(duì)稱加密呢?對(duì)稱加密:指加密和解密使用同一密鑰,優(yōu)點(diǎn)是運(yùn)算速度較快,缺點(diǎn)是如何安全將密鑰傳輸給另一方。常見的對(duì)稱加密算法有:DES、AES等。16. 說(shuō)說(shuō)DNS的解析過程?
思路:?這道題考察的知識(shí)點(diǎn)是DNS域名解析,http請(qǐng)求的過程,是涉及到DNS域名解析的,這道面試題也挺經(jīng)典的,大家可以看下《圖解HTTP》那本書哈。★DNS,英文全稱是domain name system,域名解析系統(tǒng),是Internet上作為域名和IP相互映射的一個(gè)分布式數(shù)據(jù)庫(kù)。它的作用很明確,就是可以根據(jù)域名查出對(duì)應(yīng)的IP地址。在瀏覽器緩存、本地DNS服務(wù)器、根域名服務(wù)器都是怎么查找的,大家回答的時(shí)候都可以說(shuō)下哈。”DNS的解析過程如下圖:
★”
- 首先會(huì)查找瀏覽器的緩存,看看是否能找到www.baidu.com對(duì)應(yīng)的IP地址,找到就直接返回;否則進(jìn)行下一步。
- 將請(qǐng)求發(fā)往給本地DNS服務(wù)器,如果查找到也直接返回,否則繼續(xù)進(jìn)行下一步;
- 本地DNS服務(wù)器向根域名服務(wù)器發(fā)送請(qǐng)求,根域名服務(wù)器返回負(fù)責(zé)
.com的頂級(jí)域名服務(wù)器的IP地址的列表。- 本地DNS服務(wù)器再向其中一個(gè)負(fù)責(zé)
.com的頂級(jí)域名服務(wù)器發(fā)送一個(gè)請(qǐng)求,返回負(fù)責(zé).baidu的權(quán)威域名服務(wù)器的IP地址列表。- 本地DNS服務(wù)器再向其中一個(gè)權(quán)威域名服務(wù)器發(fā)送一個(gè)請(qǐng)求,返回www.baidu.com所對(duì)應(yīng)的IP地址。
17. 什么是CSRF攻擊,如何避免
思路:?這道題考察的知識(shí)點(diǎn)是CSRF攻擊,它是屬于網(wǎng)絡(luò)安全這塊的知識(shí)點(diǎn),還有Xss攻擊、SQL注入、DDoS等這些常見的網(wǎng)絡(luò)攻擊,我們都需要知道攻擊的流程哈。什么是CSRF 攻擊?★CSRF,跨站請(qǐng)求偽造(英文全稱是Cross-site request forgery),是一種挾制用戶在當(dāng)前已登錄的Web應(yīng)用程序上執(zhí)行非本意的操作的攻擊方法。”CSRF是如何攻擊的呢?來(lái)看一個(gè)來(lái)自百度百科的例子哈:
- Tom 登陸銀行,沒有退出,瀏覽器包含了Tom在銀行的身份認(rèn)證信息。
- 黑客Jerry將偽造的轉(zhuǎn)賬請(qǐng)求,包含在在帖子
- Tom在銀行網(wǎng)站保持登陸的情況下,瀏覽帖子
- 將偽造的轉(zhuǎn)賬請(qǐng)求連同身份認(rèn)證信息,發(fā)送到銀行網(wǎng)站
- 銀行網(wǎng)站看到身份認(rèn)證信息,以為就是Tom的合法操作,最后造成Tom資金損失。
- 檢查Referer字段。
- 添加校驗(yàn)token。
18. 聊聊五層計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)中,每一層對(duì)應(yīng)的網(wǎng)絡(luò)協(xié)議有哪些?
為了大家方便記憶,我還是畫個(gè)思維導(dǎo)圖吧,如下:19. 說(shuō)說(shuō) WebSocket與socket的區(qū)別
思路:?這是一個(gè)比較基礎(chǔ)的知識(shí)點(diǎn),經(jīng)常有小伙伴會(huì)搞混。- Socket其實(shí)就是等于IP地址 端口 協(xié)議。
★具體來(lái)說(shuō),Socket是一套標(biāo)準(zhǔn),它完成了對(duì)TCP/IP的高度封裝,屏蔽網(wǎng)絡(luò)細(xì)節(jié),以方便開發(fā)者更好地進(jìn)行網(wǎng)絡(luò)編程。”
- WebSocket是一個(gè)持久化的協(xié)議,它是伴隨H5而出的協(xié)議,用來(lái)解決http不支持持久化連接的問題。
- Socket一個(gè)是網(wǎng)編編程的標(biāo)準(zhǔn)接口,而WebSocket則是應(yīng)用層通信協(xié)議。
20. 什么是DoS、DDoS、DRDoS攻擊?
思路:?這是涉及網(wǎng)絡(luò)安全的一個(gè)知識(shí)點(diǎn),DDos還會(huì)挺常見的,如SYN Flood。★”
- DOS: (Denial of Service),翻譯過來(lái)就是拒絕服務(wù),一切能引起DOS行為的攻擊都被稱為DOS攻擊。最常見的DoS攻擊就有計(jì)算機(jī)網(wǎng)絡(luò)寬帶攻擊、連通性攻擊。
- DDoS: (Distributed Denial of Service),翻譯過來(lái)是分布式拒絕服務(wù)。是指處于不同位置的多個(gè)攻擊者同時(shí)向一個(gè)或幾個(gè)目標(biāo)發(fā)動(dòng)攻擊,或者一個(gè)攻擊者控制了位于不同位置的多臺(tái)機(jī)器并利用這些機(jī)器對(duì)受害者同時(shí)實(shí)施攻擊。常見的DDos有SYN Flood、Ping of Death、ACK Flood、UDP Flood等。
- DRDoS: (Distributed Reflection Denial of Service),中文是分布式反射拒絕服務(wù),該方式靠的是發(fā)送大量帶有被害者IP地址的數(shù)據(jù)包給攻擊主機(jī),然后攻擊主機(jī)對(duì)IP地址源做出大量回應(yīng),從而形成拒絕服務(wù)攻擊。
21. 什么是XSS攻擊,如何避免?
思路:?XSS攻擊也是比較常見,XSS,叫跨站腳本攻擊(Cross-Site Scripting),因?yàn)闀?huì)與層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,因此有人將跨站腳本攻擊縮寫為XSS。它指的是惡意攻擊者往Web頁(yè)面里插入惡意html代碼,當(dāng)用戶瀏覽該頁(yè)之時(shí),嵌入其中Web里面的html代碼會(huì)被執(zhí)行,從而達(dá)到惡意攻擊用戶的特殊目的。XSS攻擊一般分三種類型:存儲(chǔ)型 、反射型 、DOM型XSS21.1 XSS是如何攻擊的呢?
拿反射型舉個(gè)例子吧,流程圖如下:21.2 如何解決XSS攻擊問題?
- 對(duì)輸入進(jìn)行過濾,過濾標(biāo)簽等,只允許合法值。
- HTML轉(zhuǎn)義
- 對(duì)于鏈接跳轉(zhuǎn),如
?等,要校驗(yàn)內(nèi)容,禁止以script開頭的非法鏈接。 - 限制輸入長(zhǎng)度
22. Http請(qǐng)求的過程與原理
思路:?HTTP請(qǐng)求,一個(gè)非常非常基礎(chǔ)的知識(shí)點(diǎn),一定需要掌握的。其實(shí)覺得跟瀏覽器地址欄輸入url到顯示主頁(yè)這道題有點(diǎn)類似。我的答案如下:HTTP是一個(gè)基于TCP/IP協(xié)議來(lái)傳遞數(shù)據(jù)的超文本傳輸協(xié)議,傳輸?shù)臄?shù)據(jù)類型有HTML,圖片等。以訪問百度有例子,看下一次Http的請(qǐng)求過程吧- 客戶端進(jìn)行DNS域名解析,得到對(duì)應(yīng)的IP地址
- 根據(jù)這個(gè)IP,找到對(duì)應(yīng)的服務(wù)器建立連接(三次握手)
- 建立TCP連接后發(fā)起HTTP請(qǐng)求(一個(gè)完整的http請(qǐng)求報(bào)文)
- 服務(wù)器響應(yīng)HTTP請(qǐng)求,客戶端得到html代碼
- 客戶端解析html代碼,用html代碼中的資源(如js,css,圖片等等)渲染頁(yè)面。
- 服務(wù)器關(guān)閉TCP連接(四次揮手)
23. ?forward和redirect的區(qū)別?
思路:?這道題有點(diǎn)偏Java web方向的。以前記得剛出來(lái)實(shí)習(xí)找工作的時(shí)候,面試官可喜歡問這道題啦,當(dāng)時(shí)我記的答案就是,forward是轉(zhuǎn)發(fā),redirect是重定向。我的答案如下:★舉個(gè)通俗的例子:”
- 直接轉(zhuǎn)發(fā)方式(Forward)?,客戶端和瀏覽器只發(fā)出一次請(qǐng)求,Servlet、HTML、JSP或其它信息資源,由第二個(gè)信息資源響應(yīng)該請(qǐng)求,在請(qǐng)求對(duì)象request中,保存的對(duì)象對(duì)于每個(gè)信息資源是共享的。
- 間接轉(zhuǎn)發(fā)方式(Redirect)?實(shí)際是兩次HTTP請(qǐng)求,服務(wù)器端在響應(yīng)第一次請(qǐng)求的時(shí)候,讓瀏覽器再向另外一個(gè)URL發(fā)出請(qǐng)求,從而達(dá)到轉(zhuǎn)發(fā)的目的。
★看下這兩個(gè)圖,可以更容易理解一些:”
- 直接轉(zhuǎn)發(fā)就相當(dāng)于:“A找B借錢,B說(shuō)沒有,B去找C借,借到借不到都會(huì)把消息傳遞給A”;
- 間接轉(zhuǎn)發(fā)就相當(dāng)于:"A找B借錢,B說(shuō)沒有,讓A去找C借"。**
- Redirect 的工作原理:
- forward 的工作原理
24. 聊聊SQL注入?
思路:?SQL注入是最經(jīng)典的安全問題。無(wú)論你是前端開發(fā)還是后端開發(fā),都必須掌握的。★SQL注入是一種代碼注入技術(shù),一般被應(yīng)用于攻擊web應(yīng)用程序。它通過在web應(yīng)用接口傳入一些特殊參數(shù)字符,來(lái)欺騙應(yīng)用服務(wù)器,執(zhí)行惡意的SQL命令,以達(dá)到非法獲取系統(tǒng)信息的目的。它目前是黑客對(duì)數(shù)據(jù)庫(kù)進(jìn)行攻擊的最常用手段之一。”
24.1 SQL注入是如何攻擊的?
舉個(gè)常見的業(yè)務(wù)場(chǎng)景:在web表單搜索框輸入員工名字,然后后臺(tái)查詢出對(duì)應(yīng)名字的員工。name?=?"田螺";?//前端傳過來(lái)的
SQL=?"select?*?from?staff?where?name="? ?name;??//根據(jù)前端傳過來(lái)的name參數(shù),查詢數(shù)據(jù)庫(kù)員工表staff
因?yàn)镾QL是直接拼接的,如果我們完全信任前端傳的參數(shù)的話。假如前端傳這么一個(gè)參數(shù)時(shí)'' or '1'='1',SQL就變成醬紫的啦。select?*?from?staff?where?name=''?or?'1'='1';
這個(gè)SQL會(huì)把所有的員工信息全都查出來(lái)了,醬紫就請(qǐng)求用戶已經(jīng)越權(quán)啦。請(qǐng)求者可以獲取所有員工的信息,信息已經(jīng)暴露了啦。24.2 如何預(yù)防SQL注入問題
1). 使用#{}而不是 ${}在MyBatis中,使用#{}而不是${},可以很大程度防止sql注入。- 因?yàn)?code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;font-size: 14px;border-radius: 4px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;">#{}是一個(gè)參數(shù)占位符,對(duì)于字符串類型,會(huì)自動(dòng)加上"",其他類型不加。由于Mybatis采用預(yù)編譯,其后的參數(shù)不會(huì)再進(jìn)行SQL編譯,所以一定程度上防止SQL注入。
${}是一個(gè)簡(jiǎn)單的字符串替換,字符串是什么,就會(huì)解析成什么,存在SQL注入風(fēng)險(xiǎn)
union,or等數(shù)據(jù)庫(kù)關(guān)鍵詞4). 適當(dāng)?shù)臋?quán)限控制在你查詢信息時(shí),先校驗(yàn)下當(dāng)前用戶是否有這個(gè)權(quán)限。比如說(shuō),實(shí)現(xiàn)代碼的時(shí)候,可以讓用戶多傳一個(gè)企業(yè)Id什么的,或者獲取當(dāng)前用戶的session信息等,在查詢前,先校驗(yàn)一下當(dāng)前用戶是否是這個(gè)企業(yè)下的等等,是的話才有這個(gè)查詢員工的權(quán)限。25. Session和Cookie的區(qū)別。
我們先來(lái)看Session和Cookie的概念吧:- Cookie是保存在客戶端的一小塊文本串的數(shù)據(jù)??蛻舳讼蚍?wù)器發(fā)起請(qǐng)求時(shí),服務(wù)端會(huì)向客戶端發(fā)送一個(gè)Cookie,客戶端就把Cookie保存起來(lái)。在客戶端下次向同一服務(wù)器再發(fā)起請(qǐng)求時(shí),Cookie被攜帶發(fā)送到服務(wù)器。服務(wù)器就是根據(jù)這個(gè)Cookie來(lái)確認(rèn)身份的。
- session指的就是服務(wù)器和客戶端一次會(huì)話的過程。Session利用Cookie進(jìn)行信息處理的,當(dāng)用戶首先進(jìn)行了請(qǐng)求后,服務(wù)端就在用戶瀏覽器上創(chuàng)建了一個(gè)Cookie,當(dāng)這個(gè)Session結(jié)束時(shí),其實(shí)就是意味著這個(gè)Cookie就過期了。Session對(duì)象存儲(chǔ)著特定用戶會(huì)話所需的屬性及配置信息。
★”
- 用戶第一次請(qǐng)求服務(wù)器時(shí),服務(wù)器根據(jù)用戶提交的信息,創(chuàng)建對(duì)應(yīng)的Session,請(qǐng)求返回時(shí)將此Session的唯一標(biāo)識(shí)信息SessionID返回給瀏覽器,瀏覽器接收到服務(wù)器返回的SessionID信息后,會(huì)將此信息存入Cookie中,同時(shí)Cookie記錄此SessionID是屬于哪個(gè)域名。
- 當(dāng)用戶第二次訪問服務(wù)器時(shí),請(qǐng)求會(huì)自動(dòng)判斷此域名下是否存在Cookie信息,如果存在,則自動(dòng)將Cookie信息也發(fā)送給服務(wù)端,服務(wù)端會(huì)從Cookie中獲取SessionID,再根據(jù) SessionID查找對(duì)應(yīng)的 Session信息,如果沒有找到,說(shuō)明用戶沒有登錄或者登錄失效,如果找到Session證明用戶已經(jīng)登錄可執(zhí)行后面操作。
26. IP地址有哪些分類?
一般可以這么認(rèn)為,IP地址=網(wǎng)絡(luò)號(hào) 主機(jī)號(hào)。- 網(wǎng)絡(luò)號(hào):它標(biāo)志主機(jī)所連接的網(wǎng)絡(luò)地址表示屬于互聯(lián)網(wǎng)的哪一個(gè)網(wǎng)絡(luò)。
- 主機(jī)號(hào):它標(biāo)志主機(jī)地址表示其屬于該網(wǎng)絡(luò)中的哪一臺(tái)主機(jī)。
- A類地址(1~126):以0開頭,網(wǎng)絡(luò)號(hào)占前8位,主機(jī)號(hào)占后面24位。
- B類地址(128~191):以10開頭,網(wǎng)絡(luò)號(hào)占前16位,主機(jī)號(hào)占后面16位。
- C類地址(192~223):以110開頭,網(wǎng)絡(luò)號(hào)占前24位,主機(jī)號(hào)占后面8位。
- D類地址(224~239):以1110開頭,保留位多播地址。
- E類地址(240~255):以11110開頭,保留位為將來(lái)使用
27. 說(shuō)下ARP 協(xié)議的工作過程?
ARP 協(xié)議協(xié)議,Address Resolution Protocol,地址解析協(xié)議,它是用于實(shí)現(xiàn)IP地址到MAC地址的映射。★”
- 首先,每臺(tái)主機(jī)都會(huì)在自己的ARP緩沖區(qū)中建立一個(gè)ARP列表,以表示IP地址和MAC地址的對(duì)應(yīng)關(guān)系。
- 當(dāng)源主機(jī)需要將一個(gè)數(shù)據(jù)包要發(fā)送到目的主機(jī)時(shí),會(huì)首先檢查自己的ARP列表,是否存在該IP地址對(duì)應(yīng)的MAC地址;如果有﹐就直接將數(shù)據(jù)包發(fā)送到這個(gè)MAC地址;如果沒有,就向本地網(wǎng)段發(fā)起一個(gè)ARP請(qǐng)求的廣播包,查詢此目的主機(jī)對(duì)應(yīng)的MAC地址。此ARP請(qǐng)求的數(shù)據(jù)包里,包括源主機(jī)的IP地址、硬件地址、以及目的主機(jī)的IP地址。
- 網(wǎng)絡(luò)中所有的主機(jī)收到這個(gè)ARP請(qǐng)求后,會(huì)檢查數(shù)據(jù)包中的目的IP是否和自己的IP地址一致。如果不相同,就會(huì)忽略此數(shù)據(jù)包;如果相同,該主機(jī)首先將發(fā)送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已經(jīng)存在該IP的信息,則將其覆蓋,然后給源主機(jī)發(fā)送一個(gè) ARP響應(yīng)數(shù)據(jù)包,告訴對(duì)方自己是它需要查找的MAC地址。
- 源主機(jī)收到這個(gè)ARP響應(yīng)數(shù)據(jù)包后,將得到的目的主機(jī)的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息開始數(shù)據(jù)的傳輸。如果源主機(jī)一直沒有收到ARP響應(yīng)數(shù)據(jù)包,表示ARP查詢失敗。
28. 有了IP地址,為什么還要用MAC地址?
★”
- 簡(jiǎn)而言之,標(biāo)識(shí)網(wǎng)絡(luò)中的一臺(tái)計(jì)算機(jī),比較常用的就是IP地址和MAC地址,但計(jì)算機(jī)的IP地址可由用戶自行更改,管理起來(lái)就相對(duì)困難,而MAC地址不可更改,所以一般會(huì)把IP地址和MAC地址組合起來(lái)使用。
- 那只使用MAC地址不用IP地址行不行呢?不行的!因?yàn)樽钤缇褪荕AC地址先出現(xiàn)的,并且當(dāng)時(shí)并不用IP地址,只用MAC地址,后來(lái)隨著網(wǎng)絡(luò)中的設(shè)備越來(lái)越多,整個(gè)路由過程越來(lái)越復(fù)雜,便出現(xiàn)了子網(wǎng)的概念。對(duì)于目的地址在其他子網(wǎng)的數(shù)據(jù)包,路由只需要將數(shù)據(jù)包送到那個(gè)子網(wǎng)即可。
- 那為什么要用IP地址呢?是因?yàn)镮P地址是和地域相關(guān)的,對(duì)于同一個(gè)子網(wǎng)上的設(shè)備,IP地址的前綴都是一樣的,這樣路由器通過IP地址的前綴就知道設(shè)備在在哪個(gè)子網(wǎng)上了,而只用MAC地址的話,路由器則需要記住每個(gè)MAC地址在哪個(gè)子網(wǎng),這需要路由器有極大的存儲(chǔ)空間,是無(wú)法實(shí)現(xiàn)的。
- IP地址可以比作為地址,MAC地址為收件人,在一次通信過程中,兩者是缺一不可的。
29. TCP 和 UDP 分別對(duì)應(yīng)的常見應(yīng)用層協(xié)議有哪些?
基于TCP的應(yīng)用層協(xié)議有:HTTP、FTP、SMTP、TELNET、SSH- HTTP:HyperText Transfer Protocol(超文本傳輸協(xié)議),默認(rèn)端口80
- FTP: File Transfer Protocol (文件傳輸協(xié)議), 默認(rèn)端口(20用于傳輸數(shù)據(jù),21用于傳輸控制信息)
- SMTP: Simple Mail Transfer Protocol (簡(jiǎn)單郵件傳輸協(xié)議) ,默認(rèn)端口25
- TELNET: Teletype over the Network (網(wǎng)絡(luò)電傳), 默認(rèn)端口23
- SSH:Secure Shell(安全外殼協(xié)議),默認(rèn)端口 22
- DNS?: Domain Name Service (域名服務(wù)),默認(rèn)端口 53
- TFTP: Trivial File Transfer Protocol (簡(jiǎn)單文件傳輸協(xié)議),默認(rèn)端口69
- SNMP:Simple Network Management Protocol(簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議),通過UDP端口161接收,只有Trap信息采用UDP端口162。
30. 聊聊?;钣?jì)時(shí)器的作用
除時(shí)間等待計(jì)時(shí)器外,TCP 還有一個(gè)保活計(jì)時(shí)器(keepalive timer)。設(shè)想這樣的場(chǎng)景:客戶已主動(dòng)與服務(wù)器建立了TCP連接。但后來(lái)客戶端的主機(jī)突然發(fā)生故障。顯然,服務(wù)器以后就不能再收到客戶端發(fā)來(lái)的數(shù)據(jù)。因此,應(yīng)當(dāng)有措施使服務(wù)器不要再白白等待下去。這就需要使用保活計(jì)時(shí)器了。服務(wù)器每收到一次客戶的數(shù)據(jù),就重新設(shè)置?;钣?jì)時(shí)器,時(shí)間的設(shè)置通常是兩個(gè)小時(shí)。若兩個(gè)小時(shí)都沒有收到客戶端的數(shù)據(jù),服務(wù)端就發(fā)送一個(gè)探測(cè)報(bào)文段,以后則每隔 75秒鐘發(fā)送一次。若連續(xù)發(fā)送10個(gè)探測(cè)報(bào)文段后仍然無(wú)客戶端的響應(yīng),服務(wù)端就認(rèn)為客戶端出了故障,接著就關(guān)閉這個(gè)連接。31. 如果服務(wù)器出現(xiàn)了大量CLOSE_WAIT狀態(tài)如何解決。
我們先來(lái)復(fù)習(xí)下TCP的四次揮手- 服務(wù)器端收到客戶端發(fā)送的
FIN后,TCP協(xié)議棧就會(huì)自動(dòng)發(fā)送ACK,接著進(jìn)入CLOSE_WAIT狀態(tài)。 - 但是如果服務(wù)器端不執(zhí)行socket的close()操作,那么就沒法進(jìn)入LAST_ACK,導(dǎo)致大量連接處于CLOSE_WAIT狀態(tài)
- 所以,如果服務(wù)器出現(xiàn)了大量CLOSE_WAIT狀態(tài),一般是程序Bug,或者關(guān)閉socket不及時(shí)。
32. URI和URL的區(qū)別
- URI,全稱是Uniform Resource Identifier),中文翻譯是統(tǒng)一資源標(biāo)志符,主要作用是唯一標(biāo)識(shí)一個(gè)資源。
- URL,全稱是Uniform Resource Location),中文翻譯是統(tǒng)一資源定位符,主要作用是提供資源的路徑。打個(gè)經(jīng)典比喻吧,URI像是身份證,可以唯一標(biāo)識(shí)一個(gè)人,而URL更像一個(gè)住址,可以通過URL找到這個(gè)人。
33. ICMP協(xié)議的功能
ICMP,Internet Control Message Protocol ,Internet控制消息協(xié)議。- ICMP協(xié)議是一種面向無(wú)連接的協(xié)議,用于傳輸出錯(cuò)報(bào)告控制信息。
- 它是一個(gè)非常重要的協(xié)議,它對(duì)于網(wǎng)絡(luò)安全具有極其重要的意義。它屬于網(wǎng)絡(luò)層協(xié)議,主要用于在主機(jī)與路由器之間傳遞控制信息,包括報(bào)告錯(cuò)誤、交換受限控制和狀態(tài)信息等。
- 當(dāng)遇到IP數(shù)據(jù)無(wú)法訪問目標(biāo)、IP路由器無(wú)法按當(dāng)前的傳輸速率轉(zhuǎn)發(fā)數(shù)據(jù)包等情況時(shí),會(huì)自動(dòng)發(fā)送ICMP消息。
35. 說(shuō)下ping的原理
★ping,Packet Internet Groper,是一種因特網(wǎng)包探索器,用于測(cè)試網(wǎng)絡(luò)連接量的程序。Ping是工作在TCP/IP網(wǎng)絡(luò)體系結(jié)構(gòu)中應(yīng)用層的一個(gè)服務(wù)命令, 主要是向特定的目的主機(jī)發(fā)送ICMP(Internet Control Message Protocol 因特網(wǎng)報(bào)文控制協(xié)議)?請(qǐng)求報(bào)文,測(cè)試目的站是否可達(dá)及了解其有關(guān)狀態(tài)”一般來(lái)說(shuō),ping可以用來(lái)檢測(cè)網(wǎng)絡(luò)通不通。它是基于
ICMP協(xié)議工作的。假設(shè)機(jī)器A?ping機(jī)器B,工作過程如下:- ping通知系統(tǒng),新建一個(gè)固定格式的ICMP請(qǐng)求數(shù)據(jù)包
- ICMP協(xié)議,將該數(shù)據(jù)包和目標(biāo)機(jī)器B的IP地址打包,一起轉(zhuǎn)交給IP協(xié)議層
- IP層協(xié)議將本機(jī)IP地址為源地址,機(jī)器B的IP地址為目標(biāo)地址,加上一些其他的控制信息,構(gòu)建一個(gè)IP數(shù)據(jù)包
- 先獲取目標(biāo)機(jī)器B的MAC地址。
- 數(shù)據(jù)鏈路層構(gòu)建一個(gè)數(shù)據(jù)幀,目的地址是IP層傳過來(lái)的MAC地址,源地址是本機(jī)的MAC地址
- 機(jī)器B收到后,對(duì)比目標(biāo)地址,和自己本機(jī)的MAC地址是否一致,符合就處理返回,不符合就丟棄。
- 根據(jù)目的主機(jī)返回的ICMP回送回答報(bào)文中的時(shí)間戳,從而計(jì)算出往返時(shí)間
- 最終顯示結(jié)果有這幾項(xiàng):發(fā)送到目的主機(jī)的IP地址、發(fā)送





