socket用户缓冲区、socket内核缓冲区与tcp协议buffer(滑动窗口)的关系(yet)

1 socket内核缓冲区是tcp协议buffer(滑动窗口)的具体实现,默认8k

2 用户缓冲区即是局部的byte[] 

https://www.zhihu.com/question/48454744

3 内核缓冲区大小占16位,最大65536长度字节数,三次握手时通知对方

4 滑动窗口不完全等于内核缓冲区,应描述为内核缓冲区可用字节数

https://www.cnblogs.com/lisuyun/articles/5803352.html

5 每个tcp连接都有各自大小相互独立的内核缓冲区

https://blog.csdn.net/stpeace/article/details/43777287

6 socket的flush,只是强制将数据写入操作系统缓存中,并不保证数据会立即发送,在tcp层面,由操作系统控制发送

关于tcp delayedack实践(一)tcp 

7 每个tcp连接的发送内核缓冲区与接收内核缓冲区互不干扰

8 过程


         为了简便起见, 我们仅考虑单向的数据流, 即A(客户端)向B(服务端)发送数据。

在应用程序Program A中, 我们定义一个数组char szBuf[100] = "tcp"; 那么这个szBuf就是应用程序缓冲区(对应上图的Program A中的某块内存), send函数对应上面蓝色的Socket API, 内核缓冲区对应上面的黄色部分。 我们看到, send函数的作用是把应用程序缓冲区中的数据拷贝到内核缓冲区, 仅此而已。 内核缓冲区中的数据经过网卡, 经历网络传到B端的网卡(TCP协议), 然后进入B的内核缓冲区, 然后由recv函数剪切/复制到Program B的应用程序缓冲区。

https://blog.csdn.net/stpeace/article/details/43719449

猜你喜欢

转载自www.cnblogs.com/silyvin/p/11996349.html