1.udp發包的問題
問:udp 傳送兩次資料,第一次 100位元組 ,第二次200位元組, 接包方一次recvfrom( 1000 ), 收到是 100,還是200,還是300?
答:udp是資料報文協議,是以資料報方式,所以每次可以接收100,200,在理想情況下,第一次是無論recvfrom多少都是接收到100。當然,可能由於網路原因,第二個包先到的話,有可能是200了。對可能會由於網路原因亂序,所以可能先收到200,所以自定義的udp協議包頭裡都要加上乙個序列號,標識傳送與收包對應
2.tcp的發包問題
問:同樣如果換成tcp, 第一次傳送 100位元組 ,第二次傳送200位元組,recv( 1000 )會接收到多少?
答:tcp是流協議,所以recv( 1000 ),會收到300 tcp自己處理好了重傳,保證資料報的完整性
3.有分片的情況下如下處理
問:如果mtu是1500,使用udp傳送 2000,那麼recvfrom(2000)是收到1500,還是2000?
答: 還是接收2000,資料分片由ip層處理了,放到udp還是乙個完整的包。接收到的包是由路由路徑上最少的mtu來分片,注意轉到udp已經在是組裝好的(組裝出錯的包會經crc校驗出錯而丟棄),是乙個完整的資料報
4.分片後的處理
問:如果500那個片丟了怎麼辦?udp又沒有重傳
答:udp裡有個crc檢驗,如果包不完整就會丟棄,也不會通知是否接收成功,所以udp是不可靠的傳輸協議,而且tcp不存在這個問題,有自己的重傳機制。在內網來說,udp基本不會有丟包,可靠性還是有保障。當然如果是要求有時序性和高可靠性,還是走tcp,不然就要自己提供重傳和亂序處理( udp內網發包處理量可以達 7w~10w/s )
5.不同連線到同乙個埠的包處理
問:tcp
a -> c 發100
b -> c 發200
ab同時同一埠
c recv(1000) ,會收到多少?
答:a與c是乙個tcp連線,b與c又是另乙個tcp連線, 所以不同socket,所以分開處理。每個socket有自己的接收緩衝和傳送緩衝
6.什麼是tcp粘包
由於tcp是流協議,對於乙個socket的包,如傳送 10aaaaabbbbb兩次,由於網路原因第一次又分成兩次傳送, 10aaaaab和bbbb,如果接包的時候先讀取10(包長度)再讀入後續資料,當接收得快,傳送的慢時,就會出現先接收了 10aaaaab,會解釋錯誤 ,再接到到bbbb10aaaaabbbbb,也解釋錯誤的情況。這就是tcp的粘包。
解決的辦法tlv方式,先接收包頭,在包頭裡指定包體長度來接收。設定包頭包尾的檢查位(如群空間0x2開頭,0x3結束來檢查乙個包是否完整)。對於tcp來說:1)不存在丟包,錯包,所以不會出現資料出錯 2)如果包頭檢測錯誤,即為非法或者請求,直接重置即可
7.tce怎麼處理tcp包
tce的tcp包處理:
1.先按可用buf接收tcp包
2.按照協議頭檢查,提出多個請求包
3.如果檢查失敗,當前接收快取就會重置( 位置從0開始 ) ->
1)由於tcp保證了包的完整性,不會出現錯包
2)如果是非法請求(對應的乙個socket接收的資料報),會丟棄
UDP和TCP的不同
1.udp是best effort盡力而為,不保證資訊一定到達,也不保證到達的順序與傳送的順序一致.tcp由各種辦法保證了資料的完整性.2.udp使用前不需要進行連線.tcp需要先連線.3.對資訊邊界處理方式不同,udp套接字保留邊界資訊.tcp不保留資料訊息的界線 資料塊之間的邊界 即緩衝區中的資...
TCP和UDP的不同點
1 tcp是面向連線的 udp是無連線的,即傳送資料前不需要先建立連線。2 tcp提供可靠的服務,也就是說,通過tcp連線傳送的資料是無差錯 不丟失 不重複的,並且是按序到達 udp是盡最大努力交付,不保證資料的可靠交付。因為tcp是面向連線的,提供可靠交付,因此適合大量資料的交換。3 tcp是面向...
TCP 與UDP的異同
tcp 傳輸控制協議 和udp 擁護資料報協議 是傳輸層的倆個傳輸協議,它們倆個的最大區別就是是否面向連線。tcp包括了面向連線和可靠資料傳輸服務,在客戶端和伺服器端進行通訊前,要先交換傳輸層控制資訊,為雙方的通訊做好準備。在這個握手階段後,我們就可以認為在這倆個程序間存在乙個tcp連線,且是乙個全...