《圖解TCP/IP》讀書筆記二:TCP/IP基礎知識

衣舞晨風發表於2018-02-10

這裡寫圖片描述
TCP(Transmission Control Protocol,傳輸控制協議)
IP(Internet Protocol,網路之間互連的協議)
ICMP(Internet Control Message Protocol, 網際網路控制訊息協議)
ARP(Address Resolution Protocol,地址解析協議)
RARP(Reverse Address Resolution Protocol,反向地址轉換協議)

2.2.1 TCP/IP具體含義

      從字面意義上講, 有人可能會認為TCP/IP是指TCP和IP兩種協議. 實際生活中有時也確實就是指這兩種協議. 然而在很多情況下, 它只是利用IP進行通訊時所必須用到的協議群的統稱.

      具體來說, IP或ICMP, TCP或UDP, TELENT或FTP, 以及HTTP等都屬於TCP/IP的協議

      TCP/IP 一詞泛指這些協議, 因此, 有時也成 TCP/IP 為網際協議族

這裡寫圖片描述

2.4 TCP/IP協議分層模型

2.4.1 TCP/IP與OSI參考模型

這裡寫圖片描述

      OSI參考模型注重“通訊協議必要的功能是什麼”,而TCP/IP則更強調“在計算機上實現協議應該開發哪種程式”。

2.4.2 硬體(物理層)

      TCP/IP的最底層是負責資料傳輸的硬體。這種硬體就相當於乙太網或電話線路等物理層的裝置。

網路介面層(資料鏈路層)

      網路介面層利用乙太網中的資料鏈路層進行通訊,屬於介面層,把它當做讓NIC起作用的“驅動程式”也無妨。驅動程式是在作業系統與硬體之間起橋樑作用的軟體。 有時人們也將網路介面層與硬體層合併起來稱為網路通訊層。

網際網路層(網路層)

      網際網路層使用的是IP協議,相當於OSI參考模型中的第3層網路層。IP協議依靠IP地址進行轉發分包資料。

這裡寫圖片描述

      TCP/IP分層模型中的網際網路層與傳輸層的功能通常是有作業系統提供的。尤其是路由器,它必須具有網際網路層轉發分組資料包的功能。所以連線網際網路的所有的主機與路由器都必須實現IP的功能。

下面來具體看一下網路層的一些重要協議:

IP協議

      IP是跨越網路傳送分組資料包, 使整個網際網路都能收到資料的協議, 這期間它使用IP地址作為主機的標識.

      IP還隱含著資料鏈路層的功能, 通過IP, 相互通訊的主機之間無論經過怎樣的底層資料鏈路都能夠實現通訊.

      但是, 雖然IP是分組交換的一種協議, 但是它不具有重發機制, 所以是非可靠性傳輸協議. 即使分組資料包未能到達對端主機也不會重發.

      連線網際網路的所有主機跟路由器都必須實現IP的功能, 即通過網路層轉發分組資料包. 尤其是路由器.

ICMP協議

      雖然IP不提供可靠的傳輸服務, 但是如果在IP協議傳輸資料包時出錯了, 可以通過ICMP報告, ICMP在IP模組中實現.

      ICMP, Internet控制報文協議(IP協議的小弟). 當IP資料包在傳送途中一旦發生異常導致無法到達對端目標地址時, 需要給傳送端傳送一個異常的通知, ICMP就是為這一功能制定的, 它有時也被用來診斷網路的健康狀況.

ARP協議

      ARP協議就是將分組資料包中的IP地址解析為MAC地址的協議, 因為資料鏈路層通訊採用的是MAC地址.

      相對應的還有一個RARP協議, RARP協議就是將MAC地址解析為IP地址的協議.

2.4.5 傳輸層

      傳輸層最主要的功能就是能夠讓應用程式之間實現通訊. 也就是為兩臺主機提供端對端的通訊.

      計算機內部通常執行著多個應用程式, 為了區分是哪些程式和哪些程式在進行通訊, 計算機採用埠號來進行識別和管理.

      傳輸層最重要的兩個協議就是TCP協議和UDP協議了.

TCP協議

      TCP是一種面向有連線的傳輸層協議. 它可以保證兩端通訊主機之間的通訊可達.

      TCP能夠正確處理在傳輸過程中的丟包/傳輸順序錯亂等異常情況. 此外, TCP還能夠有效利用頻寬, 緩解網路擁堵.

      然而, TCP如此可靠的通訊時需要付出代價的, 有時至少需要至少7次的發包收包,導致網路流量的浪費.因此不太利於(音訊,視訊的資料量既定)等場合的使用.

