第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
慕課專欄

目錄

索引目錄

網(wǎng)絡(luò)編程32講

原價 ¥ 58.00

立即訂閱
01 開篇詞:帶你走進(jìn)網(wǎng)絡(luò)編程的世界
更新時間:2020-09-16 16:50:58
能夠生存下來的物種,并不是那些最強(qiáng)壯的,也不是那些最聰明的,而是那些對變化作出快速反應(yīng)的。——達(dá)爾文

什么是 Socket 編程?

你好,我是陳子興,是一名老程序員,在音視頻實(shí)時通訊行業(yè)有著十多年從業(yè)經(jīng)驗(yàn)。在接下來的幾個月里,我會和你一起學(xué)習(xí) Socket 編程相關(guān)技術(shù)。Socket 編程也叫網(wǎng)絡(luò)編程,是針對接入網(wǎng)絡(luò)的各種設(shè)備進(jìn)行編程,從而滿足人們學(xué)習(xí)、工作、生活的需要。我們后續(xù)會開發(fā)一個 nwchecker 程序,目的是檢查網(wǎng)絡(luò)的連通性,實(shí)現(xiàn)結(jié)構(gòu)如下:

圖片描述

如圖中描述,nwchecker 是一個 C/S 結(jié)構(gòu)的網(wǎng)絡(luò)應(yīng)用程序,基本功能就是 Client 定時發(fā)出 ping 請求,Server 收到 ping 請求后回復(fù) pong 響應(yīng),Client 能夠收到服務(wù)器的 pong 響應(yīng),證明網(wǎng)絡(luò)狀況是良好的。Client 和 Server 的結(jié)構(gòu)是對稱的,分為 4 層:nwchecker 應(yīng)用層、TCP 層、IP 層、Ethernet 層。nwchecker 定義的是應(yīng)用層協(xié)議,即 ping/pong;TCP 是傳輸層,通過端口號標(biāo)識一個服務(wù);IP 層代表一個網(wǎng)絡(luò)主機(jī),通過 IP 地址來尋址;Ethernet 是以太網(wǎng)層,通過 MAC 地址來局域網(wǎng)尋址。關(guān)于這些技術(shù)概念,本專欄會一一講到。

在這幾十年里,計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)給整個世界帶來了難以想象的變化,真是說不完道不盡啊。從最早只能透過玻璃窗才能看到連接起來的神秘計(jì)算機(jī)到今天人手一部手機(jī),你可以隨時上網(wǎng)娛樂、購物、交易。尤其是近年來移動互聯(lián)網(wǎng)和物聯(lián)網(wǎng)的飛速發(fā)展,人們的吃、穿、住、用、行已經(jīng)完全離不開手機(jī)了。你有沒有因?yàn)槭謾C(jī)沒電而吃不上飯的經(jīng)歷呢?不管你在意還是不在意,網(wǎng)絡(luò)就在你身邊,如影隨形。想象一下,現(xiàn)代社會如果沒有網(wǎng)絡(luò)又會是什么狀況呢?

網(wǎng)絡(luò)的重要性毋庸置疑,那么是否每個程序員都需要學(xué)習(xí)網(wǎng)絡(luò)編程呢?就作者本人的工作經(jīng)歷來看,不管你的工作是否和網(wǎng)絡(luò)傳輸直接相關(guān),最好還是認(rèn)真學(xué)習(xí)一下網(wǎng)絡(luò)編程。如果你有條件,最好研究一個或者多個網(wǎng)絡(luò)中間件,比如 ACE,libuv 等。接下來,我就談一下自己的經(jīng)歷和感受吧。

為什么要學(xué)習(xí) Socket 編程?

我是 2006 年畢業(yè)以后進(jìn)入華為接入網(wǎng)產(chǎn)品線,從事的是接入網(wǎng)軟件開發(fā)。在校招面試的時候,面試官考察了 OSI 模型、TCP/IP 參考模型、TCP 三次握手等相關(guān)知識。后來在擔(dān)任 team leader 期間也參加過很多次面試,面試題自然少不了網(wǎng)絡(luò)相關(guān)的知識。比如,TCP 的 TIME_WAIT 狀態(tài)是怎么產(chǎn)生的,有什么影響?epoll 的基本工作原理是什么?

其實(shí)在華為的這段時間內(nèi),工作內(nèi)容可以說是和網(wǎng)絡(luò)編程沒有直接關(guān)系。我是在一個基礎(chǔ)平臺之上做控制協(xié)議開發(fā),只需要調(diào)用別人提供的 API 即可,并看不到 socket、listen 等 API 調(diào)用。然而軟件本身是 C/S 架構(gòu),經(jīng)常遇到收不到消息的問題,如何分析解決此類問題呢?這就需要一定的網(wǎng)絡(luò)知識,需要會使用一些網(wǎng)絡(luò)分析工具,用以判定網(wǎng)絡(luò)是否連通、是否有丟包等。

