全双工套接字与使用的两个套接字,一个用于读取,另一个用于写入
Posted
技术标签:
【中文标题】全双工套接字与使用的两个套接字,一个用于读取,另一个用于写入【英文标题】:Full duplex socket vs. two sockets used, one for read and other for write 【发布时间】:2014-10-28 17:52:34 【问题描述】:我想知道,
第一个问题每个对等方使用一个套接字(全双工)与两个套接字(单工)的优缺点是什么:一个用于读取,另一个用于写入?特别是在性能和资源利用率方面。
第二个问题如果我选择每个对等方使用超过 1 个套接字,那么我所做的一切都是读写。那么它会帮助我扩展处理不处理的消息吗?
第三个问题:什么可以帮助我确定每个对等方的套接字数量?网络带宽?进出消息的数量?
所有问题都是不同的,没有任何相互关系。
【问题讨论】:
什么样的应用程序使用该套接字?如果您需要并行进行不同类型的通信,则必须使用两个套接字,例如 FTP。 一些专有协议通过 TCP 套接字发送和接收消息。 使用两个套接字的一个缺点是增加了复杂性。对于单个套接字,套接字要么已连接,要么未连接。对于两个套接字,现在您必须弄清楚当两个套接字连接中的一个断开(或无法连接)而另一个仍然连接时如何处理它。这是额外的麻烦,没有明显的好处。 【参考方案1】:使用一个套接字(全双工)与两个套接字一个用于读取和其他写入的优缺点是什么?特别是在性能和资源利用率方面。
Pro one socket:资源利用率。反对一个插座:无。性能:相同,但如果您只使用一个套接字,则可以节省连接和关闭握手。
如果我选择采用两个套接字的方法,那么同时使用它们全双工将没有用,这样可以帮助我在数据流入和流出方面进行横向扩展?
现在您正在比较苹果和橙子。您无法将一个全双工套接字与两个全双工套接字进行比较。我不知道为什么您认为您可能需要两个入站和两个出站流,但您不需要。除了 FTP,我能想到的每个协议都只使用一个。
网络带宽对其有什么影响?
无。
或者它对网络利用率有影响?
无,除了连接和关闭握手。但它在两端都浪费资源。
【讨论】:
对不起,我没能把问题写好。第二个问题与第一个问题不同,它们不是相互关联的。在第二个问题中我想知道的是,如果我选择每个目的地使用两个套接字,那么我会同时读写。然后它可以帮助我扩展处理任何消息。第三个问题是选择每个目的地的套接字数量,应该取决于可用带宽吗? 第二个问题的答案取决于你的功能需求。我看不出它如何帮助扩展任何东西。第三个问题的答案是否定的。 @EJP 只是为了扮演魔鬼的拥护者(因为我也认为两个套接字是一个套接字太多)...... TCP 数据包被丢弃的情况呢?在单套接字情况下,您在该方向上的整个数据流将暂停(短暂),直到检测到丢弃的数据包并重新发送。使用两个套接字,您可以在此期间继续从另一个套接字接收数据,因为 TCP 流 B 不会受到 TCP 流 A 丢弃的数据包的影响。 @JeremyFriesner 当然,如果您的功能要求如此说明。大多数情况下他们没有。大多数情况下,它们要求您以串行方式而不是并行方式执行客户端操作。 如果延迟很大,比如美国和欧洲国家之间的通信,需要很多requect-response通信,而且大部分request-response通信是独立的,增加socket数量可能有助于增加消息处理能力一般。如果使用 10gb/s 的网络发送大数据包,一个 socket 就足够了,因为硬盘的数据带宽限制了数据传输的速度。【参考方案2】:我们已将 --full-duplex 添加到 iperf 2.0.14,它将测试全双工套接字。每个 -d 或 --dualtest 选项可以将它与两个套接字进行比较。我们发现“您的里程会有所不同”,并且对于是否具有相同的性能没有统一的答案。从理论上讲,它们似乎应该是平等的,但实际上可能不是。
-d, --dualtest
Do a bidirectional test simultanous test using two unidirectional sockets
--fq-rate n[kmgKMG]
Set a rate to be used with fair-queueing based socket-level pacing, in bytes or bits per second. Only available on platforms supporting the SO_MAX_PACING_RATE socket option.
(Note: Here the suffixes indicate bytes/sec or bits/sec per use of uppercase or lowercase, respectively)
--full-duplex
run a full duplex test, i.e. traffic in both transmit and receive directions using the same socket
鲍勃
【讨论】:
以上是关于全双工套接字与使用的两个套接字,一个用于读取,另一个用于写入的主要内容,如果未能解决你的问题,请参考以下文章