这可能是一个愚蠢的问题,但是我和几个伙伴一直在讨论TCP的潜在限制。我们有一个应用程序,该应用程序将侦听客户端(例如网关),并将所有连接的客户端数据通过单个连接的kafka发布者路由到一个主题。
我的一个好友说,TCP将是此网关的一个问题,因为它将为其发送的每个消息建立一个新的连接(不是kafka,而是底层的传输协议本身),每次都需要一个新的端口。以我们将向这些客户端发送消息(千兆字节)的速度,kafka将用尽所有端口来读取?
我从事开发工作已经有几年了,以前从未听说过它,并且希望对TCP的工作原理有一个较低的了解(我认为我已经知道)。我的理解是,当您建立TCP连接时,该连接将保持打开状态,直到应用程序将其超时或服务器或客户端强行关闭该连接为止。通过此连接发送的数据是流,无论3 V(体积,速度,变化)如何,都不会打开/关闭新连接。
就端口而言,一个端口用于广播,而内部文件描述符端口是应用程序管理的,用于读取/写入单个客户端的端口。我从不了解TCP为写入的每个数据包建立新的连接。
如果这个问题不是直接的,或者太含糊,我事先表示歉意。我真的感到莫名其妙,希望有人能为我的同事们提供更多的背景信息?
SO_REUSEADDR
用于更快地关闭套接字,增加临时端口的范围等。此外TCP_FASTOPEN
,可以使用多个OS级别的切换来解决TCP的其他众所周知的限制。无论哪种方式,即使您没有要测试的工作量,也没有必要讨论TCP的限制。