網絡通信基礎

最近在設計開發一個智能視覺檢測系統,涉及到一些通信知識,加上之前學習瞭解的內容,順手整理一下。

1. 網絡數據封包過程

網絡通信離不開各種各樣的協議,不然通信各端就得懵圈。網絡協議簡單理解就是計算機之間通信的數據格式。可以通過網絡分層模型來理解網絡的數據格式和分包過程。

應用層:應用層的數據是一個個大小有明確限制的數據包,可以理解爲要寄送的信件。

傳輸層:應用層的數據包,加上一個TCP頭,交給傳輸層傳輸,這個TCP頭可以類比給信件套上信封,並寫好收發單位的門牌號(端口號)。傳輸層是爲了解決傳輸可靠性問題,它有兩套協議,TCP和UDP。

網絡層:在傳輸層數據的基礎上,就像再加一層信封,寫上收發單位的地址,這個信封就是IP頭,地址就是接收雙方的IP地址,即源IP地址和目標IP地址。有了IP地址,這包數據在WAN上傳輸,就知道自己的目的地了。IP實現尋址和分段,除了路由功能,IP還提供分包功能,如果有些網絡內只能傳送小數據包,IP可以將數據包重新組裝,並在報頭域內註明。IP不負責可靠性和流控制。

數據鏈路層:數據鏈路層的網絡協議比較多樣化。局域網(LAN)目前最流行的是以太網(Ethernet)協議,廣域網(WAN)常見的是HDLC、PPP、Frame-Relay等網絡協議。

物理層:0101比特流在通信介質上的傳輸,分爲點對點傳輸和廣播傳輸。

2. 常用的網絡協議

說網絡協議之前,先說一下大家都很熟悉的三種網絡通信地址。

MAC地址:Ethernet協議用的是MAC地址,一臺計算機有一個或多個網卡,每個網卡會有自己的唯一標識,即MAC地址。

IP地址:IP地址決定了網絡路由怎麼走,信息如何達到你的計算機網卡。IP地址發展了兩代,分別是IPv4和IPv6,IPv4的地址空間太小,只有40多億個地址,因此升級到了IPv6。

域名:由於IP地址並不容易記憶,因此有了域名,比如我們用www.baidu.com來表示百度的地址。

有了以上三種地址,再來說說相關的網絡協議:


DNS(Domain Name System,域名系統):該協議就像是個地址簿,負責域名->IP地址的查詢。

DHCP(Dynamic Host Configuration Protocol,動態主機配置協議),主要負責計算機接入網絡時的初始化。計算機最初只有網卡的MAC地址,通過DHCP可以給它分配IP地址,並得到默認網關地址和DNS服務器的地址,有了這些東西,計算機就可以和外界進行通訊了。

ICMP(Internet Control Message Protocol,互聯網控制報文協議),它能夠檢測網路的連線狀況,以保證連線的有效性。基於這個協議實現的常用程序有ping和traceroute。

IGMP(Internet Group Management Protocol,互聯網組管理協議),負責IP組播成員管理。

ARP(Address Resolution Protocol,地址解析協議),服務於現在局域網中最流行的Ethernet協議。它負責解析遠程主機IP地址對應的MAC地址。由於通常應用程序和目標計算機進行網絡通訊時,提供的都是域名或IP地址,但對以太網來說,想要進行數據通信,需要知道對方的MAC地址。

RARP(Reverse Address Resolution Protocol,反向地址轉換協議),它和ARP協議相反,負責MAC地址到IP地址的轉換。目前該協議已被DHCP協議所取代,基本用不到了。

3. 數據傳輸過程

基本的數據傳輸過程圖示如下:

上圖可以簡單地理解爲,源主機和目的主機之間,通過若干路由器和交換機相連。那麼對於LAN和WAN,數據傳輸過程有什麼不同呢?分三種情況來介紹。

3.1 源主機和目的主機都在局域網內,通過交換機連接,採用常用的Ethernet協議

我們前面說過,Ethernet通過Mac地址直接通信。但是在通信最開始的時候,源主機只有目的主機的IP地址(私有IP地址,後面會解釋),但沒有Mac地址,因此源主機會首先發起一個ARP請求去獲得目標IP對應的MAC地址。源主機會緩存這個對應關係,下次繼續給相同IP發消息的時候,就不需要重新發起ARP請求了。
無論是ARP請求還是普通數據包,都會先到達交換機。ARP是一個廣播請求,交換機會將該ARP請求轉發給所有的其他主機,目標主機收到該請求後,返回自己的MAC地址。有了目的主機的MAC地址後,源主機就可以通過交換機向目標主機發送數據包了。