我接觸的第一個跨平臺網(wǎng)絡(luò)層中間件是 ACE,它是通過 C++ 語言實(shí)現(xiàn)的。ACE 針對網(wǎng)絡(luò)層進(jìn)行了面向?qū)ο蟪橄蠛头庋b,不僅大量應(yīng)用了工廠模式、單例模式、代理模式等常用的設(shè)計(jì)模式,而且針對網(wǎng)絡(luò)事件提出了特有的 Reactor 模式和 Proactor 模式,充分體現(xiàn)了依賴倒轉(zhuǎn)原則。后來分析過 Linux 內(nèi)核 2.6.3 網(wǎng)絡(luò)協(xié)議棧,不僅加深了自己對網(wǎng)絡(luò)協(xié)議棧實(shí)現(xiàn)的理解,而且學(xué)習(xí)到了很多設(shè)計(jì)思想。比如,我在產(chǎn)品設(shè)計(jì)中借助了 Linux 網(wǎng)絡(luò)協(xié)議棧 sk_buff 的設(shè)計(jì)思想解決數(shù)據(jù)包共享的問題。

學(xué)習(xí)完 ACE 和 Linux 網(wǎng)絡(luò)協(xié)議棧以后,發(fā)現(xiàn)分析 libuv、Nginx 等源碼會輕松很多。這些開源網(wǎng)絡(luò)項(xiàng)目實(shí)現(xiàn)思想基本是類似的,比如大家都通過 Reactor 模型來實(shí)現(xiàn)事件驅(qū)動機(jī)制。我好像是掌握了內(nèi)功心法一樣,發(fā)現(xiàn)多數(shù)開源組件的實(shí)現(xiàn)是套路相同、招式不同。

總體來講,學(xué)習(xí)網(wǎng)絡(luò)編程不單單是學(xué)習(xí)網(wǎng)絡(luò)協(xié)議相關(guān)知識,更重要的是要學(xué)習(xí)網(wǎng)絡(luò)中間件的設(shè)計(jì)思想和實(shí)現(xiàn)思路,這會增加你的技術(shù)深度,使你更容易做出正確的方案選擇和技術(shù)決策。

怎樣學(xué)習(xí) Socket 編程?

首先,我會和你一起學(xué)習(xí) TCP/IP 參考模型中提出的主要協(xié)議,比如 TCP 和 UDP。學(xué)好這些協(xié)議,只是看書是完全不夠的,需要動手實(shí)踐。tcpdump 和 wireshark 是我們最好的老師,在分析協(xié)議工作原理的時候,我會和你一起通過 wireshark 抓包,一步一步分析相關(guān)協(xié)議格式,搞清楚協(xié)議的基本工作原理。

其次,我們主要學(xué)習(xí) BSD Socket API,像 linux、Mac OS 等 UNIX-Like 系統(tǒng)都是采用 BSD Socket API。Windows 系統(tǒng)的 winsock1 也是采用 BSD Socket API。當(dāng)然 Windows 系統(tǒng)的 winsock2 是 Windows 風(fēng)格的 API,本專欄不會涉及。只要我們學(xué)好了 BSD Socket API,回頭學(xué)習(xí) winsock2 會容易很多。我會編寫一些小程序來講解這些 Socket API 具體用法。Socket API 的返回值是非常重要的,不同的返回值往往意味著發(fā)生了不同的網(wǎng)絡(luò)狀況,要想編寫健壯的網(wǎng)絡(luò)程序,必須仔細(xì)處理這些返回值。

最后,我們一定要熟練應(yīng)用 tcpdump 和 wireshark 這兩個抓包工具。同時,要學(xué)會應(yīng)用 ipconfig、netstat、nload 等網(wǎng)絡(luò)工具。

所謂學(xué)以致用嘛,我們最后一起開發(fā)一個網(wǎng)絡(luò)檢測工具,可以檢測網(wǎng)絡(luò)帶寬、延遲、抖動、丟包等技術(shù)指標(biāo)。開發(fā)這個工具一定要采用事件驅(qū)動的 I/O 模型,讓我們的小程序有一種高大上的現(xiàn)代感。

Socket 編程要學(xué)習(xí)哪些內(nèi)容?

專欄分為介紹篇、基礎(chǔ)理論篇、Socket 編程基礎(chǔ)篇、Socket 編程高級篇、總結(jié)篇,一共是五個部分。每個篇章包含的內(nèi)容,可以概覽下圖。

圖片描述

后記

工欲善其事必先利其器。學(xué)習(xí) Socket 編程一定是少不了做實(shí)驗(yàn),所以需要準(zhǔn)備一個 linux 環(huán)境,可以安裝自己喜歡的發(fā)行版。如果你是第一次用 Linux,推薦你用 Ubuntu 最新版??梢栽谧约旱碾娔X通過 VMware 虛擬機(jī)虛擬一臺 Linux。

另外需要在 Windows 上安裝 wireshark,這是一個非常便于協(xié)議分析的圖形化工具。在 Linux 上使用 tcpdump 即可,這是系統(tǒng)自帶的工具,適合抓包和進(jìn)行簡單的文本化分析。

在學(xué)習(xí) Socket 編程的過程中,涉及到協(xié)議格式、工作原理,我會做實(shí)驗(yàn)抓包分析。希望你能像我一樣動起來,親自去做實(shí)驗(yàn)分析,這樣會理解的更透,記憶的更牢。

那就讓我們一起努力吧!

}
立即訂閱 ¥ 58.00

你正在閱讀課程試讀內(nèi)容,訂閱后解鎖課程全部內(nèi)容

千學(xué)不如一看,千看不如一練

手機(jī)
閱讀

掃一掃 手機(jī)閱讀

網(wǎng)絡(luò)編程32講
立即訂閱 ¥ 58.00

舉報

0/150
提交
取消