网络总共有两个窗口需要处理,第一是滑动窗口,第二是拥塞窗口。
1、使用sock设置的缓冲区的大小,发送缓冲区的大小和发送窗口
通过TCP_mmem设置的内存的大小应该是和接收端大小强相关的,如果发送端缓冲区还达不到接收窗口的话,那么程序的数据产生速度可能就赶不上数据发送的速度了,那么tcp的三个发送的速度各有什么意义呢?
hon@station6:/proc/sys/net/core$ cat wmem_default
212992
hon@station6:/proc/sys/net/core$ cat wmem_max
212992
wmem_default/wmem_max是208K,这个值是怎么来的?
hon@station6:/proc/sys/net/ipv4$ cat tcp_wmem
4096 16384 4194304
4k 16k 4096K,这三个值都是怎么来的呀
这几个值都是什么关系?
tcp_init_sock函数是sock初始化的重要函数,
读缓存的作用有两个,一个是有序的待上层应用程序读取的报文,一个是接收滑动窗口以内的报文,刚刚建立链接的时候并不会按照最大的接收窗口来设置滑动窗口的数值,如果设置了会咋样呢?如果设置了的话,如果设置了这个最大的窗口,那么肯定会导致发送端的数据包上来就鱼贯而入,那么很可能导致丢包
【疑问:丢包之后会发生啥事情?丢包之后会导致比如发送端发来了1,2,3,4,5,6,7,8,9,10这样的10个包,那么数据包2很可能会丢包,丢包的话,那么这个时候3,4,5,6,7这个时候会重新发送吗?还是只会发2号数据包】,所以握手的时候窗口内的数据包不会非常多的,难道这个值会用tcp_rmem中的哪个值吗?
发送数据包的大小是怎么来的,我的电脑上的数据是29200/1460=20k,所以这里是20个数据包的大小,是20个数据包的大小
可以通过tc设置一下网络的时延信息。
but还是不清楚rmem的作用是啥!
tcp_sedbuf_expand
想办法测试一下,作业能够发送内存的最大的数量!只有最大的值才有作用
这里是有什么问题吗?那么读内存的限制有什么要求
revbuf是内存设置好的一个buffer,最大的读的内存,都是干什么用的?都是用的最大值,就没用过tcp_rmem[2]之外的值。
所以至此我们发现,接收缓冲区和发送缓冲区都是用的 tcp_rmem[2] 和 tcp_wmem[2],也就是说tcp_rmem[0,1]和tcp_wmem[0,1] 在内核的代码中根本就没有被用到!!
为网络设置发送延迟
# tc qdisc add dev eth0 root netem delay 100ms
删除发送数据包延迟