《圖解TCP/IP》讀書筆記

桃子夭夭發表於2015-04-27

越發相信我之前認為的“用以致學”的觀念了!  死記硬背的那些知識點,那麼久時間過去大部分都忘了,但是遇到了一次ICMP包實際應用的情況,這個IP協議的輔助協議已然牢記在心!

學了不用,或者沒有需求的情況下去學,學習的意義和效率都堪憂。這一點和高中到大學的數學課程教育很像,我很清楚數學的重要性,但是以前學的數學知識基本都忘記了,這也是學了不用的原因吧。

2015.10.24 補充工作中遇到的實際問題:使用ICMP定位問題

有一次從服務端發出TCP訊息,但是手機客戶端沒有收到。設伺服器為A,客戶端為B。

使用wireshark抓包發現,每次A→B的TCP的資料發出去之後,都會收到一個B→A的ICMP包,然後就是A→B的TCP重發,如此重複幾次。

扒開ICMP包看到一個提示:port xxxx unaviliable。 下面一段說明可以解釋原因:

 

那個提示就是一個錯誤報告,說明客戶端發起連線的那個埠不可達了。

 

現在只是胡亂地記了一下,有空了補上比較易懂的圖。

第一部分 基礎知識

1.TCP/IP是協議族,包括ISO7層模型中的多層中的協議。 如ip、tcp、udp、http等。

2.ISO7層模型   方便記憶的叫法:物理資料鏈路 網路傳輸 會話表示應用

第二部分  資料鏈路

1.資料在網路中傳輸的處理順序 

迴圈冗餘校驗&應用包頭及資料(應用層)

-目標埠號&源埠號(傳輸層tcp/udp...)

-上層協議型別&目標ip&源ip(網路層 即ip層)

-乙太網型別&傳送端mac地址&接收端mac地址(資料鏈路層)

-物理傳輸

資料接收時處理的順序相反 
2.交換機工作在第2層   即資料鏈路層   路由器工作在第3層 網路層。  資料鏈路是小型乙太網連通,網路負責通過ip連線各個資料鏈路組成網際網路
第三部分  IP協議
1.面向無連線  制定行程表做火車然後飛機然後汽車,交通工具就是資料鏈路,行程表就是路由表,各站點就是節點(主機&路由器,有IP)
2.ip由網路標識和主機標識組成, 192.168.128.10/24   就代表從0數到24位是網路標識,也就是192.168.128為網路標識,10為主機標識
ip分為ABCD四類 二進位制開頭分別為0 10 110 1110 網路標識分別佔7位  6+8位  5+8+8位   4+8+8+8位  
D類IP木有主機位,一般用於多播
其他類一個網路內最多主機個數正常算,C類的少兩個,一個0.0.0.0為主機不可用時使用,一個1.1.1.1為廣播時使用
廣播不可穿透路由器,多播可以,但是要求路由器和主機都是多播地址
3.子網掩碼,連續1+連續的0,一共32位組成,有多少個1就代表ip有多少位是網路位,配合ip唯一確定一個地址用於靈活制定網路位的長度,以避免資源浪費
4.ip報文可能會在路由器被分片,在主機組合,路由器不會組合,因為下一層路由器還有可能分片
 
第四部分  IP協議相關技術
1.DNS根伺服器儲存第一層DNS伺服器的IP地址。  儲存內容包括 通過域名找IP:A記錄、CNAME:主機別名對應的規範名稱、通過IP找域名:PTR  上下層DNS伺服器的對映 NS記錄
2.DCHP 自動設定IP地址,同一管理IP地址分配的服務。
3.NAT  主機通訊的過程中公網和私網IP的轉換,實現通過一個IP和多臺主機通訊
4.IP隧道 在IPv6和IPv4的網路之間通訊時,IP首部相互無法識別,此時就通過IP隧道在IPv6的IP協議頭部之後附加一個IPv4的IP頭部
5.ARP 在同一個網段內,發出帶IP地址的ARP請求包,對於IP地址的裝置收到請求後,返回ARP響應包,告知其MAC地址,用於通過IP地址查詢MAC地址,以使資料可以在不同網段之間傳輸。雖然知道IP地址就知道裝置位置了,但是資料鏈路中實際傳輸的時候還是需要MAC地址的,所以需要ARP協議。反過來,通過MAC地址獲取IP的協議是RARP。
6.ICMP。用於確認IP包是否成功送達到目標地址,PING命令就是用這個協議實現的。
第五部分  傳輸層 TCP、UDP
1.ip報文頭部裡邊記錄上一層協議型別,傳輸層的頭部會記錄埠號,以確定資料發給哪個應用程式。系統會開啟各種守護程式,通過不同的埠號把資料發給不同協議的守護程式
2.相同傳輸協議不能使用同一個埠,但是不同的傳輸協議是可以使用同一個埠的,資料被分發到不同的程式了
3.UDP是面向無連線的協議,只管發,其他的如收到確認、異常重發全不管,都交給上層的應用去處理
4.TCP的主機每次收到資料,都會傳送一個ACK,資料有誤則回覆NACK(negtive ack)。根據網路情況,超時沒收到ack包就重新傳送
5.建立連線:SYN—ACK+SYN—ACK   斷開連線:FIN—ACK—(傳送沒傳送完的訊息)—FIN—ACK,客戶端服務端都可以發起斷開連線,發起FIN後處於半關閉狀態,只接受訊息,不傳送訊息,發起並收到FIN各一次之後才關閉連線
6.使用視窗來提高網路狀況不佳時的傳輸效率,即不是  傳送-ack-傳送-ack,而是傳送傳送傳送-ackackack-傳送傳送傳送-ackackack ......
7.擁塞控制,設定擁塞視窗,慢啟動,最初設定擁塞視窗大小為1,每收到一個ack擁塞視窗+1(或者根據一個閾值來增加),比較擁塞視窗和接收端視窗大小,每次傳送比較小的那個數量個報文段
第六部分  路由協議
未關注
第七部分  應用協議
1.遠端登入 telnet 通過一條TCP連線向主機傳送文字命令並在主機上執行
2.SSH 加密版本的telnet,並支援更多功能
3.檔案傳輸  FTP 使用TCP協議,開啟兩個TCP連線,一個用於控制,一個用於檔案傳輸
4.郵件 SMTP  TCP協議實現  Simple Mail transfer protocol。
5.HTTP 基於TCP連線。http1.1每次會話都建立一個tcp連線,完成後關閉,tcp1.1允許在一個tcp連線上進行多次會話
6.網路管理  SNMP 使用UDP實現的協議
7.多媒體、即時通訊等技術,即使丟一些包,也喜歡網路延時快一點,由於UDP不用像TCP一樣做流控制、擁塞控制、重發機制等,其資料到達主機要快一些,這類應用多采用基於UDP實現的協議
 
 

相關文章