TCP/IP:UDP(4) 缓存与抑制

1.UDP协议,发送方有一个虚拟的发送缓存区。假的,意思是UDP应用程序生成数据报,就直接发送出去,不做任何处理。发送缓存区主要是限制单个数据报的大小。如果写一个太大的数据报,内核返回该进程一个EMSGSIZE错误。因为UDP是不可靠的,它不必保存应用进程数据的一个副本,因此无需一个真正的发送缓存区。

2.UDP接收方具有接收缓存区,输出队列是FIFO的。

3.接收缓存区有固定大小,可以通过SO_RCVBUF套接字选项调节大小。

4.当接收缓存区满了之后,一定会丢弃不能再接收的数据报,有可能会发送ICMP源站抑制差错。“可能”是因为即使接收方有发送这个差错,但是发送方会选择忽略这个差错报文。TCP协议与之不同,他会根据这个差错报文,放慢在该连接上的数据传输速度。UDP忽略的原因在于,发送方发送完数据报,就可能立即中止了,没有机会接受差错报文。就算接受了差错报文,也不可能重发。

5.接收方从接收缓存区中只读取一条数据报。读取函数recvfrom中,有设置能够读取的最大数据报长度的字段,但是通常读取一条不够参数显示长度的完整的数据报。这里有一个问题:假设一条完整数据报长度大于recvfrom参数设置长度。有3种处理方法:
(1)截断:对数据报进行截断,最终长度是recvfrom设置的长度
(2)不截断:剩下的部分在后续读取操作中返回。
(3)不截断并通知:返回一个标志表明可以获取更多数据。后续读操作则返回剩余部分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值