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函数