《TCP/IP 入門經典》傳輸層 讀書筆記

1. 一些概念
  • 傳輸層充當了網絡應用程序與網絡之間的接口,能夠把網絡數據傳遞給特定的應用程序, 並且能夠對網絡傳輸提供了可選的錯誤檢測、流量控制和驗證功能。
  • 在TCP/IP 系統中,應用程序可以使用端口號通過 TCP 或 UDP 指定數據目的地。
  • 端口是一個預定義的內部地址,充當從應用程序到傳輸層或是從傳輸層到應用程序之間的通路。
  • 進一步觀察傳輸層這種與應用程序相關的尋址體制,就會發現 TCP 和 UDP 數據實際是被髮送到一個套接字上的。套接字是一個由 IP 地址和端口號組成的地址。 例如,套接字地址 111.121.131.141.21 指向 IP 地址爲 111.121.131.141 的計算機的端口 21。

2. 傳輸層協議需要提供以下功能:
  • 爲網絡應用程序提供接口, 即爲應用程序提供訪問網絡的途徑, 設計者希望不僅能夠向目的計算機傳遞數據,還能夠向目的計算機上的特定程序傳遞數據。
  • 多路複用/多路分解機制:這裏的多路複用表示從不同的應用程序和計算機接收數據,再把數據傳遞到目的計算機上的接收程序。換句話說,傳輸層必須能夠同時支持多個網絡程序和管理傳遞給網際層的數據流。在接收端,傳輸層必須能夠從網際層接收數據,把它轉發到多個程序,這種功能被稱爲多路分解,它可以讓一臺計算機同時支持多個網絡程序,比如一個 Web 瀏覽器、一個 E-mail 客戶端和一個文件共享應用程序。多路複用/多路分解的另一個作用是可以讓一個應用程序同時保持與多臺計算機的連接。
  • 錯誤檢測、流量控制和驗證

  • 傳輸控制協議(TCP):TCP 提供了完善的錯誤控制和流量控制,能夠確保數據正確傳輸,它是一個面向連接的協議。
  • 用戶數據報協議(UDP):UDP 只提供了非常基本的錯誤檢測,用於不需要 TCP 精細控制功能的場合,它是一個無連接的協議。

3. 一些概念:
  • 面向連接的協議:會在通信計算機之間建立並維護一個 連接, 並在傳輸的過程中監視連接的狀態。即通過網絡傳輸的每個數據包都有一個確認, 發送端計算機會記錄狀態信息來確保每個數據包都被準確無誤地接收了, 並且在需要時會重發數據。當數據傳輸結束之後, 雙方會以適當方式關閉連接。
  • 無連接的協議:以當向方式向目的發送數據報, 不承擔通知目的關於數據發送的職責, 目的計算機接收到數據之後也不需要向源計算機返回狀態信息。
  • 可以這樣說,TCP 是爲了可靠性,而 UDP 是爲了速度。 必須要支持交互會話的應用程序,比如 Telnet 和 FTP,就會使用 TCP。而自己實現錯誤檢測或不需要過多錯誤控制的應用程序會傾向於使用 UDP。
  • 套接字尋址系統使得 TCP 和 UDP 能夠執行傳輸層另一個重要任務:多路複用和多路分解。
  • 多路複用是指把多個來源的數據導向一個輸出
  • 多路分解是把從一個來源接收的數據發送到多個輸出
  • 多路複用和多路分解的關鍵就在於套接字地址。套接字爲特定計算機上的特定應用程序提供了一個 唯一的標識。

4. 一臺計算機如何通過套接字訪問目的計算機上的一個應用程序:
  • 計算機 A 通過一個熟知的端口向計算機 B 上的一個應用程序發起一個連接。端口與 IP 地址組合之後就構成了計算機 A 的目的套接字。連接請求包含着一個數據字段,告訴計算機 B 使用什麼套接字向計算機 A 返回信息,這也就是計算機 A 的源套接字地址。
  • 計算機 B 通過熟知端口接收到來自計算機 A 的請求,向作爲計算機 A 源地址的套接字發送一個響應。這個套接字就成爲計算機 B 上的應用程序向計算機 A 上的應用程序發送消息的目的地址。

