1. 程式人生 > >tcp/ip詳解卷一(筆記2:UDP及相關的協議)

tcp/ip詳解卷一(筆記2:UDP及相關的協議)

文章目錄

11.UDP

11.1 關於ip分片

在ip首部中,下面這些欄位用於分片過程。對應傳送端傳送的每份ip資料報來說,其標識欄位都包含一個唯一的值。該值在資料報分片時被複制到每個分片中。標誌欄位用其中一個bit來表示“更多的片”。除了最後一片外,其他的每片組成的資料報的片都把該bit置為1.片偏移欄位就是該片偏移原始資料報開始處的位置。另外,當資料報被分片後,每個片的總長度值都要改成該片的長度值。

另外,標誌欄位中有一個bit稱為“不分片”位。如果將這一bit置為1,ip將不對資料報進行分片。相反,會把該資料報丟棄,併發送一個icmp差錯報文(需要分片,但是設定了不分片)

在分片時,傳輸層首部資訊只出現在第一個分片中。把一份ip資料報分片後,只有達到目的地後才進行組裝。重新組裝在目的端中ip層完成。

當第一個資料片出現後,ip層必須啟動一個定時器。這裡的第一個表示給定的資料報的第一個達到的資料報片,而不是資料報片(即片偏移為0)。正常的定時器設定為30或60秒。如果定時器超時而該資料報的所有資料報片未能全部達到,那麼將這些資料報片丟棄。如果不這麼做,那些永遠不會到的資料報片會慢慢引起接收端快取滿。

11.2 udp限制本地、遠端ip地址

11.2.1 限制本地ip地址

當伺服器建立端點時,它可以把其中一個主機本地ip地址包括廣播地址指定為端點的本地ip地址。只有當目的的ip地址與指定的地址相匹配時,進入udp的資料報才能被送到這個端點。

11.2.2 限制遠端ip地址

在netstat輸出中,如果遠端ip地址、埠號為*.*,則表示該端點將接受來自任何ip和任何埠的udp資料報。大多數系統允許UDP埠對遠端地址進行限制。

12.廣播與多播

廣播與多播僅應用與UDP (TCP要求兩端建立雙向連線,即端到端的連線)

主機對通道傳輸來的幀過濾過程
在這裡插入圖片描述

  1. 介面卡: 網絡卡檢視通道傳送的資料,確定是否接收。接收後就發往裝置驅動程式中。通常情況下,網絡卡僅接收目的地址為網絡卡地址或是廣播地址的幀。另外,網絡卡在混雜模式下,網絡卡能接收每個幀的一個複製,例如tcpdump;

  2. 裝置驅動程式對收到的幀進行過濾。幀中必須指定要使用的協議(iP,ARP等)。如果是多播,檢查當前主機是否屬於該多播組;

  3. 如果幀表明要使用的協議為IP協議。則IP層繼續處理。IP檢查目的地址與源地址等其他檢查,如果正常就交給下一層(TCP,UDP);

  4. 每次UDP收到資料後,根據埠號進行資料過濾。如果當前沒有目標程序使用該目的埠號,就丟棄該資料報,併產生一個ICMP不可達報文。另外,校驗出錯也會丟棄。

12.1 廣播

廣播主要是對多個目的地址傳送資料包。這些目的地址具有共性:處於同相同的網路號或子網中(處理受限的廣播外)。

廣播分為:受限的廣播、指向網路的廣播、指向子網的廣播、指向所有子網的廣播。

12.1.1受限的廣播

受限的廣播指 廣播地址為255.255.255.255。該廣播主要用於主機配置過程,在主機配置過程中,主機不知道自己的網路掩碼,也沒有IP。

注意:

  1. 在任何情況下,路由器都不轉發目的地址為255.255.255.255的受限廣播地址包(該包被限制在本子網內)
  2. 如果一個主機是多介面的,具有多個IP地址。則該主機在廣播時,想對主機中所有介面廣播時,首先需要確定主機中支援廣播的所有介面,然後向每個介面傳送一個數據包複製。

12.1.2指向網路的廣播

這裡的網路是指標準的A,B,C類IP地址中網路號,廣播地址中的主機號全為1.

例如A類網路廣播地址為:netid.255.255.255

在這裡插入圖片描述

路由器必須轉發指向網路的廣播。但是它也必須有一個不進行轉發的選擇。

12.1.3指向子網的廣播

標準的ABC類地址通過子網掩碼劃分子網。指向子網的廣播指該包是在本某子網內廣播。在解析目標IP地址時,需要了解子網掩碼。

例如:路由器收到目的ip為128.1.2.255的資料包,如果B類網路128.1的子網掩碼為255.255.255.0時,該目的地址就是子網的廣播。如果子網掩碼為255.255.254,則該地址就不是子網的廣播地址。(這需要路由器轉發時,檢視iP地址匹配的掩碼,進行解析。)

12.1.4指向所有子網的廣播

感覺該廣播的規模是介於“指向子網的廣播”與“指向網路的廣播”的一種廣播,不知道應用場景。

指向所有子網的廣播同"指向子網的廣播"一樣,也需要直到子網掩碼。指向所有子網的廣播的目的IP地址中子網號與主機號全為1。

12.1.5 廣播IP地址與Mac地址對應

通過設定IP地址與掩碼,可以指定那些IP主機接收該資料報。但是在主機處理資料幀時,首先是校對Mac地址是否匹配。則主機怎麼區分該包是否需要接收呢?網絡卡支援接收廣播資料包,這如何實現?

首先看看Mac地址的結構。

網路裝置的MAC地址是全球唯一的。MAC地址長度為48位元,通常用十六進位制表示。MAC地址包含兩部分:前24位元是組織唯一識別符號(OUI,OrganizationallyUniqueIdentifier),由IEEE統一分配給裝置製造商。
在這裡插入圖片描述

為的網路產品的MAC地址前24位元是0x00e0fc。後24位序列號是廠商分配給每個產品的唯一數值,由各個廠商自行分配

區域網上的幀可以通過三種方式傳送:

  1. 第一種是單播,指從單一的源端傳送到單一的目的端。每個主機介面由一個MAC地址唯一標識,MAC地址的OUI中,第一位元組第8個位元表示地址型別。對於主機MAC地址,這個位元固定為0,表示目的MAC地址為此MAC地址的幀都是傳送到某個唯一的目的端。在衝突域中,所有主機都能收到源主機發送的單播幀,但是其他主機發現目的地址與本地MAC地址不一致後會丟棄收到的幀,只有真正的目的主機才會接收並處理收到的幀。
  2. 廣播:廣播幀的目的MAC地址為十六進位制的FFFFFFFFFFFF,所有收到該廣播幀的主機都要接收並處理這個幀。
  3. 組播:第一位元組第8個位元表示地址型別。對於主機MAC地址,這個位元固定為1。

當在IP層廣播時,填入的Mac地址是FFFFFFFFFFFF。結合路由器()路由器控制轉發到那個子網中),達到廣播的目的。

12.2 多播

這裡主要是多IP多播。
IP多播提供兩類服務:

  1. 向多個目的地址提供資料(多個目的地址沒有共性,不一定屬於同一個網路);
  2. 客戶對伺服器請求。例如無盤工作組傳送多播給一批伺服器,來完成自身的引導。

多播的核心思想、特點:

  • 目的主機的IP地址沒有特點。使用多播組的概念來描述多播的目的機器;
  • 任何機器都可以隨時加入某個多播組;任何加入多播組的機器可以隨時離開; 任何機器都可以隨時加入某個多播組;
  • 存在一些知名多播組,如224.0.0.1表示子網內的所有系統組,224.0.1.1表示網路時間協議NTP。

網絡卡僅接收目的地址為自己或是廣播的資料包。則如果需要網絡卡能夠處理該幀,還需要定義Mac地址與IP地址的關係(否則,網絡卡就會丟擲非自身、非廣播的幀了)。

