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位置;

//说明1udp发送报文的时,只把数据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位置;

//说明1udp发送报文的时,只把数据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