1. 程式人生 > >網路程式設計之網路通訊是什麼——UDP與TCP的區別

網路程式設計之網路通訊是什麼——UDP與TCP的區別

      首先,補充一下其他的知識,會更加方便了解。

     OSI模型:是ISO(國際標準化組織)組織在1985年研究的網路互聯模型,推薦所有公司使用這個規範來控制網路。這樣所有公司都有相同的規範,就能互聯了。

     OSI是一個開放性的通訊系統互連參考模型,它是一個定義得非常好的協議規範。OSI模型有7層結構,物理層資料鏈路層網路層傳輸層會話層表示層應用層

 其內容如下:


第7層應用層—直接對應用程式提供服務,應用程式可以變化,但要包括電子訊息傳輸
第6層表示層—格式化資料,以便為應用程式提供通用介面。這可以包括加密服務
第5層會話層—在兩個節點之間建立端連線。此服務包括建立連線是以全雙工還是以半雙工的方式進行設定,儘管可以在層4中處理雙工方式
第4層傳輸層—常規資料遞送-面向連線或無連線。包括全雙工或半雙工、流控制和錯誤恢復服務
第3層網路層—本層通過定址來建立兩個節點之間的連線,它包括通過互連網路來路由和中繼資料
第2層資料鏈路層—在此層將資料分幀,並處理流控制。本層指定拓撲結構並提供硬體定址
第1層物理層—原始位元流的傳輸,電子訊號傳輸和硬體介面資料傳送時,從第七層傳到第一層,接受方則相反。
1至4層被認為是低層,這些層與資料移動密切相關。5至7層是高層,包含應用程式級的資料

。OSI模型用途相當廣泛。

 

現在我能發正確的發位元流資料到另一臺計算機了,但是當我發大量資料時候,可能需要好長時間,例如一個視訊格式的,網路會中斷好多次(事實上,即使有了物理層和資料鏈路層,網路還是經常中斷,只是中斷的時間是毫秒級別的)。

那麼,我還須要保證傳輸大量檔案時的準確性。於是,我要對發出去的資料進行封裝。就像發快遞一樣,一個個地發。

於是,先發明瞭傳輸層(傳輸層在OSI模型中,是在網路層上面)

例如TCP,是用於發大量資料的,我發了1萬個包出去,另一臺電腦就要告訴我是否接受到了1萬個包,如果缺了3個包,就告訴我是第1001,234,8888個包丟了,那我再發一次。這樣,就能保證對方把這個視訊完整接收了。

例如UDP,是用於傳送少量資料的。我發20個包出去,一般不會丟包,所以,我不管你收到多少個。在多人互動遊戲,也經常用UDP協議,因為一般都是簡單的資訊,而且有廣播的需求。如果用TCP,效率就很低,因為它會不停地告訴主機我收到了20個包,或者我收到了18個包,再發我兩個!如果同時有1萬臺計算機都這樣做,那麼用TCP反而會降低效率,還不如用UDP,主機發出去就算了,丟幾個包你就卡一下,算了,下次再發包你再更新。

   

UDP協議

       UDP是無連線通訊協議,即在資料傳輸時,資料的傳送端和接收端不建立邏輯連線。簡單來說,當一臺計算機向另外一臺計算機發送資料時,傳送端不會確認接收端是否存在,就會發出資料,同樣接收端在收到資料時,也不會向傳送端反饋是否收到資料。

       由於使用UDP協議消耗資源小,通訊效率高,所以通常都會用於音訊、視訊和普通資料的傳輸例如視訊會議都使用UDP協議,因為這種情況即使偶爾丟失一兩個資料包,也不會對接收結果產生太大影響。

       但是在使用UDP協議傳送資料時,由於UDP的面向無連線性,不能保證資料的完整性,因此在傳輸重要資料時不建議使用UDP協議。UDP的交換過程如下圖所示。

​​​​​​​​​​​​​​TCP協議

      TCP協議是面向連線的通訊協議,即在傳輸資料前先在傳送端和接收端建立邏輯連線,然後再傳輸資料,它提供了兩臺計算機之間可靠無差錯的資料傳輸。在TCP連線中必須要明確客戶端與伺服器端,由客戶端向服務端發出連線請求,每次連線的建立都需要經過“三次握手”。第一次握手,客戶端向伺服器端發出連線請求,等待伺服器確認,第二次握手,伺服器端向客戶端回送一個響應,通知客戶端收到了連線請求,第三次握手,客戶端再次向伺服器端傳送確認資訊,確認連線。整個互動過程如下圖所示。

       由於TCP協議的面向連線特性,它可以保證傳輸資料的安全性,所以是一個被廣泛採用的協議,例如在下載檔案時,如果資料接收不完整,將會導致檔案資料丟失而不能被開啟,因此,下載檔案時必須採用TCP協議。

 

 

總結:

  1. UDP: 傳送速度快,但是容易丟資料,可用於視訊聊天,語音聊天
  2. TCP: 傳送穩定,不會丟失資料,可用於檔案的上傳、下載

     

UDP程式互動的流程

      傳送端

1,建立DatagramSocket物件

2,建立DatagramPacket物件,並封裝資料

3,傳送資料

4,釋放流資源


     接收端

1,建立DatagramSocket物件

2,建立DatagramPacket物件

3,接收資料儲存到DatagramPacket物件中

4,獲取DatagramPacket物件的內容

 5,釋放流資源
 

TCP程式互動的流程

       客戶端

1,建立客戶端的Socket物件

2,獲取Socket的輸出流物件

3,寫資料給伺服器

4,獲取Socket的輸入流物件

5,使用輸入流,讀反饋資訊

6,關閉流資源

       伺服器端

1,建立伺服器端ServerSocket物件,指定伺服器端埠號

2,開啟伺服器,等待著客戶端Socket物件的連線,如有客戶端連線,返回客戶端的Socket物件

3,通過客戶端的Socket物件,獲取客戶端的輸入流,為了實現獲取客戶端發來的資料

4,通過客戶端的輸入流,獲取流中的資料

5,通過客戶端的Socket物件,獲取客戶端的輸出流,為了實現給客戶端反饋資訊

6,通過客戶端的輸出流,寫資料到流中

7,關閉流資源