交換機的工作過程如下:

(1) 收到某端口A,MAC地址爲X的計算機發給MAC地址爲Y的計算機的數據包,交換機記錄下MAC地址X在端口A,該過程稱爲學習(Learning)。

(2) 交換機還不知道MAC地址Y在哪個端口上,於是向除了A以外所有的端口轉發該數據包,這個過程稱爲泛洪(Flooding)。

(3) MAC地址爲Y的計算機收到該數據包,向MAC地址X發出確認包。交換機收到該確認包後,記錄下MAC地址Y所在的端口。

(4) 交換機向MAC地址X轉發確認包,這一步稱爲轉發(Forwarding)。

(5) 交換機收到一個數據包,查表後發現該數據包的來源地址與目的地址屬於同一個端口,交換機將不處理該數據包。這個過程稱爲內過濾(Filtering)。

(6) 交換機內部MAC地址->端口的映射表,每條記錄都使用時間戳記錄最後一次訪問的時間,訪問時間早於某個閾值的記錄將被清除。這個過程稱爲老化(Aging)。

3.2 源主機和目的主機都有公網IP地址,經過若干交換機和路由器相連

從上面數據傳輸示意圖可以看出,路由器和交換機不太一樣,交換機只需要知道MAC地址和端口號,但路由器需要知道源主機和目的主機的IP地址。路由器工作在網絡層。

路由器可以擁有一部分交換機的能力,比如,如果發現請求是局域網內的話,也可以引入類似交換機那樣的基於MAC地址的映射表實現高速通訊。但路由器因爲涉及“最佳路由路徑”的問題,總體上考慮的問題比交換機要複雜的多。路由器除了解決路由問題,往往還需要解決異構網絡的封包轉換問題。作爲局域網的接入方,它可能走的是固網或WiFi網絡;作爲Internet的接入方,它可能走的是光纖寬帶。所以路由器需要把局域網的數據鏈路層的封包解開並重組,以適應廣域網數據鏈路協議的需求。

兩臺擁有公網IP的主機通訊過程大體如下:

(1) 首先,源主機發送數據包,經由交換機(可選)到達本局域網的公網網關(路由器),該過程即局域網內部通信過程。

(2) 路由器收到數據包,發現目標主機是Internet上某個遠端的目標主機,於是對數據包拆包重組,形成新的數據包。

(3) 根據自身的路由表,把這個新數據包層層轉發,最後到達目標主機對應的公網網關(路由器)。

(4) (目標端)路由器發現是發給本局域網內的目標主機,於是再拆包重組,形成新的數據包。

(5) 新數據包轉到局域網內,經由交換機(可選)最終到達目標主機。

3.3 源主機和目標主機至少有一方在局域網內且只有私有IP地址

首先說明一下私有IP地址。IPv4地址區間中有一些區段只用於局域網內的通訊,稱爲私有IP地址,這些區段包括:

10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255

只有私有IP而沒有公網IP的主機,通常只能和局域網內的主機通訊,而無法和Internet上的其他主機相互通訊。但在我們的家庭中,往往是一個WiFi路由器連接公網,所有的家庭設備如手機、平板、網絡電視,都以WiFi路由器爲網關構成一個局域網,那這些設備是怎麼上網的呢?

這就用到NAT(Network Address Translation,網絡地址轉換)技術。原理比較簡單,假如源主機的IP和端口號是iAddr:port1,經過NAT網關後,NAT將源主機的IP地址換成自己的公網IP(eAddr),並隨機配一個端口(port2),於是形成eAddr:port2,NAT網關再把該新的地址轉發給iAddr:port1。即NAT網關臨時建立了一個雙向映射表:iAddr:port1 <=> eAddr:port2,這樣,在該映射存續期間,eAddr:port2就變成了iAddr:port1的“替身”,這樣,內網主機也就相當於擁有了公網IP,也就可以上網了。

除了作爲公網網關的路由器,NAT網關也可以是局域網內任何一臺有公網IP的主機。

 

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