首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

高性能网络编程7--tcp连接的内存使用

socket编程方法提供了SO_SNDBUF、SO_RCVBUF这样的接口来设置连接的读写缓存,linux上还提供了以下系统级的配置来整体设置服务器上的TCP内存使用,但这些配置看名字却有些互相冲突、概念模糊的感觉...这篇文章主要描述linux内核为了TCP连接上传输的数据是怎样管理读写缓存的。 一、缓存上限是什么? (1)先从应用程序编程时可以设置的SO_SNDBUF、SO_RCVBUF说起。...不同的linux内核有着不同的初始窗口,我们以广为使用的linux2.6.18内核为例,在以太网里,MSS大小为1460,此时初始窗口大小为4倍的MSS,简单列下代码(*rcv_wnd即初始接收窗口):...在linux3以后的版本中,初始窗口调整到了10个MSS大小,这主要来自于GOOGLE的建议。...另外请注意:当我们在编程中对连接设置了SO_SNDBUF、SO_RCVBUF,将会使linux内核不再对这样的连接执行自动调整功能! 那么,这个功能到底是怎样起作用的呢?

64810

直击案发现场!TCP 10 倍延迟的真相是?

20ms sudo tc qdisc add dev eth0 root tbf rate 500kbit latency 50ms burst 15kb 这个案例关于wmem的结论 默认情况下Linux...(这个是3.1的Linux,应用SO_RCVBUF设置的是8K,用一半来做接收窗口)。...接收窗口和SO_RCVBUF的关系 初始接收窗口一般是 mss乘以初始cwnd(为了和慢启动逻辑兼容,不想一下子冲击到网络),如果没有设置SO_RCVBUF,那么会根据 net.ipv4.tcp_rmem...设置 SO_RCVBUF 后通过wireshark观察到的接收窗口基本 下图是设置了 SO_RCVBUF 为8192的实际情况: 从最开始的14720,执行第一个create table语句后降到14330...; TCP接收窗口跟SO_RCVBUF关系很复杂; SO_RCVBUF太小并且rtt很大的时候会严重影响性能; 接收窗口比发送窗口复杂多了; 发送窗口/SO_SNDBUF--发送仓库,带宽/拥塞窗口--

1.1K21
您找到你想要的搜索结果了吗?
是的
没有找到

高性能网络编程7–tcp连接的内存使用

socket编程方法提供了SO_SNDBUF、SO_RCVBUF这样的接口来设置连接的读写缓存,linux上还提供了以下系统级的配置来整体设置服务器上的TCP内存使用,但这些配置看名字却有些互相冲突、概念模糊的感觉...这篇文章主要描述linux内核为了TCP连接上传输的数据是怎样管理读写缓存的。 一、缓存上限是什么? (1)先从应用程序编程时可以设置的SO_SNDBUF、SO_RCVBUF说起。...不同的linux内核有着不同的初始窗口,我们以广为使用的linux2.6.18内核为例,在以太网里,MSS大小为1460,此时初始窗口大小为4倍的MSS,简单列下代码(*rcv_wnd即初始接收窗口):...在linux3以后的版本中,初始窗口调整到了10个MSS大小,这主要来自于GOOGLE的建议。...另外请注意:当我们在编程中对连接设置了SO_SNDBUF、SO_RCVBUF,将会使linux内核不再对这样的连接执行自动调整功能! 那么,这个功能到底是怎样起作用的呢?

1.1K40

高性能网络编程7--tcp连接的内存使用

socket编程方法提供了SO_SNDBUF、SO_RCVBUF这样的接口来设置连接的读写缓存,linux上还提供了以下系统级的配置来整体设置服务器上的TCP内存使用,但这些配置看名字却有些互相冲突、概念模糊的感觉...这篇文章主要描述linux内核为了TCP连接上传输的数据是怎样管理读写缓存的。 一、缓存上限是什么? (1)先从应用程序编程时可以设置的SO_SNDBUF、SO_RCVBUF说起。...不同的linux内核有着不同的初始窗口,我们以广为使用的linux2.6.18内核为例,在以太网里,MSS大小为1460,此时初始窗口大小为4倍的MSS,简单列下代码(*rcv_wnd即初始接收窗口):...在linux3以后的版本中,初始窗口调整到了10个MSS大小,这主要来自于GOOGLE的建议。...另外请注意:当我们在编程中对连接设置了SO_SNDBUF、SO_RCVBUF,将会使linux内核不再对这样的连接执行自动调整功能! 那么,这个功能到底是怎样起作用的呢?

1.4K60

高性能网络编程7--tcp连接的内存使用

socket编程方法提供了SO_SNDBUF、SO_RCVBUF这样的接口来设置连接的读写缓存,linux上还提供了以下系统级的配置来整体设置服务器上的TCP内存使用,但这些配置看名字却有些互相冲突、概念模糊的感觉...这篇文章主要描述linux内核为了TCP连接上传输的数据是怎样管理读写缓存的。 一、缓存上限是什么? (1)先从应用程序编程时可以设置的SO_SNDBUF、SO_RCVBUF说起。...不同的linux内核有着不同的初始窗口,我们以广为使用的linux2.6.18内核为例,在以太网里,MSS大小为1460,此时初始窗口大小为4倍的MSS,简单列下代码(*rcv_wnd即初始接收窗口):...在linux3以后的版本中,初始窗口调整到了10个MSS大小,这主要来自于GOOGLE的建议。...另外请注意:当我们在编程中对连接设置了SO_SNDBUF、SO_RCVBUF,将会使linux内核不再对这样的连接执行自动调整功能! 那么,这个功能到底是怎样起作用的呢?

2K91

setsockopt与getsockopt

level指定控制套接字的层次.可以取三种值: 1)SOL_SOCKET:通用套接字选项. 2)IPPROTO_IP:IP选项. 3)IPPROTO_TCP:TCP选项 以linux 2.6内核为例(在不同的平台上...SO_RCVBUF,设置接收缓冲区的大小。 接收缓冲区大小的上下限分别是:256 * (sizeof(struct sk_buff) + 256)和256字节。...Linux通过这一值来排列网络队列。 这个值在0到6之间(包括0和6),由option_value指定。赋给sock->sk->sk_priority。...在Linux中,缓冲区内的最小字节数是固定的,为1。即将sock->sk->sk_rcvlowat固定赋值为1。 SO_RCVTIMEO,设置接收超时时间。...同上在recv()完成上述功能(默认情况是将socket缓冲区的内容拷贝到系统缓冲区): int nZero=0; setsockopt (socket,SOL_S0CKET,SO_RCVBUF,(char

1.1K30

TCP粘包、拆包与通信协议详解

滑动窗口: TCP连接在三次握手的时候,会将自己的窗口大小(window size)发送给对方,其实就是SO_RCVBUF指定的值。...每次发送数据后,发送方将自己维护的对方的window size减小,表示对方的SO_RCVBUF可用空间变小。...当接收方处理开始处理SO_RCVBUF 中的数据时,会将数据从socket 在内核中的接受缓冲区读出,此时接收方的SO_RCVBUF可用空间变大,即window size变大,接受方会以ack消息的方式将自己最新的...此外,发送方可以连续的给接受方发送消息,只要保证对方的SO_RCVBUF空间可以缓存数据即可,即window size>0。...linux服务器上输入ifconfig命令,可以查看不同网卡的MTU大小,如下: ?

10.8K61
领券