Linux網絡通信:網絡通信基礎

前言

網絡就是利用物理鏈路將各個孤立的工作站或主機連接在一起組成的數據鏈路。

通信就是人與人之間通過某種介質實現信息的交互。

網絡通信在Linux下簡單理解其實就是不同主機的進程間通信。

一:IP地址

  • 概念:

IP地址(Internet Protocol Address):互聯網協議地址(uint32_t無符號四個字節的整數)

  • 作用:

IP地址在網絡中唯一標識一臺主機, 每一臺主機都有自己的IP地址來精確定位主機,從而實現不同主機間的精確通信(知道數據是從哪臺主機發送到哪臺主機上)。並且網絡通信中的每條數據都包含有源IP地址目的IP地址

  • DHCP:動態主機配置協議

DHCP(Dynamic Host Configuration Protocol:動態主機配置協議)通常被應用在大型的局域網絡環境中,主要作用是集中的管理、分配IP地址,使網絡環境中的主機動態的獲得IP地址、Gateway地址、DNS服務器地址等信息,並能夠提升地址的使用率

當DHCP服務器接收到來自網絡主機申請地址的信息時,纔會向網絡主機發送相關的地址配置等信息,以實現網絡主機地址信息的動態配置。

  • NAT:網絡地址轉換

NAT(Network Address Translation:網絡地址轉換)我們一般使用私網IP 作爲局域網內部的主機標識,使用公網IP 作爲互聯網上通信的標識。內部結點要與外部網絡進行通信時,就在NAT網關將內部地址替換成公用地址,從而在外部公網(internet)上正常使用,NAT可以使多臺計算機共享Internet連接,通過使用少量的公有IP 地址代表較多的私有IP 地址的方式,將有助於減緩可用的IP地址空間的枯竭問題。

  • IPv6:互聯網協議第六版

由於IPv4(地址長度爲32位) 最大的問題在於網絡地址資源有限,嚴重製約了互聯網的應用和發展。IPv6(地址長度爲128位) 的使用,不僅能解決網絡地址資源數量的問題,而且也解決了多種接入設備連入互聯網的障礙,但是ipv6不兼容ipv4因此目前發展並不是很好。

二:MAC地址

  • 概念:

MAC地址:也叫物理地址、硬件地址。(地址長度位42位)

  • 作用:

MAC地址在一定程度上與硬件一致,是基於物理的,能夠標識具體的網絡結點。數據鏈路層協議可以使數據通過MAC地址從一個節點傳遞到相同鏈路的另一個節點上

三:端口

  • 概念:

端口(port):uint16_t無符號兩個字節的整數

  • 作用:

端口(port)在一臺主機上唯一標識一個進程,操作系統接收到數據後會交給目標進程處理(數據從主機上的哪一個進程發出,併發送給另一臺主機上的哪一個進程),網絡通信中每條數據都必須包含源端口目的端口

注意:一個端口只能被一個進程佔用,但一個進程可以使用多個端口(多個網絡通信)。

四:網絡通信協議

  • 概念:

網絡通信協議就是網絡通信中數據格式的約定, 遵循統一的通信協議,才能保證數據傳輸和接收的準確性,才能實現實質的網絡互聯。

網絡通信中每條數據都會包含一個五元組(源IP地址/源端口/目的IP地址/目的端口/協議)。

4.1 協議分層

在網絡通信環境中,有很多層面的通信協議,每個層面的協議應對的通信場景和提供的服務都有所不同。協議分層最大的好處在於封裝,不需要關心下層的實現,降低各層之間的耦合度,並且通信環境也會更加清晰。

  • OSI七層開放系統互聯參考模型

應用層 -> 表示層 -> 會話層 -> 傳輸層 -> 網絡層 -> 鏈路層 -> 物理層

  • TCP / IP五層模型

應用層 -> 傳輸層 -> 網絡層 -> 鏈路層 -> 物理層

1.應用層:負責應用程序之間的如何溝通(面對程序員:程序是程序員寫的)典型協議:HTTP / DNS / DHCP
2.傳輸層:負責兩臺主機進程之間的數據傳輸(通過端口實現)典型協議:TCP / UDP
3.網絡層:負責地址管理與路由選擇(通過IP地址實現、典型設備:路由器)典型協議:IP
4.鏈路層:負責相鄰設備之間的數據傳輸和識別 (典型設備:交換機)典型協議:Ethernet
5.物理層:負責物理光電信號的傳輸 (典型設備:集線器)典型協議:Ethernet

傳輸層的分組可稱爲報文段、網絡層的分組可稱爲數據報、鏈路層的分組可稱爲幀。

4.2 數據的傳輸流程

發送數據時每一層都會在信息中加入類似結構體的東西對數據進行封裝,接受數據時也會一層一層分用響應的結構體獲取數據。
在這裏插入圖片描述

五:網絡字節序

  • 字節序:

字節序就是CPU在內存中對數據進行存取的順序,一個主機的字節序取決於CPU架構。

  • 網絡通信中兩個主機的字節序如果不相同:

網絡通信中,數據的傳輸是以字節爲單位的,若兩個主機的字節序不同,則在數據的解析過程中可能會造成數據的二義性。

基於這個問題,無論主機字節序是大端還是小端,在網絡通信的過程中統一把數據的存取順序轉換爲網絡字節序(網絡字節序其實是大端字節序)。

  • 數據傳輸需要轉換字節序的前題:

在內存中存儲數據的時候,存儲單位大於一個字節的數據類型(short、int、long、float、double)需要進行字節序的轉換,uint8_t、char這種以字節爲存儲單元的數據不要轉換。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章