分類: linux
一、udp報文丟失資料
利用udp
協議進行資料收發的時候,在區域網內一般情況下資料的接收均能接收到傳送方的資料,除非連線雙方的主機發生故障,否則不會發生接收不到資料的情況。
1.udp
報文的正常傳送過程
在internet
上,由於要經過多個路由器,正常情況下乙個資料報文從主機
c經過路由器
a、路由器
b、路由器
c到達主機s。
2.upd
報文的丟失
路由器要對**的資料進行儲存、處理、合法性判定、**等操作,容易出現錯誤,所以很可能在路由器**的過程中出現資料丟失的現象。對於資料丟失的原因,並不能通過一種簡單的方法獲得,例如,不能區分伺服器發給客戶端的響應資料是在傳送的路徑中被路由器丟棄,還是伺服器沒有傳送此響應資料。
3.udp
報文丟失的對策
udp協議中的資料報文丟失是先天性的,因為
udp是無連線的、不能保證傳送資料的正確到達。對策:主機
c傳送的資料經過路由器,到達主機
s後,主機
s要傳送乙個接收到此資料報文的響應,主機
c要對主機
s的響應進行記錄,直到之前傳送的資料報文
1已經被主機
s接收到。如果資料報文在經過路由的時候,被路由器丟棄,則主機
c和主機
s會對超時的資料進行重發。
二、udp
資料傳送中的亂序
udp協議資料收發過程中,會出現資料的亂序現象。所謂亂傳送資料的順序和接收資料的順序不一致。 1
、udp
資料順序收發的過程主機c
向主機s
傳送資料報
0、資料報
1、資料報
2、資料報
3,各個資料報途中經過路由器
a、路由器
b、路由器
c,先後到達主機
s,在主機
s端的循序仍然為資料報
0、資料報
1、資料報
2、資料報
3,即傳送資料時的順序和接收資料時的順序是一致的。 2
、udp
資料的亂序
udp的資料報在網路上傳輸的時候,有可能造成資料的順序更改,接收方的資料順序和傳送方的資料順序發生了顛倒。這主要是由於路由的不同和路由的儲存**的順序不同造成的。
(1)路由器的儲存**有可能造成資料順序的更改。例如,主機
c傳送的資料在經過路由器
a和路由器
c的時候,順序均沒有發生順序更改。而在經過主機
b的時候,資料的順序由資料
0123
變成0321
,這樣主機
c的資料
0123
順序經過路由器到達主機
s的時候變為了資料
0321。
(2)udp協議的資料經過路由器時的路徑造成了傳送資料的混亂。從主機
c傳送的資料
0123
,其中資料0和
3經過路由器
b、路由器c到達
s,資料
1和資料
2經過路由器
a、路由器
c到達主機
s,所以資料由傳送時的順序
0123
變成順序
1032。
3、udp亂序的對策
對於亂序的解決方法可以採用傳送端在資料段中加入資料報序號的方法,這樣接收端對接收到資料的頭端進行簡單地處理就可以重新獲得原始順序的資料。 4
、udp
協議中的
connect()函式在
udp協議中使用
connect()
函式的作用僅僅表示確定了另一方的位址,並沒有其他的含議。
connect()
函式在udp
協議中使用後會產生如下的***:l使用
connect()
函式繫結套接字後,傳送操作不能再使用
sendto()
函式,要使用
write()
函式直接操作套接字檔案描述符,不再指定目位址和埠號。l使用
connect()
函式繫結套接字後,接收操作不能再使用
recvfrom()
函式函式,要使用
read()
類的函式,函式不會返回傳送方的位址和埠號。
l在使用多次
connect()
函式的時候,會改變原來套接字繫結的目的位址和埠號,用新繫結的位址和埠號代替,原有的繫結狀態會失效。可以使用這種特定來斷開原來的連線。5、
udp缺乏流量控制1.
udp缺乏流量控制的概念
udp協議沒有
tcp協議所具有的滑動視窗概念,接收資料的時候直接將資料放到緩衝區中。如果使用者不有及時地從緩衝區中將資料複製出來,後面到來的資料會接著向緩衝區中放入。當緩衝區滿的時候,後面到來的資料會覆蓋之前的資料造成資料的丟失。2.
緩衝區溢位對策
解決udp
接收緩衝區溢位的現象需要根據實際情況確定,一般可以用增大接收資料緩衝區和接收方接收單獨處理的方法來解決區域性的
udp資料接收緩衝區溢位問題。6、
udp協議中的資料報文截斷
當使用udp
協議接收資料的時候,如果應用程式傳入的接收緩衝區的大小小於到來的資料大小時,接收緩衝區會儲存最大可能接收到的資料,其他的資料將會丟失,並且有
msg_trunc
的標誌。
c Excel程式設計中的幾個問題
1 在程式設計的時候,有時會用worksheets 介面,有時又會用sheets介面,那麼他們出現的場合分別在什麼條件下?有怎麼的區別?answer worksheets是指你當前非活動表,而sheets是當前活動表,每個是sheet是乙個工作簿,各個sheet就構成了 sheets,也就是工作表了...
Linux中的幾個問題
明天期末考試,就把往年試卷上的敘述題總結一下 1.如果乙個設定使用者id程式未執行任何改變程序的實際使用者id和有效使用者id的系統呼叫,那麼執行該程式的程序,它的實際使用者id和有效使用者id各是什麼?答 實際使用者id在登入時取自口令檔案中的登入項,如果沒有執行任何改變實際使用者id和有效使用者...
boost log 中的幾個問題
boost 日誌示例中有乙個錯誤 下面這個檔案 應該在開頭加一行 include 否則會出下列錯錯誤 error c2027 使用了未定義型別 boost log v2s mt nt5 expressions aux date time formatter generator traits d li...