面试题【网络收发数据与缓存大小不匹配问题,TCP/UDP分析】

本文讨论了在TCP和UDP协议下,当发送方一次性发送大量数据而接收方缓存较小的情况。在TCP中,发送方能连续发送,接收方能循环接收4K数据。而在UDP中,发送方会因数据报长度超过65535字节而发送失败,接收方无法循环接收。TCP的流式传输和分段机制使其能适应不同大小的接收缓冲区,而UDP则受限于最大数据报长度和无接收缓存。

—————-此篇文章 比较基础——————

题目

前提: 发送方一次发送20M数据,接受缓存4K;
讨论: TCP 和 UDP 协议下 ,发送方、接收方现象,并解释原因。

先回答问题:

TCP协议:
发送方能发出去,接受方能接收到数据, 每次接收大小为4K,可循环接收;
【 相关函数: send recv】

UDP协议:
发送方发送失败返回-1,接受方自然没收到数据;【 相关函数: sendto recvfrom】

解释原因:
首先, 需要知道TCP和UDP最基本的区别: TCP 基于字节流、UDP 基于数据报;

——————————-先分析UDP协议——————————-

UDP是数据报,严格定界符,不可分割, 所以当使用sendto函数,
数据大小 (= 数据长+UDP头+IP头 )> 65535(最大报文长度) 就直接返回-1,发送失败;
那么这个公式是怎么来的呢?首先我们看一下IP头部结构:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值