我想问下大家这样一个通信问题 一次最多发送多少个字节 对方的OS可以通知对方的应用层收取数据?

解决方案 »

  1.   

    比如 客户端发送4个字节   是否4个字节完全到达对方的OS后后  才可以通知去读
                             还是只有1个字节到达对方的OS后   就可以开始读写啦?
      

  2.   

    可以去看一下tcp滑动窗口机制
      

  3.   

    我觉得根据链路层具有MTU在以太网最大是1500来计算,减去IP头20个字节,tcp或者udp头部,一次的数据负载应该在1470多左右。如果你发送超过这个值的数据也是分多次发送的。至于你后面的问题我认为应用层是在完全接收后再读的,因为一般应用层取得数据的时候os已经都做了ip协议。tcp或者udp协议的解析了。提交给应用层的都是净负载数据
      

  4.   

    udp 有消息边界的,一次收到一个包。tcp是流式的
      

  5.   

    链路层数据每包都是帧发送,只有到达该帧的接收长度的时候,网卡才会通知上层取数据。网卡是通过中断和CPU打交道的,因此不可能收到点就中断一下。结论1:如果链路层把N个数据封装一个包,一定是这N个数据一定是一起交给网络层去处理的。但是网络层和socket层之间的数据组合,我也不清楚了。例如,通过socket发送一个很大的数据,到底如何进行链路层封装的,我想可能还略有差异。但是无非决定的因素有如下几个:
    1、链路层的MTU。
    2、类似TCP的滑动窗口机制。下面这个问题,我很想知道:如果我写一个类似这样的代码:
    for(i = 0; i < 1400; i++)
    {
       //每次发送1字节
       sendto(socket, sz, 1, 0, to, sizeof(to));
    }
    难道链路层会组成1400个包发送吗?啥时候有空了写个试试。