linux第9天 UDP
今天學了一點UDP知識,還是IP協議.都不是重點,重點是socket服務器框架
不過還是把今天學的東西,先羅列出來,將來復習的時候方便
?
q? UDP報文可能會丟失、重復
q? UDP報文可能會亂序
q? UDP缺乏流量控制
udp緩沖區寫滿以后,沒有流量控制機制,會覆蓋緩沖區。
q? UDP協議數據報文截斷
如果接收到的數據報,大于緩沖區;報文可以被截斷;后面的部分會丟失。
q? recvfrom返回0,不代表連接關閉,因為udp是無連接的。
sendto可以發送數據0包。。。只含有udp頭部。
q? ICMP異步錯誤
觀察現象:關閉udp服務端,若啟動udp客戶端,從鍵盤接受數據后,再發送數據。udp客戶端阻塞在sendto位置;
//說明1:udp發送報文的時,只把數據copy到發送緩沖區。在服務器沒有起來的情況下,可以發送成功。
說明2:所謂ICMP異步錯誤是指:發送的報文的時候,沒有錯誤,接受報文recvfrom的時候,回收到ICMP應答
說明3:異步的錯誤,是無法返回未連接的套接字。udp也可以調用connect
q? UDP connect
說明1://udp調用connet,并沒有三次握手,只是維護了一個狀態信息(和對等方的)。。。
?
說明2)//一但調用connect,就可以使用send函數
?
?
?
結論:客戶端調用connet和不調connet的區別。
1)? udp也可以調用connet
2)udp客戶端調用了connect以后,不會阻塞在recvfrom函數這里。
3)一但調用connect,就可以使用send函數
4)? UDP協議數據報文截斷
?
如果接收到的數據報,大于緩沖區;報文可以被截斷;后面的部分會丟失。
?
?
實驗1
//數據報方式。。。。不是字節流
???????? //如果接受數據時,指定的緩沖區的大小,較小;
???????? //剩余部分將要截斷,扔掉
實驗2:
?
sendto可以發送0包,只含頭部。
?
UDP注意點
q? UDP報文可能會丟失、重復
q? UDP報文可能會亂序
q? UDP缺乏流量控制
udp緩沖區寫滿以后,沒有流量控制機制,會覆蓋緩沖區。
q? UDP協議數據報文截斷
如果接收到的數據報,大于緩沖區;報文可以被截斷;后面的部分會丟失。
q? recvfrom返回0,不代表連接關閉,因為udp是無連接的。
sendto可以發送數據0包。。。只含有udp頭部。
q? ICMP異步錯誤
觀察現象:關閉udp服務端,若啟動udp客戶端,從鍵盤接受數據后,再發送數據。udp客戶端阻塞在sendto位置;
//說明1:udp發送報文的時,只把數據copy到發送緩沖區。在服務器沒有起來的情況下,可以發送成功。
說明2:所謂ICMP異步錯誤是指:發送的報文的時候,沒有錯誤,接受報文recvfrom的時候,回收到ICMP應答
說明3:異步的錯誤,是無法返回未連接的套接字。udp也可以調用connect
q? UDP connect
說明1://udp調用connet,并沒有三次握手,只是維護了一個狀態信息(和對等方的)。。。
說明2)//一但調用connect,就可以使用send函數
轉載于:https://www.cnblogs.com/c-slmax/p/5258484.html
總結
以上是生活随笔為你收集整理的linux第9天 UDP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UITextView实现图文混排效果
- 下一篇: linux 其他常用命令