5. TCP的一些特性:
  • TCP 是一個由 通告和確認 組成的複雜系統,
  • 面向流的處理:TCP 以流的方式處理數據。 換句話說,TCP可以 一個字節一個字節地接收數據,而不是一次接收一個預定義格式的數據塊。TCP 把接收到的數據 組成長度不定的段,再傳遞到網際層。
  • 重新排序:如果數據以錯誤的順序到達目的,TCP 模塊能夠對數據 重新排序來恢復原始順序。
  • 流量控制:TCP 的流量控制特性能夠確保數據傳輸 不會超過 目的計算機 接收數據的能力。
  • 優先級與安全:國防部對 TCP 的規範要求可以爲 TCP 連接設置 可選的安全級別和優先級
  • 適當的關閉:TCP 像重視建立連接一樣 重視關閉連接 的工作,以確保在連接被關閉之前,所有的數據段 都被髮送和接收了。

6. TCP 數據格式:
  • 源端口:16位
  • 目的端口:16位
  • 序列號:32位 ??????????
  • 確認號:32位, 用於確認已經收到的數據分段, 其值是計算機即將接受的下一個序列號, 也就是下一個接收的字節的序列號加1
  • 數據偏移:4位 ???
  • 保留:6位,保留字段,爲TCP將來的發展預留空間,目前必須全部是0。
  • 控制標記:分別佔用1位 ???
  • URG:爲 1 時表示當前數據分段是緊急的,也會讓“緊急指針”字段的值有意義。
  • ACK:爲 1 時表示“確認號”字段是有意義的。
  • PSH:爲 1 時讓 TCP 軟件把目前收到的全部數據都通過管道傳遞給接收應用程序。
  • RST:爲 1 時會重置連接。
  • SYN:爲 1 時表示序列號將被同步,這是說明這是一個連接的開始。
  • FIN:爲 1 時表示發送端計算機已經沒有數據需要發送了。這個標記用於關閉一個連接。
  • 窗口:16 位, 用於流量控制的參數。它定義了發送端計算機的發送序列號可以超過最後一個已確認序列號的數量。也就是說,發送方不必等待每個數據段被確認接收之後才發送下一個數據分段,允許已經確認接收的序列號與正在發送的序列號有一定差別,但必須在適當範圍之內。
  • 校驗和:16 位,用於檢驗數據分段的完整性。接收端計算機會根據接收到的數據分段計算校驗和,並且把結構與這個字段的值進行比較。TCP 和 UDP 在計算校驗和時包含一個具有 IP 地址的僞報頭。
  • 緊急指針:16位,這是一個偏移量指針,指向標記緊急信息開始的序列號。
  • 選項:指定一些可選設置中的某一項。
  • 填充:額外填充的 0(根據需要),以確保數據從 32 位字的邊界開始。
  • 數據:數據分段中的數據。
6. TCP 連接:
  • TCP 的功能之一是爲應用程序提供訪問網絡的接口。這個接口是通過 TCP 端口提供的,而 爲了通過端口提供連接,必須打開 TCP 與應用程序的接口。 TCP支持以下兩種打開狀態。
  • (1)被動打開:某個應用程序進程通知 TCP 準備通過 TCP 端口接收連接,這樣就會打開 TCP 到應用程序的連接,從而爲參與連接請求做準備。
  • (2)主動打開:程序要求 TCP 發起與另一臺計算機(處於被動打開狀態)的連接,這就是主動打開狀態(實際上,TCP 可以對一個處於主動打開狀態的計算機初發起連接,以解決兩臺計算機可能同時嘗試建立連接的問題)。
  • 如果發送端計算機沒有在 指定時間內收到確認 消息,它會從已經得到確認的下一字節重新發送數據。
