介紹
了解網路對於任何管理伺服器的人來說都很重要。它不僅對於將您的服務上線並順利運行至關重要,還使您能夠診斷問題。
本文將概述一些常見的網路概念。我們將討論術語、常見協議以及網路不同層次的責任和特性。
此指南與作業系統無關,但在實施利用伺服器上的網路的功能和服務時,它應該非常有幫助。
網路詞彙
首先,我們將定義您在本指南以及其他有關網路的指南和文檔中看到的一些常見術語。
這些術語將在隨後的相應部分中進行詳細說明:
-
連接:在網路中,連接是指通過網路傳輸的相關信息。一般來說,在數據傳輸之前(通過遵循協議中制定的程序),會建立連接,並且在數據傳輸結束時可能會解構。
-
數據包: 數據包是有意在網絡中傳輸的最小單位。在網絡通信中,數據包是從一個端點到另一個端點傳輸您的數據(分段)的信封。
數據包的頭部包含有關數據包的信息,包括來源和目的地、時間戳、網絡跳數等。數據包的主要部分包含正在傳輸的實際數據。有時被稱為主體或有效負載。
- 網絡接口: 網絡接口可以指任何類型的與網絡硬件相關的軟件接口。例如,如果您的計算機上有兩個網卡,您可以單獨控制和配置與它們相關聯的每個網絡接口。
A network interface may be associated with a physical device, or it may be a representation of a virtual interface. The “loopback” device, which is a virtual interface available in most Linux environments to connect back to the same machine, is an example of this.
-
局域網: 局域網代表“local area network”。它指的是一個網絡或網絡的一部分,對於更大的互聯網不可公開訪問。家庭或辦公網絡就是局域網的一個例子。
-
廣域網路(WAN):WAN 代表「廣域網路」,指的是比 LAN 更廣泛的網路。雖然 WAN 是描述大型分散網路的相關術語,但通常是指整個互聯網。
如果一個介面被說明連接到 WAN,通常假設它可以通過互聯網訪問。
- 協定(Protocol):協定是一組定義設備可以用來通信的規則和標準的語言。在網絡中廣泛使用許多協定,通常在不同的層次中實現。
一些低層協定包括 TCP、UDP、IP 和 ICMP。一些建立在這些低層協定之上的應用層協定的熟悉例子包括 HTTP(用於訪問網絡內容)、SSH 和 TLS/SSL。
-
端口(Port):端口是單台機器上可以與特定軟件關聯的地址。它不是物理接口或位置,但允許您的服務器能夠使用多個應用程序進行通信。
-
防火牆: 防火牆是一個決定伺服器上進出的流量是否允許的程式。防火牆通常通過制定哪種類型的流量在哪些埠上是可接受的規則來運作。一般來說,防火牆會封鎖伺服器上未使用的埠。
-
NAT: NAT代表網路地址轉換。這是一種重新封裝並將傳入請求發送到路由伺服器以及局域網中相關設備或伺服器的方法。通常在物理局域網中實現這種方式,將請求通過一個IP地址路由到必要的後端伺服器。
-
VPN:VPN代表虛擬私人網絡。它是通過互聯網連接不同的LAN,同時保持隱私的一種手段。這用於將遠程系統連接起來,就像它們在本地網絡上一樣,通常是出於安全原因。
您還會遇到許多其他術語,而這個列表並不是穷盡的。我們將根據需要解釋其他術語。在這一點上,您應該了解一些高層次的概念,這將使我們能夠更好地討論即將出現的主題。
網絡層
儘管網絡通常是以主機之間的水平拓撲方式進行討論的,但在任何給定的計算機或網絡中,它的實施是以垂直方式進行分層的。
這意味著有多個技術和協議是相互建立在彼此之上的,以便通信功能正常運行。每個連續的、更高層次的層次都會對原始數據進行更多的抽象。
它還使您能夠以新的方式利用較低層次,而無需投資時間和精力來開發處理這些類型流量的協議和應用程序。
每個分層方案所使用的語言都會根據您使用的模型而有所不同。無論使用哪個模型來討論這些層,數據的路徑都是相同的。
當數據從一台機器發送出去時,它從堆疊的頂部開始,向下過濾。在最低層,實際傳輸到另一台機器上。此時,數據會返回到另一台計算機的層次中。
每個層次都可以在從相鄰層接收到的數據周圍添加自己的“包裝”,這將有助於後面的層次在數據交接時決定該做什麼。
TCP/IP 模型
TCP/IP 模型,更常被稱為互聯網協議套件,是一個被廣泛採用的分層模型。它定義了四個獨立的層:
-
應用層:在這個模型中,應用層負責在應用程序之間創建和傳輸用戶數據。這些應用程序可以在遠程系統上,應該對最終用戶看起來像是在本地運行。這種通信被稱為發生在對等體之間。
-
傳輸: 傳輸層負責進程之間的通信。該網絡層級利用端口來定址不同的服務。
-
互聯網: 互聯網層用於在網絡中從節點到節點傳輸數據。該層知曉連接的端點,但不關心實際連接,以便從一個地方到另一個地方。在此層中定義了IP地址,作為以可寻址的方式到達遠程系統的一種方式。
-
鏈接: 鏈接層實現本地網絡的實際拓撲,允許互聯網層呈現一個可寻址的界面。它建立相鄰節點之間的連接以發送數據。
正如您所看到的,TCP/IP 模型是抽象且靈活的。這使得它流行起來,並使其成為網絡層分類的主要方式。
介面
介面是計算機的網絡通信點。每個介面都與物理或虛擬網絡設備相關聯。
通常,您的服務器將為每個以太網卡或無線網卡配置一個可配置的網絡接口。
此外,它將定義一個名為“loopback”或本地主機介面的虛擬網絡接口。這用作連接單台計算機上的應用程序和進程與其他應用程序和進程的介面。您可以在許多工具中將其稱為“lo”介面。
許多時候,管理員會配置一個介面來服務互聯網流量,另一個介面用於局域網或私有網絡。
在啟用私有網絡的數據中心(包括 DigitalOcean Droplets),您的 VPS 將具有兩個網絡接口。“eth0”接口將被配置為處理來自互聯網的流量,而“eth1”接口將用於與私有網絡通信。
協議
網絡工作通過在彼此之上堆疊多個不同的協議來進行。這樣一來,一個數據片段就可以使用多個封裝在其中的協議進行傳輸。
我們將從實施在較低網絡層上的協議開始,逐步遷移到具有更高抽象層的協議。
介質訪問控制
介質訪問控制是一種通信協議,用於區分特定設備。每個設備在製造時都應該獲得一個唯一的、硬編碼的媒體訪問控制地址(MAC地址),該地址將其與互聯網上的每個其他設備區分開來。
通過MAC地址對硬件進行定址,即使頂部的軟件在運行過程中可能為該特定設備更改名稱,您仍可以通過唯一值引用該設備。
MAC地址是您可能會經常與之交互的低層鏈路中唯一的協議之一。
IP
IP協議是使互聯網運作的基本協議之一。IP地址在每個網絡上是唯一的,它們允許機器在網絡上相互定址。它實現在TCP/IP模型的互聯網層。
網絡可以連接在一起,但是跨越網絡邊界時必須路由流量。該協議假定為不可靠的網絡,並且存在多個到達相同目的地的動態更改路徑。
有許多不同的協議實現。當今最常見的實現是IPv4地址,其遵循模式123.123.123.123
,儘管由於IPv4地址有限,IPv6地址的使用也在不斷增長,其模式為2001:0db8:0000:0000:0000:ff00:0042:8329
。
ICMP
ICMP代表互聯網控制消息協議。它用於在設備之間發送消息以指示其可用性或錯誤條件。這些封包在各種網絡診斷工具中使用,例如ping
和traceroute
。
通常在不同類型的封包遇到問題時傳輸ICMP封包。它們用作網絡通信的反饋機制。
TCP
TCP stands for transmission control protocol. It is implemented in the transport layer of the TCP/IP model and is used to establish reliable connections。
TCP 是將資料封裝成封包的協議之一,然後使用底層可用的方法將其傳輸到連接的遠程端。另一端則可以檢查錯誤,請求重新傳送某些片段,並將信息重新組合成一個邏輯上的整體以發送到應用層。
該協議在數據傳輸之前建立一個連接,使用的是一種稱為三向握手的系統。這是通信的兩端確認請求並就確保數據可靠性的方法達成一致的方式。
數據發送後,使用類似的四向握手來拆除連接。
TCP 是許多最流行的互聯網用途的首選協議,包括 WWW、SSH 和電子郵件。
UDP
UDP 代表用戶數據報協議。它是 TCP 的一個常見伴侶協議,同樣實現在傳輸層。
UDP 和 TCP 的基本區別在於 UDP 提供的是不可靠的數據傳輸。它不驗證數據是否已在連接的另一端接收到。這聽起來可能不好,對於許多目的而言確實如此。然而,對於某些功能來說,這也是非常重要的。
因為不需要等待確認數據是否已收到並強制重新發送數據,UDP比TCP快得多。它不會與遠程主機建立連接,只是在不確認的情況下發送數據。
因為它是一個直接的交易,對於像查詢網絡資源這樣的通信非常有用。它也不維護狀態,這使得它非常適合將數據從一台機器傳輸到多個實時客戶端。這使得它非常適合VOIP、遊戲和其他不能容忍延遲的應用程序。
HTTP
HTTP代表超文本傳輸協定。它是應用層中定義的一種協議,是網絡通信的基礎。
HTTP定義了一些動詞,告訴遠程系統你要請求什麼。例如,GET、POST和DELETE都以不同的方式與請求的數據進行交互。要查看不同HTTP請求的實際示例,請參考如何在Express中定義路由和HTTP請求方法。
DNS
DNS代表域名系统。它是一种应用层协议,用于为互联网资源提供人性化的命名机制。它将域名与IP地址关联起来,允许您通过浏览器按名称访问站点。
SSH
SSH代表安全外壳。它是一种在应用层实现的加密协议,可用于安全地与远程服务器通信。由于其端到端加密和普及性,许多附加技术都构建在这个协议的基础上。
还有许多其他未涉及但同样重要的协议。然而,这应该为您提供了一些使互联网和网络通信变得可能的基本技术的概述。
结论
此时,您应该熟悉一些网络术语,并能理解不同组件如何相互通信。这将有助于您理解其他文章和系统文档。
接下来,对于一个高层次的、实际的例子,您可能想阅读如何在Go中发出HTTP请求。