1. http的長連線和短連線
- 短連線:
短連線是指每次客戶端請求與伺服器響應完成後,連線就會關閉。也就是說,每次請求都需要重新建立連線,完成一次請求後立即關閉連線。這意味著每個HTTP請求都需要經歷連線建立、資料傳輸和連線關閉的過程。
短連線的特點包括:
- 每個請求都需要建立和關閉連線,增加了網路開銷和延遲。
- 伺服器需要為每個請求分配資源,包括建立和銷燬連線的開銷。
- 適用於一次性請求和響應較少的場景,如簡單的網頁瀏覽。
- 長連線(Keep-Alive):
長連線是指客戶端和伺服器之間建立一次連線後,可以在該連線上傳送多個請求和響應。在長連線中,連線在完成一次請求和響應後不會立即關閉,而是保持開啟狀態,以便後續的請求和響應可以在同一個連線上進行。
長連線的特點包括:
- 避免了頻繁建立和關閉連線的開銷,減少了網路延遲。
- 同一個連線上可以傳送多個請求和接收多個響應,提高了效能和效率。
- 需要伺服器和客戶端都支援長連線,否則會被當作短連線處理。
在HTTP/1.0中,短連線是預設的連線方式,每次請求都會建立新的連線。而在HTTP/1.1及以後的版本中,長連線成為預設的連線方式,可以在請求頭中使用"Connection: keep-alive"來指定使用長連線
2. RPC協議和 Http協議區別
- 抽象層次:
- RPC協議:RPC協議是一種更高層次的協議,它允許應用程式之間進行遠端過程呼叫。在RPC中,客戶端可以像呼叫本地函式一樣呼叫遠端伺服器上的函式,而無需瞭解底層的通訊細節。
- HTTP協議:HTTP協議是一種應用層協議,用於在客戶端和伺服器之間傳輸超文字資料。它是一種無狀態的協議,客戶端透過傳送請求,伺服器透過傳送響應來完成通訊。
- 資料格式:
- RPC協議:RPC協議通常使用二進位制格式對資料進行編碼和傳輸。這種格式效率較高,可以減少資料大小和傳輸時間。常見的RPC協議包括 gRPC、Thrift等。
- HTTP協議:HTTP協議使用文字格式進行資料編碼和傳輸,常見的格式是JSON、XML或表單資料。文字格式易於閱讀和除錯,但相對於二進位制格式來說,佔用更多的網路頻寬和傳輸時間。
- 通訊方式:
- RPC協議:RPC協議通常採用雙向通訊方式,客戶端發起請求,伺服器返回響應。客戶端和伺服器之間可以進行雙向資料傳輸,從而支援更復雜的通訊模式。
- HTTP協議:HTTP協議通常採用客戶端-伺服器模式,客戶端向伺服器傳送請求,伺服器返回響應。在標準的HTTP中,伺服器不能主動向客戶端傳送資料,需要客戶端主動傳送請求。
- 應用場景:
- RPC協議:RPC協議通常用於構建分散式系統和服務間的通訊。它可以用於跨語言和跨平臺的通訊,支援高效能和高併發的請求處理。RPC協議在微服務架構中被廣泛應用。
- HTTP協議:HTTP協議通常用於Web應用程式的通訊。它是基於網際網路的標準協議,用於在客戶端和伺服器之間傳輸超文字資料。HTTP協議廣泛用於Web瀏覽器和伺服器之間的通訊,支援傳輸各種型別的內容。
3. Socket 建立客戶端和伺服器的互動步驟
-
伺服器端建立Socket:
- 伺服器應用程式首先建立一個伺服器Socket物件,繫結到特定的IP地址和埠號上。
- 使用
socket()
函式建立Socket物件,並使用bind()
函式將其繫結到伺服器的IP地址和埠號上。
-
伺服器端監聽連線請求:
- 伺服器Socket物件呼叫
listen()
函式開始監聽來自客戶端的連線請求。 - 伺服器處於等待連線的狀態,等待客戶端發起連線請求。
- 伺服器Socket物件呼叫
-
客戶端建立Socket並連線到伺服器:
- 客戶端應用程式建立一個客戶端Socket物件。
- 使用
socket()
函式建立Socket物件。 - 使用
connect()
函式將客戶端Socket連線到伺服器的IP地址和埠號。
-
伺服器端接受連線請求:
- 伺服器Socket物件呼叫
accept()
函式接受客戶端的連線請求。 - 當客戶端發起連線請求時,伺服器呼叫
accept()
函式接受連線,並建立一個新的Socket物件來處理與該客戶端的通訊。
- 伺服器Socket物件呼叫
-
客戶端和伺服器進行資料交換:
- 客戶端和伺服器之間可以使用
send()
和recv()
等函式進行資料交換。 - 客戶端使用
send()
函式將資料傳送給伺服器。 - 伺服器使用
recv()
函式接收客戶端傳送的資料。 - 伺服器使用
send()
函式將響應資料傳送給客戶端。 - 客戶端使用
recv()
函式接收伺服器傳送的響應資料。
- 客戶端和伺服器之間可以使用
-
關閉連線:
- 當通訊結束後,客戶端和伺服器都可以呼叫
close()
函式關閉Socket連線。
- 當通訊結束後,客戶端和伺服器都可以呼叫
程式碼示例:
import socket # 建立伺服器Socket物件 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 繫結IP地址和埠號 server_address = ('localhost', 8888) server_socket.bind(server_address) # 監聽連線請求 server_socket.listen(1) print('伺服器已啟動,等待連線...') # 接受客戶端連線 client_socket, client_address = server_socket.accept() print('客戶端已連線:', client_address) # 接收客戶端傳送的資料 data = client_socket.recv(1024) print('接收到的資料:', data.decode()) # 傳送響應資料給客戶端 response = 'Hello, client!' client_socket.send(response.encode()) # 關閉連線 client_socket.close() server_socket.close()
4. 路由器和交換機分別在OSI 7層模型中的哪一層
路由器位於OSI模型的第三層,即網路層。它在網路層上操作,負責根據目標IP地址進行資料包的轉發和路由選擇,以便將資料包從源主機傳送到目標主機,跨越不同的網路。路由器透過檢視資料包的目標IP地址和路由表來做出轉發決策,以保證資料包的正確傳遞。
交換機位於OSI模型的第二層,即資料鏈路層。它在資料鏈路層上操作,主要負責區域網內部的資料幀轉發和交換。交換機根據資料幀中的目標MAC地址,透過學習和維護交換表(也稱為MAC表)來決定將資料幀轉發到哪個埠,以實現區域網內部的高效通訊。
5. 正向代理與反向代理
正向代理:
正向代理是位於客戶端和目標伺服器之間的代理伺服器。當客戶端傳送請求時,請求首先被髮送到正向代理伺服器,然後由代理伺服器轉發請求到目標伺服器,並將目標伺服器的響應返回給客戶端。客戶端通常不直接與目標伺服器通訊,而是透過正向代理伺服器中轉。
正向代理的主要功能如下:
隱藏客戶端的真實IP地址,提供匿名性。
訪問受限資源:透過正向代理可以繞過網路訪問限制,訪問被封鎖的資源。
快取:代理伺服器可以快取目標伺服器的響應,提高客戶端的訪問速度。
安全性:代理伺服器可以提供額外的安全層,例如過濾惡意請求或實施訪問控制策略。
示例應用場景:企業內部部署的代理伺服器,員工透過該代理伺服器訪問網際網路資源。
反向代理:
反向代理是位於目標伺服器和客戶端之間的代理伺服器。當客戶端傳送請求時,請求首先被髮送到反向代理伺服器,然後由代理伺服器根據負載均衡演演算法和路由規則將請求轉發到後端的目標伺服器,最後將目標伺服器的響應返回給客戶端。客戶端感知不到目標伺服器的存在,只與反向代理伺服器進行通訊。
反向代理的主要功能如下:
負載均衡:反向代理可以根據負載均衡演演算法將請求分發到多個後端伺服器,提高系統的效能和可擴充套件性。
快取:反向代理可以快取目標伺服器的響應,減輕後端伺服器的負載,提高響應速度。
安全性:反向代理可以作為防火牆,保護後端伺服器免受惡意請求的攻擊。
SSL加密:反向代理可以提供SSL終端,對客戶端和後端伺服器之間的通訊進行加密。
示例應用場景:Web應用程式的負載均衡和高可用性部署,客戶端透過反向代理訪問後端多個伺服器。
6. TCP 協議如何提高傳輸效率
-
滑動視窗(Sliding Window):
TCP使用滑動視窗機制來控制傳送方和接收方之間的資料流量。傳送方根據接收方的確認資訊和網路狀況調整傳送視窗的大小,以便在不引起網路擁塞的情況下提高傳輸效率。較大的視窗大小允許傳送方在等待確認之前傳送更多的資料。 -
擁塞控制(Congestion Control):
TCP擁塞控制機制用於避免網路擁塞。它透過監測網路的擁塞狀況並相應地調整傳送速率來保證網路的穩定性和公平性。擁塞控制演演算法包括慢啟動、擁塞避免和快重傳等,它們在不同的情況下調整傳送方的傳送速率,以防止資料包丟失和網路擁塞。 -
頻寬延遲積(Bandwidth-Delay Product):
TCP利用頻寬延遲積來確定合適的視窗大小。頻寬延遲積是指在網路中傳送方和接收方之間的鏈路上可以容納的未確認資料量。透過設定合適的視窗大小,TCP可以充分利用網路的頻寬資源,提高傳輸效率。 -
選擇性重傳(Selective Retransmission):
當TCP檢測到丟失的資料包時,它會選擇性地重傳丟失的資料包,而不是重新傳送整個視窗的資料。這樣可以減少不必要的重傳和網路頻寬的浪費,提高傳輸效率。 -
Nagle演演算法:
Nagle演演算法用於減少小資料包的傳送次數,從而提高網路的利用率。該演演算法將多個小資料包合併成一個較大的資料包進行傳送,以減少網路開銷和傳輸延遲。 -
TCP/IP堆疊最佳化:
作業系統和網路裝置可以對TCP/IP協議棧進行最佳化,包括TCP緩衝區大小的調整、快速重傳和快速恢復機制的實現、延遲確認等,以提高TCP的傳輸效率和效能。