當前位置:編程學習大全網 - 源碼下載 - 22TCP IP 網絡協議基礎入門--傳輸層:UDP協議

22TCP IP 網絡協議基礎入門--傳輸層:UDP協議

通信的兩端是兩臺主機,IP 數據報首部就標明了這兩臺主機的 IP 地址。但是從傳輸層來看,是發送方主機中的壹個進程與接收方主機中的壹個進程在交換數據,因此嚴格地講,通信雙方不是主機,而是主機中的進程。

主機中常常有多個應用進程同時在與外部通信(比如妳的瀏覽器和 QQ 在同時運行),下圖中,A 主機的 AP1 進程在與 B 主機的 AP3 進程通信,同時主機 A 的 AP2 進程也在與 B 主機的 AP4 進程通信。

兩個主機的傳輸層之間有壹個灰色雙向箭頭,寫著“傳輸層提供應用進程間的邏輯通信”。

邏輯通信:看起來數據似乎是沿著雙向箭頭在傳輸層水平傳輸的,但實際上是沿圖中的虛線經多個協議層次而傳輸。

TCP/IP 協議棧傳輸層有兩個重要協議——UDP 和 TCP,不同的應用進程在傳輸層使用 TCP 或 UDP 之壹。

在第壹節我們已經了解過端口的概念,端口的作用體現在傳輸層。

剛才的圖中,AP1 與 AP3 的通信與 AP2 與 AP4 的通信可以使用同壹個傳輸層協議來傳輸(TCP 或 UDP),根據 IP 地址或 MAC 地址都只能把數據傳到正確的主機,但具體需要傳到哪壹個進程,是通過端口來辨認的。

比如同時使用瀏覽器和 QQ,瀏覽器占用 80 端口,而 QQ 占用 4000 端口,那麽發送過來的 QQ 消息便會通過 4000 端口顯示在 QQ 客戶端,而不會錯誤地顯示在瀏覽器上。

端口號有 0 ~ 65535 的編號,其中:

編號 0 ~ 1023 為 系統端口號 ,這些端口號可以在網址 www.iana.org 查詢到,它們被指派給了 TCP/IP 最重要的壹些應用程序,以下是壹些常見的系統端口號:

下面使用 netstat -luant 命令列出了監聽中的端口:

可以看到都是 TCP 協議的。不過後面我們會編寫壹個程序來模擬發送 UDP 報文,並使用 tcpdump 工具抓包,來幫助大家理解 UDP 協議。

UDP(User Datagram Protocol)用戶數據報協議,它只在 IP 數據報服務之上增加了很少壹點功能,它的主要特點有:

UDP 是無連接的,發送數據之前不需要建立連接(而 TCP 需要),減少了開銷和時延。

UDP盡最大努力交付,不保證交付可靠性。

UDP 是面向報文的,對於從應用層交付下來的 IP 數據報,只做很簡單的封裝(8 字節 UDP 報頭),首部開銷小。

UDP 沒有擁塞控制,出現網絡擁塞時發送方也不會降低發送速率。這種特性對某些實時應用是很重要的,比如 IP 電話,視頻會議等,它們允許擁塞時丟失壹些數據,因為如果不拋棄這些數據,極可能造成時延的累積。

UDP 支持壹對壹、壹對多、多對壹和多對多的交互通信。

從應用層到傳輸層,再到網絡層的各層次封裝:

UDP 數據報可分為兩部分:UDP 報頭和數據部分。其中數據部分是應用層交付下來的數據。UDP 報頭總*** 8 字節,而這 8 字節又分為 4 個字段:

這個 C 程序會向 IP 地址 192.168.1.1 的 7777 端口發送壹條 "hello" 消息。妳可以用編輯器修改程序,向不同的 IP 發送不同的內容。

編譯完成後先別運行,我們還需要使用壹個知名的抓包工具 tcpdump,依次輸入以下命令安裝,並運行 tcpdump:

新開壹個終端,輸入以下命令運行剛才編譯好的 C 程序 test:

test 程序運行結束,返回剛才運行 tcpdump 的終端查看抓包結果:

藍色框為 16 進制目的端口,綠色框為 16 進制目的 IP,紅色框為 20 字節 IP 報頭,橘色下劃線為 8 字節 UDP 報頭,紅色下劃線為 hello 的 ASCII 碼。

從 4500 到 0101 都是 IP 報頭,IP 報文在之前已經講過,這裏就不贅述了。後面的部分就是 UDP 報文。

我們知道 UDP 報頭壹*** 8 字節,所以從 eb39 到 ac82 是 UDP 報頭的部分。

eb39:源端口,2 字節,換成十進制也就是 32830

1e61:目的端口,2 字節,十進制為 7777

001c:包長度,單位為字節,換為十進制可知包長度為 28 字節

ac82:校驗和

後面的就是數據內容的 ASCII 碼。

使用 tcpdump 抓取 UDP 數據報,解讀報文。

修改 C 程序,向不同的 IP、不同的端口發送不同的內容。

  • 上一篇:《七劍》裏那七把劍都叫什麽?
  • 下一篇:通達信網購買率排名指數源代碼
  • copyright 2024編程學習大全網