目录
1.UDP报文结构
2.UDP缓冲区
3.UDP特点
4.课后题
1.UDP报文结构
?
?
2.UDP缓冲区
- UDP没有真正意义上的发送缓冲区,应用层调用sendto()函数直接将数据应用层的数据拷贝给传输层,传输层再构建UDP报头,然后再交付给网络层执行发送数据的动作。
- UDP具有接收缓冲区,但是这个缓冲区不能保证收到的UDP数据与发送的UDP数据顺序是一致的,例如:如果发送端发送“123”给接收端,接收端收到的数据可能是"132",并且如果这个缓冲区满了以后,再到达的数据就丢弃掉。
3.UDP特点
- 1.无连接:知道对端的IP和端口号就直接进行传输,不需要建立连接。UDP中的发件人会在没有提前联系对方的情况下,单方面地发送数据。这种通信叫做无连接
- 2.不可靠:没有确认机制和重传机制,主机A给主机B发送的数据因为在网络中丢包了,主机A和主机B是都不知道的,而且UDP不能收到的数据与发送的数据是一致的。
- 3.面向数据报:不能灵活的控制读写数据的次数和数量。应用层交给UDP多长的数据,UDP原样发送,既不会拆分,也不会合并。例如:
如果发送端调用一次
sendto,
发送
100
个字节
,
那么接收端也必须调用对应的一次
recvfrom,
接收
100
个 字节;
而不能循环调用
10
次
recvfrom,
每次接收
10
个字节
;
。
- ?4.UDP是全双工通信,它既能读也能写
- ?5.UDP可以给多个接收端发送数据。
4.课后题
问题一:UDP怎样将报头和和有效载荷分离?
UDP的报头固定是8个字节,UDP报文的前8个字是UDP报头,剩下的字节是就有效载荷,如果一个UDP报文是20个字节,那么它的有效载荷是12个字节。
问题二:UDP怎样把数据传递到应用层的协议呢?
通过报头中的目的端口号就可以直接将数据交给上层应用。
问题三: UDP协议属于内核协议栈(c语言),用c语言如何表示报头?
?
问题四:UDP不保证可靠性?为什么会有UDP协议的存在? UDP不保证可靠性,是一个中性词。TCP保证可靠性,那么它就会做更多的工作,付出的时间成本和空间成本就越高,效率不高。TCP协议和UDP协议是互补的,不存在TCP协议比UDP协议好,只是TCP和UDP的应用场景不一样的。
|