如果你會(huì)建網(wǎng)站外貿(mào)新手怎樣用谷歌找客戶
UDP協(xié)議與TCP協(xié)議都是傳輸層協(xié)議,應(yīng)用層把數(shù)據(jù)拷貝到傳輸層,后續(xù)動(dòng)作由下層自行決定。
UDP協(xié)議端格式

16位 UDP 長度 , 表示整個(gè)數(shù)據(jù)報(bào) (UDP 首部 +UDP 數(shù)據(jù) ) 的最大長度 ;(也就是65535字節(jié))如果校驗(yàn)和出錯(cuò) , 就會(huì)直接丟棄 ;
UDP的特點(diǎn)(相對于TCP)
無連接 : 知道對端的 IP 和端口號就直接進(jìn)行傳輸 , 不需要建立連接 ;不可靠 : 沒有確認(rèn)機(jī)制 , 沒有重傳機(jī)制 ; 如果因?yàn)榫W(wǎng)絡(luò)故障該段無法發(fā)到對方 , UDP 協(xié)議層也不會(huì)給應(yīng)用層返回任何錯(cuò)誤信息;面向數(shù)據(jù)報(bào) : 不能夠靈活的控制讀寫數(shù)據(jù)的次數(shù)和數(shù)量 ;
面向數(shù)據(jù)報(bào)
應(yīng)用層交給 UDP 多長的報(bào)文 , UDP 原樣發(fā)送 , 既不會(huì)拆分 , 也不會(huì)合并 ;
用 UDP 傳輸 100 個(gè)字節(jié)的數(shù)據(jù) :
如果發(fā)送端調(diào)用一次 sendto, 發(fā)送 100 個(gè)字節(jié) , 那么接收端也必須調(diào)用對應(yīng)的一次 recvfrom, 接收 100 個(gè)字節(jié); 而不能循環(huán)調(diào)用 10 次 recvfrom, 每次接收 10 個(gè)字節(jié) ;
UDP的緩沖區(qū)
UDP 沒有真正意義上的 發(fā)送緩沖區(qū) . 調(diào)用 sendto 會(huì)直接交給內(nèi)核 , 由內(nèi)核將數(shù)據(jù)傳給網(wǎng)絡(luò)層協(xié)議進(jìn)行后續(xù)的傳輸動(dòng)作;
UDP 具有接收緩沖區(qū) . 但是這個(gè)接收緩沖區(qū)不能保證收到的 UDP 報(bào)的順序和發(fā)送 UDP 報(bào)的順序一致 ; 如果緩沖區(qū)滿了, 再到達(dá)的 UDP 數(shù)據(jù)就會(huì)被丟棄 ;
UDP 的 socket 既能讀 , 也能寫 , 這個(gè)概念叫做 全雙工。
UDP使用注意事項(xiàng)
我們注意到 , UDP 協(xié)議首部中有一個(gè) 16 位的最大長度 . 也就是說一個(gè) UDP 能傳輸?shù)臄?shù)據(jù)最大長度是 64K( 包含 UDP 首部).
然而 64K 在當(dāng)今的互聯(lián)網(wǎng)環(huán)境下 , 是一個(gè)非常小的數(shù)字 .
如果我們需要傳輸?shù)臄?shù)據(jù)超過 64K, 就需要在應(yīng)用層手動(dòng)的分包 , 多次發(fā)送 , 并在接收端手動(dòng)拼裝 ;
基于UDP的應(yīng)用層協(xié)議
NFS: 網(wǎng)絡(luò)文件系統(tǒng)
TFTP: 簡單文件傳輸協(xié)議
DHCP: 動(dòng)態(tài)主機(jī)配置協(xié)議
BOOTP: 啟動(dòng)協(xié)議 ( 用于無盤設(shè)備啟動(dòng) )
DNS: 域名解析協(xié)議(也可以使用TCP)
當(dāng)然 , 也包括你自己寫 UDP 程序時(shí)自定義的應(yīng)用層協(xié)議 ;
問題1:報(bào)頭和有效載荷如何分離,如何交付?
報(bào)頭有16位報(bào)文長度,減去8字節(jié)固定報(bào)頭長度就是有效載荷。