【问题标题】:After requesting a TCP connection request to a server, can client receive the reply on another port generated by server at its end客户端向服务器请求 TCP 连接请求后,是否可以在其端的服务器生成的另一个端口上接收回复
【发布时间】:2012-01-20 15:49:25
【问题描述】:

当 TCP 客户端在服务器的侦听端口上请求连接时,服务器将接受它并创建一个新端口,用于与该客户端的此连接。因此,客户端将在这个新端口上与服务器通信。

如果上述说法为真且可能,服务器如何将新生成的端口传递给客户端。作为对连接请求的回复,从服务器到客户端的数据包将使用哪个端口作为源端口(服务器的侦听端口或服务器为客户端生成的新端口)。 客户端会接受这个端口并开始使用还是会出错?我需要它来使用 lwip 堆栈在嵌入式系统中实现具有 2 个客户端和一个服务器的架构。

问候, 教育署

【问题讨论】:

    标签: tcp network-protocols embedded


    【解决方案1】:

    服务器没有创建新端口。它创建一个新的 TCP 连接 并将其回复数据包发送到客户端发送其连接请求的 IP 和端口。 (TCP 连接的每一端都有一个 IP 地址和端口。)

    【讨论】:

    • 我在问这个问题,因为我需要在嵌入式系统中使用 lwip 堆栈来实现这个 *当客户端在服务器的侦听端口上发送连接请求时,我认为它会期待来自具有服务器的服务器的回复侦听端口作为标头中的源端口。那么客户端如何知道新的 tcp 连接细节(特别是端口号)。
    • 客户端将知道目标端口,因为这是服务器尝试连接的服务的众所周知的端口。客户端会知道源端口,因为它选择了它——它是它发送第一个数据包来自的端口。
    • 嗨,注意到你的观点。客户端将知道目的地的知名端口是什么。但是考虑一个场景,一个客户端使用这个众所周知的端口进行连接请求,并且数据通信在这个通道上开始。现在,当另一个客户端想要建立连接时,它将在同一个众所周知的端口上发送请求。现在,如果服务器想要接受此连接并为此连接获取一个新端口(而不是众所周知的端口),是否有可能。或者服务器创建一个新的套接字,但将保持其源端口与已知端口相同。
    • 在服务器端,接收到的所有数据包的目的端口,以及发送的所有数据包的源端口,都是服务器的知名端口。
    • @EmbeddedDeveloper 客户端发送连接请求端口B,服务器的知名端口。服务器接受其众所周知的端口上的连接并响应端口B。这就是TCP的工作原理。
    【解决方案2】:

    当你连接到一个服务器时,你会自己得到一个端口号,这个端口号是系统分配给你的(除非你在连接之前bind这个socket)。当服务器的网络栈回复你的连接请求时,“源”端口就是服务器的新端口号,而消息的“目的”端口就是你的端口。这就是客户端的网络堆栈如何知道服务器的端口。

    服务器上用于连接的新端口号不能由实际的服务器程序设置或更改,它是服务器机器上的网络堆栈,它只是抓取一个可用的端口号。

    编辑:您可能还想了解一下connections are established,也就是三次握手。

    【讨论】:

    • 没有“服务器的新端口号”,也没有“获取[bing]可用端口号”。接受的套接字使用与侦听套接字相同的端口号。
    猜你喜欢
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 2020-11-21
    • 2013-03-07
    • 1970-01-01
    • 2021-08-12
    相关资源
    最近更新 更多