OSI七層協議
OSI(Open Systems Interconnection)模型是一個七層的網絡通信模型,用于標準化不同層級的網絡通信。從下到上分別是:
- 物理層(Physical Layer):負責在物理媒介上傳輸原始的比特流。
- 數據鏈路層(Data Link Layer):負責在相鄰網絡設備之間傳輸幀,處理MAC地址。
- 網絡層(Network Layer):負責數據包從源到宿的傳輸和路由選擇。
- 傳輸層(Transport Layer):負責提供端到端的數據傳輸服務,如TCP和UDP。
- 會話層(Session Layer):負責建立、管理和終止應用程序之間的會話。
- 表示層(Presentation Layer):負責數據的表示、編碼和轉換,確保一個系統的應用層所發送的信息能被另一個系統的應用層讀取。
- 應用層(Application Layer):為應用軟件提供網絡服務。
C/S和B/S架構
-
C/S架構(Client/Server):客戶端/服務器架構,客戶端通過請求服務器來獲取資源或處理信息。C/S架構通常用于桌面應用程序。
-
B/S架構(Browser/Server):瀏覽器/服務器架構,用戶通過瀏覽器訪問服務器上的資源或服務。B/S架構通常用于Web應用程序。
三次握手、四次揮手流程
-
三次握手:建立TCP連接的過程,包括:
- 客戶端發送SYN(同步序列編號)報文給服務器,請求建立連接。
- 服務器收到SYN后,發送SYN-ACK(同步確認)報文回應客戶端。
- 客戶端收到SYN-ACK后,發送ACK(確認)報文完成連接建立。
-
四次揮手:TCP連接的終止過程,包括:
- 客戶端發送FIN(結束)報文給服務器,請求關閉連接。
- 服務器收到FIN后,發送ACK報文回應客戶端,并準備關閉。
- 服務器發送FIN報文給客戶端,請求關閉其到客戶端的連接。
- 客戶端收到服務器的FIN后,發送ACK報文回應服務器,并正式關閉連接。
ARP協議
ARP(Address Resolution Protocol)協議用于將網絡層的IP地址解析為數據鏈路層的MAC地址,以便于在局域網內發送數據幀。
TCP和UDP的區別
- TCP(Transmission Control Protocol):傳輸控制協議,提供可靠的、面向連接的、基于字節流的傳輸服務。
- UDP(User Datagram Protocol):用戶數據報協議,提供快速但不可靠的、無連接的傳輸服務。
局域網和廣域網
- 局域網(LAN, Local Area Network):覆蓋較小地理范圍(如一個辦公室或校園)的計算機網絡。
- 廣域網(WAN, Wide Area Network):覆蓋廣泛地理范圍的計算機網絡,如跨國或全球網絡。
基于TCP協議的通信更可靠的原因
TCP協議提供超時重傳、數據校驗、流量控制和有序傳輸等機制,確保數據正確、完整地發送到接收端。
Socket
Socket是一種通信抽象,用于實現網絡通信。基于TCP協議的套接字通信流程包括:
- 服務器創建套接字,并綁定到端口上監聽。
- 服務器接受客戶端的連接請求。
- 客戶端創建套接字,并連接到服務器的IP地址和端口。
- 雙方通過套接字進行數據傳輸。
- 數據傳輸完成后,任一方可以關閉連接。
粘包問題
粘包是指在使用TCP協議傳輸數據時,多個數據包被一起傳輸,接收方無法區分數據包界限的現象。
造成粘包的原因:
- 應用程序寫入的數據小于套接字緩沖區的大小,導致多次寫操作將數據累計在緩沖區中,一次讀操作就讀取了多次寫入的數據。
發生粘包的情況:
- 當發送的數據小于TCP緩沖區的大小。
- 當TCP底層將多次發送的數據合并為一次發送。
- 當接收方的讀取速度小于發送方。
IO多路復用的作用
IO多路復用(如select、poll、epoll)允許單個進程或線程監視多個輸入源(如文件描述符),并在有數據可讀或可寫時得到通知。它的作用包括:
- 提高程序的并發能力,用單個線程處理多個IO操作。
- 減少資源消耗,避免為每個IO操作創建線程。
- 提升性能,特別是當處理大量并發連接時。
什么是防火墻以及作用?
防火墻是一種網絡安全系統,用于監控進出網絡流量并根據預定的安全規則進行過濾。其作用主要包括:
- 防止未經授權的訪問:確保只有合法的流量能夠進入或離開網絡。
- 過濾內容:阻止惡意軟件、垃圾郵件等。
- 管理流量:控制數據流,優化網絡性能。
select、poll、epoll 模型的區別?
-
select 模型:
- 基于文件描述符的數組。
- 每次調用都需要遍歷整個數組,檢查哪些文件描述符處于就緒狀態。
- 有最大文件描述符限制(通常為1024)。
-
poll 模型:
- 與select類似,但使用鏈表結構,沒有數量限制。
- 同樣需要在每次調用時遍歷整個鏈表。
-
epoll 模型:
- 基于事件的I/O通知機制。
- 僅返回那些狀態發生變化的文件描述符。
- 沒有數量限制,且效率比select和poll高。
進程、線程、協程的區別以及應用場景?
-
進程:
- 操作系統進行資源分配和調度的基本單位。
- 擁有獨立的內存空間。
- 適用于執行獨立運行的程序。
-
線程:
- 進程中的一個執行流,共享進程的資源。
- 適用于執行多任務并行操作。
-
協程:
- 用戶態的輕量級線程,由程序控制。
- 適用于I/O密集型任務,避免線程的創建和銷毀開銷。
GIL鎖是什么?
GIL(Global Interpreter Lock)是Python解釋器中的全局解釋器鎖,它確保在任意時刻,只有一個線程執行Python字節碼。GIL鎖的主要作用是簡化CPython實現中對象的內存管理和同步問題。
Python中如何使用線程池和進程池?
Python的concurrent.futures
模塊提供了ThreadPoolExecutor
和ProcessPoolExecutor
來創建線程池和進程池。
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor# 使用線程池
with ThreadPoolExecutor(max_workers=5) as executor:results = list(executor.map(lambda x: x*x, range(10)))# 使用進程池
with ProcessPoolExecutor(max_workers=5) as executor:results = list(executor.map(lambda x: x*x, range(10)))
threading.local的作用?
threading.local()
用于創建線程局部數據,每個線程都有自己的獨立副本,互不影響。常用于線程中的變量隔離。
進程之間如何進行通信?
進程間通信(IPC)可以通過以下方式:
- 管道(Pipes):用于父子進程或兄弟進程間通信。
- 消息隊列(Message Queues):用于在進程間發送消息。
- 共享內存(Shared Memory):允許多個進程訪問同一塊內存區域。
- 套接字(Sockets):用于進程間網絡通信。
什么是并發和并行?
-
并發:
- 兩個或多個事件在同一時間段內發生。
- 在多線程環境中,多個任務交替執行。
-
并行:
- 兩個或多個事件同時發生。
- 在多核處理器上,多個任務可以真正地同時運行。
進程鎖和線程鎖的作用?
-
進程鎖:
- 確保多個進程在訪問共享資源時的互斥。
-
線程鎖:
- 確保同一進程內多個線程在訪問共享資源時的互斥。
解釋什么是異步非阻塞?
異步非阻塞指的是在程序執行過程中,當遇到需要等待的操作(如I/O)時,不會阻塞當前執行的線程或進程,而是允許其他任務繼續執行。這樣可以提高程序的響應性和效率,特別是在I/O密集型應用中。
路由器和交換機的區別:
-
路由器:
- 工作在OSI模型的網絡層。
- 負責在不同網絡之間轉發數據包,并進行路徑選擇。
- 可以連接不同的網絡,如局域網和互聯網。
- 具有IP地址分配和網絡地址轉換(NAT)功能。
-
交換機:
- 工作在OSI模型的數據鏈路層。
- 負責在局域網內部轉發數據幀。
- 通過MAC地址表來決定數據幀的去向。
- 不具備跨網絡的路由功能。
什么是域名解析?
域名解析是將人類可讀的域名(如www.example.com
)轉換為機器可讀的IP地址的過程。這一過程通常由DNS(域名系統)服務器完成。
如何修改本地hosts文件?
- 在Windows系統中,
hosts
文件通常位于C:\Windows\System32\drivers\etc\
。 - 在Unix-like系統中,
hosts
文件通常位于/etc/hosts
。
使用文本編輯器(如記事本、Notepad++或vim)打開hosts
文件,添加或修改條目,例如:
192.168.1.100 example.com
然后保存文件,并根據需要重啟網絡服務或刷新DNS緩存。
生產者消費者模型應用場景及優勢:
應用場景:
- 任務隊列處理,如Web服務器處理用戶請求。
- 日志處理,生產者生成日志,消費者負責寫入存儲。
- 多級數據處理流程。
優勢:
- 降低系統耦合度,生產者和消費者可以獨立開發和優化。
- 提高系統性能和吞吐量,通過緩沖區來平衡生產和消費速度。
- 易于擴展,可以根據需要增加更多的生產者或消費者。
什么是CDN?
CDN(內容分發網絡)是一種分布式網絡,通過將內容緩存到離用戶更近的服務器上,使用戶可以更快地獲取內容,提高訪問速度和系統可用性。
LVS是什么及作用?
LVS(Linux Virtual Server)是一個開源的Linux負載均衡解決方案。它的作用是:
- 在多個服務器之間分配網絡流量和請求,提高系統的擴展性和可用性。
- 提供故障轉移和高可用性支持。
Nginx是什么及作用?
Nginx是一個高性能的HTTP和反向代理服務器,它的作用包括:
- 作為Web服務器,處理HTTP請求。
- 作為反向代理,將請求轉發到后端服務器。
- 提供負載均衡功能,分配請求到多個后端服務。
- 提供靜態文件服務,優化響應速度。
Keepalived是什么及作用?
Keepalived是一個高可用性解決方案,它的作用是:
- 監控系統中的關鍵服務,并在服務失敗時自動進行故障轉移。
- 管理并維護虛擬IP地址,確保高可用性。
- 與LVS等負載均衡器配合使用,實現自動故障轉移和負載均衡。
haproxy是什么以及作用?
haproxy 是一個非常流行的開源負載均衡器和代理服務器,它的作用包括:
- 負載均衡:將進入的網絡流量分發到多個后端服務器,以提高應用程序的可用性和響應速度。
- 高可用性:提供故障轉移支持,如果主服務器失敗,它可以自動切換到備用服務器。
- 代理:支持多種協議(如HTTP、TCP等),可以作為反向代理來接收客戶端請求并轉發到適當的后端服務。
- SSL/TLS 卸載:可以處理SSL握手,減輕后端服務器的負擔。
- 監控和統計:提供實時監控和統計信息,幫助管理員了解流量和性能狀態。
什么是負載均衡?
負載均衡是一種將網絡流量和用戶請求分散到多個服務器或資源的技術,目的是:
- 提高性能:通過分散請求,避免單個服務器過載。
- 提高可用性:如果一個服務器失敗,請求可以被重定向到其他服務器。
- 增強擴展性:通過增加更多的服務器來處理更多的請求。
什么是RPC及應用場景?
RPC(遠程過程調用)是一種允許程序調用另一個地址空間(通常是共享網絡的另一臺機器上)的子程序或服務的技術,而不需要程序員了解底層網絡細節。
應用場景:
- 分布式計算:在分布式系統中,RPC用于不同節點之間的服務調用。
- 微服務架構:微服務之間通過RPC進行通信。
- 客戶端-服務器應用程序:客戶端通過RPC調用服務器上的服務。
簡述 asyncio模塊的作用和應用場景。
asyncio 是Python的一個庫,用于編寫單線程并發代碼,使用基于協程的async/await
語法。
作用:
- 支持異步I/O操作,允許程序在等待I/O操作完成時釋放執行權。
- 允許并發執行多個操作,提高程序性能。
應用場景:
- I/O密集型任務,如Web爬蟲、網絡請求等。
- 并發處理大量連接,如Web服務器、聊天服務等。
簡述 gevent模塊的作用和應用場景。
gevent 是一個基于協程的Python網絡庫,它使用基于greenlet的輕量級并發來實現異步操作。
作用:
- 提供一種簡單的方式來編寫異步代碼。
- 通過協程實現非阻塞的網絡通信。
應用場景:
- 需要處理大量并發連接的Web應用。
- I/O密集型任務,如Web服務、實時通信等。
Twisted框架的使用和應用?
Twisted 是一個事件驅動的網絡編程框架,它支持多種協議,包括TCP、UDP、HTTP等。
使用:
- 通過異步的回調和協程來處理事件和I/O操作。
- 支持多種網絡協議,可以用于構建客戶端和服務器應用程序。
應用場景:
- 構建高性能的服務器,如游戲服務器、即時通訊服務器等。
- 編寫需要處理多種協議的客戶端應用程序。
- 用于實現復雜的網絡通信和協議交互。
HTTP協議的認識
HTTP(超文本傳輸協議)是一種用于分布式、協作式、超媒體信息系統的應用層協議。它是萬維網數據通信的基礎。以下是HTTP協議的一些關鍵特點:
- 無狀態性:HTTP協議本身是無狀態的,這意味著每個請求都是獨立的,服務器不會保存之前請求的狀態。
- 請求-響應模型:HTTP通信采用請求-響應模型。客戶端發送一個請求到服務器,服務器響應該請求并返回一個響應。
- 方法:HTTP定義了一系列的方法,如GET、POST、PUT、DELETE等,以表示不同的操作。
- 狀態碼:HTTP使用狀態碼來表示請求的結果,例如200表示成功,404表示未找到,500表示服務器錯誤等。
- 頭信息:HTTP消息包含頭部信息,它提供了關于請求或響應的元數據,如內容類型、緩存控制、認證信息等。
- 連接:HTTP/1.1支持持久連接,允許在同一個TCP連接上發送多個HTTP請求和響應,以減少連接建立和關閉的開銷。
- 安全性:HTTP協議本身不提供安全特性,但可以通過HTTPS(HTTP over SSL/TLS)來保證數據傳輸的安全性。
Websocket協議的認識
WebSocket是一種網絡通信協議,提供了在單個TCP連接上進行全雙工通信的能力。以下是WebSocket的一些關鍵特點:
- 全雙工通信:WebSocket允許服務器和客戶端之間雙向交互,服務器可以隨時發送數據給客戶端。
- 持久連接:與HTTP不同,WebSocket建立連接后,該連接會保持開放,直到客戶端或服務器端明確關閉它。
- 適用于實時應用:WebSocket非常適合需要實時通信的應用,如在線游戲、聊天應用、實時數據更新等。
- 較少的開銷:與HTTP請求相比,WebSocket通信減少了每次通信所需的開銷,因為它不需要重復進行握手過程。
- 基于TCP:WebSocket依賴于TCP協議,保證了數據傳輸的可靠性。