"
"
關於網絡編程

網絡概述

網絡編程技術是當前一種主流的編程技術,隨著聯網趨勢的逐步增強以及網絡應用程序的大量出現,所以在實際的開發中網絡編程技術獲得了大量的使用。

網絡編程實質

網絡編程的實質就是兩個(或多個)設備(例如計算機)之間的數據傳輸。按照計算機網絡的定義,通過一定的物理設備將處於不同位置的計算機連接起來組成的網絡,這個網絡中包含的設備有:計算機、路由器、交換機等等。

路由器和交換機組成了核心的計算機網絡,計算機只是這個網絡上的節點以及控制等,通過光纖、網線等連接將設備連接起來,從而形成了一張巨大的計算機網絡。

網絡最主要的優勢在於共享:共享設備和數據,現在共享設備最常見的是打印機,一個公司一般一個打印機即可,共享數據就是將大量的數據存儲在一組機器中,其它的計算機通過網絡訪問這些數據,例如網站、銀行服務器等等。

對於網絡編程來說,最主要的是計算機和計算機之間的通信,首要的問題就是如何找到網絡上的計算機,這就需要了解 IP 地址。

IP地址

為了能夠方便的識別網絡上的每個設備,網絡中的每個設備都會有一個唯一的數字標識,這個就是 IP 地址。在計算機網絡中,命名 IP 地址的規定有 IPv4協議,該協議規定每個 IP 地址由 4 段 0-255 之間的數字組成,例如 192.168.0.1。

每個接入網絡的計算機都擁有唯一的 IP 地址,這個 IP 地址可能是固定的,例如網絡上各種各樣的服務器,也可以是動態的,例如使用 ADSL 撥號上網的寬帶用戶,無論以何種方式獲得或是否是固定的,每個計算機在聯網以後都擁有一個唯一的合法 IP 地址,就像每個手機號碼一樣。

"
關於網絡編程

網絡概述

網絡編程技術是當前一種主流的編程技術,隨著聯網趨勢的逐步增強以及網絡應用程序的大量出現,所以在實際的開發中網絡編程技術獲得了大量的使用。

網絡編程實質

網絡編程的實質就是兩個(或多個)設備(例如計算機)之間的數據傳輸。按照計算機網絡的定義,通過一定的物理設備將處於不同位置的計算機連接起來組成的網絡,這個網絡中包含的設備有:計算機、路由器、交換機等等。

路由器和交換機組成了核心的計算機網絡,計算機只是這個網絡上的節點以及控制等,通過光纖、網線等連接將設備連接起來,從而形成了一張巨大的計算機網絡。

網絡最主要的優勢在於共享:共享設備和數據,現在共享設備最常見的是打印機,一個公司一般一個打印機即可,共享數據就是將大量的數據存儲在一組機器中,其它的計算機通過網絡訪問這些數據,例如網站、銀行服務器等等。

對於網絡編程來說,最主要的是計算機和計算機之間的通信,首要的問題就是如何找到網絡上的計算機,這就需要了解 IP 地址。

IP地址

為了能夠方便的識別網絡上的每個設備,網絡中的每個設備都會有一個唯一的數字標識,這個就是 IP 地址。在計算機網絡中,命名 IP 地址的規定有 IPv4協議,該協議規定每個 IP 地址由 4 段 0-255 之間的數字組成,例如 192.168.0.1。

每個接入網絡的計算機都擁有唯一的 IP 地址,這個 IP 地址可能是固定的,例如網絡上各種各樣的服務器,也可以是動態的,例如使用 ADSL 撥號上網的寬帶用戶,無論以何種方式獲得或是否是固定的,每個計算機在聯網以後都擁有一個唯一的合法 IP 地址,就像每個手機號碼一樣。

關於網絡編程

但是由於 IP 地址不容易記憶,所以創造了另外一個概念——域名(Domain Name),例如 www.baidu.com。一個 IP 地址可以對應多個域名,一個域名只能對應一個 IP 地址。

域名的概念可以類比手機中的通訊簿,由於手機號碼不方便記憶,所以添加一個姓名標識號碼,在撥打電話時選擇該姓名,然後撥打。

在網絡中傳輸的數據,全部是以 IP 地址作為地址標識,所以在實際傳輸數據以前需要將域名轉換為 IP 地址,實現這種功能的服務器稱之為 DNS 服務器。這就是域名解析。

例如當用戶在瀏覽器輸入域名時,瀏覽器首先請求 DNS 服務器,將域名轉換為 IP 地址,然後將轉換後的 IP 地址反饋給瀏覽器,然後再進行實際的數據傳輸。

一般情況DNS服務器正常運行時,我們用域名或者IP地址都能連接到網絡中的設備,但是DNS服務器不正常時,只能使用IP地址來訪問該設備,所以IP地址其實比域名更加的通用。

端口

