套接字和缓冲区的含义相同吗?

阿克拉斯

我认为我的问题很清楚。我正在阅读这篇文章以了解套接字的工作原理,并且它互换地提到了套接字和缓冲区这两个术语:

假设数据包是按顺序排列的,则将数据有效载荷复制到套接字的接收缓冲区中此时,内核将唤醒执行阻塞read(2)或正在使用I / O复用系统调用(如select(2)或epoll_wait(2))的所有进程,以等待套接字。

这些术语是同一意思吗?如果存在差异,那么套接字和缓冲区的区别是什么?

散布

套接字是一个比缓冲区更广泛的概念。一个套接字有两个缓冲区以及与之关联的其他一些信息。

在套接字编程的上下文中,套接字是您的应用程序与一个TCP连接(或UDP流)的接口。您的应用程序不会直接从网络接口卡(NIC)读/写数据,而是经过内核的网络堆栈。套接字缓冲区是内核代表您的应用程序保存的数据包的短队列,因为它在NIC和应用程序的内存空间之间交换数据。

一个发送缓冲器写入缓冲器是您的应用程序切换到网络堆栈发送数据包的队列和接收缓冲区读取缓冲区是内核的网络堆栈已经代表你的应用程序的报文的队列,它在等待您的应用程序要读取(也就是说,它存储在内核空间中,等待您的应用程序/进程将其复制到应用程序的内存中)。

在发送方,为了获得最佳性能,您的应用程序必须write()经常调用足够的数据,以确保内核的发送缓冲区永远不会用完要发送的数据。我们称此为“保持管道充满”。但是为了最大程度地减少延迟,您的应用程序不应将过多的数据加载到内核的发送缓冲区中

在接收方,为了获得最佳性能,您的应用程序必须read()经常调用,以尝试保持内核的接收缓冲区为空。否则,如果接收缓冲区没有足够的可用空间,则网络堆栈将向发送方发出其接收缓冲区已满的信号,从而导致发送方降低其发送数据的速率。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章