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未验证。
数据包首先存放在发送缓冲区内,接收到服务端的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未验证。
相关文章推荐
- 孙鑫VC视频教程笔记之第十四课“基于TCP和UDP的Socket编程”
- [Linux网络编程笔记]传输协议TCP和UDP简介
- tcp与udp缓冲区大小总结
- s 2.35 柯志亨书-实验3笔记-TCP UDP模拟 ——计算CBR不同参数:抖动、吞吐率、丢包率awk代码
- ns 2.35 柯志亨书-实验3笔记-TCP UDP模拟
- P2P UDP与TCP的监听与发送 代码笔记
- TCP/IP笔记 三.运输层(1)——UDP,TCP
- UDP、TCP基础笔记
- 网络编程中TCP、UDP的发送缓冲区问题(转)
- 孙鑫VC视频教程笔记之第十四课“基于TCP和UDP的Socket编程”
- TCP/IP Illustrated 笔记 UDP Checksum
- 关于Linux中TCP和UDP协议的发送和接收缓冲区
- 孙鑫VC视频教程笔记之第十四课“基于TCP和UDP的Socket编程”
- 孙鑫VC视频教程笔记之第十四课“基于TCP和UDP的Socket编程”
- 黑马程序员________Java中UDP和TCP网络编程学习笔记
- TCP/UDP 缓冲区满
- LINUX 下tcp 和 udp 套接字收发缓冲区的大小决定规则
- LINUX 下tcp 和 udp 套接字收发缓冲区的大小决定规则 .
- tcp收发需要缓冲区,udp不需要缓冲区
- TCP/IP笔记 三.运输层(1)——UDP,TCP