《TCP/IP詳解 卷1:協議》哪些章節需要重點閱讀?

主要用於網路編程中對基本原理的了解,不是主要從事網路相關的工作。
比如:
RARP,ICMP,IGMP,FTP等等,這些是不是沒有必要了解很深?
另外,各個協議的報文格式有沒有必要全部完整的背下來?

以下章節中能否再細化以下重點?

計劃把以下章節作為重點:
第一章概述
第二章 鏈路層
第三章 IP網際協議
第四章 ARP地址解析協議
第九章 IP選路
第十一章 UDP用戶數據報協議
第十二章 廣播和多播 (待定)
第十七章 TCP傳輸控制協議
第十八章 TCP連接的建立與終止
第十九章 TCP的交互數據流 (待定
第二十章 TCP的成塊數據流 (待定
第二十一 TCP的超時與重傳


《TCP/IP詳解》一共三卷,其中卷二、卷三更多偏重於編程細節,而卷一更多偏重於基礎原理,基本上都是通過實驗先看現象,然後再來引出其背後的原理,所以如果沒有什麼基礎,還是踏踏實實從頭看,不要省略任何一個細節,這對於網路工程師、軟體工程師同樣適用。

但毫無疑問,TCP協議是最複雜、最難以真正精通的一個協議,軟體開發人員編寫socket 一般調用幾個常規介面函數,TCP細節都被隱藏起來了。精通TCP細節,會知道哪些因素影響其性能,比如window size,scaling window,MSS,SACK,NACK,Fast Retransmit /Recovery,Congestion Avoidance,retransmit timer,persistent timer,RTO,RTT等。以及如何增強其安全性的option 19/29等。對於這個協議要看很多遍,要學會熟練抓包研究,TCP每個欄位,每個標誌位都瞭然於胸,就如同熟悉自己的左手與右手。

IP協議等同於網路,目前常用的網路層協議就它,毫無疑問我們要深入研究它,熟悉它的欄位就會自己知道它完成哪些使命:

  • QoS
  • fragment/ reassemble
  • Destination IP-based Routing
  • Protocol multiplex/demultiplex
  • IP Header Checksum
  • TTL
  • IP選路其實就是IP Routing,討論的就是常用的路由協議,路由協議相當於電子導航,可以幫助IP包到達終點。

    ICMP不僅僅是ping / traceroute,它們只是利用ICMP協議特徵來編寫的小程序。要深刻掌握ICMP type 0、3、5、8、11,IP包在到達終點前的任何一個節點出錯,都會使用ICMP來向源主機(Source Host)傳達出錯信息。

    IGMP是關於組播的,組播現在使用的越來越多,了解它的工作原理,IGMPv1/v2/v3,如果編程和組播有關,還需要了解 PIM-ASM,PIM-SSM,PIM-bidir,以及SPT、RPT。

    UDP很簡單,除了Source/ Destination Port , 就剩下長度和Checksum了,UDP要結合broadcast / multicast 來看。

    ARP也很簡單,但是要擴充閱讀gratuitous ARP,以及 ARP spoofing。


    很久以前看過,覺得好像每一章都挺重要


    對於不同工作和項目,重點不一樣。

    建議大體理解之後,用的時候在選修重點。


    1. 我搞後端服務的,偏流媒體方向,對網路和操作系統以及CPU體系架構都要有一個清晰的認識,但並不必須一定是專家,主要是為了利用網路知識理解服務端網路架構、排查問題、解決問題. 真的沒有必要背, wireshark 工具都給你解析的不能再細了。有沒有重傳,有沒有亂序,數據包接收的時間,發送窗口多大,數據有沒有擁塞,等等.... 以及協議的解析,連TCP附加選項都給你解析了,隨時都可以找之前的包或抓包看,如果你真的還去背的話你讓寫 wireshark 的大神情何以堪

    2. 如果不擼TCP/IP協議棧代碼,不搞底層網路編程,真的沒必要全部讀TCP/IP詳解,你不感興趣的或是平常用不到的讀的會非常痛苦,任何書籍都有 「必須讀」、「應該讀」、「重複讀」、「可以不讀的章節」,這些根據每個人的自身情況而決定.

    3. 我不是一個愛讀書的人,但我是一個遇到問題會深挖問題本質的人,比如現在有劫持,需要用到 traceroute 再去看或 google 一下也是可以的,所以推薦優先看 1、2、3、4、5、7、17、18、19、20 ,加粗的是重點,我就不說為什麼了,必須讀

    4. 沒有看過 wireshark 數據包分析實戰的話買一本吧,裡面有很多抓好的示例包供你參考,這本書基本可以滿足你排查問題和解決問題的需求,我現在也就主要用到這些

    結合陶輝的軟文:高性能網路編程(一)----accept建立連接 - 陶輝的專欄 - 博客頻道 - CSDN.NET

    結合在應用層如何測量TCP擁塞窗口:Measuring TCP Congestion Windows

    我就是這麼過來的,我不是科班出身,但經歷過這幾個階段後,至少工作中是絕對夠用了,把這兩本放公司,心情好的時候翻一番,就當消遣了. 還有,技術這東西千萬別死記硬背!


    題主明明說了,目的是「主要用於網路編程中對基本原理的了解,不是主要從事網路相關的工作」,那些說全都讀的姑且認為是出於好心吧
    鏈路層協議其實可以跳過,應用層開發是幾乎用不到的
    涉及到IP、TCP、UDP是絕對的重點,ICMP建議了解,ARP在絕大多數編程過程中涉及不到,諸如其他的協議,有興趣可以看一下


    說點自己的見解。
    假設已經對TCP/IP協議族有了一定的了解,那麼19~23章是值得細讀的。


    說真的,我「瀏覽」完了,然後覺得這本書根本不需要買。
    首先想明白你需要學的是什麼,是基本概念,普通應用程序開發,偏底層的應用程序開發,還是系統內核/網卡驅動開發?
    如果是基本概念,那麼這本書太晦澀了,不如直接在網上找東西讀。wikipedia 的中英文頁面看一下,知乎上搜幾個相關問題看一下,該懂的就都懂了。
    如果要開發應用程序,現實中你一般只會用到 listen/connect/accept 這樣的函數,你就算想自己處理 TCP/IP 包操作系統都不會給你許可權。其實絕大部分人連 POSIX API 都用不到,因為 GTK/Qt 這樣的第三方庫還會再給它包一層,用起來方便得多。
    如果是偏底層的應用程序,比如想自己造個代理,在不用第三方庫的情況下確實可能需要處理 TCP/IP 包的格式。然而仍然沒必要讀書,不就是個 struct 么,wikipedia 上已經寫得很明白了。而且 wikipedia 有 IPV6 的內容,這本書上都是上世紀的古董。至於擁塞控制的具體實現,我反正沒用到過。
    如果你要開發內核或者網卡驅動,那麼我沒有發言權,不過從問題描述來看這應該不是你的需求吧。

    強烈建議推薦這本書的人都詳細介紹一下書中的知識有哪些應用場景(不要說面試謝謝),以及本書和網上的內容比起來優勢在哪裡。


    卷一全是基礎協議,哪個不讀都不行吧……


    哪一章都很重要,學會了各種猥瑣交互模式和應用場景


    沒啥重點不重點的。關鍵是方法。找到樂趣。手段。


    兄弟真的想搞明白tcp,我建議協議棧造輪子,算下來其實也就2到3萬行代碼,可以參考和關注我的輪子,完成度一半吧,希望對你有所幫助,坐下來開敲才最重要
    https://github.com/Kiddinglife/geconet


    對各位的答案我補充一點,第十章可以看計算機網路之構造互聯網 - 網易雲課堂的視頻作為補充,關於動態選路張永民老師講的比較詳細。


    卷一 整一卷都是重點啊 卷二卷三 你沒必要知道他們的存在 除非 你想實現協議 或者自己設計協議


    都得讀,最好搞個實驗環境做一下實驗!!!


    全是重點。。。如果真的要深入研究這方面的話


    我覺得不讀哪一張都是罪過


    等你工作了會發現,對於大多數人來說,這書基本沒有什麼用,伺服器編程這塊,天生就愛裝逼,unix網路編程,tcp/ip協議詳解,還有一本什麼系統編程,又臭又長,是給人看的么?多寫寫程序就明白了


    推薦閱讀:

    OpenWrt 路由器如何讓 lan 口主機獲得 ipv6 網路訪問?
    怎麼理解TCP的面向連接和UDP的無連接(不面向連接)?
    tcp 握手後向公網發送包,與mss大小不符合,丟失問題?
    IPv6是否有FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF這個地址?

    TAG:Linux | 計算機網路 | 網路編程 | TCPIP | 網路工程 |