在向服务器请求TCP连接请求后,客户端能否在服务器端生成的另一个端口上接收回复

在向服务器请求TCP连接请求后,客户端能否在服务器端生成的另一个端口上接收回复,tcp,network-protocols,embedded,Tcp,Network Protocols,Embedded,当TCP客户端在服务器的侦听端口上请求conn'n时,服务器将接受它,并为此客户端的此conn'n创建一个新端口。因此,客户机将在这个新端口上与服务器通信 如果上述语句为真且可能,则说明服务器如何将新生成的端口传送给客户端。为了响应conn'n请求,从服务器到客户端的数据包将使用哪个端口作为源端口(服务器的侦听端口或服务器为客户端生成的新端口)。 客户端会接受此端口并使用它,还是会给出错误消息?我需要它来实现一个架构,在一个使用lwip堆栈的嵌入式系统中有两个客户端和一个服务器 问候,, ED服

当TCP客户端在服务器的侦听端口上请求conn'n时,服务器将接受它,并为此客户端的此conn'n创建一个新端口。因此,客户机将在这个新端口上与服务器通信

如果上述语句为真且可能,则说明服务器如何将新生成的端口传送给客户端。为了响应conn'n请求,从服务器到客户端的数据包将使用哪个端口作为源端口(服务器的侦听端口或服务器为客户端生成的新端口)。 客户端会接受此端口并使用它,还是会给出错误消息?我需要它来实现一个架构,在一个使用lwip堆栈的嵌入式系统中有两个客户端和一个服务器

问候,,
ED

服务器不创建新端口。它创建一个新的TCP连接,并将其应答数据包发送到客户端发送其连接请求的IP和端口。(TCP连接两侧各有一个IP地址和端口。)

当您连接到服务器时,您自己会得到一个端口号,该端口号由系统分配给您(除非您在连接之前绑定了套接字)。当服务器的网络堆栈响应您的连接请求时,“源”端口是服务器的新端口号,消息的“目标”端口是您的端口。这就是客户端的网络堆栈如何知道服务器具有哪个端口

实际的服务器程序无法设置或更改用于连接的服务器上的新端口号,服务器计算机上的网络堆栈只是获取可用端口号


编辑:您可能还想了解一下如何进行三方握手。

我问的问题是,当客户端在服务器的侦听端口上发送连接请求时,我需要在使用lwip堆栈*的嵌入式系统中实现这一点,我假定它将期望来自服务器的应答,该服务器的侦听端口作为头中的源端口。那么客户端将如何知道新的tcp连接详细信息(特别是端口号)。客户端将知道目标端口,因为这是服务器尝试连接到的服务的已知端口。客户端将知道源端口,因为它选择了源端口——这是它从中发送第一个数据包的端口。您好,注意您的观点。客户端将知道目的地的已知端口是什么。但是考虑一个场景,其中一个客户端使用这个众所周知的端口进行连接请求,并在这个通道上启动数据通信。现在,当另一个客户端需要连接时,它将在同一个已知端口上发送请求。现在,如果服务器想要接受此连接并为此连接获取一个新端口(而不是已知端口),是否可能。或者服务器创建了一个新套接字,但将保持其源端口与已知端口相同。在服务器端,接收到的所有数据包的目标端口和发送的所有数据包的源端口都将是服务器的已知端口。@EmbeddedDeveloper客户端将连接请求从端口B发送到服务器的已知端口。服务器在其已知端口上接受连接并响应端口B。TCP就是这样工作的。没有“服务器的新端口号”和“获取可用端口号”。接受的套接字使用与侦听套接字相同的端口号。