一、udp協議
udp 是乙個簡單的面向資料報的運輸層協議,程序的每個輸出操作都產生乙個udp資料報,並組裝成乙份待傳送的ip資料報。udp不提供可靠性。
udp封裝格式:
ip首部(20) udp首部(8) udp資料
1、udp首部:
16位源埠號 16位目的埠號
16位udp長度 16位udp檢驗和
資料(如果有)
埠號表示傳送和接收的程序。
udp長度欄位指的是udp首部和udp資料的位元組長度,該字段的最小值是8,表示沒有資料。該長度不包括ip首部長度。
udp檢驗和包括udp首部和udp資料的檢驗和。由於udp資料報的長度可以為奇數位元組數,因此計算時在最後增加填充位元組0,這只是為了檢驗和的計算。
2、 udp檢驗和
udp和tcp首部都包含乙個12位元組的偽首部,包含了ip首部和自身的一些字段,主要是為了計算檢驗和而設定的。偽首部是不佔實際空間的。偽首部包含ip首部的一些字段,目的是讓udp兩次檢查資料是否已經到達目的地,以及ip層是否正確地傳輸了資料。
udp偽首部格式如下:
32位源ip位址
32位目的ip位址
0 8位協議(17) 16位udp長度
16位源埠 16位目的埠
16位udp長度 16位udp檢驗和
資料(如果有)
前12個位元組就是udp偽首部。
注意:udp資料報的長度在檢驗和計算過程中出現兩次。如果檢驗和的計算結果為0,則存入的值為全1(65535),如果傳送的檢驗和是0,則說明傳送端沒有計算檢驗和。如果有錯誤,該報就被丟棄,不產生任何差錯報文。
3、 ip分片
任何ip層接收到乙份要傳送的ip資料報時,它要判斷向本地哪個介面傳送資料,並查詢該介面的mtu。ip把mtu與資料報的長度進行比較,如果需要則進行分片。分片可以發生在原始傳送端主機上,也可以傳送在中間路由器上。ip資料報分片後,只有到達目的主機後才進行重灌。
ip首部與分片有關的字段:
(1)對於每份ip資料報來說,都有乙個標識字段,該值在分片時被複製到每個片中。
(2)標誌欄位用其中乙個bit表示「更多的片」,除最後一片外,其他每個分片都要設定為1。
(3)片偏移欄位指的是該片偏移原始資料報開始處的位置。
(4)資料報被分片後,每個片的總長度要改為該片的長度值。
(5)標誌欄位中有乙個bit表示「不分片」,如果該位1,ip將不對資料報進行分片。
ip報即使丟失一片資料報也要重傳整個資料報。為什麼呢?因為ip層沒有超時重傳的機制,必須由更高層負責超時重傳。
4、icmp不可達差錯(需要分片)
當路由器收到乙份需要分片的資料報,而在ip首部又設定了不分片(df)的標誌位。如果需要判斷到達目的端的路途中最小mtu是多少,就可以通過這個差錯實現。
報文格式如下:
型別3 **4 檢驗和
保留,必須為0 下一站的mtu
ip首部+原始ip資料報中資料前8位
可以用traceroute確定路徑mtu。要做的是傳送分組,並設定「不分片」標誌位。傳送的第乙個分組的長度正好與出口mtu相等,每次收到icmp「不能分片」差錯時,就減少分組的長度。如果路由器傳送的icmp差錯報文是上面格式,包含出口的mtu,那麼就用該mtu值來傳送,否則就用下乙個最小的mtu值來傳送。mtu值的個數是有限的,因此可以取得路徑的mtu。
5、 udp伺服器的設計:
(2)目的ip位址
(3)udp輸入佇列:通常程式所使用的每個udp埠都與乙個有限大小的輸入佇列相聯絡。也就是來自不同客戶的差不多同時到達的請求將由udp自動排隊,接收到的udp資料報以其接收順序交給應用程式。
3、指向子網的廣播:指向子網的廣播位址是主機號全為1的位址,作為子網直接廣播的ip位址需要知道子網的掩碼。如果b類網路128.1的子網掩碼是255.255.255.0,則位址128.1.2.255就是對應子網的廣播位址。
4、指向所有子網的廣播:指向所有子網的廣播也需要知道目的網路的子網掩碼。這些廣播位址的子網號和主機號全為1。如果目的子網掩碼是255.255.255.0,那麼ip位址128.1.255.255就是乙個指向所有子網的廣播位址。
224.0.0.1-該子網內地所有系統組
224.0.0.2-該子網內地所有路由器組
224.0.1.1-網路時間協議ntp
224.0.0.9-rip2
224.0.1.2-sgi公司的dogfight應用2、多播位址到乙太網位址的轉換:
iana擁有乙個乙太網位址塊,即高位24位為00-00-5e,這意味這該位址塊所擁有的位址範圍從00-00-5e-00-00-00到00-00-5e-ff-ff-ff。iana將其中的一般分配為多播位址。為了指明乙個多播位址,任何乙太網位址的首位元組必須為01,這意味者與ip多播相對應的乙太網位址範圍從01-00-5e-00-00-00到01-00-5e-7f-ff-ff。
這種位址分配將使乙太網多播位址的23位與ip多播組號相對應起來,通過將多播組號中的低23位對映到乙太網位址中的低23位事項。
由於多播組號中的最高5位在對映過程中被忽略,因此每個乙太網多播位址對應的多播組是不唯一的,32個不同的多播組號被對映位乙個乙太網位址。例如,多播位址224.128.64.32(16進製為e0-80-40-20)和224.0.64.32(16進製為e0-00-40-20)都對映為同一乙太網位址01-00-5e-00-40-20。
既然位址對映不是唯一的,那麼裝置驅動層或ip層就必須對資料報進行過濾,因為網絡卡可能收到主機不想接收的多播資料幀。
四、igmp:internet組管理協議
igmp 讓乙個物理網路上的所有系統知道主機當前所在的廣播組。多播路由器需要這些資訊以便知道多播資料報應該向哪些介面**。igmp也被當作ip層的一部分,igmp報文通過ip資料報進行傳輸,其報文格式如下:
4位版本1 4位型別(1-2) 未用 檢驗和
32位組位址(d類ip位址)
igmp型別位1說明是由多播路由器發出的查詢報文,為2說明是主機發出的報告報文。
檢驗和的計算和icmp協議一樣。
組位址為d類ip位址,在查詢報文中組位址設定為0,在報告報文中組位址為要參加的組位址。
1、加入乙個多播組
程序以某種方式在給定的介面上加入某個多播組,程序也能離開先前加入的多播組。乙個程序可以在多個介面上加入同一多播組。主機通過組位址和介面來標識乙個多播組。主機必須保留乙個表,該表中包含所有至少含有乙個程序的多播組及多播組中的程序數量。
2、igmp報告和查詢
多播路由器通過igmp報文來記錄與該路由器相連網路中組成員的變化情況,規則如下:
(1) 當第乙個程序加入組時,主機就傳送乙個igmp報告。如果主機的多個程序加入同一組,只傳送乙個igmp報告。這個報告被傳送到程序加入組所在的同一介面上。
(2) 程序離開乙個組時,主機不傳送igmp報告,即使時組中最後乙個程序離開。主機知道在確定的組中已不再由組成員後,在隨後的igmp查詢中就不再傳送報告報文。
(3) 多播路由器定時傳送igmp查詢是否還有任何主機包含有屬於多播組的程序。多播路由器必須向每乙個介面傳送igmp查詢。因為路由器希望主機對它加入的每個多播組均返回乙個報告,因此igmp查詢報文中的組位址被設定為0。
(4) 主機通過傳送igmp報告來響應乙個igmp查詢,對每個至少還包含乙個程序的組均要發回igmp報告。
3、實現細節
(1) 當乙個主機首次傳送igmp報告時,並不保證該報告被可靠地接收,下乙個報告將在間隔一段時間後傳送。
(2) 當乙個主機收到從乙個路由器發出地查詢後,並不立即響應,而是經過一定的時間間隔後才發出一些響應。
(3) 乙個主機在等待傳送報告的過程中,卻收到了發自其他主機的相同報告,則該主機的響應就不用傳送了。
(4) 在沒有任何多播路由器的單個物理網路中,僅有的igmp通訊量就是在主機加入乙個新的多播組時,支援ip多播的主機傳送的報告。
4、生存時間字段
igmp報告和查詢的生存時間(ttl)均設定為1,這將使多播資料報僅限於同一子網內傳送。更大的ttl值能被多播路由器**。224.0.0.0-224.0.0.255的特殊位址使打算用於多播範圍不超過1跳的應用,不管ttl是多少,多播路由器均不**目的位址為這些位址中的任何乙個位址的資料報。
5、所有主機組
224.0.0.1位址稱為所有主機組位址,它涉及在乙個物理網路中所有具備多播能力的主機和路由器。當介面初始化後,所有具備多播能力介面上的主機均自動加入這個多播組。這個組的成員無需傳送igmp報告。
TCP IP學習筆記(四)
tcp ip學習筆記 四 一 udp協議 udp 是乙個簡單的面向資料報的運輸層協議,程序的每個輸出操作都產生乙個udp資料報,並組裝成乙份待傳送的ip資料報。udp不提供可靠性。udp封裝格式 ip首部 20 udp首部 8 udp資料 1 udp首部 16位源埠號 16位目的埠號 16位udp長...
TCP IP學習筆記(四)
tcp ip學習筆記 四 一 udp協議 udp 是乙個簡單的面向資料報的運輸層協議,程序的每個輸出操作都產生乙個udp資料報,並組裝成乙份待傳送的ip資料報。udp不提供可靠性。udp封裝格式 ip首部 20 udp首部 8 udp資料 1 udp首部 16位源埠號 16位目的埠號 16位udp長...
TCP IP 協議筆記四
一 tcp首部 t c p提供了一種可靠的面向連線的位元組流運輸層服務。t c p將使用者資料打包構成報文段 它傳送資料後啟動乙個定時器 另一端對收到的資料進行確認,對失序的資料重新排序,丟棄重複資料 t c p提供端到端的流量控制,並計算和驗證乙個強制性的端到端檢驗和。每個t c p段都包含源端和...