最近,碰到UDP是否有写缓冲区的疑问,对于应用,如下图linux手册中有设置UDP发送缓冲区相关属性,也明确提到了send buffer的概念:
那这是否意味着UDP是有发送缓冲区的吗?我们再看一下《UNIX Network Programming》书中所述,这本书的作者权威性我就不多说了吧,在国内高校此书都是当做教材使用的。书中有下面两幅图:
一张是TCP发送过程协议栈简化图,另一张是UDP的。UDP中的send buffer是用虚线框圈起来的,具体的叙述我直接引用书中原文:
书中的描述很清楚了,UDP是没有发送缓冲区的,因为UDP是不可靠的,他不必像TCP一样需要一个实质的发送buffer,而且真正UDP写成功返回其实是传递到了链路层的output queue中。