socket编程和TCP协议传输数据的问题 c++

我理解的socket中发送端到接收端的结构是这样的:buf1[N]------通过send函数将其送到系统的发送缓冲区中------tcp协议将buf1[N]送到另一个系... 我理解的socket中发送端到接收端的结构是这样的:

buf1[N]------通过send函数将其送到系统的发送缓冲区中------tcp协议将buf1[N]送到另一个系统的接收缓冲区中----通过recv函数将buf1[N]赋给buf2[N],(这里发送端buf和接收端buf的N都是一样的,这是我为了容易理解偷懒的假设)
我想知道用TCP协议传输数据时包的大小就是buf的大小吗?(比如说send函数把一个100字节长的数组copy到发送缓冲区中,那么TCP协议在从发送缓冲区发送时是将这个100字节的数组作为一个整体发送的吗?)还是说buf只是要传送的数据存放的位置,将buf发送到系统的发送缓冲区后,TCP协议自己再根据网络状况对buf的数据拆分,或者和之后copy到发送缓冲区中的其他buf进行组合,再以一个包的形式发送到接收端的系统接收缓冲区吗?
展开
 我来答
百度网友c35996c7e
2013-11-16 · 超过52用户采纳过TA的回答
知道小有建树答主
回答量:129
采纳率:0%
帮助的人:158万
展开全部
tcp会按照固定大小发送消息报,如果你的消息报比tcp设定的大的话,tcp会将其拆分
更多追问追答
追问
你说的消息报大小是不是就是send (s,buf,len,0)里面的len的大小啊(就是我用send一次copy到发送缓冲区的字节数)?还有,是不是有可能一个buf送到发送缓冲区后,虽然这个buf比tcp设定的小,但是也被TCP协议拆成两份,并和其他数据打包在一起发送?
追答
不是send里面的len大小,一般情况下就是1500(消息头+消息内容)字节,如果buf小于1500 - 消息头的大小的话,他会自动填充其他字符,凑足1500字节再发送
muxin6666
2013-11-16
知道答主
回答量:24
采纳率:0%
帮助的人:20.2万
展开全部
这和操作系统中协议栈实现机制有关,tcp协议没有规定。一般来说,只要发送的报文不超过(1460),不会分片,也不会和其他报文进行组合。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式