亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

網絡編程簡介

1. 前言

在計算機誕生之初,它們的體積非常龐大,它們常常被擺放在一個很大的房間內,這些房間通常都裝有玻璃墻,你可以透過玻璃欣賞這個神奇的電子物種。一般來說,只有大學或者大型研究機構才會擁有先進的電子計算機,如果你需要通過這些大型計算機完成一些工作,需要走進機房,面對面的和它交流。現在看來,通過這些奇跡工作很不方便,但在當時來說,代表了最先進的科技實力。

隨著 PC 的迅猛發展,以及計算機網絡的誕生,很快這些計算機就被連接在了一起,你再不需要走進機房面對面和它交流了,通過遠程就可以和他們交流了。當然,早期的計算機網絡也是來源于大學和科研機構。然而計算機技術的發展真是太過迅猛了,經過短短幾十年,從最早的專業科研機構的計算機網絡,到現在的移動互聯網、物聯網,手機、家電、交通工具都實現了互聯。

2. 什么是網絡編程

我們今天所討論的網絡編程是指編寫特定的應用程序,使得接入到計算機網絡中的設備能夠相互通信。網絡設備之間的通信,需要程序員設計好特定的協議,然后通過編程語言實現這些協議,最終由計算機設備來執行。在計算機網絡的發展過程中,通用的、基礎的網絡協議已經被實現在計算機操作系統中,通常叫做網絡協議棧。而操作系統為程序員提供了網絡相關的 API ,通常把它叫做 Socket。為此,網絡編程也叫 Socket 編程、套接字編程。

任何事物的發展都有它的起源和歷史,現在我們了解一下 Socket 的發展史。

3. Socket 發展史

我們現在以及今后所討論的 Socket 都叫做 Berkeley (伯克利) Socket,是由加州大學伯克利分校的計算機系統研究小組發布的。從歷史上來看,Berkeley Socket 是隨著 4.x BSD(Berkeley Software Distribution) 操作系統一起發布的。BSD 操作系統最早是在貝爾實驗室的 Unix V6 之上增加了一些新的功能,或者是一些優化,所以不是完全自己實現的,這個版本就是 BSD1。從 BSD1 開始,中間經歷了好幾個版本,直到 BSD 4.2 開始支持了 TCP/IP 軟件。關于 Berkeley Socket 的發布歷史年表,如下:

  • 4.2 BSD(1983)第一個包含 TCP/IP 的版本。
  • 4.3 BSD(1986)對 TCP/IP 的支持更加完善。
  • 4.3 BSD Tahoe(1988) 支持慢啟動、擁塞避免等。
  • 4.3 BSD Reno(1990)支持 TCP 頭部預測、SLIP 頭部壓縮等。
  • 4.4 BSD(1993)支持多播、長肥管道修改等。

由于 BSD 是基于 AT&T 的 UNIX 發布的,核心代碼都是 AT&T 的 UNIX,所以受限于 AT&T License。伯克利的研究人員決定開發可以自由發布的系統,所以在 4.3 BSD Tahoe 基礎之上,對系統中原有 AT&T 的源碼進行重寫,發布了 BSD Net/x 系列,它的歷史年表如下:

  • BSD Net/1(1989)
    針對網絡部分進行移植。
  • BSD Net/2(1991)
    對系統中網絡以外的組件進行了移植,
  • BSD Net/3(1994)
    也叫 4.4 BSD-Lite,是一個系統功能比較完善的版本,符合 BSD license 的規定。后來出現的 OpenBSD、FreeBSD 都是基于 4.4 BSD-Lite 修改的。

4. 為什么要學習網絡編程

現代人的生活已經離不開網絡,不知道你是否體會過不帶手機、家里不能上網的心情。不管你在意還是不在意,網絡就在你身邊,如影隨形。想象一下,現代社會如果沒有網絡又會是什么狀況呢?

當然,作為一名程序員,就算你不需要編寫網絡程序,但也應該理解網絡通信原理。各種網絡中間件、分布式框架、微服務框架,其中很大一部分工作都是在處理網絡通信的邏輯,要想學習這些中間件不懂網絡通信是很難學好的。另外,一些知名的網絡庫,它里面包含了許多優秀的設計理念和編程技巧,也是非常值得研讀的,對于個人技術能力的提升具有很大的幫助。

5. 如何學習網絡編程

要想學習網絡編程,需要學習計算機網絡基礎知識。比如,TCP/IP 協議棧工作原理,分組在路由器中的存儲、轉發原理,可靠協議 TCP 的工作原理,不可靠協議 UDP 的工作原理等。

由于網絡協議棧的發展是離不開操作系統的,所以需要學習操作系統的基礎知識,比如進程、線程的基本概念。

學習編程必須要動手實踐,只有當你親自上機調試一些程序,你才能體會的更深刻,掌握的更牢固。

最后,你需要學會使用 tcpdump 和 Wireshark 這兩個抓包工具,這倆個工具是解決很多網絡相關問題的利器,可以說是開發人員工具箱里面必備工具。tcpdump 是 linux 系統自帶的工具,而 Wireshark 是具有圖形界面的工具,一般在 Windows 系統上使用。同時,要學會應用 ipconfig、netstat 等網絡工具。

本系列文章的所有示例代碼路徑:

6. 小結

文中涉及到的所有示例程序都采用 JAVA 語言實現,JAVA 作為一門平臺無關語言,天生就對網絡編程提供了很好的支持。所以,需要具備一定的 JAVA 語言基礎。當然,選擇一款自己喜歡的 IDE 也是很重要的,這樣可以提高你學習編程的效率。

另外,在調試網絡程序的過程中,經常需要檢查端口是否被占用,檢查服務是否監聽成功,定位消息收發失敗等問題。所以需要學習一下 ipconfig、netstat 的使用方法,這兩個工具都是系統自帶的,使用非常方便。最好在你的個人電腦上安裝一個 Wireshark 工具,方便問題的分析。