您的位置:首页 > 理论基础 > 计算机网络

TCP、UDP 缓冲区笔记

2017-03-10 17:31 281 查看
    1. 在程序中,若send频率很高(for循环)时,TCP将会做如下处理:

        数据包首先存放在发送缓冲区内,接收到服务端的ack(服务端不会立即发送ack,大概延时40ms)或等待200ms(Nagle算法机制),将数据包发送。若在这段时间内又有send,由于Nagle算法将会进行并包处理(可以用wrieshark抓包查看)。若要避免上述情况,设置TCP选项为TCP_NODELAY(client.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1))。

    

    2. 接收端,收到数据包以流的形式存储在接收缓冲区内,上层取数据时,并不能按一个包一个包的获取数据(面向流的特性),若    要单数据拿取,则需要自定义报文格式。自己设计报头,解析报文。

    

    3. 以上在面向连接时发生的情况,UDP等没这个现象。

    4. UDP 。 当发送频率很高时,发送数据大小超过发送缓冲区时,默认情况下数据将会丢失,解决方法:增大发送缓冲区大小

      (server.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 10*1024))。接收时,同理。TCP未验证。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: