小小搬運工又來了,五一節即將到來了
udp是面向資料報的傳輸層協議,即程序的每個輸出操作剛好產生乙個udp資料報,並組裝成乙份待傳送的ip資料報。2、udp首部tcp是面向流字元,即應用程式產生的全體資料與真正傳送的單個ip資料報可能沒有什麼聯絡。
udp資料報封裝成ip資料報的格式如圖1所示:
圖1 udp封裝
udp首部如圖2所示:圖2 udp首部
埠號表示傳送程序和接收程序。(ip資料報根據協議字段值區分是udp或tcp)tcp和udp用目的埠號來分用來自ip層的資料。tcp埠號則由tcp來檢視,udp埠號則由udp來檢視。分用指當目的主機收到乙個乙太網資料幀時,資料就開始從協議棧中由底向上公升,同時去掉各層協議上加的報文首部。每層協議盒都要檢查報文首部中的協議標識,以確定接收資料的上層協議,該過程稱為分用。分用的整體過程如圖3所示。
圖3 乙太網資料幀的分用過程
udp長度欄位是udp首部和udp資料的位元組長度。最小值為8,即可以傳送乙份資料長度為0位元組的udp資料報
udp校驗和覆蓋udp首部和udp資料。(ip資料報中校驗和是首部校驗和,不涉及資料)udp的校驗和是可選的,而tcp的校驗和是必須的。udp校驗和的計算方法與ip校驗和類似,但不同之處在於:首先,udp資料報的長度可以為奇數位元組,但是校驗和演算法是將若干個16bit字相加。因此必要時需要在最後填充位元組0,但是這部分位元組只是為了校驗和,因此可能增加的填充位元組並不被傳送
udp資料報和tcp段都包含乙個12位元組長的偽首部,該部分是為了計算檢驗和而設定的。偽首部是包含了ip首部的一些字段,udp偽首部如圖4所示。加入這些欄位的目的是讓udp兩次檢查資料是否已經正確到達目的地。
圖 4 udp校驗和計算過程中使用的各個字段
對於圖中,udp是單數位元組,因此在計算校驗和時需要加上填充字段,若校驗和的計算結果為0,則存入值為全1,若傳送的校驗和為0,表示傳送端沒有計算校驗和。4、ip分片注:傳送端沒有計算校驗和而接收端檢測到校驗和有差錯,則該udp資料報會被丟棄,並且不會產生差錯報文。
udp校驗和選項在預設條件下是開啟的。
ip把mtu和資料報長度進行比較,如果有需要會進行分片。分片會發生在原始傳送端主機上,也有可能發生在中間路由器上。ip資料報分片之後,只有達到目的地之後才進行組裝。重新組裝是由目的端的ip層完成,而分片和重組裝的過程對於傳輸層是透明的。
當需要分片,但是資料報設定了「不分片」位,則ip不對資料報分片,同時將該資料報丟棄,並傳送乙個icmp差錯報文。
在傳輸資料過程中經常要避免分片,因為當丟失某個分片時,需要重傳整個資料文。
關於ip分片,如圖5所示
圖5 觀察udp資料報分片
前兩行,能直接裝入乙太網資料幀,沒有被分片(乙太網資料幀不超過1500位元組,其中ip首部20位元組,udp首部8位元組)對於第3行,寫入的udp資料是1473個位元組,導致資料報1501個位元組,需要分片。分片資訊中第一片長度(位於:和@之間的數字)1480(包含udp首部),則其加上ip首部和udp首部剛好1500個位元組,第二個即第4行只剩乙個位元組的資料。
@後的數字是從資料報開始出計算的片偏移值
+表示ip首部中3bit標誌欄位中的「更多片」位元,即是不是最後一片?
注意:分片時,除了最後一片外,其他每一片的資料部分(除ip首部外的其餘部分)必須是8個位元組的整數倍。本例中1480是8的整數倍
注意:除首片之後的所有分片都省略了協議名udp、源埠號和目的埠號。(udp首部還有首部校驗和和長度資訊?為什麼4行中長度是1),是不是應該是除首片之外所有的分片都省略了udp首部。
發生icmp不可達差錯的一種情況是:當路由器收到乙份需要分片的資料報,而在ip首部設定了不可分片(df)的標誌位元。若某個程式需要判斷到達目的端的路途中最小mtu是多少---稱為路徑mtu發現機制。
需要分片但是未分片情況下產生的icmp不可達差錯報文格式如下:
圖6 需要分片但是設定不分片標誌位元時icmp不可達差錯報文格式
利用traceroute程式傳送分組,並設定「不分片」標誌位元,傳送的第乙個分組的長度正好與出口mtu相等,每次收到icmp「不能分片」差錯時就減少分組的長度。若路由傳送的icmp差錯報文是新格式,則包含出口的mtu,則利用該mtu值來傳送新的報文,否則就用下乙個最小的mtu值來傳送。
對於udp需要分組的情況,由於ip能夠很快的產生n個資料報片,所以每個資料片都會引發乙個arp請求。理論上產生的分片資料報,應該只有第乙個(片偏移為零)的資料報引發arp請求。這種情況為arp洪氾(即以高速率重**送到同乙個ip位址的arp請求),在這種情況下,在等待乙個arp應答時,只將最後乙個報文傳送給特定目的主機。
在第乙個資料報出現時,ip層需要啟動乙個定時器。此處第乙個表示第乙個接收到的報文,並非片偏移為0的資料報。正常的定時器值為30秒或60秒,如果定時器超時而該資料報的所有資料報片未能全部到達,則這些資料報會被丟棄。9、最大udp資料報長度對於大多數berkeley派生的實現從不產生icmp 組裝差錯。這些實現會設定定時器,也會在定時器溢位時將資料報片丟棄,但是不生成icmp差錯。且,並未接收到包含udp首部的偏移量為0的第乙個資料報片。除非收到第乙個資料報片,否則並不要求任何實現產生icmp差錯。
arp輸入是後進先出。
理論上ip資料報長度為65535位元組,除掉20個ip首部和8個位元組的udp首部,udp資料報中使用者資料的最長長度為65507位元組。但是,大多數實現所提供的長度比這個最大值要小。10、icmp源站抑制差錯
當乙個系統(路由器或主機)接收資料報的速度比其處理速度要快時,可能產生源一直差錯。11、udp伺服器的設計icmp源站抑制差錯報文格式如圖7所示:
圖7: icmp源站抑制差錯報文格式
大多數udp伺服器是互動伺服器。通常程式使用的每個udp埠都與乙個有限大小的輸入佇列相聯絡。即來自不同客戶的差不多同時到達的請求都有udp自動排隊。排隊溢位會造成核心中的udp模組丟棄資料報的可能性存在。應用程式並不知道佇列何時溢位。只是由udp對超出資料報進行丟棄處理。udp輸出佇列是fifo(先進先出)。
TCP IP詳解 卷一 協議
第一章概述 第二章internet位址結構 第三章鏈路層 第四章位址解析協議 第五章internet協議 第六章系統配置 dhcp和自動配置 第七章防火牆和網路位址轉換 第八章icmpv4和icmpv6 internet控制報文協議 第九章廣播和本地組播 igmp和mld 第十章使用者資料報協議和i...
《TCP IP詳解卷一 協議》 概述
tcp ip協議族是一組不同層次上的多個協議的組合。tcp ip通常被認為是乙個 四層次協議系統。應用層 負責處理特定的應用程式細節。tcp ip協議族是一組不同的協議組合在一起構成的協議族,儘管通常稱該協議為tcp ip協議,但tcp和ip只是其中的兩種協議而已。該協議族的另乙個名字為intern...
TCP IP 詳解 卷1 協議
分層 鏈路層 裝置驅動程式及介面卡 網路層 ip icmp igmp internet組管理協議 運輸層 tcp udp 應用層 telnet ftp e mail等 可靠連線得由應用層提供。ip提供的是不可靠服務,盡可能快的把分組從源結點送到目的節點。應用層關心的是應用程式的細節,而不是資料傳輸活...