TCP/IP網絡編程系列博客簡介(TCP/IP網絡編程)【linux】(zzo)

網絡編程(網絡IPC)

本機進程間通信與網絡通信

本機進程間通信

實現本機內部的進程間的通信,通信時需要使用專門IPC機制,比如信號、管道(無名、有名)、system V IPC(消息隊列、共享內存、進程信號量)。

網絡通信

網絡通信也被稱爲網絡IPC,直譯就是網絡進程間通信,簡稱網絡通信。
說白了就是跨機進程間的通信。
圖解說明:
網絡通信

在網絡通信沒有出現之前,那個時候只有“本機進程間通信”,直到後來人們發現兩臺不同計算機的進程間也有通信的需求,此時才發明了網絡通信,以實現“跨機進程間通信”。

所以可以簡單的認爲,網絡通信其實就是“本機進程間通信”向“跨機進程間通信”擴展後的產物,只是這個擴展並不是那麼容易的,爲了實現跨機通信最起碼:
(1)通信協議的實現
(2)各種通信設備的支持(網卡、路由器、光纖、電纜、基站等等)

不過對於這篇網絡編程系列博客來說,我們重點關心的不是通信協議和中間的通信設備,這些東西都是別人早已實現好:
1、通信設備
(1)網卡:你的計算機肯定有
(2)路由器:沒有路由器怎麼上網,個人的路由器一般都自己買的
(3)光纖、電纜、基站等:由電信、移動、聯通等網絡運行商提供,我們無需操作。
2、通信協議
協議很早以前就已經被定義好了,至於協議棧的代碼實現,Linux等系統也早已實現好,只要使相應的網絡API調用即可。
多數情況下協議棧代碼屬於OS的一部分,但是如果裸機需要網絡通信時,裸機沒有運行OS,此時只能運行獨立的協議棧代碼。

對於這篇網絡編程系列博客來說,主要說明系統提供的網絡編程API,從而實現網絡通信。
圖解說明:

本博客主要說明網絡編程接口

網絡編程API 與 系統API

我們在博客中說到的雖然叫網絡編程API,不過由於網絡的協議棧代碼屬於Linux OS的一部分,所以網絡編程的API其實也是Linux所提供的系統API之一,只不過是專門被用於網絡通信,所以我們單獨的稱爲網絡編程接口(API),但是讀者自己要知道,與其他linux平臺各種的API在本質上並沒有什麼差別,其實都是系統提供的系統API。

這篇網絡編程系列的API雖然也是系統API,與其他系統API並無本質區別,但是畢竟是用於網絡通信的,因此也不是一點基礎知識都不要的。

如果想要掌握這篇網絡編程系列博客內容的話,讀者必須具備一定的網絡基礎知識,如果沒有的,讀者在閱讀這篇網絡編程系列博客的時候,可能會有一定難度,因爲我們所說明的內容一定會涉及到這些網絡知識。

所寫的網絡編程系列博客是“網絡編程”,所以重點是講如何使用這些API來編寫網絡通信的程序,不過爲了更好的說明網絡編程博客,我們也會對計算機網絡裏面的一些重要知識進行回顧。需要詳細閱讀計算機網絡知識博客的讀者可以轉到計算機網絡分類專欄。

所寫網絡編程系列博客的意義
便於讀者理解其它系統的網絡API以及庫提供的網絡API
如果你未來想深入理解網絡的話,如果沒有網絡編程這些知識作爲基礎,很難深入理解

便於理解其它系統的網絡API以及庫提供的網絡API

網絡編程的接口有兩種

第一種:系統API

庫API,通過封裝系統API實現

當然庫在封裝系統提供的網絡API時,往往可能還會進一步簡化,就是把我們本博客說明的很多步驟的函數,封裝爲一個函數,調用庫接口往往更簡潔,不過總體上你會發現其實實現方式都是一樣的。

C程序實現網絡通信

(a)直接調用系統提供網絡API,比如直接調用Linux或者windows的系統API。
(b)直接調用C庫的網絡API,不過這裏說的C庫並不是標準C庫(因爲標準C庫並不提供網絡編程的接口),而是一些特定c庫,這些c庫會提供網絡編程接口。

Linuxc程序想要通信的話,既可以調用C庫提供的網絡API,也可以直接Linux系統的網絡API來實現。

C++、java等程序實現網絡通信

基本都是直接調用它們的庫接口來實現的,特別是java程序,java程序裏面不能直接寫C接口,所以必須使用java自己網絡編程庫接口。

不過C++還好,因爲c++兼容c,所以c++程序有三種選擇
(a)使用c++自己“類庫”提供的網絡API
(b)使用某c庫提供的庫API
(c)直接使用Linux OS提供的網絡API

c++程序一般使用的都是“類庫”的網絡API。

本系列博客有助於理解其它形式的網絡API

不管是window、Linux等系統提供網絡API,還是各種庫通過封裝OS的網絡API從而提供的庫API,其實用法幾乎一樣,因此瞭解本博客Linux的網絡API,非常有助於讀者接觸和掌握其它形式的網絡API。

實際上你去學習windows的網絡API時你會發現,它與Linux網絡API幾乎是差不多的,函數名稱、功能、參數幾乎沒有什麼區別。

有利於深入學習和理解網絡原理

如果只是站在應用編程的角度的話,計算機網絡的分類專欄和網絡編程系列博客的內容就夠用了,但是如果你職業規劃是想往網絡方向深入發展的話,僅這些內容是不夠的,但是想要深入理解網絡原理,又不能一蹴而就,需要一定基礎。而計算機網絡分離專欄和網絡編程系列博客其實就是深入學習網絡原理的基礎。

TCP/IP網絡編程系列博客知識結構

  1. 回顧計算機網絡分類專欄的部分內容
  2. 網絡通信協議 與 網絡編程接口
  3. 如何使用TCP/IP實現網絡通信
  4. TCP通信
  5. UDP通信
  6. 域套接字
  7. 廣播
  8. 帶外數據
  9. 服務器如何實現多客戶
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章