1.udp
簡要介紹
udp是傳輸層協議,和
tcp協議處於乙個分層中,但是與
tcp協議不同,
udp協議並不提供超時重傳,出錯重傳等功能,也就是說其是不可靠的協議。
2.udp
協議頭
2.1.udp
埠號由於很多軟體需要用到
udp協議,所以
udp協議必須通過某個標誌用以區分不同的程式所需要的資料報。埠號的功能就在於此,例如某乙個
udp程式
a在系統中註冊了
3000
埠,那麼,以後從外面傳進來的目的埠號為
3000
的udp
包都會交給該程式。埠號理論上可以有
2^16
這麼多。因為它的長度是16個
bit
2.2.udp
檢驗和這是乙個可選的選項,並不是所有的系統都對
udp資料報加以檢驗和資料(相對
tcp協議的必須來說
),但是
rfc中標準要求,傳送端應該計算檢驗和。
udp檢驗和覆蓋
udp協議頭和資料,這和
ip的檢驗和是不同的,
ip協議的檢驗和只是覆蓋
ip資料頭,並不覆蓋所有的資料。
udp和
tcp都包含乙個偽首部,這是為了計算檢驗和而攝製的。偽首部甚至還包含
ip位址這樣的
ip協議裡面都有的資訊,目的是讓
udp兩次檢查資料是否已經正確到達目的地。如果傳送端沒有開啟檢驗和選項,而接收端計算檢驗和有差錯,那麼
udp資料將會被悄悄的丟掉(不保證送達),而不產生任何差錯報文。
2.3.udp
長度udp
可以很長很長,可以有
65535
位元組那麼長。但是一般網路在傳送的時候,一次一般傳送不了那麼長的協議(涉及到
mtu的問題),就只好對資料分片,當然,這些是對
udp等上級協議透明的,
udp不需要關心
ip協議層對資料如何分片,下乙個章節將會稍微討論一些分片的策略。
3.ip分片
ip在從上層接到資料以後,要根據
ip位址來判斷從那個介面傳送資料(通過選路),並進行
mtu的查詢,如果資料大小超過
mtu就進行資料分片。資料的分片是對上層和下層透明,而資料也只是到達目的地還會被重新組裝,不過不用擔心,
ip層提供了足夠的資訊進行資料的再組裝。 在
ip頭裡面,
16bit
識別號唯一記錄了乙個
ip包的
id,具有同乙個id的
ip片將會被重新組裝;而
13位片偏移則記錄了某
ip片相對整個包的位置;而這兩個表示中間的
3bit
標誌則標示著該分片後面是否還有新的分片。這三個標示就組成了
ip分片的所有資訊,接受方就可以利用這些資訊對
ip資料進行重新組織(就算是後面的分片比前面的分片先到,這些資訊也是足夠了)。
因為分片技術在網路上被經常的使用,所以偽造
ip分片包進行流氓攻擊的軟體和人也就層出不窮。
可以用trancdroute
程式來進行簡單的
mtu偵測。請參看教材。
3.udp
和arp
之間的互動式用
這是不常被人注意到的乙個細節,這是針對一些系統地實現來說的。當
arp快取還是空的時候。
udp在被傳送之前一定要傳送乙個
arp請求來獲得目的主機的
mac位址,如果這個
udp的資料報足夠大,大到
ip層一定要對其進行分片的時候,想象中,該
udp資料報的第乙個分片會發出乙個
arp查詢請求,所有的分片都輝等到這個查詢完成以後再傳送。事實上是這樣嗎?
結果是,某些系統會讓每乙個分片都傳送乙個
arp查詢,所有的分片都在等待,但是接受到第乙個回應的時候,主機卻只傳送了最後乙個資料片而拋棄了其他,這實在是讓人匪夷所思。這樣,因為分片的資料不能被及時組裝,接受主機將會在一段時間內將永遠無法組裝的
ip資料報拋棄,並且傳送組裝超時的
icmp
報文(其實很多系統不產生這個差錯),以保證接受主機自己的接收端快取不被那些永遠得不到組裝的分片充滿。
4.icmp
源站抑制差錯
當目標主機的處理速度趕不上資料接收的速度,因為接受主機的
ip層快取會被佔滿,所以主機就會發出乙個
「我受不了
」的乙個
icmp
報文。
5.udp
伺服器設計
udp協議的某些特性將會影響我們的伺服器程式設計,大致總結如下: 1.
關於客戶
ipip
位址和埠號判斷資料報是否合法的能力(這似乎要求每乙個伺服器都要具備) 2.
3.關於資料輸入:通常伺服器系統的每乙個埠號都會和一塊輸入緩衝區對應,進來的輸入根據先來後到的原則等待伺服器的處理,所以難免會出現緩衝區溢位的問題,這種情況下,
udp資料報可能會被丟棄,而應用伺服器程式本身並不知道這個問題。 4.
伺服器應該限制本地
ip位址,就是說它應該可以把自己繫結到某乙個網路介面的某乙個埠上。
TCP IP詳解學習筆記 6 UDP協議
udp是傳輸層協議,和tcp協議處於乙個分層中,但是與tcp協議不同,udp協議並不提供超時重傳,出錯重傳等功能,也就是說其是不可靠的協議。2.1.udp埠號 由於很多軟體需要用到udp協議,所以udp協議必須通過某個標誌用以區分不同的程式所需要的資料報。埠號的功能就在於此,例如某乙個udp程式a在...
TCP IP詳解 學習筆記 6 UDP協議
udp是傳輸層協議,和tcp協議處於乙個分層中,但是與tcp協議不同,udp協議並不提供超時重傳,出錯重傳等功能,也就是說其是不可靠的協議。2.1.udp埠號 由於很多軟體需要用到udp協議,所以udp協議必須通過某個標誌用以區分不同的程式所需要的資料報。埠號的功能就在於此,例如某乙個udp程式a在...
TCP IP詳解學習筆記 6 UDP協議
udp是傳輸層協議,和tcp協議處於乙個分層中,但是與tcp協議不同,udp協議並不提供超時重傳,出錯重傳等功能,也就是說其是不可靠的協議。2.1.udp埠號 由於很多軟體需要用到udp協議,所以udp協議必須通過某個標誌用以區分不同的程式所需要的資料報。埠號的功能就在於此,例如某乙個udp程式a在...