7. 三次握手:
  • 序列號同步的過程被稱爲三次握手。 三次握手總是發生在 TCP 連接建立的初期。
  • (1)計算機 A 發送一個數據分段, 其中的參數是:
  • SYN=1
  • ACK=0
  • 序列號=X(X 是計算機 A 的 ISN, 即初始序列號)
  • 第一個數據分段的報頭中還包含初始序列號(ISN),標記了計算機將傳輸的第一個字節的序列號。也就是說,要發送給計算機 B 的第 1 個字節的序列號是 ISN 加1。
  • (2)計算機 B 接收到計算機 A 的數據分段,返回一個數據分段,其中的參數是:
  • SYN=1(仍然在同步階段)
  • ACK=1(“確認號”字段將包含一個值)
  • 序列號=Y(Y是計算機 B 的 ISN)
  • 確認號=M+1 (其中的 M 是從計算機 A 接收到的最後一個序列號)
  • (3)計算機 A 向計算機 B 發送一個數據分段,確認收到計算機 B 的 ISN:
  • SYN=0
  • ACK=1
  • 序列號=序列中下一個號碼(M+1)
  • 確認號=N+1(其中N是從計算機B接收到的最後一個序列號)
  • 在這三次握手完成之後,連接就被打開了,TCP 模塊就利用序列和確信機制發送和接收數據。

8. TCP 流量控制
  • TCP 報頭中的 “窗口”字段 爲連接提供了一種流量控制機制,其目的是防止發送端計算機發送得太快,以 避免 接收端計算機 來不及處理 接收到的數據而導致數據丟失。TCP 使用的流量控制方法被稱爲 “滑動窗口” 方法。接收端計算機利用“窗口”字段 (也被稱爲“緩存大小”字段) 來定義一個超過最後一個已確認序列號的序列號“窗口”,在這個範圍內的序列號才允許發送端計算機進行發送。 發送端計算機在沒有接收到下一個確認消息之前不能發送超過這個窗口的序列號。
9. 關閉連接
  • 當需要關閉連接時,計算機開始關閉過程。計算機 A 發送一個數據分段,其中的 FIN 標記設置爲 1。之後應用程序進入“結束——等待(fin-wait)”狀態。
  • 在這個狀態下,計算機 A 的 TCP 軟件繼續接收數據分段,並處理已經在序列中的數據分段,但不再從應用程序接收數據了。
  • 當計算機 B 接收到 FIN 數據分段時,它返回對 FIN 的確認信息,然後發送剩餘的數據分段,通知本地應用程序接收到了FIN消息。
  • 計算機 B 向計算機A發送一個 FIN 數據分段
  • 計算機 A 會返回確認消息,連接就被關閉了。


10. 無連接傳輸協議
  • UDP 實際上它能夠執行基本的錯誤檢驗,即它具有有限的錯誤檢驗功能。
  • UDP 數據報中包含一個校驗和,接收端計算機可以利用它來檢驗數據的完整性。
  • UDP 沒有像 TCP 那樣提供數據的重新排序功能。
  • UDP 的簡單、無連接設計讓它 成爲網絡廣播所使用的協議
  • UDP 協議的主要用途是把數據報傳遞給應用層。
  • UDP 不會重新傳輸丟失或損壞的數據報、重新排列混亂的接收數據、消除重複的數據報、確認數據報的接收、建立或是終止連接。它主要是在程序不必使用 TCP 連接開銷的情況下發送和接收數據報的一種方式。如果上述功能對於應用程序來說是必需的,它可以自己提供這些功能。

