TCP、UDP 缓冲区笔记


    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未验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值