问题一例:UDP协议下发送多个数据报按大小体积收只收到一份

准备摆弄个文件传输,在收集资料时,遇到这样一个问题。
描述大概如下:在UDP协议下,客户端向服务端发送2个以上数据包,结果服务端想通过大小不同来读取,但是都只收到一份。

《TCP/IP》三卷第一卷有这么一个例子:
关于UDP队列描述:
通常程序所使用的每个UDP端口都与一个有限大小的输入队列相联系。这意味着,来自不同客户的差不多同时到达的请求将由UDP自动排队。接收到的UDP数据报以其接收顺序交给应用程序(在应用程序要求交送下一个数据报时)

并且做了这么个例子:
作者分别从两个地址向服务器各发送了3条数据,但是服务器只接收了两个地址的第一个数据报。而且也没发回ICMP的数据报。
可归出的要点有,应用程序并不知道其输入队列何时溢出。只是有UDP对超出数据报进行丢弃,在在传输层上完成。可以认为是FIFO的


每个UDP端口都与一个有限大小的输入队列相联系
我这里认为这个就是我们接收数据设置的缓冲区大小。

这段解释从根本上来解释,即不依据什么理论,它规则就是这么定了。

///
///
///

《WINDOWS网络编程》关于对此的理论描述:

第5.1.1一节指出,从消息来观察时,如果传送协议把它们当做一条独立的消息在网上传送,我们就说该协议是面向协议的。同时还意味着,接收端在接收数据时,返回的是发送端写入的一条离散消息,不能收到更多消息。
例子如下:左边工作站向右边工作站提交三条分别是128,64,32字节消息。作为接收端,缓冲区为256个字节,但是在读取时不会把三个数据合起来返回,而是128,64,32字节。这称为消息保护边界。 这就是常说的基于数据报的协议。如果想一口气返回即无保护消息边界的流协议,


从这两点就可以给我们答案了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值