1. http的長(zhǎng)連接和短連接
- 短連接:
短連接是指每次客戶端請(qǐng)求與服務(wù)器響應(yīng)完成后,連接就會(huì)關(guān)閉。也就是說,每次請(qǐng)求都需要重新建立連接,完成一次請(qǐng)求后立即關(guān)閉連接。這意味著每個(gè)HTTP請(qǐng)求都需要經(jīng)歷連接建立、數(shù)據(jù)傳輸和連接關(guān)閉的過程。
短連接的特點(diǎn)包括:
- 每個(gè)請(qǐng)求都需要建立和關(guān)閉連接,增加了網(wǎng)絡(luò)開銷和延遲。
- 服務(wù)器需要為每個(gè)請(qǐng)求分配資源,包括建立和銷毀連接的開銷。
- 適用于一次性請(qǐng)求和響應(yīng)較少的場(chǎng)景,如簡(jiǎn)單的網(wǎng)頁(yè)瀏覽。
- 長(zhǎng)連接(Keep-Alive):
長(zhǎng)連接是指客戶端和服務(wù)器之間建立一次連接后,可以在該連接上發(fā)送多個(gè)請(qǐng)求和響應(yīng)。在長(zhǎng)連接中,連接在完成一次請(qǐng)求和響應(yīng)后不會(huì)立即關(guān)閉,而是保持打開狀態(tài),以便后續(xù)的請(qǐng)求和響應(yīng)可以在同一個(gè)連接上進(jìn)行。
長(zhǎng)連接的特點(diǎn)包括:
- 避免了頻繁建立和關(guān)閉連接的開銷,減少了網(wǎng)絡(luò)延遲。
- 同一個(gè)連接上可以發(fā)送多個(gè)請(qǐng)求和接收多個(gè)響應(yīng),提高了性能和效率。
- 需要服務(wù)器和客戶端都支持長(zhǎng)連接,否則會(huì)被當(dāng)作短連接處理。
在HTTP/1.0中,短連接是默認(rèn)的連接方式,每次請(qǐng)求都會(huì)建立新的連接。而在HTTP/1.1及以后的版本中,長(zhǎng)連接成為默認(rèn)的連接方式,可以在請(qǐng)求頭中使用"Connection: keep-alive"來指定使用長(zhǎng)連接
2. RPC協(xié)議和 Http協(xié)議區(qū)別
- 抽象層次:
- RPC協(xié)議:RPC協(xié)議是一種更高層次的協(xié)議,它允許應(yīng)用程序之間進(jìn)行遠(yuǎn)程過程調(diào)用。在RPC中,客戶端可以像調(diào)用本地函數(shù)一樣調(diào)用遠(yuǎn)程服務(wù)器上的函數(shù),而無需了解底層的通信細(xì)節(jié)。
- HTTP協(xié)議:HTTP協(xié)議是一種應(yīng)用層協(xié)議,用于在客戶端和服務(wù)器之間傳輸超文本數(shù)據(jù)。它是一種無狀態(tài)的協(xié)議,客戶端通過發(fā)送請(qǐng)求,服務(wù)器通過發(fā)送響應(yīng)來完成通信。
- 數(shù)據(jù)格式:
- RPC協(xié)議:RPC協(xié)議通常使用二進(jìn)制格式對(duì)數(shù)據(jù)進(jìn)行編碼和傳輸。這種格式效率較高,可以減少數(shù)據(jù)大小和傳輸時(shí)間。常見的RPC協(xié)議包括 gRPC、Thrift等。
- HTTP協(xié)議:HTTP協(xié)議使用文本格式進(jìn)行數(shù)據(jù)編碼和傳輸,常見的格式是JSON、XML或表單數(shù)據(jù)。文本格式易于閱讀和調(diào)試,但相對(duì)于二進(jìn)制格式來說,占用更多的網(wǎng)絡(luò)帶寬和傳輸時(shí)間。
- 通信方式:
- RPC協(xié)議:RPC協(xié)議通常采用雙向通信方式,客戶端發(fā)起請(qǐng)求,服務(wù)器返回響應(yīng)??蛻舳撕头?wù)器之間可以進(jìn)行雙向數(shù)據(jù)傳輸,從而支持更復(fù)雜的通信模式。
- HTTP協(xié)議:HTTP協(xié)議通常采用客戶端-服務(wù)器模式,客戶端向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器返回響應(yīng)。在標(biāo)準(zhǔn)的HTTP中,服務(wù)器不能主動(dòng)向客戶端發(fā)送數(shù)據(jù),需要客戶端主動(dòng)發(fā)送請(qǐng)求。
- 應(yīng)用場(chǎng)景:
- RPC協(xié)議:RPC協(xié)議通常用于構(gòu)建分布式系統(tǒng)和服務(wù)間的通信。它可以用于跨語(yǔ)言和跨平臺(tái)的通信,支持高性能和高并發(fā)的請(qǐng)求處理。RPC協(xié)議在微服務(wù)架構(gòu)中被廣泛應(yīng)用。
- HTTP協(xié)議:HTTP協(xié)議通常用于Web應(yīng)用程序的通信。它是基于互聯(lián)網(wǎng)的標(biāo)準(zhǔn)協(xié)議,用于在客戶端和服務(wù)器之間傳輸超文本數(shù)據(jù)。HTTP協(xié)議廣泛用于Web瀏覽器和服務(wù)器之間的通信,支持傳輸各種類型的內(nèi)容。
3. Socket?創(chuàng)建客戶端和服務(wù)器的交互步驟
-
服務(wù)器端創(chuàng)建Socket:
- 服務(wù)器應(yīng)用程序首先創(chuàng)建一個(gè)服務(wù)器Socket對(duì)象,綁定到特定的IP地址和端口號(hào)上。
- 使用
socket()
函數(shù)創(chuàng)建Socket對(duì)象,并使用bind()
函數(shù)將其綁定到服務(wù)器的IP地址和端口號(hào)上。
-
服務(wù)器端監(jiān)聽連接請(qǐng)求:
- 服務(wù)器Socket對(duì)象調(diào)用
listen()
函數(shù)開始監(jiān)聽來自客戶端的連接請(qǐng)求。 - 服務(wù)器處于等待連接的狀態(tài),等待客戶端發(fā)起連接請(qǐng)求。
- 服務(wù)器Socket對(duì)象調(diào)用
-
客戶端創(chuàng)建Socket并連接到服務(wù)器:
- 客戶端應(yīng)用程序創(chuàng)建一個(gè)客戶端Socket對(duì)象。
- 使用
socket()
函數(shù)創(chuàng)建Socket對(duì)象。 - 使用
connect()
函數(shù)將客戶端Socket連接到服務(wù)器的IP地址和端口號(hào)。
-
服務(wù)器端接受連接請(qǐng)求:
- 服務(wù)器Socket對(duì)象調(diào)用
accept()
函數(shù)接受客戶端的連接請(qǐng)求。 - 當(dāng)客戶端發(fā)起連接請(qǐng)求時(shí),服務(wù)器調(diào)用
accept()
函數(shù)接受連接,并創(chuàng)建一個(gè)新的Socket對(duì)象來處理與該客戶端的通信。
- 服務(wù)器Socket對(duì)象調(diào)用
-
客戶端和服務(wù)器進(jìn)行數(shù)據(jù)交換:
- 客戶端和服務(wù)器之間可以使用
send()
和recv()
等函數(shù)進(jìn)行數(shù)據(jù)交換。 - 客戶端使用
send()
函數(shù)將數(shù)據(jù)發(fā)送給服務(wù)器。 - 服務(wù)器使用
recv()
函數(shù)接收客戶端發(fā)送的數(shù)據(jù)。 - 服務(wù)器使用
send()
函數(shù)將響應(yīng)數(shù)據(jù)發(fā)送給客戶端。 - 客戶端使用
recv()
函數(shù)接收服務(wù)器發(fā)送的響應(yīng)數(shù)據(jù)。
- 客戶端和服務(wù)器之間可以使用
-
關(guān)閉連接:
- 當(dāng)通信結(jié)束后,客戶端和服務(wù)器都可以調(diào)用
close()
函數(shù)關(guān)閉Socket連接。
- 當(dāng)通信結(jié)束后,客戶端和服務(wù)器都可以調(diào)用
代碼示例:
import socket # 創(chuàng)建服務(wù)器Socket對(duì)象 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 綁定IP地址和端口號(hào) server_address = ('localhost', 8888) server_socket.bind(server_address) # 監(jiān)聽連接請(qǐng)求 server_socket.listen(1) print('服務(wù)器已啟動(dòng),等待連接...') # 接受客戶端連接 client_socket, client_address = server_socket.accept() print('客戶端已連接:', client_address) # 接收客戶端發(fā)送的數(shù)據(jù) data = client_socket.recv(1024) print('接收到的數(shù)據(jù):', data.decode()) # 發(fā)送響應(yīng)數(shù)據(jù)給客戶端 response = 'Hello, client!' client_socket.send(response.encode()) # 關(guān)閉連接 client_socket.close() server_socket.close()
4.?路由器和交換機(jī)分別在OSI 7層模型中的哪一層
路由器位于OSI模型的第三層,即網(wǎng)絡(luò)層。它在網(wǎng)絡(luò)層上操作,負(fù)責(zé)根據(jù)目標(biāo)IP地址進(jìn)行數(shù)據(jù)包的轉(zhuǎn)發(fā)和路由選擇,以便將數(shù)據(jù)包從源主機(jī)發(fā)送到目標(biāo)主機(jī),跨越不同的網(wǎng)絡(luò)。路由器通過查看數(shù)據(jù)包的目標(biāo)IP地址和路由表來做出轉(zhuǎn)發(fā)決策,以保證數(shù)據(jù)包的正確傳遞。
交換機(jī)位于OSI模型的第二層,即數(shù)據(jù)鏈路層。它在數(shù)據(jù)鏈路層上操作,主要負(fù)責(zé)局域網(wǎng)內(nèi)部的數(shù)據(jù)幀轉(zhuǎn)發(fā)和交換。交換機(jī)根據(jù)數(shù)據(jù)幀中的目標(biāo)MAC地址,通過學(xué)習(xí)和維護(hù)交換表(也稱為MAC表)來決定將數(shù)據(jù)幀轉(zhuǎn)發(fā)到哪個(gè)端口,以實(shí)現(xiàn)局域網(wǎng)內(nèi)部的高效通信。
5.?正向代理與反向代理
正向代理:
正向代理是位于客戶端和目標(biāo)服務(wù)器之間的代理服務(wù)器。當(dāng)客戶端發(fā)送請(qǐng)求時(shí),請(qǐng)求首先被發(fā)送到正向代理服務(wù)器,然后由代理服務(wù)器轉(zhuǎn)發(fā)請(qǐng)求到目標(biāo)服務(wù)器,并將目標(biāo)服務(wù)器的響應(yīng)返回給客戶端。客戶端通常不直接與目標(biāo)服務(wù)器通信,而是通過正向代理服務(wù)器中轉(zhuǎn)。
正向代理的主要功能如下:
隱藏客戶端的真實(shí)IP地址,提供匿名性。
訪問受限資源:通過正向代理可以繞過網(wǎng)絡(luò)訪問限制,訪問被封鎖的資源。
緩存:代理服務(wù)器可以緩存目標(biāo)服務(wù)器的響應(yīng),提高客戶端的訪問速度。
安全性:代理服務(wù)器可以提供額外的安全層,例如過濾惡意請(qǐng)求或?qū)嵤┰L問控制策略。
示例應(yīng)用場(chǎng)景:企業(yè)內(nèi)部部署的代理服務(wù)器,員工通過該代理服務(wù)器訪問互聯(lián)網(wǎng)資源。
反向代理:
反向代理是位于目標(biāo)服務(wù)器和客戶端之間的代理服務(wù)器。當(dāng)客戶端發(fā)送請(qǐng)求時(shí),請(qǐng)求首先被發(fā)送到反向代理服務(wù)器,然后由代理服務(wù)器根據(jù)負(fù)載均衡算法和路由規(guī)則將請(qǐng)求轉(zhuǎn)發(fā)到后端的目標(biāo)服務(wù)器,最后將目標(biāo)服務(wù)器的響應(yīng)返回給客戶端。客戶端感知不到目標(biāo)服務(wù)器的存在,只與反向代理服務(wù)器進(jìn)行通信。
反向代理的主要功能如下:
負(fù)載均衡:反向代理可以根據(jù)負(fù)載均衡算法將請(qǐng)求分發(fā)到多個(gè)后端服務(wù)器,提高系統(tǒng)的性能和可擴(kuò)展性。
緩存:反向代理可以緩存目標(biāo)服務(wù)器的響應(yīng),減輕后端服務(wù)器的負(fù)載,提高響應(yīng)速度。
安全性:反向代理可以作為防火墻,保護(hù)后端服務(wù)器免受惡意請(qǐng)求的攻擊。
SSL加密:反向代理可以提供SSL終端,對(duì)客戶端和后端服務(wù)器之間的通信進(jìn)行加密。
示例應(yīng)用場(chǎng)景:Web應(yīng)用程序的負(fù)載均衡和高可用性部署,客戶端通過反向代理訪問后端多個(gè)服務(wù)器。
6.?TCP 協(xié)議如何提高傳輸效率
-
滑動(dòng)窗口(Sliding Window):
TCP使用滑動(dòng)窗口機(jī)制來控制發(fā)送方和接收方之間的數(shù)據(jù)流量。發(fā)送方根據(jù)接收方的確認(rèn)信息和網(wǎng)絡(luò)狀況調(diào)整發(fā)送窗口的大小,以便在不引起網(wǎng)絡(luò)擁塞的情況下提高傳輸效率。較大的窗口大小允許發(fā)送方在等待確認(rèn)之前發(fā)送更多的數(shù)據(jù)。 -
擁塞控制(Congestion Control):
TCP擁塞控制機(jī)制用于避免網(wǎng)絡(luò)擁塞。它通過監(jiān)測(cè)網(wǎng)絡(luò)的擁塞狀況并相應(yīng)地調(diào)整發(fā)送速率來保證網(wǎng)絡(luò)的穩(wěn)定性和公平性。擁塞控制算法包括慢啟動(dòng)、擁塞避免和快重傳等,它們?cè)诓煌那闆r下調(diào)整發(fā)送方的發(fā)送速率,以防止數(shù)據(jù)包丟失和網(wǎng)絡(luò)擁塞。 -
帶寬延遲積(Bandwidth-Delay Product):
TCP利用帶寬延遲積來確定合適的窗口大小。帶寬延遲積是指在網(wǎng)絡(luò)中發(fā)送方和接收方之間的鏈路上可以容納的未確認(rèn)數(shù)據(jù)量。通過設(shè)置合適的窗口大小,TCP可以充分利用網(wǎng)絡(luò)的帶寬資源,提高傳輸效率。 -
選擇性重傳(Selective Retransmission):
當(dāng)TCP檢測(cè)到丟失的數(shù)據(jù)包時(shí),它會(huì)選擇性地重傳丟失的數(shù)據(jù)包,而不是重新發(fā)送整個(gè)窗口的數(shù)據(jù)。這樣可以減少不必要的重傳和網(wǎng)絡(luò)帶寬的浪費(fèi),提高傳輸效率。 -
Nagle算法:
Nagle算法用于減少小數(shù)據(jù)包的發(fā)送次數(shù),從而提高網(wǎng)絡(luò)的利用率。該算法將多個(gè)小數(shù)據(jù)包合并成一個(gè)較大的數(shù)據(jù)包進(jìn)行發(fā)送,以減少網(wǎng)絡(luò)開銷和傳輸延遲。文章來源:http://www.zghlxwxcb.cn/news/detail-710773.html -
TCP/IP堆棧優(yōu)化:
操作系統(tǒng)和網(wǎng)絡(luò)設(shè)備可以對(duì)TCP/IP協(xié)議棧進(jìn)行優(yōu)化,包括TCP緩沖區(qū)大小的調(diào)整、快速重傳和快速恢復(fù)機(jī)制的實(shí)現(xiàn)、延遲確認(rèn)等,以提高TCP的傳輸效率和性能。文章來源地址http://www.zghlxwxcb.cn/news/detail-710773.html
到了這里,關(guān)于計(jì)算機(jī)網(wǎng)絡(luò) 基礎(chǔ)面試第三彈的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!