UDP協議

      UDP是一種面向無連線的傳輸層協議. UDP不會關注對端是否收到了傳送的資料. 如果需要檢查對端是否收到了分組資料包, 或者對端是否連線到網路, 則需要我們自己在應用程式中實現.

      UDP常用於分組資料較少或多播、廣播通訊以及視訊通訊等多媒體領域。

2.4.6 應用層(會話層以上的分層)

      TCP/IP的分層中,將OSI參考模型中的會話層、表示層和應用層的功能都集中到了應用程式中實現。

      HTTP協議屬於應用層的協議,HTML和電子郵件屬於表示層協議。

      例如:電子郵件(E-mail)、檔案傳輸(FTP)、遠端登入(TELENET與SSH)、網路管理(SNMP)

2.5 TCP/IP 分層模型與通訊示例

2.5.1資料包首部

這裡寫圖片描述

      每個分層中,都會對所發資料附加一個首部,在這個首部中包含了該層必要的資訊,如傳送的目標地址以及協議相關資訊。通常,為協議提供的資訊為包首部,所要傳送的內容為資料。 在下一層的角度來看,從上一層收到的包全部都被視為本層的資料。

包、幀、資料包、段、訊息
包是全能性術語。
幀用於表示資料鏈路層中包的單位。
資料包是IP和UDP等網路層以上的分層中包的單位。
段則表示TCP資料流中的資訊。
訊息是指應用協議中資料的單位。

包首部就像是協議的臉

      網路中傳輸的資料包由兩部分組成: 一部分是協議所要用到的首部,另一部分是上層傳過來的資料。

      首部的結構由協議的具體規範詳細定義。例如,識別上一層協議的域應該從包的哪一位開始取多少個位元、如何計算校驗和並插入包的哪一位等。相互通訊的兩端計算機如果在識別協議的序號以及校驗和的計算方法上不一樣,就根本無法實現通訊。

      因此,在資料包的首部,明確標明瞭協議應該如何讀取資料。反過來說,看到首部,也就能夠了解該協議必要的資訊以及所要處理的內容。因此,看到包首部就如同看到協議的規範。難怪有人說首部就像是協議的臉了。

2.5.2 傳送資料包

      假設甲給乙傳送電子郵件,內容為:“早上好”。而從TCP/IP通訊上看,是從一臺計算機A向另一臺計算機B傳送電子郵件。我們就通過這個例子來講解一下TCP/IP通訊的過程。

1. 應用程式處理

      啟動應用程式新建郵件,將收件人郵箱填好,再由鍵盤輸入郵件內容"早上好", 滑鼠點選傳送按鈕就可以開始TCP/IP通訊了。
首先,應用程式中會進行編碼處理。例如,日文電子郵件使用ISO-2022-JP或UTF-8進行編碼。這些編碼相當於OSI的表示層功能。

      編碼轉換後,實際郵件不一定會馬上被髮送出去,因為有些郵件的軟體又一次同時傳送多個郵件的功能,也可能會有使用者點選收信按鈕以後才一併接收新郵件的功能。 像這種何時建立連線何時傳送資料的管理功能,從某種寬泛的意義上看屬於OSI參考模型中會話層的功能。

      應用在傳送郵件的那一刻建立TCP連線,從而利用這個TCP連線傳送資料。 它的過程首先是將應用的資料傳送給下一層TCP,再作實際的轉發處理。

2. TCP模組的處理

      TCP根據應用的指示,負責建立連線,傳送資料以及斷開連線。 TCP提供將應用層發來的資料順利傳送至對端的可靠傳輸。

      為了實現TCP的這一功能,需要再應用層資料的前端附加一個TCP首部,**TCP首部中包括源埠號和目標埠號(用以識別傳送主機跟接收主機上的應用)、序號(用以傳送的包中那部分是資料)以及校驗和(用以判斷資料是否被損壞)。**隨後將附加了TCP首部的包再傳送給IP.

3. IP模組的處理

      IP將TCP傳過來的TCP首部和TCP資料合起來當作自己的資料,並在TCP首部的前端加上自己的IP首部。因此,IP資料包中IP首部後面緊跟著TCP首部,然後才是應用的資料資料首部和資料本身。IP首部中包含接收端IP地址以及傳送端IP地址。緊隨IP首部的還有用來判斷其後面資料是TCP還是UDP的資訊。

      IP包生成後,參考路由控制表決定接受此IP包的路由或主機。隨後,IP包將被髮送給連線這些路由器或主機網路介面的驅動程式,以實現真正傳送資料。

      如果尚不知道接收端MAC地址,可以利用ARP(Address Resolution Protocol)查詢。只要知道了對端的mac地址,就可以將mac地址和IP交給乙太網的驅動程式,實現資料傳輸。

