美文网首页
深入理解 Socket 缓冲区

深入理解 Socket 缓冲区

作者: you的日常 | 来源:发表于2021-01-01 16:17 被阅读0次

网络编程离不开 Socket,Socket 就是发送和接收网络数据,Socket 有发送缓冲也有接收缓冲,这些缓冲区有什么作用?是一个什么机理呢?

这篇文章就是想跟大家分享一下 Socket 缓冲区的方方面面。

什么是 Socket 缓冲区

首先我们看看为什么 Socket 要有缓冲区,它起什么作用。 熟悉 Socket 的读者都知道,Socket 的发送和接收,就是调用 send 和 recv 函数。

实际操作中,我们将要发送的数据 buffer,送给 send 函数,然后 send 就会返回成功或者失败,那么,send 什么时候返回成功呢?是发送到对端函数才返回吗?答案是否定的。(注意:Socket 有同步和异步,本文主要讨论 Socket 缓冲区,不深究异步,都假定是同步)

实际上呢,Socket 有一个缓冲区,send 的数据 buffer,它会先发到缓冲区里面,然后由操作系统去调度发送。所以,send 返回成功,仅仅只是说明,数据放到缓冲区成功了,不代表对端接收了,更不代表对端应用程序正确处理了。所以我们会看到缓冲区不满的时候,send 函数很快就返回了,而缓冲区满的时候,send 函数会阻塞直到超时返回错误。recv 函数同理,实际上是从缓冲区获取数据,发过来的网络数据,系统将会放到缓冲区里面,直到 recv 函数去获取数据,才取出来,并且释放出空间。稍后我们通过实例来看这些缓冲区。

如何查看 Socket 缓冲区

Linux 下面查看 Socket 的缓冲区情况非常的简单,就是用 netstat -an 命令,它会列出所有的连接的端口,我们看一下实例

在这里插入图片描述

这里就指出每个 Active 的连接,主要的元素包括 Proto 协议,上图是 UDP 协议,然后是 RecvQ 和 SendQ,这就是本文讨论的 Socket 缓冲区,一个是接收缓冲,一个是发送缓冲,我们可以实时查看当前的状态。后面是本机 IP 和端口,以及对端的 IP 和端口,最后是连接状态,上图是 UDP 的所有没有状态。

下面我们运行一个 Socket 程序,再看 netstat 状态,来感受一下,

在这里插入图片描述

相关文章

  • 深入理解 Socket 缓冲区

    网络编程离不开 Socket,Socket 就是发送和接收网络数据,Socket 有发送缓冲也有接收缓冲,这些缓冲...

  • Socket缓冲区以及阻塞模式

    socket缓冲区每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。write()/sen...

  • 深入理解零拷贝

    title: 深入理解零拷贝date: 2021/5/21 16:11 一、I/O 概念 1.1 缓冲区 缓冲区是...

  • 深入理解Socket

    一,Socket设计Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,把复杂的TCP/I...

  • 5、响应输出

    write 将chunk数据写到输出缓冲区。 缓冲区数据刷新到浏览器是由socket来控制。 缓冲区刷新的几种方式...

  • 字节流和字符流的区别&常用方法总结

    参考:深入理解Java中的IO · 节流没有缓冲区,是直接输出的,而字符流是输出到缓冲区的。因此在输出时,字...

  • netty学习系列一:Java NIO预备知识

    一、TCP发送缓冲区/TCP接收缓冲区 在传输层,每个socket对应的TCP连接都拥有自己的接收缓冲区和发送缓冲...

  • TCP流量控制

    一、Socket缓冲区 1. 发送缓冲区 发送缓冲区分为4部分,按照顺序排列 已经发送,并且收到客户端ACK; 已...

  • UDP Socket(套接字)——发送接收缓冲区

    内部缓冲区在系统内部,每个Socket关联了两个缓冲区(Buffer),一个用于接收(RecvBuf),一个用于发...

  • socket 编程相关资料

    socket bind 的理解socket select

网友评论

      本文标题:深入理解 Socket 缓冲区

      本文链接:https://www.haomeiwen.com/subject/ovpsnktx.html