多播組IP組與Mac地址的對映關係如下:
在這裡插入圖片描述

注意:多播組IP地址中有5位沒有轉化成對應的Mac地址,即IP轉Mac地址是多對一的對映。32個多播組被對映為一個Mac地址。
另外,還有一個問題就是:對於某個目的地址為多播組時,路由器該怎麼處理該包?要將該包轉發到那個網路中呢?它如何直到那些主機加入了該多播組呢?這就是需要用到IGMP(Internet 組管理協議)

13.Internet 組管理協議-IGMP

在多播時,涉及多個網路必須通過路由器進行轉發。IGMP主要用於支援主機和路由器進行多播。主要作用:讓一個物理網路上的所有系統直到主機當前屬於那個多播組。多播路由器需要知道這些資訊以便知道多播資料包轉發到那個埠。IGMP協議也處於IP層。

在這裡插入圖片描述

13.1 IGMP報告和查詢

多播路由器使用IGMP報文來記錄與該路由器相連網路 中的組成員的變化情況。
IGMP規則如下:

  1. 當第一個程序加入一個組時,主機就傳送一個IGMP報文。如果一個主機的多個程序加入同一個組,只發送一個IGMP報告;
  2. 程序離開一個組時,主機不傳送IGMP報文。當主機知道在確定的組中已不再有任何組成後,不傳送IGMP報文,在隨後收到IGMP報文後,不再發送報告報文。
  • 例如:如果主機A有三個程序加入某個IP多播組,開始傳送一個IGMP報文。這時路由器發來了一個IGMP報文了,主機會回覆報文,告訴路由器自己加入的IP多播組。然後三個程序逐漸的離開該IP多播組。這是主機不管。這時路由器發來了一個IGMP報文了,主機會忽略該報文。例如:如果主機A有三個程序加入某個IP多播組,開始傳送一個IGMP報文。這時路由器發來了一個IGMP報文了,主機會回覆報文,告訴路由器自己加入的IP多播組。然後三個程序逐漸的離開該IP多播組。這是主機不管。這時路由器發來了一個IGMP報文了,主機會忽略該報文。
  1. 多播路由器定時傳送IGMP查詢報文來了解是否還有任何主機屬於多播組。多播路由器必須向每個介面傳送一個IGMP查詢;
  2. 主機通過傳送IGMP報告來響應IGMP查詢;
  3. 多播路由器對每個網口保持一個表,記錄介面上至少還有一個主機的多播組。路由器不關係某個網路有那些主機屬於某一個多播組,只在乎是否有主機屬於某個多播組(boolean型別)

在具體實現上的優化:

  • 當主機的第一個程序加入一個多播組時,由於不保證報文是否被可靠接收。可在一定間隔時間後重新發送一個IGMP報文;
  • 由於路由器不關係某個網路有那些主機屬於某一個多播組,只在乎是否有主機屬於某個多播組。當路由器傳送IGMP查詢報文時,某個主機發現其他主機回覆了、且回覆的報文中包含了自己加入的廣播組,則自己就不回覆了。(在回覆報文中,目的地址就是組地址)

14.DNS

DNS是一種用於TCP/IP 應用程式的分散式資料庫。DNS的名字空間和Unix檔案系統相似,也具有層次結構。其中一個獨立管理的DNS子樹被成為一個區域(Zone)。一旦一個區域的授權機構被委派後,由它負責向該區域提供多個名字伺服器。一個名字伺服器負責一個或多個區域。一個區域的管理者必須為該區域提供一個主名字伺服器和至少一個輔助名字伺服器(back up)

當一個新主機加入一個區域時,區域管理者將適當的資訊(至少包括名字和ip地址)加入主名字伺服器上的一個磁碟檔案中,然後通知主名字伺服器重新載入調入配置檔案。