每家公司都有自己的前臺總機,然後還有自己的座機,每次別人打電話進來的時候一般會打到總檯的電話,然後再轉分機,這個前臺的總機就相當於是IP地址,而我們每個員工的分機號就是相當於端口。

在同一個計算機中每個程序對應唯一的端口,這樣一個計算機上就可以通過端口區分發送給每個端口的數據了,換句話說,也就是一個計算機上可以併發運行多個網絡程序,而不會在互相之間產生干擾。在硬件上規定,端口的號碼必須位於 0-65535 之間,每個端口唯一的對應一個網絡程序,一個網絡程序可以使用多個端口。

這樣一個網絡程序運行在一臺計算上時,不管是客戶端還是服務器,都是至少佔用一個端口進行網絡通訊。在接收數據時,首先發送給對應的計算機,然後計算機根據端口把數據轉發給對應的程序。

網絡通訊

網絡通訊基於“請求-響應”模型。

怎麼來理解這個模型?類比警察審訊。

警察:姓名?

嫌疑犯:XXX

警察:性別

嫌疑犯:自己看

警察:年齡

嫌疑犯:25

這一問一答就是網絡中的“請求-響應”模型;如果警察不開口問,嫌疑犯也不說話,這就更像“請求-響應”模型,不請求,不響應。

在網絡通訊中,第一次主動發起通訊的程序被稱作客戶端(Client)程序,簡稱客戶端,而在第一次通訊中等待連接的程序被稱作服務器端(Server)程序,簡稱服務器。

一旦通訊建立,則客戶端和服務器端完全一樣,沒有本質的區別。

我們用的騰訊QQ,在我們這裡是客戶端程序,而服務器端程序在騰訊那邊,為大量的QQ用戶服務,這種網絡編程結構也成為客戶端/服務器結構,C/S結構。

在運行很多程序時,沒有必要使用專用的客戶端,而需要使用通用的客戶端,例如瀏覽器,使用瀏覽器作為客戶端的結構被稱作瀏覽器/服務器結構,也叫做 Browser/Server 結構,簡稱為 B/S 結構。

協議

協議(Protocol)——網絡編程中最重要的也是最複雜的概念

網絡編程就是運行在不同計算機中兩個程序之間的數據交換。在實際進行數據交換時,為了讓接收端理解該數據,計算機是機械的,需要規定傳輸數據的格式,這個數據的格式就是協議。

通過電臺發送情報時,需要首先將需要發送的內容轉換為電報編碼,然後將電報編碼發送出去,而接收端接收的是電報編碼,如果需要理解電報的內容則需要根據密碼本翻譯出該電報的內容。

這裡的密碼本就規定了一種數據格式,這種對於網絡中傳輸的數據格式在網絡編程中就被稱作協議。

關鍵是我們怎麼來編寫協議格式呢?答案是隨意。只要按照這種協議格式能夠生成唯一的編碼,按照該編碼可以唯一的解析出發送數據的內容即可。也正因為各個網絡程序之間協議格式的不同,所以才導致了客戶端程序都是專用的結構。

在網絡程序編程中,最麻煩的內容不是數據的發送和接收,因為這個功能在幾乎所有的程序語言中都提供了封裝好的 API (應用程序接口)進行調用,最麻煩的內容就是協議的設計以及協議的生產和解析,這個才是網絡編程中最核心的內容。

網絡通訊方式

在現有的網絡中,網絡通訊的方式主要有兩種:

1. TCP(傳輸控制協議)方式

2. UDP(用戶數據報協議)方式

當我們向別人傳遞信息時,有兩種方式:撥打電話和發送短信。使用撥打電話的方式可以保證將信息傳遞給 別人,因為別人接聽電話時本身就確認接收到了該信息。而發送短信的方式價格低廉,使用方便,但是接收人有可能接收不到。

就像是微信發送文字消息和微信發送視頻通話一樣的道理,在網絡通訊中,TCP 方式就類似於撥打電話,使用該種方式進行網絡通訊時,需要建立專門的虛擬連接,然後進行可靠的數據傳輸,如果數據發送失敗,則客戶端會自動重發該數據。而 UDP 方式就類似於發送短信,使用這種方式進行網絡通訊時,不需要建立專門的虛擬連接,傳輸也不是很可靠,如果發送失敗則客戶端無法獲得。

一般情況下:

  • 重要數據使用TCP方式進行傳輸;
  • 大量的非核心數據使用UDP方式進行傳輸;
  • 由於TCP方式需要建立專用的虛擬連接以及確認傳輸是否正確,所以使用 TCP 方式的速度稍微慢,而且傳輸時產生的數據量要比 UDP 稍微大。

我是Leonxiso,一個正在被打擊還在努力前進的技術猿,歡迎大家關注我的頭條以及公眾號ITLeonx,我在知識和技術的汪洋大海中等著你的加入。

"

相關推薦

推薦中...