4. 網路介面(乙太網驅動)的處理

      從IP傳過來的IP包,對於乙太網驅動來說不過就是資料。給這個資料附加上乙太網首部並進行傳送處理。 **乙太網首部中包含接收端MAC地址、傳送端MAC地址以及標誌乙太網型別的乙太網資料的協議。**根據上述資訊產生的乙太網資料包通過物理層傳輸給接收端。傳送處理中的FCS由硬體計算,新增到包的最後。設定FCS的目的是為了判斷資料包是否由於噪聲而被破壞。

這裡寫圖片描述

2.5.3 經過資料鏈路的包

      分組資料包(簡稱包)經過乙太網流動時,從前往後依次被附加了乙太網包首部、IP包首部、TCP首部(或者UDP首部)以及應用自己的包首部和資料。而包的最後則追加了乙太網包尾(Ethernet Tailer).

      每個包首部中至少都會包含兩個資訊:一個是傳送端和接收端地址,另一個是上一層協議型別。

      **經過每個協議分層時,都必須有識別包傳送端和接收端的資訊。乙太網會用MAC地址,IP會用IP地址,TCP/UDP則會用埠號作為識別兩段主機的地址。**即使在應用程式中,像電子郵件這樣的資訊也是一種地址標識。這些地址資訊都在每個包經由各個分層時,附加到協議對應的包首部裡邊。

這裡寫圖片描述

      此外,**每個分層的包首部中還包含一個識別位,它是標識上一層協議的種類資訊。**例如乙太網的包首部中的乙太網型別,IP中的協議型別以及TCP/UDP中兩個埠的埠號都是起著識別協議型別的作用。就是在應用的首部資訊中,有時也會包含一個用來識別其資料型別的標籤。

2.5.4 資料包接收處理

包的接收流程是傳送流程的逆序過程。

5. 網路介面(乙太網驅動)的處理

      主機收到乙太網包以後,首先從乙太網首部找到MAC地址判斷是否位傳送給自己的包。如果不是傳送給自己的包則丟棄資料。

      而如果接收到了恰好是發給自己的包,就查詢乙太網包首部中的型別從而確定乙太網協議所傳送過來的資料型別,如果這時不是IP而是其他諸如ARP的協議,就把資料傳給ARP處理。總之,如果乙太網首部的型別域包含了一個無法識別的協議型別,則丟棄資料。

6. IP模組的處理

      IP模組收到IP包首部以及後面的資料部分以後,也做類似的處理。如果判斷得出包首部中的IP地址與自己的IP地址匹配,則可接收資料並從中查詢上一層的協議。如果上一層是TCP就將IP包首部之後的資料傳給TCP處理;如果是UDP則將IP包首部後面的部分傳給UDP處理。 對於由路由器的情況下,接收端地址往往不是自己的地址,此時,需要藉助路由控制表,在調查應該送達的主機或路由器以後再轉發資料。

7. TCP模組的處理

      在TCP模組中,首先會計算以下校驗和,判斷資料是否被破壞。然後檢查是否在按序號接收資料。最後檢查埠號,確定具體的應用程式。

      資料接收完畢後,接收端則傳送一個確認回執給傳送端。如果這個回執資訊未能達到傳送端,那麼傳送端會認為接收端沒有接收到資料而一直反覆傳送。

       資料被完整的接收以後,會傳給由埠號識別的應用程式。

8. 應用程式的處理

      接收端應用程式會直接接收傳送端傳送的資料。通過解析資料可以獲知郵件的收件人地址是乙的地址。如果主機B上沒有乙的郵件信箱,那麼主機B返回給傳送端一個無此收件地址的報錯資訊。

但在這個例子中,主機B上恰好有乙的收件箱,所以主機B和收件人乙能夠收到電子郵件的正文。郵件會被儲存到本機的磁碟上。如果儲存也能正常進行,那麼接收端會返回一個“處理正常”的回執給傳送端。反之,一旦出現磁碟滿,郵件未能成功儲存等問題,就會傳送一個處理異常的回執給傳送端。 由此,使用者乙就可以利用主機B上的郵件客戶端接收並閱讀由主機A上的使用者甲傳送過來的電子郵件。

《圖解TCP/IP:第5版》下載地址:
http://download.csdn.net/download/xunzaosiyecao/10245906

個人微信公眾號:
這裡寫圖片描述

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章