11. UDP 包含 4 個 16 位字段:
  • 源端口:16 位,佔據UDP報頭的前 16 位, 通常包含發送數據報的應用程序所使用的 UDP 端口是可選的, 如果發送端的應用程序不寫入其端口號,就應該把這個字段全置爲 0。, 如果爲 0 , 比如單向消息就不需要響應。
  • 目的端口:16 位
  • 長度, 這 16 位字段以字節爲單位表示 UDP 數據報的長度。這個長度包括了 UDP 報頭和 UDP 數據載荷。因爲 UDP 報頭的長度是 8 字節,所以 這個值最小是 8。
  • 校驗和:這 16 位字段可以檢驗數據在傳輸過程中是否損壞。目的計算機對它進行檢驗,讓客戶端用用程序能夠判斷數據報是否完整。
  • 由於實際的 UDP 報頭並不包含源 IP 地址或目標 IP 地址,數據報可能會被傳輸到錯誤的計算機或服務。校驗和使用的部分數據來自於從 IP 報頭(被稱爲僞報頭)提取的值,這個僞報頭包含了目的 IP 地址信息,讓接收段計算機能夠判斷 UDP 數據報是否被錯誤交付。

12. 防火牆和端口
  • 防火牆是一個系統,保護局域網不被來自 Internet 的 未授權用戶攻擊。
  • 防火牆最基本特性就是 阻斷對特定TCP和UDP端口的訪問。
  • 服務器安裝防火牆之後,局域網中的用戶能夠在防火牆之內自由地訪問服務器上的 TCP 端口 22,而局域網之外的網絡用戶就不能訪問服務器的 TCP 端口 22,也就不能通過 SSH 訪問服務器了。
  • 網絡管理員一般會阻斷對全部端口的訪問,除了必需的端口,比如處理 E-mail 的端口。
  • 在連接 Internet 的計算機上,比如 Web 服務器,通常會在外部放置一個防火牆,從而避免對這臺計算機的訪問導致對局域網的非法訪問。

13. 總結
  • TCP 的質量保證是以性能爲代價的。如果 TCP 提供的錯誤控制與流量控制是不必要的,則 UDP 會是一種更好的選擇,因爲它的速度更快。
  • TCP 的控制和恢復特性 提供了交互會話所需的可靠連接。 所以像 Telnet 和 FTP 這種支持交互會話的應用程序使用 TCP 而不是UDP。
  • Internet 防火牆 關閉對特定端口的訪問 以阻止 Internet 用戶訪問使用該端口的應用程序。防火牆還能阻止對 Internet 的訪問,從而防止局域網內部的用戶使用 Internet 上的特定服務。
  • 三次握手的第3步爲什麼是必需的? 在前兩步之後,兩臺計算機已經交換了 ISN 號,所以從理論上來說它們已經具有了足夠的信息來同步連接。但是,在第 2 步中發送 ISN 的計算機還沒有收到確認,因此第 3 步正是確認第 2 步中收到的 ISN。
  • UDP 報頭中源端口字段是可選的。 UDP 是一個無連接協議,接收端計算機上的 UDP 軟件不需要知道源端口。只有在接收軟件需要源端口信息進行錯誤檢驗時,這個字段纔是必要的。

14. 延申
  • 假設你創建了自己的網絡服務:需要考慮是使用 TCP 還是 UDP 傳輸協議來設計服務。在分析時,需要考慮如下因素:
  • (1)性能;
  • (2)可靠性;
  • (3)編程時間。

  • 15. 關鍵術語:
  • “確認號”字段:TCP 報頭中的一個字段,表示計算機準備接收的下一個序列號。它實際上確認了之前的全部順序字節的接收。
  • 主動打開:TCP 嘗試發起一個連接時的狀態。
  • 面向連接的協議:通過在通信計算機之間建立連接來管理通信的協議。
  • 無連接的協議:不與遠程計算機建立連接就進行通信的協議。
  • 防火牆:保護網絡免受 Internet 非法訪問的設備。
  • 僞報頭:從 IP 報頭派生出來的一個結構,用於計算 TCP 或 UDP 校驗和,從而避免數據報由於 IP 報頭信息的變化而發送到錯誤目的。
  • 套接字:特定計算機上特定應用程序使用的網絡地址,由計算機的 IP 地址和應用程序的端口號組成。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章