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进行组合,再以一个包的形式发送到接收端的系统接收缓冲区吗? 展开
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进行组合,再以一个包的形式发送到接收端的系统接收缓冲区吗? 展开
展开全部
tcp会按照固定大小发送消息报,如果你的消息报比tcp设定的大的话,tcp会将其拆分
更多追问追答
追问
你说的消息报大小是不是就是send (s,buf,len,0)里面的len的大小啊(就是我用send一次copy到发送缓冲区的字节数)?还有,是不是有可能一个buf送到发送缓冲区后,虽然这个buf比tcp设定的小,但是也被TCP协议拆成两份,并和其他数据打包在一起发送?
追答
不是send里面的len大小,一般情况下就是1500(消息头+消息内容)字节,如果buf小于1500 - 消息头的大小的话,他会自动填充其他字符,凑足1500字节再发送
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询