當一個名字伺服器某個請求的資料時(如名字伺服器收到請求,查詢HostXX的IP,該名字伺服器不知道),它不知道怎麼和其他名字伺服器通訊,但是他必須直到怎麼和根名字伺服器通訊。根名字伺服器知道所有下屬的二級域中的授權的名字服務地址與名字。

14.1 DNS報文格式

在這裡插入圖片描述

其中16bit的標誌欄位具體分為若干個子欄位,具體如下:
在這裡插入圖片描述

其中:

  1. RD欄位表示“期望遞迴”,這個標識表示請求的名字伺服器必須處理這個請求,返回結果,而不是下一節名字伺服器。如果該欄位為0,即沒有設定該標註,如果請求的名字伺服器沒有對應的授權資料,則會返回能解答的其他名字服務列表(該屬於迭代查詢)
  2. 注意:在DNS查詢報文中,根據域名查詢IP地址使用的型別為A的DNS查詢報文;根據IP地址查詢域名,使用的是型別為PTR的DNS查詢報文;

14.2 DNS 使用TCP還是UDP

DNS伺服器使用的埠是53,支援TCP和UDP。這兩種模式的使用場景:

  1. 當名字解析器發出一個查詢時,如果TC(刪減標誌)位被設定,則意味著響應的長度超過了512位元組,但是僅返回了512位元組。遇到這種情況時,名字解析器通常會使用TCP重發請求,該中模式執行響應超過512位元組(TCP支援分段);
  2. 另外,當服務名字伺服器啟動時,會從主名字伺服器獲取大量資料,這時使用TCP請求。

15 TFTP:簡單檔案傳輸協議

最初打算用於引導無盤系統(如X終端),為了保持簡單與短小,TFTP基於UDP。

TFTP報文格式如下:

在這裡插入圖片描述

說明:

  1. tftp報文的頭兩個位元組表示操作碼,對於讀/寫請求,檔名欄位說明客戶要讀寫的(伺服器上的)檔案,這個欄位為0位元組作為結束;模式欄位是一個ASCII碼串netascii或octet。其中模式欄位netascii表示:資料是以成行的ascii碼組成,以cr/lf作為行結束符;模式欄位octet表示檔案為8bit的位元組流;
  2. 每個資料分組包含一個塊編號欄位,它用作確認分組使用;

協議運作過程:

  1. 在開始工作時,TFTP協議客戶與伺服器交換資訊,客戶傳送一個讀請求或是寫請求給伺服器;(在用於引導時,正常情況下,是傳送一個讀請求);這裡以讀檔案為例,客戶傳送讀請求(請求裡包含要讀的檔名);
  2. 如果這個檔案能被這個客戶讀取,tftp伺服器返回一個塊編號為1的資料分組;
  3. 客戶端收到該塊編號為1的資料分組後,會向伺服器傳送一個塊編號為1的ack(注意這裡返回的ack編號和server傳送的資料編號是一致的);
  4. tftp收到 編號為1的ack包後,傳送編號為2的資料分組;
  5. 客戶端收到該塊編號為2的資料分組後,會向伺服器傳送一個塊編號為2的ack;
  6. 如此往復,最後,伺服器傳送最後一個數據包,該資料包內容不足512位元組的資料;
  7. 客戶端收到該資料分組後,由於長度不足512,就知道檔案傳輸完了。

在寫檔案模式下,client傳送寫請求,包含寫的檔名,如果該檔案允許寫,則server傳送編號為0的ACK包。然後client開始傳送資料,傳送編號為1的資料包。

該種類型的資料傳輸協議稱為停止等待協議

注意:tftp不提供使用者名稱和口令。tftp協議這一特徵被許多解密高手用於獲取unix口令檔案的複製,然後用來猜測使用者口令。為了防止這裡型別的訪問,目前大多數tftp伺服器提供了一個選項用來限制只能訪問特定的檔案。

16 BooTP:載入程式協議

bootp請求和響應封裝在upd資料報中。用於系統在不知道自身IP地址的情況下,進行引導獲取IP地址。

bootp資料格式:
在這裡插入圖片描述

在這裡插入圖片描述