嵌入式網絡那些事——STM32物聯實戰

-
【作 者】朱升林 歐陽駿 楊晶 著
【I S B N 】978-7-5170-3312-7
【責任編輯】張玉玲
【適用讀者群】科技
【出版時間】2015-07-30
【開 本】16開
【裝幀信息】平裝(光膜)
【版 次】第1版第1次印刷
【頁 數】496
【千字數】687
【印 張】31
【定 價】¥68
【叢 書】暫無分類
【備注信息】
簡介
本書特色
前言
章節列表
精彩閱讀
下載資源
相關圖書
本書面向網絡TCP/IP協議初學者以及大量嵌入式網絡開發人員,從當下流行的嵌入式網絡協議棧LwIP的源代碼入手,詳細講解TCP/IP協議的各層機制及其實現原理。同時,通過搭建簡單的實驗環境,本書還詳細闡述LwIP在嵌入式設備組網過程中的移植過程、應用編程案例、編程框架、注意事項等。
本書共分為四大部分,第一部分講解基于STM32平臺下LwIP的移植過程,其中包括了LwIP代碼組織結構與特點,以及LwIP裸機移植通用流程;第二部分,以LwIP源代碼為基礎,以網絡數據包在協議棧內部的遞交順序做導向,結合TCP/IP協議基本知識,依次講解LwIP內核各個模塊的實現機制,包括數據包管理、網絡接口管理、ARP、IP、ICMP、UDP、TCP等;第三部分,講解LwIP上層API實現機制,以及常見的網絡應用程序結構以及編程方法,以及LwIP其他高級應用,如IGMP、DNS、DHCP等;第四部分,講解內核調試、協議棧穩定性和性能、并發服務器設計等,以及LwIP在具體項目中的應用和實踐過程,同時還包括了LwIP在實際應用中常見的問題及解決方法。
本書可作為TCP/IP學習者的快速入門及精通的指導書籍,還可作為廣大嵌入式網絡開發人員的參考手冊。
本書附帶源代碼,讀者可以從中國水利水電出版社網站和萬水書苑上下載,網址為:http://www.waterpub.com.cn/softdown/和http://www.dgboyong.cn。
骨灰級一線嵌入式專家“五木”嘔心力作
基于STM32實戰環境,直觀感受各層協議在嵌入式設備組網過程中的實際應用,學習TCP/IP不再是紙上淡兵
最實用的STM32學習資料,最新鮮的實戰例程,輕輪詼諧,簡單直白
從協議棧原理及使用方法,到編程框架,講解透徹
從性能與穩定性測試,到問題定位與調試,干貨多多
前 言
兩三年前,當整個世界都在大力倡導物聯網、宣揚物聯網改變世界的時候,很多人還一直覺得它是很虛幻的東西。而如今,物聯網技術卻實實在在地出現在了我們的生活中。物聯網涉及到一系列廣泛的技術,并沒有完全統一的標準,其本質是所有物體通過一定的方式連入互聯網,能夠共享自身的一些信息,這些信息或為用戶使用,或成為用戶遠程控制設備的基礎。物聯網當前已經存在了多種純熟的入網技術,比如Wi-Fi、以太網、ZigBee、GPRS/3G/4G等。不同的應用場合,根據產品成本和應用特性的考慮,設備可以選擇不同的入網方法。
當前在物聯網領域,既有像華為這樣的世界級大公司,也有像Sigfox這樣的新型創業型公司。物聯網的一個重要方向是上十億百億的小物體的互聯,這些小設備入網并不以大數據量交換為目的,它們只是簡單地上報自身狀態,或者使用傳感器完成某些簡單檢測功能,比如垃圾箱需要入網,在適當的時候上報自身的儲存狀態;售貨機需要入網,以上報售貨狀態,是否需要補貨;防盜門需要入網,可隨時上報異常開關狀態;珍惜動物需要入網,方便對它們進行跟蹤保護,以免遭到非法捕殺等。類似于這樣的小型設備入網需求不勝枚舉,它們并不需要太大的數據量通信,或許每小時幾百字節的數據就足以滿足應用的要求。在這種需求下,使用傳統的入網方法無論從成本上還是從實現上都是難以接受的(Wi-Fi的有效范圍太小,移動網絡價格太貴,功耗太大)。“物體的互聯需要一張專門的無線互聯網”,這是Sigfox公司提出的一個觀點,它們正致力于為所有小物體入網構建一張專有的網絡,這張網絡可以和目前的2G/3G/4G網絡相匹敵。Sigfox的設計中有一種基于超窄帶技術的物聯網基站,它能向設備提供超遠距離的無線互聯(10~20公里),以犧牲數據通信速率為前提,設備的無線功率損耗將降至最低,據Sigfox透露這樣一款小型設備在一塊普通電池的供應下能持續工作數年之久,而設備的每個模塊成本可以降到幾美元,每年的設備連接維護費也僅為1美元多一點。
Sigfox成功地解決了小型設備入網的功耗和成本問題,為世界上數以億計的設備連入互聯網提供了完美的解決方案。“成為物體而非人的運營商”是Sigfox目前的發展方向,目前該公司已將技術提交給了歐洲電信標準協會,希望將其專有技術變成標準。值得指出的是,華為也正致力于遠距離低功耗無線通信技術的研發,這點同Sigfox的技術不謀而合,這也許是未來小物體互聯發展的熱點。或許在不久的將來,我們就會見證另一個中國移動、中國電信的誕生。
以此為契機,越來越多的小設備會連入互聯網,盡管在物理層上各種入網方案存在差別,但在這之上,嵌入式設備入網需要使用標準的TCP/IP協議,目前業界可以使用的TCP/IP協議棧較少,嵌入式設備入網比較流行的解決方案主要是使用硬件TCP/IP芯片或者收費TCP/IP協議棧軟件,這兩種方案一定程度上增加了設備的成本,使用靈活性也受到一定限制,進而阻礙了嵌入式網絡產品的大力發展。
LwIP是TCP/IP協議的一種開源實現,具有豐富完善的功能,最新版本還支持DHCP、DNS等服務,適合于在32位的嵌入式處理器上使用。LwIP作為一款開源軟件,可免費使用,能作為設備入網的一種比較完美的解決方案,由于其代碼量小,特別適合于小型嵌入式領域使用。目前LwIP在國內已經有了一定的市場占有量,但是相關的資料仍然缺乏,缺少專業的書籍對協議棧原理、使用方法、編程框架、性能與穩定性測試、問題定位與調試等方面做詳細說明,這影響了LwIP在物聯網領域的廣泛使用以及大量開發者進入嵌入式網絡領域的腳步。
筆者的《嵌入式網絡那些事:LwIP協議深度剖析和實戰演練》一書在一定程度上滿足了開發者對LwIP相關知識的需求,在市場上也有很好的銷量,得到了讀者的好評。但是這本書還是存在一定的不足:一是書的開發平臺目前已經停產,由于不是目前最流行的嵌入式處理器,因此該書的實驗移植過程對很多讀者來說理解有困難;第二,該書更注重于LwIP理論的講解,以及對TCP/IP協議原理深入的學習,書中的實驗相對較簡單,這并不能滿足廣大開發者以及學校實驗環境的需求。因此,筆者一直籌劃推出本書作為第二版,主要在以下幾方面做了改進:首先會在目前流行的STM32處理器上完成所有實驗與測試,同時在應用上加入更多豐富實用的實戰例程,并且對于很多編程方法抽象出程序框架,開發者只要在這個框架基礎上做簡單的改動,便可以完成自己的應用程序;其次對于有一定經驗的LwIP開發者,可能更加關注于內核調試、協議棧穩定性和性能相關內容,本書也從這兩方面著手,提出了一定的實驗和方法,滿足廣大開發者的需求;再次,為了更方便初學者入門,本書豐富了socket標準接口編程方面的原理和實踐內容,同時增加了并發服務器設計的相關知識,可以更好地滿足如今在市場上越來越復雜的聯網需求;最后,筆者從親自參與并設計的一款物聯網網關入手,從原理設計、需求分析、程序架構設計、程序調試等方面詳細介紹LwIP在現實項目中的實戰經驗,希望可以給廣大物聯網開發工程師帶來一定的參考意義。
寫本書的目的可以歸納為三點:第一,給需要使用LwIP的人一個借鑒和解決問題的方法,這也是當初《嵌入式網絡那些事:LwIP協議深度剖析和實戰演練》一書的寫作初衷;第二,也是最基礎的,寫給那些需要學習TCP/IP的同學,TCP/IP的重要性就不在這里多說了,遙想筆者當年畢業找工作之季,輾轉于各大公司的招聘面試場所,TCP/IP真的是面試官最青睞的問題,筆者也恰好因為在這方面有著獨到的理解,因此順利拿下了國內外眾多知名企業的offer,所以本書也想告訴那些正在努力的同學,學習TCP/IP是絕對值得的,這是一條康莊大道;第三,也是最重要的,嵌入式網絡離不開實踐,本書以目前流行的STM32處理器作為實踐平臺,讀者能在實驗平臺上實際運行、調試網絡應用程序,更可以修改協議棧內核,修改的每一行代碼都能在實驗板上看出實際效果。
網絡編程大神們可以繞道了,這里沒有IPSec,沒有SSL,沒有并發服務器,沒有每秒上億次的服務請求,我們玩的是低端玩意;神秘黑客們也可以繞道了,這里沒有系統漏洞,沒有文件系統,沒有賬號,玩不轉木馬,您都不屑于和我們較真。本書的使用者定位在嵌入式初學者、網絡初學者以及對LwIP應用有興趣或疑問的同學,你們一定可以在本書中找到想要的東西。
本書背景
TCP/IP技術是目前最流行的IT技術之一,也是當代互聯網及相關技術應用、發展的基石。近年來,TCP/IP技術在各大高校儼然已成為學習和研究的熱點;而另一方面,TCP/IP知識也成了各IT企業招聘時關注的重點問題。對于廣大TCP/IP初學者來說,要真正掌握并精通TCP/IP協議其實是有難度的:首先,TCP/IP是個非常龐大的協議簇,其源代碼一般只存在于各個大型操作系統內核中,協議的整體結構對于使用者來說不可見,學習者只能使用系統內部提供的API完成網絡編程功能,但對協議內部的實現細節并不明了,這樣TCP/IP的學習者只能停留在上層應用,如Socket編程的層次,而事實上,了解協議內部運作細節是編寫高效可靠應用程序的基礎;其次,目前市場上針對TCP/IP的書籍較少,而與TCP/IP協議內部機制相關的實驗書籍就更加缺乏了,讀者只能從書本上學到一些關于TCP/IP的基礎理論知識,但很難將這些理論用于實際編程實踐中,因為系統內核對于讀者來說并不可見。
目前,嵌入式產品連入互聯網已成了越來越多企業關注的熱點,這使得在嵌入式產品上移植TCP/IP協議成為一種必然的趨勢。LwIP是應用于嵌入式領域的一款開源TCP/IP協議,它的實現同BSD的實現有很大的相似性,可以作為TCP/IP協議的典型代表,其功能完備,除了實現TCP/IP的基本通信功能外,其新版本還支持DNS、SNMP、DHCP、IGMP等高級應用功能。當前網絡上關于LwIP的討論很多,但市場上卻鮮見相關書籍。
本書特點
理論與實踐結合是本書編寫的一個重要出發點,不但讓讀者掌握TCP/IP理論知識,而且讓讀者通過實驗深入地理解并運用這些知識,達到學以致用的目的。首先,整個協議棧對讀者來說全部可見,這樣讀者能對TCP/IP協議有宏觀的把握,摒棄掉TCP/IP以往神秘的面紗;本書以網絡數據包在協議棧內部的遞交順序為編寫導向,思路明顯,條理清楚,語言精簡幽默,更利于讀者對TCP/IP協議基本知識的理解;最后,本書內容大部分建立在讀者開發經驗之上,其中包括了很多LwIP在實際應用中遇到的問題及其解決方法,這對大部分剛接觸LwIP的嵌入式開發人員來說,有很大的指導意義。
概括來講,本書具有如下特點:
輕松詼諧的語言、簡單直白的講解能讓讀者擺脫閱讀時的枯燥感覺,技術學習也可以很輕松。從LwIP協議棧移植到網絡應用程序設計,內容由淺入深,知識點覆蓋全面,特別適合于嵌入式初學人員。
協議與實現的完美結合。著眼于TCP/IP基本理論,以LwIP源代碼為基礎,全面講解TCP/IP協議的原理與具體實現,全部源代碼對讀者可見,TCP/IP不再神秘,講解通俗,步驟詳細。每個案例的開發步驟都是以通俗易懂的語言闡述,并穿插圖片和表格。
理論與實踐并重。每章均配有實戰例程,讀者能直觀感受到各層協議在嵌入式設備組網過程中的實際應用,學習TCP/IP不再是紙上談兵。基于目前流行的STM32實驗平臺,可以幫助開發者快速上手嵌入式網絡編程,本書的許多實驗都可以抽象成一個基本的編程框架,學習者在學習的同時可以對框架進行填充裁剪等,基于框架快速完成應用程序開發。
目的明確,實用性強。本書可以作為嵌入式網絡開發人員的指導手冊,提供的許多應用程序可以直接用在開發項目中,縮短開發周期,節省開發成本;本書還會介紹并發服務器設計、協議棧性能測試、協議棧調試手段等知識,可以幫助開發者處理項目調試遇到的各種問題。
LwIP協議棧全部用C語言寫成,所有代碼對用戶可見,用戶可以宏觀地把握整個協議的代碼組織結構。在本書中,通過在實驗板上移植、使用協議棧,讀者可以清楚地知道TCP/IP協議內部各個機制的實現方法以及不同參數設置對協議棧內核性能的影響,比如:如何自行配置TCP發送超時間隔與重發次數以滿足特定場合的需求,又如用戶可否根據實際使用情況更改TCP狀態機以提高內核效率等。通過各個實驗,讀者可以清楚地看到整個協議的運行過程,加深對協議的理解。
組織結構
本書以開源TCP/IP協議棧——LwIP的源代碼為基礎,詳細為讀者講解TCP/IP協議的內部各層結構與實現細節,既包括ARP、ICMP、IGMP、IP、UDP、TCP等基本協議知識,也包括DHCP、DNS等高級應用知識,以LwIP為起點學習TCP/IP,將為廣大讀者各方面的學習創造捷徑。同時,LwIP代碼組織和實驗平臺搭建簡單,讀者可以方便地進行協議棧內部的相關實驗。
如何簡單快速地在當前流行的STM32處理器上完成協議棧移植,如何快速上手協議棧應用編程,如何移植現有的通用網絡應用程序是許多讀者關心的重點。LwIP如何移植,有沒有一套普遍適用的流程,各種編程接口的調用規則與實際使用例子,都是本書中將涉及到的內容。本書的許多應用程序代碼可以為開發者提供一個普遍使用的程序框架,開發者只需要在這個基礎上做簡單改動就可以編寫出適合自己的網絡應用程序。對于有一定經驗的LwIP開發者來說,可能更加關注于內核調試、協議棧穩定性和性能、并發服務器設計等方面的內容,也更期望看到LwIP在具體項目中的應用和實踐過程,這些也都是本書將涉及的內容。
TCP/IP技術是互聯網技術發展的基礎,在各軟硬件IT企業招聘面試中,TCP/IP相關知識成為面試官青睞的問題,對于廣大學子來說,精通TCP/IP相關知識無疑將為自己打開一道成功擇業的大門。但目前很多人想學習TCP卻無處下手,這也成為許多初學者面臨的問題。通過本書,從基于STM32的網絡實驗入手,深入貫通TCP/IP理論及其應用,通過學習,讀者可以對協議棧、TCP/IP細節有很好的把握;另一方面,嵌入式系統的組網技術是目前流行的技術,嵌入式網絡方向也是未來的熱點發展方向,本書將從嵌入式裸機出發,向讀者講解網絡協議棧移植過程以及應用編程細節,同時也包括了一些開發過程中常見的各種問題及解決方法,因此,對LwIP應用開發者來說,本書將是一本重要的指導手冊。
編者與致謝
本書由朱升林、歐陽駿、楊晶著,粟思科審。最后,筆者想感謝一年多來一直陪伴和幫助我的人,沒有你們的幫助和付出,這本書不會這么順利地完成,因為你們的存在,使得這段時光更加珍貴。
感謝LwIP技術交流群(群號:193936206、224362301)中的上千位網友,是你們每天孜孜不倦的學習和討論,讓LwIP這款開源軟件這幾年在國內有了快速的成長和發展,謝謝你們的支持和肯定,大家的相互探討也讓我學到了很多東西。
感謝我的家人,是你們的寬容和細心幫我克服了生活中的許多困難和難題,你們的默默支持和付出是我繼續完成此書的最大動力。
同時參與本書編寫工作的還有:王治國、鐘曉林、王娟、胡靜、楊龍、張成林、方明、王波、陳小軍、雷曉 、李軍華、陳曉云、方鵬、龍帆、劉亞航、凌云鵬、陳龍、曹淑明、徐偉、楊陽、張宇、劉挺 、單琳、吳川、李鵬、李巖、朱榕、陳思濤和孫浩,在此一并表示感謝。
配套服務
感謝成都智造者科技有限公司(www.smartmaker.cn)為本書提供的STM32F103VET6-EV開發平臺,該平臺定位為物聯網領域的首款綜合性實驗平臺,本書基于該平臺的以太網接口實現了嵌入式產品的以太網入網實戰。此外,該平臺預留的接口可方便地擴展該公司的其他物聯網模塊,如ZigBee模塊、藍牙模塊、RFID模塊等,能快速地實現物聯網領域多種實踐。
本書中的所有實驗代碼讀者可以通過中國水利水電出版社或萬水書苑網站下載,網址為http://www.waterpub.com.cn/ softdown/和http://www.dgboyong.cn以下方式獲得。由于作者水平所限,網絡技術日新月異,本書難免存在錯誤和不妥之處,懇請廣大讀者批評指證。我們為讀者和用戶盡心服務,圍繞協議、產品和項目市場,探討應用與發展,發掘熱點與重點;開展相關教學工作。TCP/IP協議俱樂部QQ:183090495,電子郵件hwhpc@163.com,歡迎TCP/IP協議愛好者和用戶聯系我們。
共同探討一直是學習的一種高效方式,值得指出的是,本書最后一節的LwIP常見問題與解決方法就得益于眾多網友的反饋,這里,再次對他們表示感謝。
第1章 實驗平臺背后的故事 1
1.1 嵌入式網絡技術一統江湖 1
1.1.1 嵌入式網絡的發展現狀 1
1.1.2 嵌入式LwIP協議棧 4
1.2 基于STM32的實驗平臺淺析 6
1.2.1 STM32處理器的興起 6
1.2.2 實驗平臺簡介 9
1.2.3 網卡連接情況 11
1.3 本書主要內容 12
第2章 LwIP協議棧初體驗 15
2.1 廬山真面目之LwIP代碼結構 15
2.1.1 LwIP簡介 15
2.1.2 源代碼結構 17
2.2 怎樣用SI閱讀源代碼 22
2.3 千里之行從LwIP框架做起 27
2.3.1 協議棧分層思想 27
2.3.2 進程模型 30
2.3.3 協議棧編程接口 31
第3章 LwIP移植初探——無操作系統模擬層 35
3.1 移植說明 35
3.2 移植頭文件 37
3.3 網卡驅動編寫 40
3.4 安裝系統時鐘 47
3.5 協議棧初始化 47
3.6 查詢接收數據包 49
3.7 數據包中斷接收 51
3.8 如何定位Ping問題 53
第4章 內核動力之源——內存管理 55
4.1 內存管理背后的故事 55
4.1.1 內存管理概述 55
4.1.2 常見內存分配策略 57
4.2 以不變應萬變——動態內存池 59
4.2.1 數據結構描述 59
4.2.2 函數實現 65
4.3 見招拆招——動態內存堆 67
4.3.1 數據結構描述 67
4.3.2 函數實現 69
4.4 其他內存分配策略 74
第5章 網絡數據包——內核血液 78
5.1 數據包管理的必要性 78
5.1.1 LwIP的分層特點 78
5.1.2 協議進程模型 80
5.2 數據包管理原理大揭密 80
5.2.1 數據包結構pbuf 81
5.2.2 pbuf的類型 82
5.2.3 數據包申請函數 85
5.2.4 數據包釋放函數 88
5.2.5 其他數據包操作函數 90
第6章 網絡抽水機——網絡接口管理 92
6.1 引言 92
6.2 接口管理的始與末 93
6.2.1 數據結構 93
6.2.2 函數實現 96
6.3 特殊的網絡接口——環回 99
6.3.1 實現原理 99
6.3.2 應用程序環回通信實戰 102
6.4 如何動態更改IP地址 109
6.4.1 重要函數 109
6.4.2 實戰程序 110
第7章 漫漫鵲橋路——ARP協議 113
7.1 ARP協議之掃盲篇 113
7.1.1 物理地址與網絡地址 113
7.1.2 ARP協議的本質 115
7.2 關鍵數據結構 117
7.2.1 ARP表 117
7.2.2 ARP報文 121
7.3 ARP之數據包引進來 126
7.3.1 以太網數據包遞交 126
7.3.2 ARP數據包處理 129
7.3.3 ARP攻擊 131
7.3.4 ARP緩存表的更新 132
7.4 ARP之數據包走出去 137
7.4.1 ARP層數據處理總流程 138
7.4.2 廣播包與多播包的發送 138
7.4.3 單播包的發送 140
第8章 互聯網身份證——網際協議(IP) 144
8.1 IP協議之掃盲班 144
8.1.1 概述 144
8.1.2 IP地址 145
8.1.3 特殊IP地址 147
8.1.4 子網劃分與子網掩碼 148
8.1.5 網絡地址轉換(NAT) 150
8.1.6 單播、多播與廣播 151
8.2 什么是IP數據報 153
8.2.1 數據報組成結構 153
8.2.2 數據結構 158
8.3 IP數據報之走出去 159
8.3.1 發送數據報 159
8.3.2 數據報分片 162
8.4 IP數據報之引進來 166
8.4.1 數據報接收 166
8.4.2 分片重裝數據結構 171
8.4.3 分片重裝函數 174
8.4.4 分片插入與檢查 178
第9章 互聯網醫生——ICMP協議 182
9.1 ICMP掃盲班 182
9.1.1 ICMP協議 182
9.1.2 報文交付 183
9.1.3 報文類型 184
9.1.4 報文格式 185
9.1.5 差錯報文 185
9.1.6 查詢報文 188
9.2 ICMP實現大起底 189
9.2.1 數據結構 189
9.2.2 發送差錯報文 191
9.2.3 ICMP報文的處理 192
9.2.4 ping命令 196
9.2.5 ICMP洪水 197
9.3 如何發送Ping請求 198
9.3.1 實現原理——raw_pcb 199
9.3.2 發送ping請求 200
9.3.3 測試結果 203
第10章 Raw API無招勝有招之UDP篇 205
10.1 UDP協議掃盲班 205
10.1.1 傳輸層協議 205
10.1.2 UDP協議 206
10.1.3 端口號 207
10.1.4 UDP報文的交付 208
10.1.5 UDP報文格式 209
10.1.6 UDP偽首部與校驗和 210
10.2 UDP數據結構詳解 212
10.2.1 報文首部結構 212
10.2.2 控制塊 212
10.3 UDP RAW編程秘籍 216
10.3.1 使用UDP編程 216
10.3.2 新建控制塊 216
10.3.3 綁定控制塊 217
10.3.4 連接控制塊 218
10.3.5 其他控制塊操作函數 219
10.4 UDP RAW編程初體驗 220
10.4.1 UDP編程秘訣 220
10.4.2 回送程序 221
10.4.3 測試結果 222
10.4.4 回調編程的缺陷 224
10.5 內核報文處理細節 224
10.5.1 報文的發送 224
10.5.2 報文接收與遞交 228
10.6 挑戰更復雜的UDP應用 231
10.6.1 使用TFTP傳送文件 231
10.6.2 應用程序實現 234
10.6.3 TFTP測試結果 242
第11章 Raw API無招勝有招之TCP篇 244
11.1 TCP協議大揭秘 244
11.1.1 TCP的必要性 244
11.1.2 TCP的特性 245
11.1.3 連接的定義 247
11.1.4 數據流編號 248
11.1.5 滑動窗口 248
11.2 TCP入門——報文 249
11.2.1 報文格式 249
11.2.2 TCP選項 251
11.2.3 緊急數據 252
11.2.4 強迫數據交互 253
11.2.5 報文首部數據結構 253
11.3 TCP基礎——連接 254
11.3.1 建立連接 254
11.3.2 斷開連接 255
11.3.3 復位連接 256
11.3.4 TCP狀態轉換圖 257
11.3.5 特殊的狀態轉換 259
11.4 TCP核心——控制塊 260
11.4.1 控制塊數據結構 260
11.4.2 控制塊鏈表 263
11.4.3 接收窗口 264
11.4.4 發送窗口 264
11.5 TCP RAW編程秘訣 265
11.5.1 控制塊新建 265
11.5.2 控制塊綁定 267
11.5.3 控制塊偵聽 267
11.5.4 控制塊連接 268
11.5.5 發送數據 270
11.5.6 關閉連接 270
11.5.7 其他函數 272
11.6 TCP RAW編程初體驗 272
11.6.1 TCP編程本質 272
11.6.2 HTTP服務器 278
11.6.3 打不死的客戶端 280
11.7 TCP輸出處理細節放送 283
11.7.1 報文段緩沖 283
11.7.2 報文段構建 285
11.7.3 報文段發送 287
11.8 TCP輸入處理細節放送 289
11.8.1 TCP層函數調用流程 289
11.8.2 報文輸入 291
11.8.3 TIME_WAIT狀態的報文處理 294
11.8.4 LISTEN狀態的報文處理 294
11.8.5 SYN攻擊 296
11.8.6 TCP狀態機函數 297
11.8.7 TCP數據輸入 301
11.9 可靠的傳輸服務 305
11.9.1 超時重傳與RTT估計 306
11.9.2 慢啟動與擁塞避免 311
11.9.3 快速重傳與快速恢復 314
11.9.4 糊涂窗口與避免 316
11.9.5 零窗口探查 319
11.9.6 保活機制 321
11.9.7 TCP定時器 322
11.10 挑戰更復雜的TCP應用 327
11.10.1 Telnet服務器 327
11.10.2 測試結果 333
第12章 LwIP乾坤大挪移——操作系統
模擬層 335
12.1 模擬層是怎樣煉成的 336
12.1.1 移植綜述 336
12.1.2 添加文件 338
12.1.3 修改頭文件lwipopts.h 339
12.1.4 頭文件sys_arch.h 339
12.1.5 全局變量與初始化 340
12.1.6 信號量函數 341
12.1.7 郵箱函數 343
12.1.8 創建新進程 348
12.1.9 修改內核初始化函數 349
12.1.10 移植結果測試 350
12.2 Sequential API牛刀小試 350
12.2.1 回顯服務器 351
12.2.2 Web服務器 352
12.2.3 操作系統下的raw API 355
第13章 Sequential API大顯身手 356
13.1 探秘內核定時事件 356
13.1.1 定時結構 356
13.1.2 定時鏈表 357
13.1.3 內核進程 359
13.1.4 處理定時事件 361
13.2 論消息機制的重要性 363
13.2.1 消息結構 363
13.2.2 數據包消息 364
13.2.3 協議棧API實現 365
13.2.4 API消息 367
13.3 協議棧接口全搜羅 369
13.3.1 用戶數據緩沖netbuf 369
13.3.2 如何操作數據緩沖 371
13.3.3 連接結構netconn 373
13.3.4 內核回調接口 375
13.3.5 協議棧API秘籍 377
13.4 Sequential API大會戰 383
13.4.1 網頁控制設備 383
13.4.2 UDP性能測試 386
13.4.3 TCP性能測試 388
13.4.4 并發服務器 390
第14章 萬劍歸宗之Socket編程 395
14.1 套接字接口來龍去脈 395
14.1.1 如何實現Socket 395
14.1.2 套接字函數秘籍 397
14.2 Socket實戰大串燒 401
14.2.1 智能的TCP客戶端 402
14.2.2 UDP時間服務器 404
14.2.3 Winsock客戶端設計 406
14.3 基于Select的并發服務器 408
14.3.1 神奇的Select函數 409
14.3.2 Select原理全解析 410
14.3.3 Select實戰——并發服務器 419
第15章 LwIP工程實戰——物聯網關 424
15.1 項目背景 424
15.1.1 中央空調系統與溫控器 424
15.1.2 新需求的出現 427
15.1.3 要做什么與如何去做 430
15.2 智能網絡溫控器 431
15.2.1 溫控器實現方案 431
15.2.2 Modbus TCP服務器 432
15.3 物聯網關設計 440
15.3.1 物聯網關實現方案 440
15.3.2 網關服務器 441
15.4 現場調試與測試 446
15.4.1 溫控器測試 446
15.4.2 物聯網關測試 447
第16章 天下之術皆為我用—— LwIP高級篇 449
16.1 外網訪問之道——域名解析 449
16.1.1 域名系統(DNS) 449
16.1.2 DNS牛刀小試 450
16.1.3 下載外網數據 453
16.2 如何自動分配IP地址——DHCP 456
16.2.1 DHCP大講堂 456
16.2.2 DHCP之實現詳解 458
16.2.3 是騾子是馬——遛遛DHCP 460
16.3 如何實現組播——Internet組管理 464
16.3.1 IGMP協議大講堂 464
16.3.2 IGMP組播實踐 465
第17章 最后的戰役 468
17.1 如何配置協議棧 468
17.1.1 內核配置文件opt.h 468
17.1.2 如何提高TCP性能 471
17.2 內核調試常用方法 472
17.2.1 內核日志輸出 472
17.2.2 網絡調試助手 474
17.2.3 Wireshark抓包 475
17.3 為了更好的明天 476
17.3.1 常見移植問題 476
17.3.2 常見應用問題 478
17.4 故事結局 483
參考文獻 484
- 計算機網絡實訓教程 [主編 張浩軍 趙玉娟]
- HCIA-Datacom認證題庫分類精講 [主 編 韓立剛]
- 網絡規劃設計師備考一本通 [夏杰 編著]
- 計算機網絡基礎 [主編 宋焱宏 李安邦]
- 網絡工程師備考一本通 [夏杰 編著]
- 軟件定義網絡技術與實踐 [主編 但唐仁]
- 計算機網絡技術項目化教程(微課版) [主編 王艷萍 安華萍]
- 網絡系統集成 [主編 唐繼勇 孫夢娜]
- 計算機網絡基礎創新教程(模塊化+課程思政版) [主編 唐繼勇 李旭]
- 路由交換技術項目化教程 [主編 范國娟]
- 計算機網絡創新教程 [韓立剛 編著]
- 數據通信與計算機網絡(第三版) [主 編 季福坤 錢文光]
- 計算機網絡技術基礎項目式教程 [主 編 柳 青 曾德生]
- 遨游數字時代——全球IT高管網絡安全秘籍 [[美] Palo Alto Networks 編]
- 計算機網絡基礎教程 [主 編 趙志茹 張尼奇 王宏斌]
- 計算機網絡技術基礎 [陳家遷]
- 網絡規劃設計師5天修煉 [朱小平 施游 編著]
- 計算機網絡實驗指導 [主編 吳東]
- 網絡工程師5天修煉(第三版) [朱小平 施游 編著]
- 計算機網絡原理與應用(第二版) [何小東 編著]
- 計算機網絡技術實訓教程 [主編 高良誠]
- 云計算與網絡安全 [主編 肖睿 徐文義]
- AutoCAD 網絡工程設計教程 [主編 劉通 董燦]
- 計算機網絡實訓創新教程(基于Cisco IOS) [主編 韓立剛]
- 計算機網絡原理創新教程 [主編 韓立剛]
- 深入理解計算機網絡 [王達]
- 交換機路由器配置與管理實訓教程 [主編 孫飛顯 靳曉婷]
- 網絡安全技術項目化教程 [主編 段新華 宋風忠]
- 計算機網絡基礎任務教程 [彭德林 金忠偉]
- 計算機網絡基礎應用 [主編 楊智勇 唐宏 ]