理清udp,tcp 缓存区的
来源:互联网 发布:java 秒杀 并发 代码 编辑:程序博客网 时间:2024/06/15 11:56
1.UDP
首先这里说的缓存区不是指的我们在调用recv 或send函数时的我们自己分配的 内存(buf)。
_1 UDP没有UDP发送缓存区, 其原因是因为UDP是不可靠的连接方式, 应用程序的数据(也就是我们send()函数发出去的数据)是沿着协议栈向下传递,以系统约定的方式拷贝到内核缓存区, 当数据从链路层发送出去后,就删除内核缓存区中数据。当我们调用send 返回的字节数表示的是数据进入链路层的数据大小。
_2 上面提到了 UDP 内存缓存区,这个是系统规定的,我们可以通过
rmem_default — 默认的接收窗口大小。
rmem_max — 接收窗口的最大大小。
wmem_default — 默认的发送窗口大小。
wmem_max — 发送窗口的最大大小
可以通过 sysctl 命令设置下面值
net.core.rmem_default = 256960
net.core.rmem_max = 256960
net.core.wmem_default = 256960
net.core.wmem_max = 256960
//下面提到的缓存区多少指的是 内存缓存区UDP缺乏流量控制
1. UDP缺乏流量控制的概念
UDP协议没有TCP协议所具有的滑动窗口概念,接收数据的时候直接将数据放到缓冲区中。如果用户不有及时地从缓冲区中将数据复制出来,后面到来的数据会接着向缓冲区中放入。当缓冲区满的时候,后面到来的数据会覆盖之前的数据造成数据的丢失。
2. 缓冲区溢出对策
解决UDP接收缓冲区溢出的现象需要根据实际情况确定,一般可以用增大接收数据缓冲区和接收方接收单独处理的方法来解决局部的UDP数据接收缓冲区溢出问题。
UDP协议中的数据报文截断
当使用UDP协议接收数据的时候,如果应用程序传入的接收缓冲区的大小小于到来的数据大小时,接收缓冲区会保存最大可能接收到的数据,其他的数据将会丢失,并且有MSG_TRUNC的标志。
http://www.cnblogs.com/li-hao/archive/2011/11/21/2257596.html
http://www.isnowfy.com/udp-buffer/
http://blog.chinaunix.net/uid-20382483-id-3793066.html
参考
- 理清udp,tcp 缓存区的
- 理清tcp/ip,tcp,udp,http,ip,socket等之间的关系和作用。
- 关于linux的tcp/udp缓存
- 关于linux的tcp/udp缓存
- 查看内核缓存TCP/UDP数据占用的内存大小
- 基于流模式的字节byte缓存区 bytebuffer.cs 用于tcp/udp的网络数据高效处理
- TCP/IP:UDP(4) 缓存与抑制
- tcp udp 的区别
- python的TCP/UDP
- TCP&UDP的比较
- TCP/UDP的区别
- tcp/udp的区别
- TCP,UDP的区别
- TCP/UDP的区别
- TCP UDP 的区别
- TCP&UDP的区别
- tcp/udp的区别
- TCP、UDP的优缺点
- Longest Palindromic Substring
- Linux--linux下常用内核参数
- Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not
- JAVA学习之StringBuffer 与Sring类的区别(实例展示)
- mongodb,windows版安装
- 理清udp,tcp 缓存区的
- 数据库安装类故障
- Android开发之Uri、UriMatcher、ContentUris学习
- 串口打印调试信息的延时问题
- static_cast与dynamic_cast
- 主力后卫酒驾重dkfkdsj缘世界杯或危及职业生涯
- 将数据库设置为运行在限制模式下
- 只依靠session
- FPGA 时序约束作用